1
2
3
4
5
6
7
8
9
10#ifndef NFSD_EXPORT_H
11#define NFSD_EXPORT_H
12
13# include <linux/types.h>
14#ifdef __KERNEL__
15# include <linux/nfsd/nfsfh.h>
16#endif
17
18
19
20
21#define NFSCLNT_IDMAX 1024
22#define NFSCLNT_ADDRMAX 16
23#define NFSCLNT_KEYMAX 32
24
25
26
27
28#define NFSEXP_READONLY 0x0001
29#define NFSEXP_INSECURE_PORT 0x0002
30#define NFSEXP_ROOTSQUASH 0x0004
31#define NFSEXP_ALLSQUASH 0x0008
32#define NFSEXP_ASYNC 0x0010
33#define NFSEXP_GATHERED_WRITES 0x0020
34
35#define NFSEXP_NOHIDE 0x0200
36#define NFSEXP_NOSUBTREECHECK 0x0400
37#define NFSEXP_NOAUTHNLM 0x0800
38#define NFSEXP_MSNFS 0x1000
39#define NFSEXP_FSID 0x2000
40#define NFSEXP_CROSSMOUNT 0x4000
41#define NFSEXP_NOACL 0x8000
42
43
44
45
46
47
48
49
50
51#define NFSEXP_V4ROOT 0x10000
52
53#define NFSEXP_ALLFLAGS 0x17E3F
54
55
56#define NFSEXP_SECINFO_FLAGS (NFSEXP_READONLY | NFSEXP_ROOTSQUASH \
57 | NFSEXP_ALLSQUASH \
58 | NFSEXP_INSECURE_PORT)
59
60#ifdef __KERNEL__
61
62
63
64
65
66#define MAX_FS_LOCATIONS 128
67
68struct nfsd4_fs_location {
69 char *hosts;
70 char *path;
71};
72
73struct nfsd4_fs_locations {
74 uint32_t locations_count;
75 struct nfsd4_fs_location *locations;
76
77
78 int migrated;
79};
80
81
82
83
84
85
86
87#define MAX_SECINFO_LIST 8
88
89struct exp_flavor_info {
90 u32 pseudoflavor;
91 u32 flags;
92};
93
94struct svc_export {
95 struct cache_head h;
96 struct auth_domain * ex_client;
97 int ex_flags;
98 struct path ex_path;
99 uid_t ex_anon_uid;
100 gid_t ex_anon_gid;
101 int ex_fsid;
102 unsigned char * ex_uuid;
103 struct nfsd4_fs_locations ex_fslocs;
104 int ex_nflavors;
105 struct exp_flavor_info ex_flavors[MAX_SECINFO_LIST];
106 struct cache_detail *cd;
107};
108
109
110
111
112
113struct svc_expkey {
114 struct cache_head h;
115
116 struct auth_domain * ek_client;
117 int ek_fsidtype;
118 u32 ek_fsid[6];
119
120 struct path ek_path;
121};
122
123#define EX_ISSYNC(exp) (!((exp)->ex_flags & NFSEXP_ASYNC))
124#define EX_NOHIDE(exp) ((exp)->ex_flags & NFSEXP_NOHIDE)
125#define EX_WGATHER(exp) ((exp)->ex_flags & NFSEXP_GATHERED_WRITES)
126
127int nfsexp_flags(struct svc_rqst *rqstp, struct svc_export *exp);
128__be32 check_nfsd_access(struct svc_export *exp, struct svc_rqst *rqstp);
129
130
131
132
133int nfsd_export_init(struct net *);
134void nfsd_export_shutdown(struct net *);
135void nfsd_export_flush(struct net *);
136struct svc_export * rqst_exp_get_by_name(struct svc_rqst *,
137 struct path *);
138struct svc_export * rqst_exp_parent(struct svc_rqst *,
139 struct path *);
140struct svc_export * rqst_find_fsidzero_export(struct svc_rqst *);
141int exp_rootfh(struct net *, struct auth_domain *,
142 char *path, struct knfsd_fh *, int maxsize);
143__be32 exp_pseudoroot(struct svc_rqst *, struct svc_fh *);
144__be32 nfserrno(int errno);
145
146static inline void exp_put(struct svc_export *exp)
147{
148 cache_put(&exp->h, exp->cd);
149}
150
151static inline void exp_get(struct svc_export *exp)
152{
153 cache_get(&exp->h);
154}
155struct svc_export * rqst_exp_find(struct svc_rqst *, int, u32 *);
156
157#endif
158
159#endif
160
161