Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/nfs/nfsproto.h
39475 views
1
/*-
2
* SPDX-License-Identifier: BSD-3-Clause
3
*
4
* Copyright (c) 1989, 1993
5
* The Regents of the University of California. All rights reserved.
6
*
7
* This code is derived from software contributed to Berkeley by
8
* Rick Macklem at The University of Guelph.
9
*
10
* Redistribution and use in source and binary forms, with or without
11
* modification, are permitted provided that the following conditions
12
* are met:
13
* 1. Redistributions of source code must retain the above copyright
14
* notice, this list of conditions and the following disclaimer.
15
* 2. Redistributions in binary form must reproduce the above copyright
16
* notice, this list of conditions and the following disclaimer in the
17
* documentation and/or other materials provided with the distribution.
18
* 3. Neither the name of the University nor the names of its contributors
19
* may be used to endorse or promote products derived from this software
20
* without specific prior written permission.
21
*
22
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32
* SUCH DAMAGE.
33
*/
34
35
#ifndef _NFS_NFSPROTO_H_
36
#define _NFS_NFSPROTO_H_
37
38
/*
39
* nfs definitions as per the Version 2 and 3 specs
40
*/
41
42
/*
43
* Constants as defined in the Sun NFS Version 2 and 3 specs.
44
* "NFS: Network File System Protocol Specification" RFC1094
45
* and in the "NFS: Network File System Version 3 Protocol
46
* Specification"
47
*/
48
49
#define NFS_PORT 2049
50
#define NFS_PROG 100003
51
#define NFS_VER2 2
52
#define NFS_VER3 3
53
#define NFS_VER4 4
54
55
#define NFS_V2MAXDATA 8192
56
#define NFS_MAXDGRAMDATA 16384
57
#define NFS_MAXDATA 32768
58
#define NFS_MAXPATHLEN 1024
59
#define NFS_MAXNAMLEN 255
60
#define NFS_MAXPKTHDR 404 /* XXXv4 this needs to be adjust for v4 */
61
#define NFS_MAXPACKET (NFS_MAXPKTHDR + NFS_MAXDATA)
62
#define NFS_MINPACKET 20
63
#define NFS_FABLKSIZE 512 /* Size in bytes of a block wrt fa_blocks */
64
65
/* Stat numbers for rpc returns (version 2, 3 and 4) */
66
#define NFS_OK 0
67
#define NFSERR_PERM 1
68
#define NFSERR_NOENT 2
69
#define NFSERR_IO 5
70
#define NFSERR_NXIO 6
71
#define NFSERR_ACCES 13
72
#define NFSERR_EXIST 17
73
#define NFSERR_XDEV 18 /* Version 3 only */
74
#define NFSERR_NODEV 19
75
#define NFSERR_NOTDIR 20
76
#define NFSERR_ISDIR 21
77
#define NFSERR_INVAL 22 /* Version 3 only */
78
#define NFSERR_FBIG 27
79
#define NFSERR_NOSPC 28
80
#define NFSERR_ROFS 30
81
#define NFSERR_MLINK 31 /* Version 3 only */
82
#define NFSERR_NAMETOL 63
83
#define NFSERR_NOTEMPTY 66
84
#define NFSERR_DQUOT 69
85
#define NFSERR_STALE 70
86
#define NFSERR_REMOTE 71 /* Version 3 only */
87
#define NFSERR_WFLUSH 99 /* Version 2 only */
88
#define NFSERR_BADHANDLE 10001 /* The rest Version 3, 4 only */
89
#define NFSERR_NOT_SYNC 10002
90
#define NFSERR_BAD_COOKIE 10003
91
#define NFSERR_NOTSUPP 10004
92
#define NFSERR_TOOSMALL 10005
93
#define NFSERR_SERVERFAULT 10006
94
#define NFSERR_BADTYPE 10007
95
#define NFSERR_JUKEBOX 10008
96
#define NFSERR_TRYLATER NFSERR_JUKEBOX
97
#define NFSERR_SAME 10009 /* The rest Version 4 only */
98
#define NFSERR_DENIED 10010
99
#define NFSERR_EXPIRED 10011
100
#define NFSERR_LOCKED 10012
101
#define NFSERR_GRACE 10013
102
#define NFSERR_FHEXPIRED 10014
103
#define NFSERR_SHARDE_DENIED 10015
104
#define NFSERR_WRONGSEC 10016
105
#define NFSERR_CLID_INUSE 10017
106
#define NFSERR_RESOURCE 10018
107
#define NFSERR_MOVED 10019
108
#define NFSERR_NOFILEHANDLE 10020
109
#define NFSERR_MINOR_VERS_MISMATCH 10021
110
#define NFSERR_STALE_CLIENTID 10022
111
#define NFSERR_STALE_STATEID 10023
112
#define NFSERR_OLD_STATEID 10024
113
#define NFSERR_BAD_STATEID 10025
114
#define NFSERR_BAD_SEQID 10026
115
#define NFSERR_NOT_SAME 10027
116
#define NFSERR_LOCK_RANGE 10028
117
#define NFSERR_SYMLINK 10029
118
#define NFSERR_READDIR_NOSPC 10030
119
#define NFSERR_LEASE_MOVED 10031
120
#define NFSERR_ATTRNOTSUPP 10032
121
#define NFSERR_NO_GRACE 10033
122
#define NFSERR_RECLAIM_BAD 10034
123
#define NFSERR_RECLAIM_CONFLICT 10035
124
#define NFSERR_BADXDR 10036
125
#define NFSERR_LOCKS_HELD 10037
126
#define NFSERR_OPENMODE 10038
127
#define NFSERR_BADOWNER 10039
128
#define NFSERR_BADCHAR 10040
129
#define NFSERR_BADNAME 10041
130
#define NFSERR_BAD_RANGE 10042
131
#define NFSERR_LOCK_NOTSUPP 10043
132
#define NFSERR_OP_ILLEGAL 10044
133
#define NFSERR_DEADLOCK 10045
134
#define NFSERR_FILE_OPEN 10046
135
#define NFSERR_STALEWRITEVERF 30001 /* Fake return for nfs_commit() */
136
137
#define NFSERR_RETVOID 0x20000000 /* Return void, not error */
138
#define NFSERR_AUTHERR 0x40000000 /* Mark an authentication error */
139
#define NFSERR_RETERR 0x80000000 /* Mark an error return for V3 */
140
141
/* Sizes in bytes of various nfs rpc components */
142
#define NFSX_UNSIGNED 4
143
144
/* specific to NFS Version 2 */
145
#define NFSX_V2FH 32
146
#define NFSX_V2FATTR 68
147
#define NFSX_V2SATTR 32
148
#define NFSX_V2COOKIE 4
149
#define NFSX_V2STATFS 20
150
151
/* specific to NFS Version 3 */
152
#define NFSX_V3FH (sizeof (fhandle_t)) /* size this server uses */
153
#define NFSX_V3FHMAX 64 /* max. allowed by protocol */
154
#define NFSX_V3FATTR 84
155
#define NFSX_V3SATTR 60 /* max. all fields filled in */
156
#define NFSX_V3SRVSATTR (sizeof (struct nfsv3_sattr))
157
#define NFSX_V3POSTOPATTR (NFSX_V3FATTR + NFSX_UNSIGNED)
158
#define NFSX_V3WCCDATA (NFSX_V3POSTOPATTR + 8 * NFSX_UNSIGNED)
159
#define NFSX_V3COOKIEVERF 8
160
#define NFSX_V3WRITEVERF 8
161
#define NFSX_V3CREATEVERF 8
162
#define NFSX_V3STATFS 52
163
#define NFSX_V3FSINFO 48
164
#define NFSX_V3PATHCONF 24
165
166
/* specific to NFS Version 4 */
167
#define NFSX_V4VERF 8
168
#define NFSX_V4FH 128
169
#define NFSX_V4STATEID 16
170
171
/* variants for both versions */
172
#define NFSX_FH(v3) ((v3) ? (NFSX_V3FHMAX + NFSX_UNSIGNED) : \
173
NFSX_V2FH)
174
#define NFSX_SRVFH(v3) ((v3) ? NFSX_V3FH : NFSX_V2FH)
175
#define NFSX_FATTR(v3) ((v3) ? NFSX_V3FATTR : NFSX_V2FATTR)
176
#define NFSX_PREOPATTR(v3) ((v3) ? (7 * NFSX_UNSIGNED) : 0)
177
#define NFSX_POSTOPATTR(v3) ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : 0)
178
#define NFSX_POSTOPORFATTR(v3) ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : \
179
NFSX_V2FATTR)
180
#define NFSX_WCCDATA(v3) ((v3) ? NFSX_V3WCCDATA : 0)
181
#define NFSX_WCCORFATTR(v3) ((v3) ? NFSX_V3WCCDATA : NFSX_V2FATTR)
182
#define NFSX_SATTR(v3) ((v3) ? NFSX_V3SATTR : NFSX_V2SATTR)
183
#define NFSX_COOKIEVERF(v3) ((v3) ? NFSX_V3COOKIEVERF : 0)
184
#define NFSX_WRITEVERF(v3) ((v3) ? NFSX_V3WRITEVERF : 0)
185
#define NFSX_READDIR(v3) ((v3) ? (5 * NFSX_UNSIGNED) : \
186
(2 * NFSX_UNSIGNED))
187
#define NFSX_STATFS(v3) ((v3) ? NFSX_V3STATFS : NFSX_V2STATFS)
188
189
/* nfs rpc procedure numbers (before version mapping) */
190
#define NFSPROC_NULL 0
191
#define NFSPROC_GETATTR 1
192
#define NFSPROC_SETATTR 2
193
#define NFSPROC_LOOKUP 3
194
#define NFSPROC_ACCESS 4
195
#define NFSPROC_READLINK 5
196
#define NFSPROC_READ 6
197
#define NFSPROC_WRITE 7
198
#define NFSPROC_CREATE 8
199
#define NFSPROC_MKDIR 9
200
#define NFSPROC_SYMLINK 10
201
#define NFSPROC_MKNOD 11
202
#define NFSPROC_REMOVE 12
203
#define NFSPROC_RMDIR 13
204
#define NFSPROC_RENAME 14
205
#define NFSPROC_LINK 15
206
#define NFSPROC_READDIR 16
207
#define NFSPROC_READDIRPLUS 17
208
#define NFSPROC_FSSTAT 18
209
#define NFSPROC_FSINFO 19
210
#define NFSPROC_PATHCONF 20
211
#define NFSPROC_COMMIT 21
212
#define NFSPROC_NOOP 22
213
#define NFS_NPROCS 23
214
215
/* Actual Version 2 procedure numbers */
216
#define NFSV2PROC_NULL 0
217
#define NFSV2PROC_GETATTR 1
218
#define NFSV2PROC_SETATTR 2
219
#define NFSV2PROC_NOOP 3
220
#define NFSV2PROC_ROOT NFSV2PROC_NOOP /* Obsolete */
221
#define NFSV2PROC_LOOKUP 4
222
#define NFSV2PROC_READLINK 5
223
#define NFSV2PROC_READ 6
224
#define NFSV2PROC_WRITECACHE NFSV2PROC_NOOP /* Obsolete */
225
#define NFSV2PROC_WRITE 8
226
#define NFSV2PROC_CREATE 9
227
#define NFSV2PROC_REMOVE 10
228
#define NFSV2PROC_RENAME 11
229
#define NFSV2PROC_LINK 12
230
#define NFSV2PROC_SYMLINK 13
231
#define NFSV2PROC_MKDIR 14
232
#define NFSV2PROC_RMDIR 15
233
#define NFSV2PROC_READDIR 16
234
#define NFSV2PROC_STATFS 17
235
236
/* Version 4 procedure numbers */
237
#define NFSV4PROC_NULL 0
238
#define NFSV4PROC_COMPOUND 1
239
240
/* Version 4 operation numbers */
241
#define NFSV4OP_ACCESS 3
242
#define NFSV4OP_CLOSE 4
243
#define NFSV4OP_COMMIT 5
244
#define NFSV4OP_CREATE 6
245
#define NFSV4OP_DELEGPURGE 7
246
#define NFSV4OP_DELEGRETURN 8
247
#define NFSV4OP_GETATTR 9
248
#define NFSV4OP_GETFH 10
249
#define NFSV4OP_LINK 11
250
#define NFSV4OP_LOCK 12
251
#define NFSV4OP_LOCKT 13
252
#define NFSV4OP_LOCKU 14
253
#define NFSV4OP_LOOKUP 15
254
#define NFSV4OP_LOOKUPP 16
255
#define NFSV4OP_NVERIFY 17
256
#define NFSV4OP_OPEN 18
257
#define NFSV4OP_OPENATTR 19
258
#define NFSV4OP_OPEN_CONFIRM 20
259
#define NFSV4OP_OPEN_DOWNGRADE 21
260
#define NFSV4OP_PUTFH 22
261
#define NFSV4OP_PUTPUBFH 23
262
#define NFSV4OP_PUTROOTFH 24
263
#define NFSV4OP_READ 25
264
#define NFSV4OP_READDIR 26
265
#define NFSV4OP_READLINK 27
266
#define NFSV4OP_REMOVE 28
267
#define NFSV4OP_RENAME 29
268
#define NFSV4OP_RENEW 30
269
#define NFSV4OP_RESTOREFH 31
270
#define NFSV4OP_SAVEFH 32
271
#define NFSV4OP_SECINFO 33
272
#define NFSV4OP_SETATTR 34
273
#define NFSV4OP_SETCLIENTID 35
274
#define NFSV4OP_SETCLIENTID_CONFIRM 36
275
#define NFSV4OP_VERIFY 37
276
#define NFSV4OP_WRITE 38
277
278
/*
279
* Constants used by the Version 3 protocol for various RPCs
280
*/
281
#define NFSV3SATTRTIME_DONTCHANGE 0
282
#define NFSV3SATTRTIME_TOSERVER 1
283
#define NFSV3SATTRTIME_TOCLIENT 2
284
285
#define NFSV3ACCESS_READ 0x01
286
#define NFSV3ACCESS_LOOKUP 0x02
287
#define NFSV3ACCESS_MODIFY 0x04
288
#define NFSV3ACCESS_EXTEND 0x08
289
#define NFSV3ACCESS_DELETE 0x10
290
#define NFSV3ACCESS_EXECUTE 0x20
291
292
#define NFSV3WRITE_UNSTABLE 0
293
#define NFSV3WRITE_DATASYNC 1
294
#define NFSV3WRITE_FILESYNC 2
295
296
#define NFSV3CREATE_UNCHECKED 0
297
#define NFSV3CREATE_GUARDED 1
298
#define NFSV3CREATE_EXCLUSIVE 2
299
300
#define NFSV3FSINFO_LINK 0x01
301
#define NFSV3FSINFO_SYMLINK 0x02
302
#define NFSV3FSINFO_HOMOGENEOUS 0x08
303
#define NFSV3FSINFO_CANSETTIME 0x10
304
305
/*
306
* Constants used by the Version 4 protocol for various RPCs
307
*/
308
309
#define NFSV4ACCESS_READ 0x01
310
#define NFSV4ACCESS_LOOKUP 0x02
311
#define NFSV4ACCESS_MODIFY 0x04
312
#define NFSV4ACCESS_EXTEND 0x08
313
#define NFSV4ACCESS_DELETE 0x10
314
#define NFSV4ACCESS_EXECUTE 0x20
315
316
#define NFSV4OPENRES_MLOCK 0x01
317
#define NFSV4OPENRES_CONFIRM 0x02
318
319
#define NFSV4OPENSHARE_ACCESS_READ 0x01
320
#define NFSV4OPENSHARE_ACCESS_WRITE 0x02
321
#define NFSV4OPENSHARE_ACCESS_BOTH 0x03
322
#define NFSV4OPENSHARE_DENY_NONE 0x00
323
#define NFSV4OPENSHARE_DENY_READ 0x01
324
#define NFSV4OPENSHARE_DENY_WRITE 0x02
325
#define NFSV4OPENSHARE_DENY_BOTH 0x03
326
327
/* File types */
328
typedef enum {
329
NFNON=0,
330
NFREG=1,
331
NFDIR=2,
332
NFBLK=3,
333
NFCHR=4,
334
NFLNK=5,
335
NFSOCK=6,
336
NFFIFO=7,
337
NFATTRDIR = 8,
338
NFNAMEDATTR = 9,
339
NFBAD = 10,
340
} nfstype;
341
342
/* NFSv4 claim type */
343
typedef enum {
344
NCLNULL = 0,
345
NCLPREV = 1,
346
NCLDELEGCUR = 2,
347
NCLDELEGPREV = 3,
348
} nfsv4cltype;
349
350
/* Other NFSv4 types */
351
typedef enum {
352
NSHUNSTABLE = 0,
353
NSHDATASYNC = 1,
354
NSHFILESYNC = 2,
355
} nfsv4stablehow;
356
357
typedef enum { OTNOCREATE = 0, OTCREATE = 1 } nfsv4opentype;
358
typedef enum { CMUNCHECKED = 0, CMGUARDED = 1, CMEXCLUSIVE = 2 } nfsv4createmode;
359
typedef enum { THSERVERTIME = 0, THCLIENTTIME = 1 } nfsv4timehow;
360
typedef enum { ODNONE = 0, ODREAD = 1, ODWRITE = 2 } nfsv4opendelegtype;
361
362
/* Structs for common parts of the rpc's */
363
364
/*
365
* File Handle (32 bytes for version 2), variable up to 64 for version 3.
366
* File Handles of up to NFS_SMALLFH in size are stored directly in the
367
* nfs node, whereas larger ones are malloc'd. (This never happens when
368
* NFS_SMALLFH is set to 64.)
369
* NFS_SMALLFH should be in the range of 32 to 64 and be divisible by 4.
370
*/
371
#ifndef NFS_SMALLFH
372
#define NFS_SMALLFH 128
373
#endif
374
union nfsfh {
375
fhandle_t fh_generic;
376
u_char fh_bytes[NFS_SMALLFH];
377
};
378
typedef union nfsfh nfsfh_t;
379
380
struct nfsv2_time {
381
u_int32_t nfsv2_sec;
382
u_int32_t nfsv2_usec;
383
};
384
typedef struct nfsv2_time nfstime2;
385
386
struct nfsv3_time {
387
u_int32_t nfsv3_sec;
388
u_int32_t nfsv3_nsec;
389
};
390
typedef struct nfsv3_time nfstime3;
391
392
/*
393
* Quads are defined as arrays of 2 longs to ensure dense packing for the
394
* protocol and to facilitate xdr conversion.
395
*/
396
struct nfs_uquad {
397
u_int32_t nfsuquad[2];
398
};
399
typedef struct nfs_uquad nfsuint64;
400
401
/*
402
* Used to convert between two u_longs and a u_quad_t.
403
*/
404
union nfs_quadconvert {
405
u_int32_t lval[2];
406
u_quad_t qval;
407
};
408
typedef union nfs_quadconvert nfsquad_t;
409
410
/*
411
* NFS Version 3 special file number.
412
*/
413
struct nfsv3_spec {
414
u_int32_t specdata1;
415
u_int32_t specdata2;
416
};
417
typedef struct nfsv3_spec nfsv3spec;
418
419
/*
420
* NFS Version 4 bitmap.
421
*/
422
struct nfsv4_bitmap {
423
uint32_t bmlen;
424
uint32_t *bmval;
425
};
426
typedef struct nfsv4_bitmap nfsv4bitmap;
427
428
struct nfsv4_changeinfo {
429
u_int ciatomic;
430
uint64_t cibefore;
431
uint64_t ciafter;
432
};
433
typedef struct nfsv4_changeinfo nfsv4changeinfo;
434
435
/*
436
* File attributes and setable attributes. These structures cover both
437
* NFS version 2 and the version 3 protocol. Note that the union is only
438
* used so that one pointer can refer to both variants. These structures
439
* go out on the wire and must be densely packed, so no quad data types
440
* are used. (all fields are longs or u_longs or structures of same)
441
* NB: You can't do sizeof(struct nfs_fattr), you must use the
442
* NFSX_FATTR(v3) macro.
443
*/
444
struct nfs_fattr {
445
u_int32_t fa_type;
446
u_int32_t fa_mode;
447
u_int32_t fa_nlink;
448
u_int32_t fa_uid;
449
u_int32_t fa_gid;
450
union {
451
struct {
452
u_int32_t nfsv2fa_size;
453
u_int32_t nfsv2fa_blocksize;
454
u_int32_t nfsv2fa_rdev;
455
u_int32_t nfsv2fa_blocks;
456
u_int32_t nfsv2fa_fsid;
457
u_int32_t nfsv2fa_fileid;
458
nfstime2 nfsv2fa_atime;
459
nfstime2 nfsv2fa_mtime;
460
nfstime2 nfsv2fa_ctime;
461
} fa_nfsv2;
462
struct {
463
nfsuint64 nfsv3fa_size;
464
nfsuint64 nfsv3fa_used;
465
nfsv3spec nfsv3fa_rdev;
466
nfsuint64 nfsv3fa_fsid;
467
nfsuint64 nfsv3fa_fileid;
468
nfstime3 nfsv3fa_atime;
469
nfstime3 nfsv3fa_mtime;
470
nfstime3 nfsv3fa_ctime;
471
} fa_nfsv3;
472
} fa_un;
473
};
474
475
/* and some ugly defines for accessing union components */
476
#define fa2_size fa_un.fa_nfsv2.nfsv2fa_size
477
#define fa2_blocksize fa_un.fa_nfsv2.nfsv2fa_blocksize
478
#define fa2_rdev fa_un.fa_nfsv2.nfsv2fa_rdev
479
#define fa2_blocks fa_un.fa_nfsv2.nfsv2fa_blocks
480
#define fa2_fsid fa_un.fa_nfsv2.nfsv2fa_fsid
481
#define fa2_fileid fa_un.fa_nfsv2.nfsv2fa_fileid
482
#define fa2_atime fa_un.fa_nfsv2.nfsv2fa_atime
483
#define fa2_mtime fa_un.fa_nfsv2.nfsv2fa_mtime
484
#define fa2_ctime fa_un.fa_nfsv2.nfsv2fa_ctime
485
#define fa3_size fa_un.fa_nfsv3.nfsv3fa_size
486
#define fa3_used fa_un.fa_nfsv3.nfsv3fa_used
487
#define fa3_rdev fa_un.fa_nfsv3.nfsv3fa_rdev
488
#define fa3_fsid fa_un.fa_nfsv3.nfsv3fa_fsid
489
#define fa3_fileid fa_un.fa_nfsv3.nfsv3fa_fileid
490
#define fa3_atime fa_un.fa_nfsv3.nfsv3fa_atime
491
#define fa3_mtime fa_un.fa_nfsv3.nfsv3fa_mtime
492
#define fa3_ctime fa_un.fa_nfsv3.nfsv3fa_ctime
493
494
struct nfsv4_fattr {
495
u_int fa4_valid;
496
nfstype fa4_type;
497
off_t fa4_size;
498
uint64_t fa4_fsid_major;
499
uint64_t fa4_fsid_minor;
500
uint64_t fa4_fileid;
501
mode_t fa4_mode;
502
nlink_t fa4_nlink;
503
uid_t fa4_uid;
504
gid_t fa4_gid;
505
uint32_t fa4_rdev_major;
506
uint32_t fa4_rdev_minor;
507
struct timespec fa4_atime;
508
struct timespec fa4_btime;
509
struct timespec fa4_ctime;
510
struct timespec fa4_mtime;
511
uint64_t fa4_maxread;
512
uint64_t fa4_maxwrite;
513
uint64_t fa4_ffree;
514
uint64_t fa4_ftotal;
515
uint32_t fa4_maxname;
516
uint64_t fa4_savail;
517
uint64_t fa4_sfree;
518
uint64_t fa4_stotal;
519
uint64_t fa4_changeid;
520
uint32_t fa4_lease_time;
521
uint64_t fa4_maxfilesize;
522
};
523
524
/* Flags for fa4_valid */
525
#define FA4V_SIZE 0x00000001
526
#define FA4V_FSID 0x00000002
527
#define FA4V_FILEID 0x00000004
528
#define FA4V_MODE 0x00000008
529
#define FA4V_NLINK 0x00000010
530
#define FA4V_UID 0x00000020
531
#define FA4V_GID 0x00000040
532
#define FA4V_RDEV 0x00000080
533
#define FA4V_ATIME 0x00000100
534
#define FA4V_BTIME 0x00000200
535
#define FA4V_CTIME 0x00000400
536
#define FA4V_MTIME 0x00000800
537
#define FA4V_MAXREAD 0x00001000
538
#define FA4V_MAXWRITE 0x00002000
539
#define FA4V_TYPE 0x00004000
540
#define FA4V_FFREE 0x00008000
541
#define FA4V_FTOTAL 0x00010000
542
#define FA4V_MAXNAME 0x00020000
543
#define FA4V_SAVAIL 0x00040000
544
#define FA4V_SFREE 0x00080000
545
#define FA4V_STOTAL 0x00100000
546
#define FA4V_CHANGEID 0x00200000
547
#define FA4V_LEASE_TIME 0x00400000
548
#define FA4V_MAXFILESIZE 0x00800000
549
#define FA4V_ACL 0x01000000
550
551
/* Offsets into bitmask */
552
#define FA4_SUPPORTED_ATTRS 0
553
#define FA4_TYPE 1
554
#define FA4_FH_EXPIRE_TYPE 2
555
#define FA4_CHANGE 3
556
#define FA4_SIZE 4
557
#define FA4_LINK_SUPPORT 5
558
#define FA4_SYMLINK_SUPPORT 6
559
#define FA4_NAMED_ATTR 7
560
#define FA4_FSID 8
561
#define FA4_UNIQUE_HANDLES 9
562
#define FA4_LEASE_TIME 10
563
#define FA4_RDATTR_ERROR 11
564
#define FA4_ACL 12
565
#define FA4_ACLSUPPORT 13
566
#define FA4_ARCHIVE 14
567
#define FA4_CANSETTIME 15
568
#define FA4_CASE_INSENSITIVE 16
569
#define FA4_CASE_PRESERVING 17
570
#define FA4_CHOWN_RESTRICTED 18
571
#define FA4_FILEHANDLE 19
572
#define FA4_FILEID 20
573
#define FA4_FILES_AVAIL 21
574
#define FA4_FILES_FREE 22
575
#define FA4_FILES_TOTAL 23
576
#define FA4_FS_LOCATIONS 24
577
#define FA4_HIDDEN 25
578
#define FA4_HOMOGENEOUS 26
579
#define FA4_MAXFILESIZE 27
580
#define FA4_MAXLINK 28
581
#define FA4_MAXNAME 29
582
#define FA4_MAXREAD 30
583
#define FA4_MAXWRITE 31
584
#define FA4_MIMETYPE 32
585
#define FA4_MODE 33
586
#define FA4_NO_TRUNC 34
587
#define FA4_NUMLINKS 35
588
#define FA4_OWNER 36
589
#define FA4_OWNER_GROUP 37
590
#define FA4_QUOTA_HARD 38
591
#define FA4_QUOTA_SOFT 39
592
#define FA4_QUOTA_USED 40
593
#define FA4_RAWDEV 41
594
#define FA4_SPACE_AVAIL 42
595
#define FA4_SPACE_FREE 43
596
#define FA4_SPACE_TOTAL 44
597
#define FA4_SPACE_USED 45
598
#define FA4_SYSTEM 46
599
#define FA4_TIME_ACCESS 47
600
#define FA4_TIME_ACCESS_SET 48
601
#define FA4_TIME_BACKUP 49
602
#define FA4_TIME_CREATE 50
603
#define FA4_TIME_DELTA 51
604
#define FA4_TIME_METADATA 52
605
#define FA4_TIME_MODIFY 53
606
#define FA4_TIME_MODIFY_SET 54
607
#define FA4_ATTR_MAX 55
608
609
/* Macros for v4 fattr manipulation */
610
#define FA4_SET(n, p) ((p)[(n)/32] |= (1 << ((n) % 32)))
611
#define FA4_CLR(n, p) ((p)[(n)/32] &= ~(1 << ((n) % 32)))
612
#define FA4_ISSET(n, p) ((p)[(n)/32] & (1 << ((n) % 32)))
613
#define FA4_ZERO(p) bzero((p), 8)
614
#define FA4_SKIP(p) ((p) += 2)
615
616
struct nfsv2_sattr {
617
u_int32_t sa_mode;
618
u_int32_t sa_uid;
619
u_int32_t sa_gid;
620
u_int32_t sa_size;
621
nfstime2 sa_atime;
622
nfstime2 sa_mtime;
623
};
624
625
/*
626
* NFS Version 3 sattr structure for the new node creation case.
627
*/
628
struct nfsv3_sattr {
629
u_int32_t sa_modetrue;
630
u_int32_t sa_mode;
631
u_int32_t sa_uidfalse;
632
u_int32_t sa_gidfalse;
633
u_int32_t sa_sizefalse;
634
u_int32_t sa_atimetype;
635
nfstime3 sa_atime;
636
u_int32_t sa_mtimetype;
637
nfstime3 sa_mtime;
638
};
639
640
struct nfs_statfs {
641
union {
642
struct {
643
u_int32_t nfsv2sf_tsize;
644
u_int32_t nfsv2sf_bsize;
645
u_int32_t nfsv2sf_blocks;
646
u_int32_t nfsv2sf_bfree;
647
u_int32_t nfsv2sf_bavail;
648
} sf_nfsv2;
649
struct {
650
nfsuint64 nfsv3sf_tbytes;
651
nfsuint64 nfsv3sf_fbytes;
652
nfsuint64 nfsv3sf_abytes;
653
nfsuint64 nfsv3sf_tfiles;
654
nfsuint64 nfsv3sf_ffiles;
655
nfsuint64 nfsv3sf_afiles;
656
u_int32_t nfsv3sf_invarsec;
657
} sf_nfsv3;
658
} sf_un;
659
};
660
661
#define sf_tsize sf_un.sf_nfsv2.nfsv2sf_tsize
662
#define sf_bsize sf_un.sf_nfsv2.nfsv2sf_bsize
663
#define sf_blocks sf_un.sf_nfsv2.nfsv2sf_blocks
664
#define sf_bfree sf_un.sf_nfsv2.nfsv2sf_bfree
665
#define sf_bavail sf_un.sf_nfsv2.nfsv2sf_bavail
666
#define sf_tbytes sf_un.sf_nfsv3.nfsv3sf_tbytes
667
#define sf_fbytes sf_un.sf_nfsv3.nfsv3sf_fbytes
668
#define sf_abytes sf_un.sf_nfsv3.nfsv3sf_abytes
669
#define sf_tfiles sf_un.sf_nfsv3.nfsv3sf_tfiles
670
#define sf_ffiles sf_un.sf_nfsv3.nfsv3sf_ffiles
671
#define sf_afiles sf_un.sf_nfsv3.nfsv3sf_afiles
672
#define sf_invarsec sf_un.sf_nfsv3.nfsv3sf_invarsec
673
674
struct nfsv3_fsinfo {
675
u_int32_t fs_rtmax;
676
u_int32_t fs_rtpref;
677
u_int32_t fs_rtmult;
678
u_int32_t fs_wtmax;
679
u_int32_t fs_wtpref;
680
u_int32_t fs_wtmult;
681
u_int32_t fs_dtpref;
682
nfsuint64 fs_maxfilesize;
683
nfstime3 fs_timedelta;
684
u_int32_t fs_properties;
685
};
686
687
struct nfsv3_pathconf {
688
u_int32_t pc_linkmax;
689
u_int32_t pc_namemax;
690
u_int32_t pc_notrunc;
691
u_int32_t pc_chownrestricted;
692
u_int32_t pc_caseinsensitive;
693
u_int32_t pc_casepreserving;
694
};
695
696
#endif
697
698