100
101 rpcvers_t nfs_versmin;
102 rpcvers_t nfs_versmax;
103
104 /* NFS server locks and state */
105 nfs_server_running_t nfs_server_upordown;
106 kmutex_t nfs_server_upordown_lock;
107 kcondvar_t nfs_server_upordown_cv;
108
109 /* RDMA wait variables */
110 kcondvar_t rdma_wait_cv;
111 kmutex_t rdma_wait_mutex;
112
113 zoneid_t nfs_zoneid;
114 /* Per-zone data structures private to each module */
115 struct nfs_export *nfs_export; /* nfs_export.c */
116 struct nfs_srv *nfs_srv; /* nfs_srv.c */
117 struct nfs3_srv *nfs3_srv; /* nfs3_srv.c */
118 struct nfs4_srv *nfs4_srv; /* nfs4_srv.c */
119 struct nfsauth_globals *nfs_auth; /* nfs_auth.c */
120 } nfs_globals_t;
121
122 /*
123 * Default delegation setting for the server ==> "on"
124 */
125 #define NFS_SERVER_DELEGATION_DEFAULT (TRUE)
126
127 /* Maximum size of data portion of a remote request */
128 #define NFS_MAXDATA 8192
129 #define NFS_MAXNAMLEN 255
130 #define NFS_MAXPATHLEN 1024
131
132 /*
133 * Rpc retransmission parameters
134 */
135 #define NFS_TIMEO 11 /* initial timeout for clts in 10th of a sec */
136 #define NFS_RETRIES 5 /* times to retry request */
137 #define NFS_COTS_TIMEO 600 /* initial timeout for cots in 10th of a sec */
138
139 /*
913 extern void rfs_rddirfree(struct nfsrddirres *);
914 extern void rfs_statfs(fhandle_t *, struct nfsstatfs *, struct exportinfo *,
915 struct svc_req *, cred_t *, bool_t);
916 extern void *rfs_statfs_getfh(fhandle_t *);
917 extern void rfs_srvrinit(void);
918 extern void rfs_srvrfini(void);
919 extern void rfs_srv_zone_init(nfs_globals_t *);
920 extern void rfs_srv_zone_fini(nfs_globals_t *);
921
922 /*
923 * flags to define path types during Multi Component Lookups
924 * using the public filehandle
925 */
926 #define URLPATH 0x01 /* Universal Resource Locator path */
927 #define NATIVEPATH 0x02 /* Native path, i.e., via mount protocol */
928 #define SECURITY_QUERY 0x04 /* Security query */
929
930 /* index for svstat_ptr */
931 enum nfs_svccounts {NFS_CALLS, NFS_BADCALLS, NFS_REFERRALS, NFS_REFERLINKS};
932
933 /* function defs for NFS kernel */
934 extern int nfs_waitfor_purge_complete(vnode_t *);
935 extern int nfs_validate_caches(vnode_t *, cred_t *);
936 extern void nfs_purge_caches(vnode_t *, int, cred_t *);
937 extern void nfs_purge_rddir_cache(vnode_t *);
938 extern void nfs_attrcache(vnode_t *, struct nfsfattr *, hrtime_t);
939 extern int nfs_cache_fattr(vnode_t *, struct nfsfattr *, vattr_t *,
940 hrtime_t, cred_t *);
941 extern void nfs_attr_cache(vnode_t *, vattr_t *, hrtime_t, cred_t *);
942 extern void nfs_attrcache_va(vnode_t *, struct vattr *);
943 extern int nfs_getattr_otw(vnode_t *, struct vattr *, cred_t *);
944 extern int nfsgetattr(vnode_t *, struct vattr *, cred_t *);
945 extern int nattr_to_vattr(vnode_t *, struct nfsfattr *, struct vattr *);
946 extern void nfs_async_manager(struct vfs *);
947 extern void nfs_async_manager_stop(struct vfs *);
948 extern void nfs_async_stop(struct vfs *);
949 extern int nfs_async_stop_sig(struct vfs *);
950 extern int nfs_clntinit(void);
951 extern void nfs_clntfini(void);
952 extern int nfstsize(void);
996 struct knetconfig *, cred_t *);
997 extern boolean_t nfs_has_ctty(void);
998 extern nfs_globals_t *nfs_srv_getzg(void);
999 extern void nfs_srv_stop_all(void);
1000 extern void nfs_srv_quiesce_all(void);
1001 extern int rfs4_dss_setpaths(char *, size_t);
1002 extern int nfs_setmod_check(page_t *);
1003
1004 extern time_t rfs4_lease_time;
1005 extern time_t rfs4_grace_period;
1006 extern nvlist_t *rfs4_dss_paths, *rfs4_dss_oldpaths;
1007
1008 extern kstat_named_t *global_svstat_ptr[];
1009
1010 extern zone_key_t nfssrv_zone_key;
1011 extern list_t nfssrv_globals_list;
1012 extern krwlock_t nfssrv_globals_rwl;
1013
1014 extern krwlock_t rroklock;
1015 extern vtype_t nf_to_vt[];
1016 extern kstat_named_t *rfsproccnt_v2_ptr;
1017 extern kmutex_t nfs_minor_lock;
1018 extern int nfs_major;
1019 extern int nfs_minor;
1020 extern vfsops_t *nfs_vfsops;
1021 extern struct vnodeops *nfs_vnodeops;
1022 extern const struct fs_operation_def nfs_vnodeops_template[];
1023 extern int nfsfstyp;
1024 extern void (*nfs_srv_quiesce_func)(void);
1025 extern int (*nfs_srv_dss_func)(char *, size_t);
1026
1027 /*
1028 * Per-zone stats as consumed by nfsstat(1m)
1029 */
1030 struct nfs_version_stats {
1031 kstat_named_t *aclreqcnt_ptr; /* nfs_acl:0:aclreqcnt_v? */
1032 kstat_named_t *aclproccnt_ptr; /* nfs_acl:0:aclproccnt_v? */
1033 kstat_named_t *rfsreqcnt_ptr; /* nfs:0:rfsreqcnt_v? */
1034 kstat_named_t *rfsproccnt_ptr; /* nfs:0:rfsproccnt_v? */
1035 };
1036
1037 /*
1038 * A bit of asymmetry: nfs:0:nfs_client isn't part of this structure.
1039 */
1040 struct nfs_stats {
1041 kstat_named_t *nfs_stats_svstat_ptr[NFS_VERSMAX + 1];
1042 struct nfs_version_stats nfs_stats_v2;
1043 struct nfs_version_stats nfs_stats_v3;
1044 struct nfs_version_stats nfs_stats_v4;
1045 };
1046
1047 /*
1048 * Key used to retrieve counters.
1049 */
1050 extern zone_key_t nfsstat_zone_key;
1051
1052 /*
1053 * Zone callback functions.
1054 */
1055 extern void *nfsstat_zone_init(zoneid_t);
1056 extern void nfsstat_zone_fini(zoneid_t, void *);
1057
1058 #endif /* _KERNEL */
1059
1060 /*
1061 * Version 3 declarations and definitions.
1062 */
1063
1064 #define NFS3_FHSIZE 64
1065 #define NFS3_COOKIEVERFSIZE 8
1066 #define NFS3_CREATEVERFSIZE 8
1067 #define NFS3_WRITEVERFSIZE 8
1068
1069 typedef char *filename3;
1070
1071 typedef char *nfspath3;
1072
1073 #define nfs3nametoolong ((char *)-1)
1074
1075 typedef uint64 fileid3;
1076
1077 typedef uint64 cookie3;
2321 extern uint_t nfs3_tsize(struct knetconfig *);
2322 extern uint_t rfs3_tsize(struct svc_req *);
2323 extern int vattr_to_sattr3(struct vattr *, sattr3 *);
2324 extern void setdiropargs3(diropargs3 *, char *, vnode_t *);
2325 extern enum nfsstat3 puterrno3(int);
2326 extern int geterrno3(enum nfsstat3);
2327 extern int nfs3init(int, char *);
2328 extern void nfs3fini(void);
2329 extern int nfs3_vfsinit(void);
2330 extern void nfs3_vfsfini(void);
2331 extern void vattr_to_post_op_attr(struct vattr *, post_op_attr *);
2332 extern void mblk_to_iov(mblk_t *, int, struct iovec *);
2333 extern int rfs_publicfh_mclookup(char *, vnode_t *, cred_t *, vnode_t **,
2334 struct exportinfo **, struct sec_ol *);
2335 extern int rfs_pathname(char *, vnode_t **, vnode_t **, vnode_t *,
2336 cred_t *, int);
2337 extern int rfs_cross_mnt(vnode_t **, struct exportinfo **);
2338 extern int rfs_climb_crossmnt(vnode_t **, struct exportinfo **, cred_t *);
2339
2340 extern vtype_t nf3_to_vt[];
2341 extern kstat_named_t *rfsproccnt_v3_ptr;
2342 extern vfsops_t *nfs3_vfsops;
2343 extern struct vnodeops *nfs3_vnodeops;
2344 extern const struct fs_operation_def nfs3_vnodeops_template[];
2345
2346 /*
2347 * Some servers do not properly update the attributes of the
2348 * directory when changes are made. To allow interoperability
2349 * with these broken servers, the nfs_disable_rddir_cache
2350 * parameter can be used to disable readdir response caching.
2351 */
2352 extern int nfs_disable_rddir_cache;
2353
2354 /*
2355 * External functions called by the v2/v3 code into the v4 code
2356 */
2357 extern void nfs4_clnt_init(void);
2358 extern void nfs4_clnt_fini(void);
2359
2360 /*
2361 * Does NFS4 server have a vnode delegated? TRUE if so, FALSE if not.
|
100
101 rpcvers_t nfs_versmin;
102 rpcvers_t nfs_versmax;
103
104 /* NFS server locks and state */
105 nfs_server_running_t nfs_server_upordown;
106 kmutex_t nfs_server_upordown_lock;
107 kcondvar_t nfs_server_upordown_cv;
108
109 /* RDMA wait variables */
110 kcondvar_t rdma_wait_cv;
111 kmutex_t rdma_wait_mutex;
112
113 zoneid_t nfs_zoneid;
114 /* Per-zone data structures private to each module */
115 struct nfs_export *nfs_export; /* nfs_export.c */
116 struct nfs_srv *nfs_srv; /* nfs_srv.c */
117 struct nfs3_srv *nfs3_srv; /* nfs3_srv.c */
118 struct nfs4_srv *nfs4_srv; /* nfs4_srv.c */
119 struct nfsauth_globals *nfs_auth; /* nfs_auth.c */
120
121 /* statistic: nfs_stat.c, etc. */
122 kstat_named_t *svstat[NFS_VERSMAX + 1];
123 kstat_named_t *rfsproccnt[NFS_VERSMAX + 1];
124 kstat_named_t *aclproccnt[NFS_VERSMAX + 1];
125 } nfs_globals_t;
126
127 /*
128 * Default delegation setting for the server ==> "on"
129 */
130 #define NFS_SERVER_DELEGATION_DEFAULT (TRUE)
131
132 /* Maximum size of data portion of a remote request */
133 #define NFS_MAXDATA 8192
134 #define NFS_MAXNAMLEN 255
135 #define NFS_MAXPATHLEN 1024
136
137 /*
138 * Rpc retransmission parameters
139 */
140 #define NFS_TIMEO 11 /* initial timeout for clts in 10th of a sec */
141 #define NFS_RETRIES 5 /* times to retry request */
142 #define NFS_COTS_TIMEO 600 /* initial timeout for cots in 10th of a sec */
143
144 /*
918 extern void rfs_rddirfree(struct nfsrddirres *);
919 extern void rfs_statfs(fhandle_t *, struct nfsstatfs *, struct exportinfo *,
920 struct svc_req *, cred_t *, bool_t);
921 extern void *rfs_statfs_getfh(fhandle_t *);
922 extern void rfs_srvrinit(void);
923 extern void rfs_srvrfini(void);
924 extern void rfs_srv_zone_init(nfs_globals_t *);
925 extern void rfs_srv_zone_fini(nfs_globals_t *);
926
927 /*
928 * flags to define path types during Multi Component Lookups
929 * using the public filehandle
930 */
931 #define URLPATH 0x01 /* Universal Resource Locator path */
932 #define NATIVEPATH 0x02 /* Native path, i.e., via mount protocol */
933 #define SECURITY_QUERY 0x04 /* Security query */
934
935 /* index for svstat_ptr */
936 enum nfs_svccounts {NFS_CALLS, NFS_BADCALLS, NFS_REFERRALS, NFS_REFERLINKS};
937
938 #define NFS_V2 NFS_VERSION
939
940 /* function defs for NFS kernel */
941 extern int nfs_waitfor_purge_complete(vnode_t *);
942 extern int nfs_validate_caches(vnode_t *, cred_t *);
943 extern void nfs_purge_caches(vnode_t *, int, cred_t *);
944 extern void nfs_purge_rddir_cache(vnode_t *);
945 extern void nfs_attrcache(vnode_t *, struct nfsfattr *, hrtime_t);
946 extern int nfs_cache_fattr(vnode_t *, struct nfsfattr *, vattr_t *,
947 hrtime_t, cred_t *);
948 extern void nfs_attr_cache(vnode_t *, vattr_t *, hrtime_t, cred_t *);
949 extern void nfs_attrcache_va(vnode_t *, struct vattr *);
950 extern int nfs_getattr_otw(vnode_t *, struct vattr *, cred_t *);
951 extern int nfsgetattr(vnode_t *, struct vattr *, cred_t *);
952 extern int nattr_to_vattr(vnode_t *, struct nfsfattr *, struct vattr *);
953 extern void nfs_async_manager(struct vfs *);
954 extern void nfs_async_manager_stop(struct vfs *);
955 extern void nfs_async_stop(struct vfs *);
956 extern int nfs_async_stop_sig(struct vfs *);
957 extern int nfs_clntinit(void);
958 extern void nfs_clntfini(void);
959 extern int nfstsize(void);
1003 struct knetconfig *, cred_t *);
1004 extern boolean_t nfs_has_ctty(void);
1005 extern nfs_globals_t *nfs_srv_getzg(void);
1006 extern void nfs_srv_stop_all(void);
1007 extern void nfs_srv_quiesce_all(void);
1008 extern int rfs4_dss_setpaths(char *, size_t);
1009 extern int nfs_setmod_check(page_t *);
1010
1011 extern time_t rfs4_lease_time;
1012 extern time_t rfs4_grace_period;
1013 extern nvlist_t *rfs4_dss_paths, *rfs4_dss_oldpaths;
1014
1015 extern kstat_named_t *global_svstat_ptr[];
1016
1017 extern zone_key_t nfssrv_zone_key;
1018 extern list_t nfssrv_globals_list;
1019 extern krwlock_t nfssrv_globals_rwl;
1020
1021 extern krwlock_t rroklock;
1022 extern vtype_t nf_to_vt[];
1023 extern kmutex_t nfs_minor_lock;
1024 extern int nfs_major;
1025 extern int nfs_minor;
1026 extern vfsops_t *nfs_vfsops;
1027 extern struct vnodeops *nfs_vnodeops;
1028 extern const struct fs_operation_def nfs_vnodeops_template[];
1029 extern int nfsfstyp;
1030 extern void (*nfs_srv_quiesce_func)(void);
1031 extern int (*nfs_srv_dss_func)(char *, size_t);
1032
1033 /*
1034 * Per-zone stats as consumed by nfsstat(1m)
1035 */
1036 struct nfs_version_stats {
1037 kstat_named_t *aclreqcnt_ptr; /* nfs_acl:0:aclreqcnt_v? */
1038 kstat_named_t *rfsreqcnt_ptr; /* nfs:0:rfsreqcnt_v? */
1039 };
1040
1041 /*
1042 * A bit of asymmetry: nfs:0:nfs_client isn't part of this structure.
1043 */
1044 struct nfs_stats {
1045 struct nfs_version_stats nfs_stats_v2;
1046 struct nfs_version_stats nfs_stats_v3;
1047 struct nfs_version_stats nfs_stats_v4;
1048 };
1049
1050 /*
1051 * Key used to retrieve counters.
1052 */
1053 extern zone_key_t nfsstat_zone_key;
1054
1055 /*
1056 * Zone callback functions.
1057 */
1058 extern void *nfsstat_zone_init(zoneid_t);
1059 extern void nfsstat_zone_fini(zoneid_t, void *);
1060
1061 extern void rfs_stat_zone_init(nfs_globals_t *);
1062 extern void rfs_stat_zone_fini(nfs_globals_t *);
1063
1064 #endif /* _KERNEL */
1065
1066 /*
1067 * Version 3 declarations and definitions.
1068 */
1069
1070 #define NFS3_FHSIZE 64
1071 #define NFS3_COOKIEVERFSIZE 8
1072 #define NFS3_CREATEVERFSIZE 8
1073 #define NFS3_WRITEVERFSIZE 8
1074
1075 typedef char *filename3;
1076
1077 typedef char *nfspath3;
1078
1079 #define nfs3nametoolong ((char *)-1)
1080
1081 typedef uint64 fileid3;
1082
1083 typedef uint64 cookie3;
2327 extern uint_t nfs3_tsize(struct knetconfig *);
2328 extern uint_t rfs3_tsize(struct svc_req *);
2329 extern int vattr_to_sattr3(struct vattr *, sattr3 *);
2330 extern void setdiropargs3(diropargs3 *, char *, vnode_t *);
2331 extern enum nfsstat3 puterrno3(int);
2332 extern int geterrno3(enum nfsstat3);
2333 extern int nfs3init(int, char *);
2334 extern void nfs3fini(void);
2335 extern int nfs3_vfsinit(void);
2336 extern void nfs3_vfsfini(void);
2337 extern void vattr_to_post_op_attr(struct vattr *, post_op_attr *);
2338 extern void mblk_to_iov(mblk_t *, int, struct iovec *);
2339 extern int rfs_publicfh_mclookup(char *, vnode_t *, cred_t *, vnode_t **,
2340 struct exportinfo **, struct sec_ol *);
2341 extern int rfs_pathname(char *, vnode_t **, vnode_t **, vnode_t *,
2342 cred_t *, int);
2343 extern int rfs_cross_mnt(vnode_t **, struct exportinfo **);
2344 extern int rfs_climb_crossmnt(vnode_t **, struct exportinfo **, cred_t *);
2345
2346 extern vtype_t nf3_to_vt[];
2347 extern vfsops_t *nfs3_vfsops;
2348 extern struct vnodeops *nfs3_vnodeops;
2349 extern const struct fs_operation_def nfs3_vnodeops_template[];
2350
2351 /*
2352 * Some servers do not properly update the attributes of the
2353 * directory when changes are made. To allow interoperability
2354 * with these broken servers, the nfs_disable_rddir_cache
2355 * parameter can be used to disable readdir response caching.
2356 */
2357 extern int nfs_disable_rddir_cache;
2358
2359 /*
2360 * External functions called by the v2/v3 code into the v4 code
2361 */
2362 extern void nfs4_clnt_init(void);
2363 extern void nfs4_clnt_fini(void);
2364
2365 /*
2366 * Does NFS4 server have a vnode delegated? TRUE if so, FALSE if not.
|