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