diff options
Diffstat (limited to 'include/linux/nfs4.h')
-rw-r--r-- | include/linux/nfs4.h | 394 |
1 files changed, 394 insertions, 0 deletions
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h new file mode 100644 index 000000000000..5ca8a8d8ccdf --- /dev/null +++ b/include/linux/nfs4.h | |||
@@ -0,0 +1,394 @@ | |||
1 | /* | ||
2 | * include/linux/nfs4.h | ||
3 | * | ||
4 | * NFSv4 protocol definitions. | ||
5 | * | ||
6 | * Copyright (c) 2002 The Regents of the University of Michigan. | ||
7 | * All rights reserved. | ||
8 | * | ||
9 | * Kendrick Smith <kmsmith@umich.edu> | ||
10 | * Andy Adamson <andros@umich.edu> | ||
11 | */ | ||
12 | |||
13 | #ifndef _LINUX_NFS4_H | ||
14 | #define _LINUX_NFS4_H | ||
15 | |||
16 | #include <linux/types.h> | ||
17 | #include <linux/list.h> | ||
18 | |||
19 | #define NFS4_VERIFIER_SIZE 8 | ||
20 | #define NFS4_FHSIZE 128 | ||
21 | #define NFS4_MAXPATHLEN PATH_MAX | ||
22 | #define NFS4_MAXNAMLEN NAME_MAX | ||
23 | |||
24 | #define NFS4_ACCESS_READ 0x0001 | ||
25 | #define NFS4_ACCESS_LOOKUP 0x0002 | ||
26 | #define NFS4_ACCESS_MODIFY 0x0004 | ||
27 | #define NFS4_ACCESS_EXTEND 0x0008 | ||
28 | #define NFS4_ACCESS_DELETE 0x0010 | ||
29 | #define NFS4_ACCESS_EXECUTE 0x0020 | ||
30 | |||
31 | #define NFS4_FH_PERISTENT 0x0000 | ||
32 | #define NFS4_FH_NOEXPIRE_WITH_OPEN 0x0001 | ||
33 | #define NFS4_FH_VOLATILE_ANY 0x0002 | ||
34 | #define NFS4_FH_VOL_MIGRATION 0x0004 | ||
35 | #define NFS4_FH_VOL_RENAME 0x0008 | ||
36 | |||
37 | #define NFS4_OPEN_RESULT_CONFIRM 0x0002 | ||
38 | #define NFS4_OPEN_RESULT_LOCKTYPE_POSIX 0x0004 | ||
39 | |||
40 | #define NFS4_SHARE_ACCESS_READ 0x0001 | ||
41 | #define NFS4_SHARE_ACCESS_WRITE 0x0002 | ||
42 | #define NFS4_SHARE_ACCESS_BOTH 0x0003 | ||
43 | #define NFS4_SHARE_DENY_READ 0x0001 | ||
44 | #define NFS4_SHARE_DENY_WRITE 0x0002 | ||
45 | #define NFS4_SHARE_DENY_BOTH 0x0003 | ||
46 | |||
47 | #define NFS4_SET_TO_SERVER_TIME 0 | ||
48 | #define NFS4_SET_TO_CLIENT_TIME 1 | ||
49 | |||
50 | #define NFS4_ACE_ACCESS_ALLOWED_ACE_TYPE 0 | ||
51 | #define NFS4_ACE_ACCESS_DENIED_ACE_TYPE 1 | ||
52 | #define NFS4_ACE_SYSTEM_AUDIT_ACE_TYPE 2 | ||
53 | #define NFS4_ACE_SYSTEM_ALARM_ACE_TYPE 3 | ||
54 | |||
55 | #define ACL4_SUPPORT_ALLOW_ACL 0x01 | ||
56 | #define ACL4_SUPPORT_DENY_ACL 0x02 | ||
57 | #define ACL4_SUPPORT_AUDIT_ACL 0x04 | ||
58 | #define ACL4_SUPPORT_ALARM_ACL 0x08 | ||
59 | |||
60 | #define NFS4_ACE_FILE_INHERIT_ACE 0x00000001 | ||
61 | #define NFS4_ACE_DIRECTORY_INHERIT_ACE 0x00000002 | ||
62 | #define NFS4_ACE_NO_PROPAGATE_INHERIT_ACE 0x00000004 | ||
63 | #define NFS4_ACE_INHERIT_ONLY_ACE 0x00000008 | ||
64 | #define NFS4_ACE_SUCCESSFUL_ACCESS_ACE_FLAG 0x00000010 | ||
65 | #define NFS4_ACE_FAILED_ACCESS_ACE_FLAG 0x00000020 | ||
66 | #define NFS4_ACE_IDENTIFIER_GROUP 0x00000040 | ||
67 | #define NFS4_ACE_OWNER 0x00000080 | ||
68 | #define NFS4_ACE_GROUP 0x00000100 | ||
69 | #define NFS4_ACE_EVERYONE 0x00000200 | ||
70 | |||
71 | #define NFS4_ACE_READ_DATA 0x00000001 | ||
72 | #define NFS4_ACE_LIST_DIRECTORY 0x00000001 | ||
73 | #define NFS4_ACE_WRITE_DATA 0x00000002 | ||
74 | #define NFS4_ACE_ADD_FILE 0x00000002 | ||
75 | #define NFS4_ACE_APPEND_DATA 0x00000004 | ||
76 | #define NFS4_ACE_ADD_SUBDIRECTORY 0x00000004 | ||
77 | #define NFS4_ACE_READ_NAMED_ATTRS 0x00000008 | ||
78 | #define NFS4_ACE_WRITE_NAMED_ATTRS 0x00000010 | ||
79 | #define NFS4_ACE_EXECUTE 0x00000020 | ||
80 | #define NFS4_ACE_DELETE_CHILD 0x00000040 | ||
81 | #define NFS4_ACE_READ_ATTRIBUTES 0x00000080 | ||
82 | #define NFS4_ACE_WRITE_ATTRIBUTES 0x00000100 | ||
83 | #define NFS4_ACE_DELETE 0x00010000 | ||
84 | #define NFS4_ACE_READ_ACL 0x00020000 | ||
85 | #define NFS4_ACE_WRITE_ACL 0x00040000 | ||
86 | #define NFS4_ACE_WRITE_OWNER 0x00080000 | ||
87 | #define NFS4_ACE_SYNCHRONIZE 0x00100000 | ||
88 | #define NFS4_ACE_GENERIC_READ 0x00120081 | ||
89 | #define NFS4_ACE_GENERIC_WRITE 0x00160106 | ||
90 | #define NFS4_ACE_GENERIC_EXECUTE 0x001200A0 | ||
91 | #define NFS4_ACE_MASK_ALL 0x001F01FF | ||
92 | |||
93 | enum nfs4_acl_whotype { | ||
94 | NFS4_ACL_WHO_NAMED = 0, | ||
95 | NFS4_ACL_WHO_OWNER, | ||
96 | NFS4_ACL_WHO_GROUP, | ||
97 | NFS4_ACL_WHO_EVERYONE, | ||
98 | }; | ||
99 | |||
100 | struct nfs4_ace { | ||
101 | uint32_t type; | ||
102 | uint32_t flag; | ||
103 | uint32_t access_mask; | ||
104 | int whotype; | ||
105 | uid_t who; | ||
106 | struct list_head l_ace; | ||
107 | }; | ||
108 | |||
109 | struct nfs4_acl { | ||
110 | uint32_t naces; | ||
111 | struct list_head ace_head; | ||
112 | }; | ||
113 | |||
114 | typedef struct { char data[NFS4_VERIFIER_SIZE]; } nfs4_verifier; | ||
115 | typedef struct { char data[16]; } nfs4_stateid; | ||
116 | |||
117 | enum nfs_opnum4 { | ||
118 | OP_ACCESS = 3, | ||
119 | OP_CLOSE = 4, | ||
120 | OP_COMMIT = 5, | ||
121 | OP_CREATE = 6, | ||
122 | OP_DELEGPURGE = 7, | ||
123 | OP_DELEGRETURN = 8, | ||
124 | OP_GETATTR = 9, | ||
125 | OP_GETFH = 10, | ||
126 | OP_LINK = 11, | ||
127 | OP_LOCK = 12, | ||
128 | OP_LOCKT = 13, | ||
129 | OP_LOCKU = 14, | ||
130 | OP_LOOKUP = 15, | ||
131 | OP_LOOKUPP = 16, | ||
132 | OP_NVERIFY = 17, | ||
133 | OP_OPEN = 18, | ||
134 | OP_OPENATTR = 19, | ||
135 | OP_OPEN_CONFIRM = 20, | ||
136 | OP_OPEN_DOWNGRADE = 21, | ||
137 | OP_PUTFH = 22, | ||
138 | OP_PUTPUBFH = 23, | ||
139 | OP_PUTROOTFH = 24, | ||
140 | OP_READ = 25, | ||
141 | OP_READDIR = 26, | ||
142 | OP_READLINK = 27, | ||
143 | OP_REMOVE = 28, | ||
144 | OP_RENAME = 29, | ||
145 | OP_RENEW = 30, | ||
146 | OP_RESTOREFH = 31, | ||
147 | OP_SAVEFH = 32, | ||
148 | OP_SECINFO = 33, | ||
149 | OP_SETATTR = 34, | ||
150 | OP_SETCLIENTID = 35, | ||
151 | OP_SETCLIENTID_CONFIRM = 36, | ||
152 | OP_VERIFY = 37, | ||
153 | OP_WRITE = 38, | ||
154 | OP_RELEASE_LOCKOWNER = 39, | ||
155 | OP_ILLEGAL = 10044, | ||
156 | }; | ||
157 | |||
158 | enum nfsstat4 { | ||
159 | NFS4_OK = 0, | ||
160 | NFS4ERR_PERM = 1, | ||
161 | NFS4ERR_NOENT = 2, | ||
162 | NFS4ERR_IO = 5, | ||
163 | NFS4ERR_NXIO = 6, | ||
164 | NFS4ERR_ACCESS = 13, | ||
165 | NFS4ERR_EXIST = 17, | ||
166 | NFS4ERR_XDEV = 18, | ||
167 | /* Unused/reserved 19 */ | ||
168 | NFS4ERR_NOTDIR = 20, | ||
169 | NFS4ERR_ISDIR = 21, | ||
170 | NFS4ERR_INVAL = 22, | ||
171 | NFS4ERR_FBIG = 27, | ||
172 | NFS4ERR_NOSPC = 28, | ||
173 | NFS4ERR_ROFS = 30, | ||
174 | NFS4ERR_MLINK = 31, | ||
175 | NFS4ERR_NAMETOOLONG = 63, | ||
176 | NFS4ERR_NOTEMPTY = 66, | ||
177 | NFS4ERR_DQUOT = 69, | ||
178 | NFS4ERR_STALE = 70, | ||
179 | NFS4ERR_BADHANDLE = 10001, | ||
180 | NFS4ERR_BAD_COOKIE = 10003, | ||
181 | NFS4ERR_NOTSUPP = 10004, | ||
182 | NFS4ERR_TOOSMALL = 10005, | ||
183 | NFS4ERR_SERVERFAULT = 10006, | ||
184 | NFS4ERR_BADTYPE = 10007, | ||
185 | NFS4ERR_DELAY = 10008, | ||
186 | NFS4ERR_SAME = 10009, | ||
187 | NFS4ERR_DENIED = 10010, | ||
188 | NFS4ERR_EXPIRED = 10011, | ||
189 | NFS4ERR_LOCKED = 10012, | ||
190 | NFS4ERR_GRACE = 10013, | ||
191 | NFS4ERR_FHEXPIRED = 10014, | ||
192 | NFS4ERR_SHARE_DENIED = 10015, | ||
193 | NFS4ERR_WRONGSEC = 10016, | ||
194 | NFS4ERR_CLID_INUSE = 10017, | ||
195 | NFS4ERR_RESOURCE = 10018, | ||
196 | NFS4ERR_MOVED = 10019, | ||
197 | NFS4ERR_NOFILEHANDLE = 10020, | ||
198 | NFS4ERR_MINOR_VERS_MISMATCH = 10021, | ||
199 | NFS4ERR_STALE_CLIENTID = 10022, | ||
200 | NFS4ERR_STALE_STATEID = 10023, | ||
201 | NFS4ERR_OLD_STATEID = 10024, | ||
202 | NFS4ERR_BAD_STATEID = 10025, | ||
203 | NFS4ERR_BAD_SEQID = 10026, | ||
204 | NFS4ERR_NOT_SAME = 10027, | ||
205 | NFS4ERR_LOCK_RANGE = 10028, | ||
206 | NFS4ERR_SYMLINK = 10029, | ||
207 | NFS4ERR_RESTOREFH = 10030, | ||
208 | NFS4ERR_LEASE_MOVED = 10031, | ||
209 | NFS4ERR_ATTRNOTSUPP = 10032, | ||
210 | NFS4ERR_NO_GRACE = 10033, | ||
211 | NFS4ERR_RECLAIM_BAD = 10034, | ||
212 | NFS4ERR_RECLAIM_CONFLICT = 10035, | ||
213 | NFS4ERR_BADXDR = 10036, | ||
214 | NFS4ERR_LOCKS_HELD = 10037, | ||
215 | NFS4ERR_OPENMODE = 10038, | ||
216 | NFS4ERR_BADOWNER = 10039, | ||
217 | NFS4ERR_BADCHAR = 10040, | ||
218 | NFS4ERR_BADNAME = 10041, | ||
219 | NFS4ERR_BAD_RANGE = 10042, | ||
220 | NFS4ERR_LOCK_NOTSUPP = 10043, | ||
221 | NFS4ERR_OP_ILLEGAL = 10044, | ||
222 | NFS4ERR_DEADLOCK = 10045, | ||
223 | NFS4ERR_FILE_OPEN = 10046, | ||
224 | NFS4ERR_ADMIN_REVOKED = 10047, | ||
225 | NFS4ERR_CB_PATH_DOWN = 10048 | ||
226 | }; | ||
227 | |||
228 | /* | ||
229 | * Note: NF4BAD is not actually part of the protocol; it is just used | ||
230 | * internally by nfsd. | ||
231 | */ | ||
232 | enum nfs_ftype4 { | ||
233 | NF4BAD = 0, | ||
234 | NF4REG = 1, /* Regular File */ | ||
235 | NF4DIR = 2, /* Directory */ | ||
236 | NF4BLK = 3, /* Special File - block device */ | ||
237 | NF4CHR = 4, /* Special File - character device */ | ||
238 | NF4LNK = 5, /* Symbolic Link */ | ||
239 | NF4SOCK = 6, /* Special File - socket */ | ||
240 | NF4FIFO = 7, /* Special File - fifo */ | ||
241 | NF4ATTRDIR = 8, /* Attribute Directory */ | ||
242 | NF4NAMEDATTR = 9 /* Named Attribute */ | ||
243 | }; | ||
244 | |||
245 | enum open_claim_type4 { | ||
246 | NFS4_OPEN_CLAIM_NULL = 0, | ||
247 | NFS4_OPEN_CLAIM_PREVIOUS = 1, | ||
248 | NFS4_OPEN_CLAIM_DELEGATE_CUR = 2, | ||
249 | NFS4_OPEN_CLAIM_DELEGATE_PREV = 3 | ||
250 | }; | ||
251 | |||
252 | enum opentype4 { | ||
253 | NFS4_OPEN_NOCREATE = 0, | ||
254 | NFS4_OPEN_CREATE = 1 | ||
255 | }; | ||
256 | |||
257 | enum createmode4 { | ||
258 | NFS4_CREATE_UNCHECKED = 0, | ||
259 | NFS4_CREATE_GUARDED = 1, | ||
260 | NFS4_CREATE_EXCLUSIVE = 2 | ||
261 | }; | ||
262 | |||
263 | enum limit_by4 { | ||
264 | NFS4_LIMIT_SIZE = 1, | ||
265 | NFS4_LIMIT_BLOCKS = 2 | ||
266 | }; | ||
267 | |||
268 | enum open_delegation_type4 { | ||
269 | NFS4_OPEN_DELEGATE_NONE = 0, | ||
270 | NFS4_OPEN_DELEGATE_READ = 1, | ||
271 | NFS4_OPEN_DELEGATE_WRITE = 2 | ||
272 | }; | ||
273 | |||
274 | enum lock_type4 { | ||
275 | NFS4_UNLOCK_LT = 0, | ||
276 | NFS4_READ_LT = 1, | ||
277 | NFS4_WRITE_LT = 2, | ||
278 | NFS4_READW_LT = 3, | ||
279 | NFS4_WRITEW_LT = 4 | ||
280 | }; | ||
281 | |||
282 | |||
283 | /* Mandatory Attributes */ | ||
284 | #define FATTR4_WORD0_SUPPORTED_ATTRS (1UL << 0) | ||
285 | #define FATTR4_WORD0_TYPE (1UL << 1) | ||
286 | #define FATTR4_WORD0_FH_EXPIRE_TYPE (1UL << 2) | ||
287 | #define FATTR4_WORD0_CHANGE (1UL << 3) | ||
288 | #define FATTR4_WORD0_SIZE (1UL << 4) | ||
289 | #define FATTR4_WORD0_LINK_SUPPORT (1UL << 5) | ||
290 | #define FATTR4_WORD0_SYMLINK_SUPPORT (1UL << 6) | ||
291 | #define FATTR4_WORD0_NAMED_ATTR (1UL << 7) | ||
292 | #define FATTR4_WORD0_FSID (1UL << 8) | ||
293 | #define FATTR4_WORD0_UNIQUE_HANDLES (1UL << 9) | ||
294 | #define FATTR4_WORD0_LEASE_TIME (1UL << 10) | ||
295 | #define FATTR4_WORD0_RDATTR_ERROR (1UL << 11) | ||
296 | |||
297 | /* Recommended Attributes */ | ||
298 | #define FATTR4_WORD0_ACL (1UL << 12) | ||
299 | #define FATTR4_WORD0_ACLSUPPORT (1UL << 13) | ||
300 | #define FATTR4_WORD0_ARCHIVE (1UL << 14) | ||
301 | #define FATTR4_WORD0_CANSETTIME (1UL << 15) | ||
302 | #define FATTR4_WORD0_CASE_INSENSITIVE (1UL << 16) | ||
303 | #define FATTR4_WORD0_CASE_PRESERVING (1UL << 17) | ||
304 | #define FATTR4_WORD0_CHOWN_RESTRICTED (1UL << 18) | ||
305 | #define FATTR4_WORD0_FILEHANDLE (1UL << 19) | ||
306 | #define FATTR4_WORD0_FILEID (1UL << 20) | ||
307 | #define FATTR4_WORD0_FILES_AVAIL (1UL << 21) | ||
308 | #define FATTR4_WORD0_FILES_FREE (1UL << 22) | ||
309 | #define FATTR4_WORD0_FILES_TOTAL (1UL << 23) | ||
310 | #define FATTR4_WORD0_FS_LOCATIONS (1UL << 24) | ||
311 | #define FATTR4_WORD0_HIDDEN (1UL << 25) | ||
312 | #define FATTR4_WORD0_HOMOGENEOUS (1UL << 26) | ||
313 | #define FATTR4_WORD0_MAXFILESIZE (1UL << 27) | ||
314 | #define FATTR4_WORD0_MAXLINK (1UL << 28) | ||
315 | #define FATTR4_WORD0_MAXNAME (1UL << 29) | ||
316 | #define FATTR4_WORD0_MAXREAD (1UL << 30) | ||
317 | #define FATTR4_WORD0_MAXWRITE (1UL << 31) | ||
318 | #define FATTR4_WORD1_MIMETYPE (1UL << 0) | ||
319 | #define FATTR4_WORD1_MODE (1UL << 1) | ||
320 | #define FATTR4_WORD1_NO_TRUNC (1UL << 2) | ||
321 | #define FATTR4_WORD1_NUMLINKS (1UL << 3) | ||
322 | #define FATTR4_WORD1_OWNER (1UL << 4) | ||
323 | #define FATTR4_WORD1_OWNER_GROUP (1UL << 5) | ||
324 | #define FATTR4_WORD1_QUOTA_HARD (1UL << 6) | ||
325 | #define FATTR4_WORD1_QUOTA_SOFT (1UL << 7) | ||
326 | #define FATTR4_WORD1_QUOTA_USED (1UL << 8) | ||
327 | #define FATTR4_WORD1_RAWDEV (1UL << 9) | ||
328 | #define FATTR4_WORD1_SPACE_AVAIL (1UL << 10) | ||
329 | #define FATTR4_WORD1_SPACE_FREE (1UL << 11) | ||
330 | #define FATTR4_WORD1_SPACE_TOTAL (1UL << 12) | ||
331 | #define FATTR4_WORD1_SPACE_USED (1UL << 13) | ||
332 | #define FATTR4_WORD1_SYSTEM (1UL << 14) | ||
333 | #define FATTR4_WORD1_TIME_ACCESS (1UL << 15) | ||
334 | #define FATTR4_WORD1_TIME_ACCESS_SET (1UL << 16) | ||
335 | #define FATTR4_WORD1_TIME_BACKUP (1UL << 17) | ||
336 | #define FATTR4_WORD1_TIME_CREATE (1UL << 18) | ||
337 | #define FATTR4_WORD1_TIME_DELTA (1UL << 19) | ||
338 | #define FATTR4_WORD1_TIME_METADATA (1UL << 20) | ||
339 | #define FATTR4_WORD1_TIME_MODIFY (1UL << 21) | ||
340 | #define FATTR4_WORD1_TIME_MODIFY_SET (1UL << 22) | ||
341 | #define FATTR4_WORD1_MOUNTED_ON_FILEID (1UL << 23) | ||
342 | |||
343 | #define NFSPROC4_NULL 0 | ||
344 | #define NFSPROC4_COMPOUND 1 | ||
345 | #define NFS4_MINOR_VERSION 0 | ||
346 | #define NFS4_DEBUG 1 | ||
347 | |||
348 | #ifdef __KERNEL__ | ||
349 | |||
350 | /* Index of predefined Linux client operations */ | ||
351 | |||
352 | enum { | ||
353 | NFSPROC4_CLNT_NULL = 0, /* Unused */ | ||
354 | NFSPROC4_CLNT_READ, | ||
355 | NFSPROC4_CLNT_WRITE, | ||
356 | NFSPROC4_CLNT_COMMIT, | ||
357 | NFSPROC4_CLNT_OPEN, | ||
358 | NFSPROC4_CLNT_OPEN_CONFIRM, | ||
359 | NFSPROC4_CLNT_OPEN_NOATTR, | ||
360 | NFSPROC4_CLNT_OPEN_DOWNGRADE, | ||
361 | NFSPROC4_CLNT_CLOSE, | ||
362 | NFSPROC4_CLNT_SETATTR, | ||
363 | NFSPROC4_CLNT_FSINFO, | ||
364 | NFSPROC4_CLNT_RENEW, | ||
365 | NFSPROC4_CLNT_SETCLIENTID, | ||
366 | NFSPROC4_CLNT_SETCLIENTID_CONFIRM, | ||
367 | NFSPROC4_CLNT_LOCK, | ||
368 | NFSPROC4_CLNT_LOCKT, | ||
369 | NFSPROC4_CLNT_LOCKU, | ||
370 | NFSPROC4_CLNT_ACCESS, | ||
371 | NFSPROC4_CLNT_GETATTR, | ||
372 | NFSPROC4_CLNT_LOOKUP, | ||
373 | NFSPROC4_CLNT_LOOKUP_ROOT, | ||
374 | NFSPROC4_CLNT_REMOVE, | ||
375 | NFSPROC4_CLNT_RENAME, | ||
376 | NFSPROC4_CLNT_LINK, | ||
377 | NFSPROC4_CLNT_SYMLINK, | ||
378 | NFSPROC4_CLNT_CREATE, | ||
379 | NFSPROC4_CLNT_PATHCONF, | ||
380 | NFSPROC4_CLNT_STATFS, | ||
381 | NFSPROC4_CLNT_READLINK, | ||
382 | NFSPROC4_CLNT_READDIR, | ||
383 | NFSPROC4_CLNT_SERVER_CAPS, | ||
384 | NFSPROC4_CLNT_DELEGRETURN, | ||
385 | }; | ||
386 | |||
387 | #endif | ||
388 | #endif | ||
389 | |||
390 | /* | ||
391 | * Local variables: | ||
392 | * c-basic-offset: 8 | ||
393 | * End: | ||
394 | */ | ||