xref: /nrf52832-nimble/rt-thread/components/dfs/filesystems/nfs/nfs.x (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero %/* This file is copied from RFC1813
2*10465441SEvalZero % * Copyright 1995 Sun Micrososystems (I assume)
3*10465441SEvalZero % */
4*10465441SEvalZero 
5*10465441SEvalZero const NFS3_FHSIZE = 64;
6*10465441SEvalZero const NFS3_COOKIEVERFSIZE = 8;
7*10465441SEvalZero const NFS3_CREATEVERFSIZE = 8;
8*10465441SEvalZero const NFS3_WRITEVERFSIZE = 8;
9*10465441SEvalZero 
10*10465441SEvalZero const ACCESS3_READ = 0x0001;
11*10465441SEvalZero const ACCESS3_LOOKUP = 0x0002;
12*10465441SEvalZero const ACCESS3_MODIFY = 0x0004;
13*10465441SEvalZero const ACCESS3_EXTEND = 0x0008;
14*10465441SEvalZero const ACCESS3_DELETE = 0x0010;
15*10465441SEvalZero const ACCESS3_EXECUTE = 0x0020;
16*10465441SEvalZero 
17*10465441SEvalZero const FSF3_LINK = 0x0001;
18*10465441SEvalZero const FSF3_SYMLINK = 0x0002;
19*10465441SEvalZero const FSF3_HOMOGENEOUS = 0x0008;
20*10465441SEvalZero const FSF3_CANSETTIME = 0x0010;
21*10465441SEvalZero 
22*10465441SEvalZero typedef unsigned hyper uint64;
23*10465441SEvalZero typedef hyper int64;
24*10465441SEvalZero typedef unsigned long uint32;
25*10465441SEvalZero typedef long int32;
26*10465441SEvalZero typedef string filename3<>;
27*10465441SEvalZero typedef string nfspath3<>;
28*10465441SEvalZero typedef uint64 fileid3;
29*10465441SEvalZero typedef uint64 cookie3;
30*10465441SEvalZero typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE];
31*10465441SEvalZero typedef opaque createverf3[NFS3_CREATEVERFSIZE];
32*10465441SEvalZero typedef opaque writeverf3[NFS3_WRITEVERFSIZE];
33*10465441SEvalZero typedef uint32 uid3;
34*10465441SEvalZero typedef uint32 gid3;
35*10465441SEvalZero typedef uint64 size3;
36*10465441SEvalZero typedef uint64 offset3;
37*10465441SEvalZero typedef uint32 mode3;
38*10465441SEvalZero typedef uint32 count3;
39*10465441SEvalZero 
40*10465441SEvalZero enum nfsstat3 {
41*10465441SEvalZero 	NFS3_OK = 0,
42*10465441SEvalZero 	NFS3ERR_PERM = 1,
43*10465441SEvalZero 	NFS3ERR_NOENT = 2,
44*10465441SEvalZero 	NFS3ERR_IO = 5,
45*10465441SEvalZero 	NFS3ERR_NXIO = 6,
46*10465441SEvalZero 	NFS3ERR_ACCES = 13,
47*10465441SEvalZero 	NFS3ERR_EXIST = 17,
48*10465441SEvalZero 	NFS3ERR_XDEV = 18,
49*10465441SEvalZero 	NFS3ERR_NODEV = 19,
50*10465441SEvalZero 	NFS3ERR_NOTDIR = 20,
51*10465441SEvalZero 	NFS3ERR_ISDIR = 21,
52*10465441SEvalZero 	NFS3ERR_INVAL = 22,
53*10465441SEvalZero 	NFS3ERR_FBIG = 27,
54*10465441SEvalZero 	NFS3ERR_NOSPC = 28,
55*10465441SEvalZero 	NFS3ERR_ROFS = 30,
56*10465441SEvalZero 	NFS3ERR_MLINK = 31,
57*10465441SEvalZero 	NFS3ERR_NAMETOOLONG = 63,
58*10465441SEvalZero 	NFS3ERR_NOTEMPTY = 66,
59*10465441SEvalZero 	NFS3ERR_DQUOT = 69,
60*10465441SEvalZero 	NFS3ERR_STALE = 70,
61*10465441SEvalZero 	NFS3ERR_REMOTE = 71,
62*10465441SEvalZero 	NFS3ERR_BADHANDLE = 10001,
63*10465441SEvalZero 	NFS3ERR_NOT_SYNC = 10002,
64*10465441SEvalZero 	NFS3ERR_BAD_COOKIE = 10003,
65*10465441SEvalZero 	NFS3ERR_NOTSUPP = 10004,
66*10465441SEvalZero 	NFS3ERR_TOOSMALL = 10005,
67*10465441SEvalZero 	NFS3ERR_SERVERFAULT = 10006,
68*10465441SEvalZero 	NFS3ERR_BADTYPE = 10007,
69*10465441SEvalZero 	NFS3ERR_JUKEBOX = 10008
70*10465441SEvalZero };
71*10465441SEvalZero 
72*10465441SEvalZero enum ftype3 {
73*10465441SEvalZero 	NFS3REG = 1,
74*10465441SEvalZero 	NFS3DIR = 2,
75*10465441SEvalZero 	NFS3BLK = 3,
76*10465441SEvalZero 	NFS3CHR = 4,
77*10465441SEvalZero 	NFS3LNK = 5,
78*10465441SEvalZero 	NFS3SOCK = 6,
79*10465441SEvalZero 	NFS3FIFO = 7
80*10465441SEvalZero };
81*10465441SEvalZero enum stable_how {
82*10465441SEvalZero 	UNSTABLE = 0,
83*10465441SEvalZero 	DATA_SYNC = 1,
84*10465441SEvalZero 	FILE_SYNC = 2
85*10465441SEvalZero };
86*10465441SEvalZero 
87*10465441SEvalZero enum createmode3 {
88*10465441SEvalZero 	UNCHECKED = 0,
89*10465441SEvalZero 	GUARDED = 1,
90*10465441SEvalZero 	EXCLUSIVE = 2
91*10465441SEvalZero };
92*10465441SEvalZero 
93*10465441SEvalZero struct specdata3 {
94*10465441SEvalZero 	uint32 specdata1;
95*10465441SEvalZero 	uint32 specdata2;
96*10465441SEvalZero };
97*10465441SEvalZero 
98*10465441SEvalZero struct nfs_fh3 {
99*10465441SEvalZero 	opaque data<NFS3_FHSIZE>;
100*10465441SEvalZero };
101*10465441SEvalZero 
102*10465441SEvalZero struct nfstime3 {
103*10465441SEvalZero 	uint32 seconds;
104*10465441SEvalZero 	uint32 nseconds;
105*10465441SEvalZero };
106*10465441SEvalZero 
107*10465441SEvalZero struct fattr3 {
108*10465441SEvalZero 	ftype3 type;
109*10465441SEvalZero 	mode3 mode;
110*10465441SEvalZero 	uint32 nlink;
111*10465441SEvalZero 	uid3 uid;
112*10465441SEvalZero 	gid3 gid;
113*10465441SEvalZero 	size3 size;
114*10465441SEvalZero 	size3 used;
115*10465441SEvalZero 	specdata3 rdev;
116*10465441SEvalZero 	uint64 fsid;
117*10465441SEvalZero 	fileid3 fileid;
118*10465441SEvalZero 	nfstime3 atime;
119*10465441SEvalZero 	nfstime3 mtime;
120*10465441SEvalZero 	nfstime3 ctime;
121*10465441SEvalZero };
122*10465441SEvalZero 
123*10465441SEvalZero union post_op_attr switch (bool attributes_follow) {
124*10465441SEvalZero case TRUE:
125*10465441SEvalZero 	fattr3 attributes;
126*10465441SEvalZero case FALSE:
127*10465441SEvalZero 	void;
128*10465441SEvalZero };
129*10465441SEvalZero 
130*10465441SEvalZero struct wcc_attr {
131*10465441SEvalZero 	size3 size;
132*10465441SEvalZero 	nfstime3 mtime;
133*10465441SEvalZero 	nfstime3 ctime;
134*10465441SEvalZero };
135*10465441SEvalZero 
136*10465441SEvalZero union pre_op_attr switch (bool attributes_follow) {
137*10465441SEvalZero case TRUE:
138*10465441SEvalZero 	wcc_attr attributes;
139*10465441SEvalZero case FALSE:
140*10465441SEvalZero 	void;
141*10465441SEvalZero };
142*10465441SEvalZero 
143*10465441SEvalZero struct wcc_data {
144*10465441SEvalZero 	pre_op_attr before;
145*10465441SEvalZero 	post_op_attr after;
146*10465441SEvalZero };
147*10465441SEvalZero 
148*10465441SEvalZero union post_op_fh3 switch (bool handle_follows) {
149*10465441SEvalZero case TRUE:
150*10465441SEvalZero 	nfs_fh3 handle;
151*10465441SEvalZero case FALSE:
152*10465441SEvalZero 	void;
153*10465441SEvalZero };
154*10465441SEvalZero 
155*10465441SEvalZero enum time_how {
156*10465441SEvalZero 	DONT_CHANGE = 0,
157*10465441SEvalZero 	SET_TO_SERVER_TIME = 1,
158*10465441SEvalZero 	SET_TO_CLIENT_TIME = 2
159*10465441SEvalZero };
160*10465441SEvalZero 
161*10465441SEvalZero union set_mode3 switch (bool set_it) {
162*10465441SEvalZero case TRUE:
163*10465441SEvalZero 	mode3 mode;
164*10465441SEvalZero default:
165*10465441SEvalZero 	void;
166*10465441SEvalZero };
167*10465441SEvalZero 
168*10465441SEvalZero union set_uid3 switch (bool set_it) {
169*10465441SEvalZero case TRUE:
170*10465441SEvalZero 	uid3 uid;
171*10465441SEvalZero default:
172*10465441SEvalZero 	void;
173*10465441SEvalZero };
174*10465441SEvalZero 
175*10465441SEvalZero union set_gid3 switch (bool set_it) {
176*10465441SEvalZero case TRUE:
177*10465441SEvalZero 	gid3 gid;
178*10465441SEvalZero default:
179*10465441SEvalZero 	void;
180*10465441SEvalZero };
181*10465441SEvalZero 
182*10465441SEvalZero union set_size3 switch (bool set_it) {
183*10465441SEvalZero case TRUE:
184*10465441SEvalZero 	size3 size;
185*10465441SEvalZero default:
186*10465441SEvalZero 	void;
187*10465441SEvalZero };
188*10465441SEvalZero 
189*10465441SEvalZero union set_atime switch (time_how set_it) {
190*10465441SEvalZero case SET_TO_CLIENT_TIME:
191*10465441SEvalZero 	nfstime3 atime;
192*10465441SEvalZero default:
193*10465441SEvalZero 	void;
194*10465441SEvalZero };
195*10465441SEvalZero 
196*10465441SEvalZero union set_mtime switch (time_how set_it) {
197*10465441SEvalZero case SET_TO_CLIENT_TIME:
198*10465441SEvalZero 	nfstime3 mtime;
199*10465441SEvalZero default:
200*10465441SEvalZero 	void;
201*10465441SEvalZero };
202*10465441SEvalZero 
203*10465441SEvalZero struct sattr3 {
204*10465441SEvalZero 	set_mode3 mode;
205*10465441SEvalZero 	set_uid3 uid;
206*10465441SEvalZero 	set_gid3 gid;
207*10465441SEvalZero 	set_size3 size;
208*10465441SEvalZero 	set_atime atime;
209*10465441SEvalZero 	set_mtime mtime;
210*10465441SEvalZero };
211*10465441SEvalZero 
212*10465441SEvalZero struct diropargs3 {
213*10465441SEvalZero 	nfs_fh3 dir;
214*10465441SEvalZero 	filename3 name;
215*10465441SEvalZero };
216*10465441SEvalZero 
217*10465441SEvalZero 
218*10465441SEvalZero struct GETATTR3args {
219*10465441SEvalZero 	nfs_fh3 object;
220*10465441SEvalZero };
221*10465441SEvalZero 
222*10465441SEvalZero struct GETATTR3resok {
223*10465441SEvalZero 	fattr3 obj_attributes;
224*10465441SEvalZero };
225*10465441SEvalZero 
226*10465441SEvalZero union GETATTR3res switch (nfsstat3 status) {
227*10465441SEvalZero case NFS3_OK:
228*10465441SEvalZero 	GETATTR3resok resok;
229*10465441SEvalZero default:
230*10465441SEvalZero 	void;
231*10465441SEvalZero };
232*10465441SEvalZero 
233*10465441SEvalZero union sattrguard3 switch (bool check) {
234*10465441SEvalZero case TRUE:
235*10465441SEvalZero 	nfstime3 obj_ctime;
236*10465441SEvalZero case FALSE:
237*10465441SEvalZero 	void;
238*10465441SEvalZero };
239*10465441SEvalZero 
240*10465441SEvalZero struct SETATTR3args {
241*10465441SEvalZero 	nfs_fh3 object;
242*10465441SEvalZero 	sattr3 new_attributes;
243*10465441SEvalZero 	sattrguard3 guard;
244*10465441SEvalZero };
245*10465441SEvalZero 
246*10465441SEvalZero struct SETATTR3resok {
247*10465441SEvalZero 	wcc_data obj_wcc;
248*10465441SEvalZero };
249*10465441SEvalZero 
250*10465441SEvalZero struct SETATTR3resfail {
251*10465441SEvalZero 	wcc_data obj_wcc;
252*10465441SEvalZero };
253*10465441SEvalZero 
254*10465441SEvalZero union SETATTR3res switch (nfsstat3 status) {
255*10465441SEvalZero case NFS3_OK:
256*10465441SEvalZero 	SETATTR3resok resok;
257*10465441SEvalZero default:
258*10465441SEvalZero 	SETATTR3resfail resfail;
259*10465441SEvalZero };
260*10465441SEvalZero 
261*10465441SEvalZero struct LOOKUP3args {
262*10465441SEvalZero 	diropargs3 what;
263*10465441SEvalZero };
264*10465441SEvalZero 
265*10465441SEvalZero struct LOOKUP3resok {
266*10465441SEvalZero 	nfs_fh3 object;
267*10465441SEvalZero 	post_op_attr obj_attributes;
268*10465441SEvalZero 	post_op_attr dir_attributes;
269*10465441SEvalZero };
270*10465441SEvalZero 
271*10465441SEvalZero struct LOOKUP3resfail {
272*10465441SEvalZero 	post_op_attr dir_attributes;
273*10465441SEvalZero };
274*10465441SEvalZero 
275*10465441SEvalZero union LOOKUP3res switch (nfsstat3 status) {
276*10465441SEvalZero case NFS3_OK:
277*10465441SEvalZero 	LOOKUP3resok resok;
278*10465441SEvalZero default:
279*10465441SEvalZero 	LOOKUP3resfail resfail;
280*10465441SEvalZero };
281*10465441SEvalZero 
282*10465441SEvalZero struct ACCESS3args {
283*10465441SEvalZero 	nfs_fh3 object;
284*10465441SEvalZero 	uint32 access;
285*10465441SEvalZero };
286*10465441SEvalZero 
287*10465441SEvalZero struct ACCESS3resok {
288*10465441SEvalZero 	post_op_attr obj_attributes;
289*10465441SEvalZero 	uint32 access;
290*10465441SEvalZero };
291*10465441SEvalZero 
292*10465441SEvalZero struct ACCESS3resfail {
293*10465441SEvalZero 	post_op_attr obj_attributes;
294*10465441SEvalZero };
295*10465441SEvalZero 
296*10465441SEvalZero union ACCESS3res switch (nfsstat3 status) {
297*10465441SEvalZero case NFS3_OK:
298*10465441SEvalZero 	ACCESS3resok resok;
299*10465441SEvalZero default:
300*10465441SEvalZero 	ACCESS3resfail resfail;
301*10465441SEvalZero };
302*10465441SEvalZero 
303*10465441SEvalZero struct READLINK3args {
304*10465441SEvalZero 	nfs_fh3 symlink;
305*10465441SEvalZero };
306*10465441SEvalZero 
307*10465441SEvalZero struct READLINK3resok {
308*10465441SEvalZero 	post_op_attr symlink_attributes;
309*10465441SEvalZero 	nfspath3 data;
310*10465441SEvalZero };
311*10465441SEvalZero 
312*10465441SEvalZero struct READLINK3resfail {
313*10465441SEvalZero 	post_op_attr symlink_attributes;
314*10465441SEvalZero };
315*10465441SEvalZero 
316*10465441SEvalZero union READLINK3res switch (nfsstat3 status) {
317*10465441SEvalZero case NFS3_OK:
318*10465441SEvalZero 	READLINK3resok resok;
319*10465441SEvalZero default:
320*10465441SEvalZero 	READLINK3resfail resfail;
321*10465441SEvalZero };
322*10465441SEvalZero 
323*10465441SEvalZero struct READ3args {
324*10465441SEvalZero 	nfs_fh3 file;
325*10465441SEvalZero 	offset3 offset;
326*10465441SEvalZero 	count3 count;
327*10465441SEvalZero };
328*10465441SEvalZero 
329*10465441SEvalZero struct READ3resok {
330*10465441SEvalZero 	post_op_attr file_attributes;
331*10465441SEvalZero 	count3 count;
332*10465441SEvalZero 	bool eof;
333*10465441SEvalZero 	opaque data<>;
334*10465441SEvalZero };
335*10465441SEvalZero 
336*10465441SEvalZero struct READ3resfail {
337*10465441SEvalZero 	post_op_attr file_attributes;
338*10465441SEvalZero };
339*10465441SEvalZero 
340*10465441SEvalZero union READ3res switch (nfsstat3 status) {
341*10465441SEvalZero case NFS3_OK:
342*10465441SEvalZero 	READ3resok resok;
343*10465441SEvalZero default:
344*10465441SEvalZero 	READ3resfail resfail;
345*10465441SEvalZero };
346*10465441SEvalZero 
347*10465441SEvalZero struct WRITE3args {
348*10465441SEvalZero 	nfs_fh3	file;
349*10465441SEvalZero 	offset3	offset;
350*10465441SEvalZero 	count3 count;
351*10465441SEvalZero 	stable_how stable;
352*10465441SEvalZero 	opaque data<>;
353*10465441SEvalZero };
354*10465441SEvalZero 
355*10465441SEvalZero struct WRITE3resok {
356*10465441SEvalZero 	wcc_data file_wcc;
357*10465441SEvalZero 	count3 count;
358*10465441SEvalZero 	stable_how committed;
359*10465441SEvalZero 	writeverf3 verf;
360*10465441SEvalZero };
361*10465441SEvalZero 
362*10465441SEvalZero struct WRITE3resfail {
363*10465441SEvalZero 	wcc_data file_wcc;
364*10465441SEvalZero };
365*10465441SEvalZero 
366*10465441SEvalZero union WRITE3res switch (nfsstat3 status) {
367*10465441SEvalZero case NFS3_OK:
368*10465441SEvalZero 	WRITE3resok resok;
369*10465441SEvalZero default:
370*10465441SEvalZero 	WRITE3resfail resfail;
371*10465441SEvalZero };
372*10465441SEvalZero 
373*10465441SEvalZero 
374*10465441SEvalZero union createhow3 switch (createmode3 mode) {
375*10465441SEvalZero case UNCHECKED:
376*10465441SEvalZero case GUARDED:
377*10465441SEvalZero 	sattr3 obj_attributes;
378*10465441SEvalZero case EXCLUSIVE:
379*10465441SEvalZero 	createverf3 verf;
380*10465441SEvalZero };
381*10465441SEvalZero 
382*10465441SEvalZero struct CREATE3args {
383*10465441SEvalZero 	diropargs3 where;
384*10465441SEvalZero 	createhow3 how;
385*10465441SEvalZero };
386*10465441SEvalZero 
387*10465441SEvalZero struct CREATE3resok {
388*10465441SEvalZero 	post_op_fh3 obj;
389*10465441SEvalZero 	post_op_attr obj_attributes;
390*10465441SEvalZero 	wcc_data dir_wcc;
391*10465441SEvalZero };
392*10465441SEvalZero 
393*10465441SEvalZero struct CREATE3resfail {
394*10465441SEvalZero 	wcc_data dir_wcc;
395*10465441SEvalZero };
396*10465441SEvalZero 
397*10465441SEvalZero union CREATE3res switch (nfsstat3 status) {
398*10465441SEvalZero case NFS3_OK:
399*10465441SEvalZero 	CREATE3resok resok;
400*10465441SEvalZero default:
401*10465441SEvalZero 	CREATE3resfail resfail;
402*10465441SEvalZero };
403*10465441SEvalZero 
404*10465441SEvalZero struct MKDIR3args {
405*10465441SEvalZero 	diropargs3 where;
406*10465441SEvalZero 	sattr3 attributes;
407*10465441SEvalZero };
408*10465441SEvalZero 
409*10465441SEvalZero struct MKDIR3resok {
410*10465441SEvalZero 	post_op_fh3 obj;
411*10465441SEvalZero 	post_op_attr obj_attributes;
412*10465441SEvalZero 	wcc_data dir_wcc;
413*10465441SEvalZero };
414*10465441SEvalZero 
415*10465441SEvalZero struct MKDIR3resfail {
416*10465441SEvalZero 	wcc_data dir_wcc;
417*10465441SEvalZero };
418*10465441SEvalZero 
419*10465441SEvalZero union MKDIR3res switch (nfsstat3 status) {
420*10465441SEvalZero case NFS3_OK:
421*10465441SEvalZero 	MKDIR3resok resok;
422*10465441SEvalZero default:
423*10465441SEvalZero 	MKDIR3resfail resfail;
424*10465441SEvalZero };
425*10465441SEvalZero 
426*10465441SEvalZero struct symlinkdata3 {
427*10465441SEvalZero 	sattr3 symlink_attributes;
428*10465441SEvalZero 	nfspath3 symlink_data;
429*10465441SEvalZero };
430*10465441SEvalZero 
431*10465441SEvalZero struct SYMLINK3args {
432*10465441SEvalZero 	diropargs3 where;
433*10465441SEvalZero 	symlinkdata3 symlink;
434*10465441SEvalZero };
435*10465441SEvalZero 
436*10465441SEvalZero struct SYMLINK3resok {
437*10465441SEvalZero 	post_op_fh3 obj;
438*10465441SEvalZero 	post_op_attr obj_attributes;
439*10465441SEvalZero 	wcc_data dir_wcc;
440*10465441SEvalZero };
441*10465441SEvalZero 
442*10465441SEvalZero struct SYMLINK3resfail {
443*10465441SEvalZero 	wcc_data dir_wcc;
444*10465441SEvalZero };
445*10465441SEvalZero 
446*10465441SEvalZero union SYMLINK3res switch (nfsstat3 status) {
447*10465441SEvalZero case NFS3_OK:
448*10465441SEvalZero 	SYMLINK3resok resok;
449*10465441SEvalZero default:
450*10465441SEvalZero 	SYMLINK3resfail resfail;
451*10465441SEvalZero };
452*10465441SEvalZero 
453*10465441SEvalZero struct devicedata3 {
454*10465441SEvalZero 	sattr3 dev_attributes;
455*10465441SEvalZero 	specdata3 spec;
456*10465441SEvalZero };
457*10465441SEvalZero 
458*10465441SEvalZero union mknoddata3 switch (ftype3 type) {
459*10465441SEvalZero case NFS3CHR:
460*10465441SEvalZero case NFS3BLK:
461*10465441SEvalZero 	devicedata3 device;
462*10465441SEvalZero case NFS3SOCK:
463*10465441SEvalZero case NFS3FIFO:
464*10465441SEvalZero 	sattr3 pipe_attributes;
465*10465441SEvalZero default:
466*10465441SEvalZero 	void;
467*10465441SEvalZero };
468*10465441SEvalZero 
469*10465441SEvalZero struct MKNOD3args {
470*10465441SEvalZero 	diropargs3 where;
471*10465441SEvalZero 	mknoddata3 what;
472*10465441SEvalZero };
473*10465441SEvalZero 
474*10465441SEvalZero struct MKNOD3resok {
475*10465441SEvalZero 	post_op_fh3 obj;
476*10465441SEvalZero 	post_op_attr obj_attributes;
477*10465441SEvalZero 	wcc_data dir_wcc;
478*10465441SEvalZero };
479*10465441SEvalZero 
480*10465441SEvalZero struct MKNOD3resfail {
481*10465441SEvalZero 	wcc_data dir_wcc;
482*10465441SEvalZero };
483*10465441SEvalZero 
484*10465441SEvalZero union MKNOD3res switch (nfsstat3 status) {
485*10465441SEvalZero case NFS3_OK:
486*10465441SEvalZero 	MKNOD3resok resok;
487*10465441SEvalZero default:
488*10465441SEvalZero 	MKNOD3resfail resfail;
489*10465441SEvalZero };
490*10465441SEvalZero 
491*10465441SEvalZero struct REMOVE3args {
492*10465441SEvalZero 	diropargs3 object;
493*10465441SEvalZero };
494*10465441SEvalZero 
495*10465441SEvalZero struct REMOVE3resok {
496*10465441SEvalZero 	wcc_data dir_wcc;
497*10465441SEvalZero };
498*10465441SEvalZero 
499*10465441SEvalZero struct REMOVE3resfail {
500*10465441SEvalZero 	wcc_data dir_wcc;
501*10465441SEvalZero };
502*10465441SEvalZero 
503*10465441SEvalZero union REMOVE3res switch (nfsstat3 status) {
504*10465441SEvalZero case NFS3_OK:
505*10465441SEvalZero 	REMOVE3resok resok;
506*10465441SEvalZero default:
507*10465441SEvalZero 	REMOVE3resfail resfail;
508*10465441SEvalZero };
509*10465441SEvalZero 
510*10465441SEvalZero struct RMDIR3args {
511*10465441SEvalZero 	diropargs3 object;
512*10465441SEvalZero };
513*10465441SEvalZero 
514*10465441SEvalZero struct RMDIR3resok {
515*10465441SEvalZero 	wcc_data dir_wcc;
516*10465441SEvalZero };
517*10465441SEvalZero 
518*10465441SEvalZero struct RMDIR3resfail {
519*10465441SEvalZero 	wcc_data dir_wcc;
520*10465441SEvalZero };
521*10465441SEvalZero 
522*10465441SEvalZero union RMDIR3res switch (nfsstat3 status) {
523*10465441SEvalZero case NFS3_OK:
524*10465441SEvalZero 	RMDIR3resok resok;
525*10465441SEvalZero default:
526*10465441SEvalZero 	RMDIR3resfail resfail;
527*10465441SEvalZero };
528*10465441SEvalZero 
529*10465441SEvalZero struct RENAME3args {
530*10465441SEvalZero 	diropargs3 from;
531*10465441SEvalZero 	diropargs3 to;
532*10465441SEvalZero };
533*10465441SEvalZero 
534*10465441SEvalZero struct RENAME3resok {
535*10465441SEvalZero 	wcc_data fromdir_wcc;
536*10465441SEvalZero 	wcc_data todir_wcc;
537*10465441SEvalZero };
538*10465441SEvalZero 
539*10465441SEvalZero struct RENAME3resfail {
540*10465441SEvalZero 	wcc_data fromdir_wcc;
541*10465441SEvalZero 	wcc_data todir_wcc;
542*10465441SEvalZero };
543*10465441SEvalZero 
544*10465441SEvalZero union RENAME3res switch (nfsstat3 status) {
545*10465441SEvalZero case NFS3_OK:
546*10465441SEvalZero 	RENAME3resok resok;
547*10465441SEvalZero default:
548*10465441SEvalZero 	RENAME3resfail resfail;
549*10465441SEvalZero };
550*10465441SEvalZero struct LINK3args {
551*10465441SEvalZero 	nfs_fh3	file;
552*10465441SEvalZero 	diropargs3 link;
553*10465441SEvalZero };
554*10465441SEvalZero 
555*10465441SEvalZero struct LINK3resok {
556*10465441SEvalZero 	post_op_attr file_attributes;
557*10465441SEvalZero 	wcc_data linkdir_wcc;
558*10465441SEvalZero };
559*10465441SEvalZero 
560*10465441SEvalZero struct LINK3resfail {
561*10465441SEvalZero 	post_op_attr file_attributes;
562*10465441SEvalZero 	wcc_data linkdir_wcc;
563*10465441SEvalZero };
564*10465441SEvalZero 
565*10465441SEvalZero union LINK3res switch (nfsstat3 status) {
566*10465441SEvalZero case NFS3_OK:
567*10465441SEvalZero 	LINK3resok resok;
568*10465441SEvalZero default:
569*10465441SEvalZero 	LINK3resfail resfail;
570*10465441SEvalZero };
571*10465441SEvalZero 
572*10465441SEvalZero struct READDIR3args {
573*10465441SEvalZero 	nfs_fh3 dir;
574*10465441SEvalZero 	cookie3 cookie;
575*10465441SEvalZero 	cookieverf3 cookieverf;
576*10465441SEvalZero 	count3 count;
577*10465441SEvalZero };
578*10465441SEvalZero 
579*10465441SEvalZero struct entry3 {
580*10465441SEvalZero 	fileid3 fileid;
581*10465441SEvalZero 	filename3 name;
582*10465441SEvalZero 	cookie3 cookie;
583*10465441SEvalZero 	entry3 *nextentry;
584*10465441SEvalZero };
585*10465441SEvalZero 
586*10465441SEvalZero struct dirlist3 {
587*10465441SEvalZero 	entry3 *entries;
588*10465441SEvalZero 	bool eof;
589*10465441SEvalZero };
590*10465441SEvalZero 
591*10465441SEvalZero struct READDIR3resok {
592*10465441SEvalZero 	post_op_attr dir_attributes;
593*10465441SEvalZero 	cookieverf3 cookieverf;
594*10465441SEvalZero 	dirlist3 reply;
595*10465441SEvalZero };
596*10465441SEvalZero 
597*10465441SEvalZero struct READDIR3resfail {
598*10465441SEvalZero 	post_op_attr dir_attributes;
599*10465441SEvalZero };
600*10465441SEvalZero 
601*10465441SEvalZero union READDIR3res switch (nfsstat3 status) {
602*10465441SEvalZero case NFS3_OK:
603*10465441SEvalZero 	READDIR3resok resok;
604*10465441SEvalZero default:
605*10465441SEvalZero 	READDIR3resfail resfail;
606*10465441SEvalZero };
607*10465441SEvalZero 
608*10465441SEvalZero struct READDIRPLUS3args {
609*10465441SEvalZero 	nfs_fh3 dir;
610*10465441SEvalZero 	cookie3 cookie;
611*10465441SEvalZero 	cookieverf3 cookieverf;
612*10465441SEvalZero 	count3 dircount;
613*10465441SEvalZero 	count3 maxcount;
614*10465441SEvalZero };
615*10465441SEvalZero 
616*10465441SEvalZero struct entryplus3 {
617*10465441SEvalZero 	fileid3 fileid;
618*10465441SEvalZero 	filename3 name;
619*10465441SEvalZero 	cookie3 cookie;
620*10465441SEvalZero 	post_op_attr name_attributes;
621*10465441SEvalZero 	post_op_fh3 name_handle;
622*10465441SEvalZero 	entryplus3 *nextentry;
623*10465441SEvalZero };
624*10465441SEvalZero 
625*10465441SEvalZero struct dirlistplus3 {
626*10465441SEvalZero 	entryplus3 *entries;
627*10465441SEvalZero 	bool eof;
628*10465441SEvalZero };
629*10465441SEvalZero 
630*10465441SEvalZero struct READDIRPLUS3resok {
631*10465441SEvalZero 	post_op_attr dir_attributes;
632*10465441SEvalZero 	cookieverf3 cookieverf;
633*10465441SEvalZero 	dirlistplus3 reply;
634*10465441SEvalZero };
635*10465441SEvalZero 
636*10465441SEvalZero struct READDIRPLUS3resfail {
637*10465441SEvalZero 	post_op_attr dir_attributes;
638*10465441SEvalZero };
639*10465441SEvalZero 
640*10465441SEvalZero union READDIRPLUS3res switch (nfsstat3 status) {
641*10465441SEvalZero case NFS3_OK:
642*10465441SEvalZero 	READDIRPLUS3resok resok;
643*10465441SEvalZero default:
644*10465441SEvalZero 	READDIRPLUS3resfail resfail;
645*10465441SEvalZero };
646*10465441SEvalZero 
647*10465441SEvalZero struct FSSTAT3args {
648*10465441SEvalZero 	nfs_fh3 fsroot;
649*10465441SEvalZero };
650*10465441SEvalZero 
651*10465441SEvalZero struct FSSTAT3resok {
652*10465441SEvalZero 	post_op_attr obj_attributes;
653*10465441SEvalZero 	size3 tbytes;
654*10465441SEvalZero 	size3 fbytes;
655*10465441SEvalZero 	size3 abytes;
656*10465441SEvalZero 	size3 tfiles;
657*10465441SEvalZero 	size3 ffiles;
658*10465441SEvalZero 	size3 afiles;
659*10465441SEvalZero 	uint32 invarsec;
660*10465441SEvalZero };
661*10465441SEvalZero 
662*10465441SEvalZero struct FSSTAT3resfail {
663*10465441SEvalZero 	post_op_attr obj_attributes;
664*10465441SEvalZero };
665*10465441SEvalZero 
666*10465441SEvalZero union FSSTAT3res switch (nfsstat3 status) {
667*10465441SEvalZero case NFS3_OK:
668*10465441SEvalZero 	FSSTAT3resok resok;
669*10465441SEvalZero default:
670*10465441SEvalZero 	FSSTAT3resfail resfail;
671*10465441SEvalZero };
672*10465441SEvalZero 
673*10465441SEvalZero struct FSINFO3args {
674*10465441SEvalZero 	nfs_fh3 fsroot;
675*10465441SEvalZero };
676*10465441SEvalZero 
677*10465441SEvalZero struct FSINFO3resok {
678*10465441SEvalZero 	post_op_attr obj_attributes;
679*10465441SEvalZero 	uint32 rtmax;
680*10465441SEvalZero 	uint32 rtpref;
681*10465441SEvalZero 	uint32 rtmult;
682*10465441SEvalZero 	uint32 wtmax;
683*10465441SEvalZero 	uint32 wtpref;
684*10465441SEvalZero 	uint32 wtmult;
685*10465441SEvalZero 	uint32 dtpref;
686*10465441SEvalZero 	size3 maxfilesize;
687*10465441SEvalZero 	nfstime3 time_delta;
688*10465441SEvalZero 	uint32 properties;
689*10465441SEvalZero };
690*10465441SEvalZero 
691*10465441SEvalZero struct FSINFO3resfail {
692*10465441SEvalZero 	post_op_attr obj_attributes;
693*10465441SEvalZero };
694*10465441SEvalZero 
695*10465441SEvalZero union FSINFO3res switch (nfsstat3 status) {
696*10465441SEvalZero case NFS3_OK:
697*10465441SEvalZero 	FSINFO3resok resok;
698*10465441SEvalZero default:
699*10465441SEvalZero 	FSINFO3resfail resfail;
700*10465441SEvalZero };
701*10465441SEvalZero 
702*10465441SEvalZero struct PATHCONF3args {
703*10465441SEvalZero 	nfs_fh3 object;
704*10465441SEvalZero };
705*10465441SEvalZero 
706*10465441SEvalZero struct PATHCONF3resok {
707*10465441SEvalZero 	post_op_attr obj_attributes;
708*10465441SEvalZero 	uint32 linkmax;
709*10465441SEvalZero 	uint32 name_max;
710*10465441SEvalZero 	bool no_trunc;
711*10465441SEvalZero 	bool chown_restricted;
712*10465441SEvalZero 	bool case_insensitive;
713*10465441SEvalZero 	bool case_preserving;
714*10465441SEvalZero };
715*10465441SEvalZero 
716*10465441SEvalZero struct PATHCONF3resfail {
717*10465441SEvalZero 	post_op_attr obj_attributes;
718*10465441SEvalZero };
719*10465441SEvalZero 
720*10465441SEvalZero union PATHCONF3res switch (nfsstat3 status) {
721*10465441SEvalZero case NFS3_OK:
722*10465441SEvalZero 	PATHCONF3resok resok;
723*10465441SEvalZero default:
724*10465441SEvalZero 	PATHCONF3resfail resfail;
725*10465441SEvalZero };
726*10465441SEvalZero 
727*10465441SEvalZero struct COMMIT3args {
728*10465441SEvalZero 	nfs_fh3 file;
729*10465441SEvalZero 	offset3 offset;
730*10465441SEvalZero 	count3 count;
731*10465441SEvalZero };
732*10465441SEvalZero 
733*10465441SEvalZero struct COMMIT3resok {
734*10465441SEvalZero 	wcc_data file_wcc;
735*10465441SEvalZero 	writeverf3 verf;
736*10465441SEvalZero };
737*10465441SEvalZero 
738*10465441SEvalZero struct COMMIT3resfail {
739*10465441SEvalZero 	wcc_data file_wcc;
740*10465441SEvalZero };
741*10465441SEvalZero 
742*10465441SEvalZero union COMMIT3res switch (nfsstat3 status) {
743*10465441SEvalZero case NFS3_OK:
744*10465441SEvalZero 	COMMIT3resok resok;
745*10465441SEvalZero default:
746*10465441SEvalZero 	COMMIT3resfail resfail;
747*10465441SEvalZero };
748*10465441SEvalZero 
749*10465441SEvalZero program NFS_PROGRAM {
750*10465441SEvalZero 	version NFS_V3 {
751*10465441SEvalZero 		void NFSPROC3_NULL(void) = 0;
752*10465441SEvalZero 		GETATTR3res NFSPROC3_GETATTR(GETATTR3args) = 1;
753*10465441SEvalZero 		SETATTR3res NFSPROC3_SETATTR(SETATTR3args) = 2;
754*10465441SEvalZero 		LOOKUP3res NFSPROC3_LOOKUP(LOOKUP3args) = 3;
755*10465441SEvalZero 		ACCESS3res NFSPROC3_ACCESS(ACCESS3args) = 4;
756*10465441SEvalZero 		READLINK3res NFSPROC3_READLINK(READLINK3args) = 5;
757*10465441SEvalZero 		READ3res NFSPROC3_READ(READ3args) = 6;
758*10465441SEvalZero 		WRITE3res NFSPROC3_WRITE(WRITE3args) = 7;
759*10465441SEvalZero 		CREATE3res NFSPROC3_CREATE(CREATE3args) = 8;
760*10465441SEvalZero 		MKDIR3res NFSPROC3_MKDIR(MKDIR3args) = 9;
761*10465441SEvalZero 		SYMLINK3res NFSPROC3_SYMLINK(SYMLINK3args) = 10;
762*10465441SEvalZero 		MKNOD3res NFSPROC3_MKNOD(MKNOD3args) = 11;
763*10465441SEvalZero 		REMOVE3res NFSPROC3_REMOVE(REMOVE3args) = 12;
764*10465441SEvalZero 		RMDIR3res NFSPROC3_RMDIR(RMDIR3args) = 13;
765*10465441SEvalZero 		RENAME3res NFSPROC3_RENAME(RENAME3args) = 14;
766*10465441SEvalZero 		LINK3res NFSPROC3_LINK(LINK3args) = 15;
767*10465441SEvalZero 		READDIR3res NFSPROC3_READDIR(READDIR3args) = 16;
768*10465441SEvalZero 		READDIRPLUS3res NFSPROC3_READDIRPLUS(READDIRPLUS3args) = 17;
769*10465441SEvalZero 		FSSTAT3res NFSPROC3_FSSTAT(FSSTAT3args) = 18;
770*10465441SEvalZero 		FSINFO3res NFSPROC3_FSINFO(FSINFO3args) = 19;
771*10465441SEvalZero 		PATHCONF3res NFSPROC3_PATHCONF(PATHCONF3args) = 20;
772*10465441SEvalZero 		COMMIT3res NFSPROC3_COMMIT(COMMIT3args) = 21;
773*10465441SEvalZero 	} = 3;
774*10465441SEvalZero } = 100003;
775