Blame view

include/linux/nfs4.h 19.1 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  /*
   *  include/linux/nfs4.h
   *
   *  NFSv4 protocol definitions.
   *
   *  Copyright (c) 2002 The Regents of the University of Michigan.
   *  All rights reserved.
   *
   *  Kendrick Smith <kmsmith@umich.edu>
   *  Andy Adamson   <andros@umich.edu>
   */
  
  #ifndef _LINUX_NFS4_H
  #define _LINUX_NFS4_H
  
  #include <linux/types.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
17

aa53ed541   Jeff Layton   NFS4: on a O_EXCL...
18
  #define NFS4_BITMAP_SIZE	2
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
19
  #define NFS4_VERIFIER_SIZE	8
944992527   Alexandros Batsakis   NFS: change state...
20
21
22
  #define NFS4_STATEID_SEQID_SIZE 4
  #define NFS4_STATEID_OTHER_SIZE 12
  #define NFS4_STATEID_SIZE	(NFS4_STATEID_SEQID_SIZE + NFS4_STATEID_OTHER_SIZE)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
23
24
25
  #define NFS4_FHSIZE		128
  #define NFS4_MAXPATHLEN		PATH_MAX
  #define NFS4_MAXNAMLEN		NAME_MAX
99fe60d06   Benny Halevy   nfs41: exchange_i...
26
  #define NFS4_OPAQUE_LIMIT	1024
18df1884a   Benny Halevy   nfs41: common pro...
27
  #define NFS4_MAX_SESSIONID_LEN	16
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
28
29
30
31
32
33
34
  
  #define NFS4_ACCESS_READ        0x0001
  #define NFS4_ACCESS_LOOKUP      0x0002
  #define NFS4_ACCESS_MODIFY      0x0004
  #define NFS4_ACCESS_EXTEND      0x0008
  #define NFS4_ACCESS_DELETE      0x0010
  #define NFS4_ACCESS_EXECUTE     0x0020
496400014   NeilBrown   [PATCH] nfsd4: fi...
35
  #define NFS4_FH_PERSISTENT		0x0000
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
36
37
38
39
40
41
42
  #define NFS4_FH_NOEXPIRE_WITH_OPEN	0x0001
  #define NFS4_FH_VOLATILE_ANY		0x0002
  #define NFS4_FH_VOL_MIGRATION		0x0004
  #define NFS4_FH_VOL_RENAME		0x0008
  
  #define NFS4_OPEN_RESULT_CONFIRM 0x0002
  #define NFS4_OPEN_RESULT_LOCKTYPE_POSIX 0x0004
18df1884a   Benny Halevy   nfs41: common pro...
43
  #define NFS4_SHARE_ACCESS_MASK	0x000F
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
44
45
46
47
48
49
  #define NFS4_SHARE_ACCESS_READ	0x0001
  #define NFS4_SHARE_ACCESS_WRITE	0x0002
  #define NFS4_SHARE_ACCESS_BOTH	0x0003
  #define NFS4_SHARE_DENY_READ	0x0001
  #define NFS4_SHARE_DENY_WRITE	0x0002
  #define NFS4_SHARE_DENY_BOTH	0x0003
18df1884a   Benny Halevy   nfs41: common pro...
50
51
52
53
54
55
56
57
58
59
60
61
  /* nfs41 */
  #define NFS4_SHARE_WANT_MASK		0xFF00
  #define NFS4_SHARE_WANT_NO_PREFERENCE	0x0000
  #define NFS4_SHARE_WANT_READ_DELEG	0x0100
  #define NFS4_SHARE_WANT_WRITE_DELEG	0x0200
  #define NFS4_SHARE_WANT_ANY_DELEG	0x0300
  #define NFS4_SHARE_WANT_NO_DELEG	0x0400
  #define NFS4_SHARE_WANT_CANCEL		0x0500
  
  #define NFS4_SHARE_WHEN_MASK		0xF0000
  #define NFS4_SHARE_SIGNAL_DELEG_WHEN_RESRC_AVAIL	0x10000
  #define NFS4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED		0x20000
c7662518c   J. Bruce Fields   nfsd4: keep per-s...
62
63
  #define NFS4_CDFC4_FORE	0x1
  #define NFS4_CDFC4_BACK 0x2
1d1bc8f20   J. Bruce Fields   nfsd4: support BI...
64
65
66
  #define NFS4_CDFC4_BOTH 0x3
  #define NFS4_CDFC4_FORE_OR_BOTH 0x3
  #define NFS4_CDFC4_BACK_OR_BOTH 0x7
c7662518c   J. Bruce Fields   nfsd4: keep per-s...
67

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
  #define NFS4_SET_TO_SERVER_TIME	0
  #define NFS4_SET_TO_CLIENT_TIME	1
  
  #define NFS4_ACE_ACCESS_ALLOWED_ACE_TYPE 0
  #define NFS4_ACE_ACCESS_DENIED_ACE_TYPE  1
  #define NFS4_ACE_SYSTEM_AUDIT_ACE_TYPE   2
  #define NFS4_ACE_SYSTEM_ALARM_ACE_TYPE   3
  
  #define ACL4_SUPPORT_ALLOW_ACL 0x01
  #define ACL4_SUPPORT_DENY_ACL  0x02
  #define ACL4_SUPPORT_AUDIT_ACL 0x04
  #define ACL4_SUPPORT_ALARM_ACL 0x08
  
  #define NFS4_ACE_FILE_INHERIT_ACE             0x00000001
  #define NFS4_ACE_DIRECTORY_INHERIT_ACE        0x00000002
  #define NFS4_ACE_NO_PROPAGATE_INHERIT_ACE     0x00000004
  #define NFS4_ACE_INHERIT_ONLY_ACE             0x00000008
  #define NFS4_ACE_SUCCESSFUL_ACCESS_ACE_FLAG   0x00000010
  #define NFS4_ACE_FAILED_ACCESS_ACE_FLAG       0x00000020
  #define NFS4_ACE_IDENTIFIER_GROUP             0x00000040
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
  
  #define NFS4_ACE_READ_DATA                    0x00000001
  #define NFS4_ACE_LIST_DIRECTORY               0x00000001
  #define NFS4_ACE_WRITE_DATA                   0x00000002
  #define NFS4_ACE_ADD_FILE                     0x00000002
  #define NFS4_ACE_APPEND_DATA                  0x00000004
  #define NFS4_ACE_ADD_SUBDIRECTORY             0x00000004
  #define NFS4_ACE_READ_NAMED_ATTRS             0x00000008
  #define NFS4_ACE_WRITE_NAMED_ATTRS            0x00000010
  #define NFS4_ACE_EXECUTE                      0x00000020
  #define NFS4_ACE_DELETE_CHILD                 0x00000040
  #define NFS4_ACE_READ_ATTRIBUTES              0x00000080
  #define NFS4_ACE_WRITE_ATTRIBUTES             0x00000100
  #define NFS4_ACE_DELETE                       0x00010000
  #define NFS4_ACE_READ_ACL                     0x00020000
  #define NFS4_ACE_WRITE_ACL                    0x00040000
  #define NFS4_ACE_WRITE_OWNER                  0x00080000
  #define NFS4_ACE_SYNCHRONIZE                  0x00100000
  #define NFS4_ACE_GENERIC_READ                 0x00120081
  #define NFS4_ACE_GENERIC_WRITE                0x00160106
  #define NFS4_ACE_GENERIC_EXECUTE              0x001200A0
  #define NFS4_ACE_MASK_ALL                     0x001F01FF
18df1884a   Benny Halevy   nfs41: common pro...
110
111
  #define EXCHGID4_FLAG_SUPP_MOVED_REFER		0x00000001
  #define EXCHGID4_FLAG_SUPP_MOVED_MIGR		0x00000002
357f54d6b   Andy Adamson   NFS fix the setti...
112
  #define EXCHGID4_FLAG_BIND_PRINC_STATEID	0x00000100
18df1884a   Benny Halevy   nfs41: common pro...
113
114
115
  #define EXCHGID4_FLAG_USE_NON_PNFS		0x00010000
  #define EXCHGID4_FLAG_USE_PNFS_MDS		0x00020000
  #define EXCHGID4_FLAG_USE_PNFS_DS		0x00040000
357f54d6b   Andy Adamson   NFS fix the setti...
116
  #define EXCHGID4_FLAG_MASK_PNFS			0x00070000
18df1884a   Benny Halevy   nfs41: common pro...
117
118
119
120
121
122
123
  #define EXCHGID4_FLAG_UPD_CONFIRMED_REC_A	0x40000000
  #define EXCHGID4_FLAG_CONFIRMED_R		0x80000000
  /*
   * Since the validity of these bits depends on whether
   * they're set in the argument or response, have separate
   * invalid flag masks for arg (_A) and resp (_R).
   */
357f54d6b   Andy Adamson   NFS fix the setti...
124
125
  #define EXCHGID4_FLAG_MASK_A			0x40070103
  #define EXCHGID4_FLAG_MASK_R			0x80070103
18df1884a   Benny Halevy   nfs41: common pro...
126
127
128
129
130
131
132
133
134
135
  
  #define SEQ4_STATUS_CB_PATH_DOWN		0x00000001
  #define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRING	0x00000002
  #define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRED	0x00000004
  #define SEQ4_STATUS_EXPIRED_ALL_STATE_REVOKED	0x00000008
  #define SEQ4_STATUS_EXPIRED_SOME_STATE_REVOKED	0x00000010
  #define SEQ4_STATUS_ADMIN_STATE_REVOKED		0x00000020
  #define SEQ4_STATUS_RECALLABLE_STATE_REVOKED	0x00000040
  #define SEQ4_STATUS_LEASE_MOVED			0x00000080
  #define SEQ4_STATUS_RESTART_RECLAIM_NEEDED	0x00000100
0629e370d   Alexandros Batsakis   nfs41: check SEQU...
136
137
  #define SEQ4_STATUS_CB_PATH_DOWN_SESSION	0x00000200
  #define SEQ4_STATUS_BACKCHANNEL_FAULT		0x00000400
18df1884a   Benny Halevy   nfs41: common pro...
138

04f4ad16b   J. Bruce Fields   nfsd4: implement ...
139
140
  #define NFS4_SECINFO_STYLE4_CURRENT_FH	0
  #define NFS4_SECINFO_STYLE4_PARENT	1
87df4de80   Benny Halevy   nfsd: last_byte_o...
141
  #define NFS4_MAX_UINT64	(~(u64)0)
fc931582c   Andy Adamson   nfs41: create_ses...
142
143
144
145
146
147
148
149
150
  /* An NFS4 sessions server must support at least NFS4_MAX_OPS operations.
   * If a compound requires more operations, adjust NFS4_MAX_OPS accordingly.
   */
  #define NFS4_MAX_OPS   8
  
  /* Our NFS4 client back channel server only wants the cb_sequene and the
   * actual operation per compound
   */
  #define NFS4_MAX_BACK_CHANNEL_OPS 2
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
151
152
153
154
155
156
  enum nfs4_acl_whotype {
  	NFS4_ACL_WHO_NAMED = 0,
  	NFS4_ACL_WHO_OWNER,
  	NFS4_ACL_WHO_GROUP,
  	NFS4_ACL_WHO_EVERYONE,
  };
997b7af2f   David Woodhouse   Don't include pri...
157
158
  #ifdef __KERNEL__
  #include <linux/list.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
159
160
161
162
163
164
  struct nfs4_ace {
  	uint32_t	type;
  	uint32_t	flag;
  	uint32_t	access_mask;
  	int		whotype;
  	uid_t		who;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
165
166
167
168
  };
  
  struct nfs4_acl {
  	uint32_t	naces;
28e05dd84   J. Bruce Fields   [PATCH] knfsd: nf...
169
  	struct nfs4_ace	aces[0];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
170
171
172
  };
  
  typedef struct { char data[NFS4_VERIFIER_SIZE]; } nfs4_verifier;
944992527   Alexandros Batsakis   NFS: change state...
173
174
175
176
177
178
179
180
181
182
  
  struct nfs41_stateid {
  	__be32 seqid;
  	char other[NFS4_STATEID_OTHER_SIZE];
  } __attribute__ ((packed));
  
  typedef union {
  	char data[NFS4_STATEID_SIZE];
  	struct nfs41_stateid stateid;
  } nfs4_stateid;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
  
  enum nfs_opnum4 {
  	OP_ACCESS = 3,
  	OP_CLOSE = 4,
  	OP_COMMIT = 5,
  	OP_CREATE = 6,
  	OP_DELEGPURGE = 7,
  	OP_DELEGRETURN = 8,
  	OP_GETATTR = 9,
  	OP_GETFH = 10,
  	OP_LINK = 11,
  	OP_LOCK = 12,
  	OP_LOCKT = 13,
  	OP_LOCKU = 14,
  	OP_LOOKUP = 15,
  	OP_LOOKUPP = 16,
  	OP_NVERIFY = 17,
  	OP_OPEN = 18,
  	OP_OPENATTR = 19,
  	OP_OPEN_CONFIRM = 20,
  	OP_OPEN_DOWNGRADE = 21,
  	OP_PUTFH = 22,
  	OP_PUTPUBFH = 23,
  	OP_PUTROOTFH = 24,
  	OP_READ = 25,
  	OP_READDIR = 26,
  	OP_READLINK = 27,
  	OP_REMOVE = 28,
  	OP_RENAME = 29,
  	OP_RENEW = 30,
  	OP_RESTOREFH = 31,
  	OP_SAVEFH = 32,
  	OP_SECINFO = 33,
  	OP_SETATTR = 34,
  	OP_SETCLIENTID = 35,
  	OP_SETCLIENTID_CONFIRM = 36,
  	OP_VERIFY = 37,
  	OP_WRITE = 38,
  	OP_RELEASE_LOCKOWNER = 39,
18df1884a   Benny Halevy   nfs41: common pro...
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
  
  	/* nfs41 */
  	OP_BACKCHANNEL_CTL = 40,
  	OP_BIND_CONN_TO_SESSION = 41,
  	OP_EXCHANGE_ID = 42,
  	OP_CREATE_SESSION = 43,
  	OP_DESTROY_SESSION = 44,
  	OP_FREE_STATEID = 45,
  	OP_GET_DIR_DELEGATION = 46,
  	OP_GETDEVICEINFO = 47,
  	OP_GETDEVICELIST = 48,
  	OP_LAYOUTCOMMIT = 49,
  	OP_LAYOUTGET = 50,
  	OP_LAYOUTRETURN = 51,
  	OP_SECINFO_NO_NAME = 52,
  	OP_SEQUENCE = 53,
  	OP_SET_SSV = 54,
  	OP_TEST_STATEID = 55,
  	OP_WANT_DELEGATION = 56,
  	OP_DESTROY_CLIENTID = 57,
  	OP_RECLAIM_COMPLETE = 58,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
243
244
  	OP_ILLEGAL = 10044,
  };
e2b209509   Shankar Anand   [PATCH] knfsd: nf...
245
246
247
248
  /*Defining first and last NFS4 operations implemented.
  Needs to be updated if more operations are defined in future.*/
  
  #define FIRST_NFS4_OP	OP_ACCESS
5a421ce3c   Benny Halevy   nfsd41: gather an...
249
  #define LAST_NFS4_OP 	OP_RECLAIM_COMPLETE
e2b209509   Shankar Anand   [PATCH] knfsd: nf...
250

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
  enum nfsstat4 {
  	NFS4_OK = 0,
  	NFS4ERR_PERM = 1,
  	NFS4ERR_NOENT = 2,
  	NFS4ERR_IO = 5,
  	NFS4ERR_NXIO = 6,
  	NFS4ERR_ACCESS = 13,
  	NFS4ERR_EXIST = 17,
  	NFS4ERR_XDEV = 18,
  	/* Unused/reserved 19 */
  	NFS4ERR_NOTDIR = 20,
  	NFS4ERR_ISDIR = 21,
  	NFS4ERR_INVAL = 22,
  	NFS4ERR_FBIG = 27,
  	NFS4ERR_NOSPC = 28,
  	NFS4ERR_ROFS = 30,
  	NFS4ERR_MLINK = 31,
  	NFS4ERR_NAMETOOLONG = 63,
  	NFS4ERR_NOTEMPTY = 66,
  	NFS4ERR_DQUOT = 69,
  	NFS4ERR_STALE = 70,
  	NFS4ERR_BADHANDLE = 10001,
  	NFS4ERR_BAD_COOKIE = 10003,
  	NFS4ERR_NOTSUPP = 10004,
  	NFS4ERR_TOOSMALL = 10005,
  	NFS4ERR_SERVERFAULT = 10006,
  	NFS4ERR_BADTYPE = 10007,
  	NFS4ERR_DELAY = 10008,
  	NFS4ERR_SAME = 10009,
  	NFS4ERR_DENIED = 10010,
  	NFS4ERR_EXPIRED = 10011,
  	NFS4ERR_LOCKED = 10012,
  	NFS4ERR_GRACE = 10013,
  	NFS4ERR_FHEXPIRED = 10014,
  	NFS4ERR_SHARE_DENIED = 10015,
  	NFS4ERR_WRONGSEC = 10016,
  	NFS4ERR_CLID_INUSE = 10017,
  	NFS4ERR_RESOURCE = 10018,
  	NFS4ERR_MOVED = 10019,
  	NFS4ERR_NOFILEHANDLE = 10020,
  	NFS4ERR_MINOR_VERS_MISMATCH = 10021,
  	NFS4ERR_STALE_CLIENTID = 10022,
  	NFS4ERR_STALE_STATEID = 10023,
  	NFS4ERR_OLD_STATEID = 10024,
  	NFS4ERR_BAD_STATEID = 10025,
  	NFS4ERR_BAD_SEQID = 10026,
  	NFS4ERR_NOT_SAME = 10027,
  	NFS4ERR_LOCK_RANGE = 10028,
  	NFS4ERR_SYMLINK = 10029,
  	NFS4ERR_RESTOREFH = 10030,
  	NFS4ERR_LEASE_MOVED = 10031,
  	NFS4ERR_ATTRNOTSUPP = 10032,
  	NFS4ERR_NO_GRACE = 10033,
  	NFS4ERR_RECLAIM_BAD = 10034,
  	NFS4ERR_RECLAIM_CONFLICT = 10035,
  	NFS4ERR_BADXDR = 10036,
  	NFS4ERR_LOCKS_HELD = 10037,
  	NFS4ERR_OPENMODE = 10038,
  	NFS4ERR_BADOWNER = 10039,
  	NFS4ERR_BADCHAR = 10040,
  	NFS4ERR_BADNAME = 10041,
  	NFS4ERR_BAD_RANGE = 10042,
  	NFS4ERR_LOCK_NOTSUPP = 10043,
  	NFS4ERR_OP_ILLEGAL = 10044,
  	NFS4ERR_DEADLOCK = 10045,
  	NFS4ERR_FILE_OPEN = 10046,
  	NFS4ERR_ADMIN_REVOKED = 10047,
18df1884a   Benny Halevy   nfs41: common pro...
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
  	NFS4ERR_CB_PATH_DOWN = 10048,
  
  	/* nfs41 */
  	NFS4ERR_BADIOMODE	= 10049,
  	NFS4ERR_BADLAYOUT	= 10050,
  	NFS4ERR_BAD_SESSION_DIGEST = 10051,
  	NFS4ERR_BADSESSION	= 10052,
  	NFS4ERR_BADSLOT		= 10053,
  	NFS4ERR_COMPLETE_ALREADY = 10054,
  	NFS4ERR_CONN_NOT_BOUND_TO_SESSION = 10055,
  	NFS4ERR_DELEG_ALREADY_WANTED = 10056,
  	NFS4ERR_BACK_CHAN_BUSY	= 10057,	/* backchan reqs outstanding */
  	NFS4ERR_LAYOUTTRYLATER	= 10058,
  	NFS4ERR_LAYOUTUNAVAILABLE = 10059,
  	NFS4ERR_NOMATCHING_LAYOUT = 10060,
  	NFS4ERR_RECALLCONFLICT	= 10061,
  	NFS4ERR_UNKNOWN_LAYOUTTYPE = 10062,
  	NFS4ERR_SEQ_MISORDERED = 10063, 	/* unexpected seq.id in req */
  	NFS4ERR_SEQUENCE_POS	= 10064,	/* [CB_]SEQ. op not 1st op */
  	NFS4ERR_REQ_TOO_BIG	= 10065,	/* request too big */
  	NFS4ERR_REP_TOO_BIG	= 10066,	/* reply too big */
  	NFS4ERR_REP_TOO_BIG_TO_CACHE = 10067,	/* rep. not all cached */
  	NFS4ERR_RETRY_UNCACHED_REP = 10068,	/* retry & rep. uncached */
  	NFS4ERR_UNSAFE_COMPOUND = 10069,	/* retry/recovery too hard */
  	NFS4ERR_TOO_MANY_OPS	= 10070,	/* too many ops in [CB_]COMP */
  	NFS4ERR_OP_NOT_IN_SESSION = 10071,	/* op needs [CB_]SEQ. op */
  	NFS4ERR_HASH_ALG_UNSUPP = 10072,	/* hash alg. not supp. */
  						/* Error 10073 is unused. */
  	NFS4ERR_CLIENTID_BUSY	= 10074,	/* clientid has state */
  	NFS4ERR_PNFS_IO_HOLE	= 10075,	/* IO to _SPARSE file hole */
25985edce   Lucas De Marchi   Fix common misspe...
348
  	NFS4ERR_SEQ_FALSE_RETRY	= 10076,	/* retry not original */
18df1884a   Benny Halevy   nfs41: common pro...
349
350
351
352
353
354
355
356
357
358
359
  	NFS4ERR_BAD_HIGH_SLOT	= 10077,	/* sequence arg bad */
  	NFS4ERR_DEADSESSION	= 10078,	/* persistent session dead */
  	NFS4ERR_ENCR_ALG_UNSUPP = 10079,	/* SSV alg mismatch */
  	NFS4ERR_PNFS_NO_LAYOUT	= 10080,	/* direct I/O with no layout */
  	NFS4ERR_NOT_ONLY_OP	= 10081,	/* bad compound */
  	NFS4ERR_WRONG_CRED	= 10082,	/* permissions:state change */
  	NFS4ERR_WRONG_TYPE	= 10083,	/* current operation mismatch */
  	NFS4ERR_DIRDELEG_UNAVAIL = 10084,	/* no directory delegation */
  	NFS4ERR_REJECT_DELEG	= 10085,	/* on callback */
  	NFS4ERR_RETURNCONFLICT	= 10086,	/* outstanding layoutreturn */
  	NFS4ERR_DELEG_REVOKED	= 10087,	/* deleg./layout revoked */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
360
  };
a9004abc3   J. Bruce Fields   nfsd4: cleanup an...
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
  static inline bool seqid_mutating_err(u32 err)
  {
  	/* rfc 3530 section 8.1.5: */
  	switch (err) {
  	case NFS4ERR_STALE_CLIENTID:
  	case NFS4ERR_STALE_STATEID:
  	case NFS4ERR_BAD_STATEID:
  	case NFS4ERR_BAD_SEQID:
  	case NFS4ERR_BADXDR:
  	case NFS4ERR_RESOURCE:
  	case NFS4ERR_NOFILEHANDLE:
  		return false;
  	};
  	return true;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
  /*
   * Note: NF4BAD is not actually part of the protocol; it is just used
   * internally by nfsd.
   */
  enum nfs_ftype4 {
  	NF4BAD		= 0,
          NF4REG          = 1,    /* Regular File */
          NF4DIR          = 2,    /* Directory */
          NF4BLK          = 3,    /* Special File - block device */
          NF4CHR          = 4,    /* Special File - character device */
          NF4LNK          = 5,    /* Symbolic Link */
          NF4SOCK         = 6,    /* Special File - socket */
          NF4FIFO         = 7,    /* Special File - fifo */
          NF4ATTRDIR      = 8,    /* Attribute Directory */
          NF4NAMEDATTR    = 9     /* Named Attribute */
  };
  
  enum open_claim_type4 {
  	NFS4_OPEN_CLAIM_NULL = 0,
  	NFS4_OPEN_CLAIM_PREVIOUS = 1,
  	NFS4_OPEN_CLAIM_DELEGATE_CUR = 2,
8b289b2c2   J. Bruce Fields   nfsd4: implement ...
397
398
399
400
  	NFS4_OPEN_CLAIM_DELEGATE_PREV = 3,
  	NFS4_OPEN_CLAIM_FH = 4, /* 4.1 */
  	NFS4_OPEN_CLAIM_DELEG_CUR_FH = 5, /* 4.1 */
  	NFS4_OPEN_CLAIM_DELEG_PREV_FH = 6, /* 4.1 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
401
402
403
404
405
406
407
408
409
410
  };
  
  enum opentype4 {
  	NFS4_OPEN_NOCREATE = 0,
  	NFS4_OPEN_CREATE = 1
  };
  
  enum createmode4 {
  	NFS4_CREATE_UNCHECKED = 0,
  	NFS4_CREATE_GUARDED = 1,
79fb54abd   Benny Halevy   nfsd41: CREATE_EX...
411
412
413
414
415
416
417
  	NFS4_CREATE_EXCLUSIVE = 2,
  	/*
  	 * New to NFSv4.1. If session is persistent,
  	 * GUARDED4 MUST be used. Otherwise, use
  	 * EXCLUSIVE4_1 instead of EXCLUSIVE4.
  	 */
  	NFS4_CREATE_EXCLUSIVE4_1 = 3
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
  };
  
  enum limit_by4 {
  	NFS4_LIMIT_SIZE = 1,
  	NFS4_LIMIT_BLOCKS = 2
  };
  
  enum open_delegation_type4 {
  	NFS4_OPEN_DELEGATE_NONE = 0,
  	NFS4_OPEN_DELEGATE_READ = 1,
  	NFS4_OPEN_DELEGATE_WRITE = 2
  };
  
  enum lock_type4 {
  	NFS4_UNLOCK_LT = 0,
  	NFS4_READ_LT = 1,
  	NFS4_WRITE_LT = 2,
  	NFS4_READW_LT = 3,
  	NFS4_WRITEW_LT = 4
  };
  
  
  /* Mandatory Attributes */
  #define FATTR4_WORD0_SUPPORTED_ATTRS    (1UL << 0)
  #define FATTR4_WORD0_TYPE               (1UL << 1)
  #define FATTR4_WORD0_FH_EXPIRE_TYPE     (1UL << 2)
  #define FATTR4_WORD0_CHANGE             (1UL << 3)
  #define FATTR4_WORD0_SIZE               (1UL << 4)
  #define FATTR4_WORD0_LINK_SUPPORT       (1UL << 5)
  #define FATTR4_WORD0_SYMLINK_SUPPORT    (1UL << 6)
  #define FATTR4_WORD0_NAMED_ATTR         (1UL << 7)
  #define FATTR4_WORD0_FSID               (1UL << 8)
  #define FATTR4_WORD0_UNIQUE_HANDLES     (1UL << 9)
  #define FATTR4_WORD0_LEASE_TIME         (1UL << 10)
  #define FATTR4_WORD0_RDATTR_ERROR       (1UL << 11)
8c18f2052   Benny Halevy   nfsd41: SUPPATTR_...
453
454
  /* Mandatory in NFSv4.1 */
  #define FATTR4_WORD2_SUPPATTR_EXCLCREAT (1UL << 11)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
  
  /* Recommended Attributes */
  #define FATTR4_WORD0_ACL                (1UL << 12)
  #define FATTR4_WORD0_ACLSUPPORT         (1UL << 13)
  #define FATTR4_WORD0_ARCHIVE            (1UL << 14)
  #define FATTR4_WORD0_CANSETTIME         (1UL << 15)
  #define FATTR4_WORD0_CASE_INSENSITIVE   (1UL << 16)
  #define FATTR4_WORD0_CASE_PRESERVING    (1UL << 17)
  #define FATTR4_WORD0_CHOWN_RESTRICTED   (1UL << 18)
  #define FATTR4_WORD0_FILEHANDLE         (1UL << 19)
  #define FATTR4_WORD0_FILEID             (1UL << 20)
  #define FATTR4_WORD0_FILES_AVAIL        (1UL << 21)
  #define FATTR4_WORD0_FILES_FREE         (1UL << 22)
  #define FATTR4_WORD0_FILES_TOTAL        (1UL << 23)
  #define FATTR4_WORD0_FS_LOCATIONS       (1UL << 24)
  #define FATTR4_WORD0_HIDDEN             (1UL << 25)
  #define FATTR4_WORD0_HOMOGENEOUS        (1UL << 26)
  #define FATTR4_WORD0_MAXFILESIZE        (1UL << 27)
  #define FATTR4_WORD0_MAXLINK            (1UL << 28)
  #define FATTR4_WORD0_MAXNAME            (1UL << 29)
  #define FATTR4_WORD0_MAXREAD            (1UL << 30)
  #define FATTR4_WORD0_MAXWRITE           (1UL << 31)
  #define FATTR4_WORD1_MIMETYPE           (1UL << 0)
  #define FATTR4_WORD1_MODE               (1UL << 1)
  #define FATTR4_WORD1_NO_TRUNC           (1UL << 2)
  #define FATTR4_WORD1_NUMLINKS           (1UL << 3)
  #define FATTR4_WORD1_OWNER              (1UL << 4)
  #define FATTR4_WORD1_OWNER_GROUP        (1UL << 5)
  #define FATTR4_WORD1_QUOTA_HARD         (1UL << 6)
  #define FATTR4_WORD1_QUOTA_SOFT         (1UL << 7)
  #define FATTR4_WORD1_QUOTA_USED         (1UL << 8)
  #define FATTR4_WORD1_RAWDEV             (1UL << 9)
  #define FATTR4_WORD1_SPACE_AVAIL        (1UL << 10)
  #define FATTR4_WORD1_SPACE_FREE         (1UL << 11)
  #define FATTR4_WORD1_SPACE_TOTAL        (1UL << 12)
  #define FATTR4_WORD1_SPACE_USED         (1UL << 13)
  #define FATTR4_WORD1_SYSTEM             (1UL << 14)
  #define FATTR4_WORD1_TIME_ACCESS        (1UL << 15)
  #define FATTR4_WORD1_TIME_ACCESS_SET    (1UL << 16)
  #define FATTR4_WORD1_TIME_BACKUP        (1UL << 17)
  #define FATTR4_WORD1_TIME_CREATE        (1UL << 18)
  #define FATTR4_WORD1_TIME_DELTA         (1UL << 19)
  #define FATTR4_WORD1_TIME_METADATA      (1UL << 20)
  #define FATTR4_WORD1_TIME_MODIFY        (1UL << 21)
  #define FATTR4_WORD1_TIME_MODIFY_SET    (1UL << 22)
  #define FATTR4_WORD1_MOUNTED_ON_FILEID  (1UL << 23)
c772567d9   Dean Hildebrand   NFSv4.1: pnfsd, p...
501
502
  #define FATTR4_WORD1_FS_LAYOUT_TYPES    (1UL << 30)
  #define FATTR4_WORD2_LAYOUT_BLKSIZE     (1UL << 1)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
503
504
505
  
  #define NFSPROC4_NULL 0
  #define NFSPROC4_COMPOUND 1
764302ccb   Chuck Lever   NFS: Allow the "n...
506
  #define NFS4_VERSION 4
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
507
  #define NFS4_MINOR_VERSION 0
44549dff8   Mike Sager   nfs41: define NFS...
508
509
510
511
512
513
  
  #if defined(CONFIG_NFS_V4_1)
  #define NFS4_MAX_MINOR_VERSION 1
  #else
  #define NFS4_MAX_MINOR_VERSION 0
  #endif /* CONFIG_NFS_V4_1 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
514
  #define NFS4_DEBUG 1
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
  /* Index of predefined Linux client operations */
  
  enum {
  	NFSPROC4_CLNT_NULL = 0,		/* Unused */
  	NFSPROC4_CLNT_READ,
  	NFSPROC4_CLNT_WRITE,
  	NFSPROC4_CLNT_COMMIT,
  	NFSPROC4_CLNT_OPEN,
  	NFSPROC4_CLNT_OPEN_CONFIRM,
  	NFSPROC4_CLNT_OPEN_NOATTR,
  	NFSPROC4_CLNT_OPEN_DOWNGRADE,
  	NFSPROC4_CLNT_CLOSE,
  	NFSPROC4_CLNT_SETATTR,
  	NFSPROC4_CLNT_FSINFO,
  	NFSPROC4_CLNT_RENEW,
  	NFSPROC4_CLNT_SETCLIENTID,
  	NFSPROC4_CLNT_SETCLIENTID_CONFIRM,
  	NFSPROC4_CLNT_LOCK,
  	NFSPROC4_CLNT_LOCKT,
  	NFSPROC4_CLNT_LOCKU,
  	NFSPROC4_CLNT_ACCESS,
  	NFSPROC4_CLNT_GETATTR,
  	NFSPROC4_CLNT_LOOKUP,
  	NFSPROC4_CLNT_LOOKUP_ROOT,
  	NFSPROC4_CLNT_REMOVE,
  	NFSPROC4_CLNT_RENAME,
  	NFSPROC4_CLNT_LINK,
  	NFSPROC4_CLNT_SYMLINK,
  	NFSPROC4_CLNT_CREATE,
  	NFSPROC4_CLNT_PATHCONF,
  	NFSPROC4_CLNT_STATFS,
  	NFSPROC4_CLNT_READLINK,
  	NFSPROC4_CLNT_READDIR,
  	NFSPROC4_CLNT_SERVER_CAPS,
  	NFSPROC4_CLNT_DELEGRETURN,
029d105e6   J. Bruce Fields   [PATCH] NFSv4: Cl...
550
  	NFSPROC4_CLNT_GETACL,
23ec6965c   J. Bruce Fields   [PATCH] NFSv4: Cl...
551
  	NFSPROC4_CLNT_SETACL,
683b57b43   Trond Myklebust   NFSv4: Implement ...
552
  	NFSPROC4_CLNT_FS_LOCATIONS,
d3c7b7ccc   Trond Myklebust   NFSv4: Add suppor...
553
  	NFSPROC4_CLNT_RELEASE_LOCKOWNER,
5a5ea0d48   Bryan Schumaker   NFS: Add secinfo ...
554
  	NFSPROC4_CLNT_SECINFO,
18df1884a   Benny Halevy   nfs41: common pro...
555
556
557
558
559
560
561
  
  	/* nfs41 */
  	NFSPROC4_CLNT_EXCHANGE_ID,
  	NFSPROC4_CLNT_CREATE_SESSION,
  	NFSPROC4_CLNT_DESTROY_SESSION,
  	NFSPROC4_CLNT_SEQUENCE,
  	NFSPROC4_CLNT_GET_LEASE_TIME,
180197536   Ricardo Labiaga   nfs41: RECLAIM_CO...
562
  	NFSPROC4_CLNT_RECLAIM_COMPLETE,
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
563
564
  	NFSPROC4_CLNT_LAYOUTGET,
  	NFSPROC4_CLNT_GETDEVICEINFO,
863a3c6c6   Andy Adamson   NFSv4.1: layoutco...
565
  	NFSPROC4_CLNT_LAYOUTCOMMIT,
cbe826036   Benny Halevy   pnfs: layoutreturn
566
  	NFSPROC4_CLNT_LAYOUTRETURN,
fca78d6d2   Bryan Schumaker   NFS: Add SECINFO_...
567
  	NFSPROC4_CLNT_SECINFO_NO_NAME,
7d9747947   Bryan Schumaker   NFS: Added TEST_S...
568
  	NFSPROC4_CLNT_TEST_STATEID,
9aeda35fd   Bryan Schumaker   NFS: added FREE_S...
569
  	NFSPROC4_CLNT_FREE_STATEID,
7f11d8d38   Andy Adamson   pnfs: GETDEVICELIST
570
  	NFSPROC4_CLNT_GETDEVICELIST,
18df1884a   Benny Halevy   nfs41: common pro...
571
572
573
574
575
576
577
578
  };
  
  /* nfs41 types */
  struct nfs4_sessionid {
  	unsigned char data[NFS4_MAX_SESSIONID_LEN];
  };
  
  /* Create Session Flags */
a62573dc3   Mi Jinlong   nfsd41: add flag ...
579
580
581
582
583
  #define SESSION4_PERSIST	0x001
  #define SESSION4_BACK_CHAN	0x002
  #define SESSION4_RDMA		0x004
  
  #define SESSION4_FLAG_MASK_A	0x007
18df1884a   Benny Halevy   nfs41: common pro...
584
585
586
587
588
  
  enum state_protect_how4 {
  	SP4_NONE	= 0,
  	SP4_MACH_CRED	= 1,
  	SP4_SSV		= 2
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
589
  };
c772567d9   Dean Hildebrand   NFSv4.1: pnfsd, p...
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
  enum pnfs_layouttype {
  	LAYOUT_NFSV4_1_FILES  = 1,
  	LAYOUT_OSD2_OBJECTS = 2,
  	LAYOUT_BLOCK_VOLUME = 3,
  };
  
  /* used for both layout return and recall */
  enum pnfs_layoutreturn_type {
  	RETURN_FILE = 1,
  	RETURN_FSID = 2,
  	RETURN_ALL  = 3
  };
  
  enum pnfs_iomode {
  	IOMODE_READ = 1,
  	IOMODE_RW = 2,
  	IOMODE_ANY = 3,
  };
  
  enum pnfs_notify_deviceid_type4 {
  	NOTIFY_DEVICEID4_CHANGE = 1 << 1,
  	NOTIFY_DEVICEID4_DELETE = 1 << 2,
  };
  
  #define NFL4_UFLG_MASK			0x0000003F
  #define NFL4_UFLG_DENSE			0x00000001
  #define NFL4_UFLG_COMMIT_THRU_MDS	0x00000002
  #define NFL4_UFLG_STRIPE_UNIT_SIZE_MASK	0xFFFFFFC0
  
  /* Encoded in the loh_body field of type layouthint4 */
  enum filelayout_hint_care4 {
  	NFLH4_CARE_DENSE		= NFL4_UFLG_DENSE,
  	NFLH4_CARE_COMMIT_THRU_MDS	= NFL4_UFLG_COMMIT_THRU_MDS,
  	NFLH4_CARE_STRIPE_UNIT_SIZE	= 0x00000040,
  	NFLH4_CARE_STRIPE_COUNT		= 0x00000080
  };
  
  #define NFS4_DEVICEID4_SIZE 16
  
  struct nfs4_deviceid {
  	char data[NFS4_DEVICEID4_SIZE];
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
632
633
634
635
636
637
638
639
  #endif
  #endif
  
  /*
   * Local variables:
   *  c-basic-offset: 8
   * End:
   */