Imported Upstream version 1.2.0
[deb_libnfs.git] / nfs / nfs.x
CommitLineData
dabf4152
AM
1/* NFS part from rfc 1813, NFSACL part is from wireshark sources */
2
3const NFS3_FHSIZE = 64; /* Maximum bytes in a V3 file handle */
4const NFS3_WRITEVERFSIZE = 8;
5const NFS3_CREATEVERFSIZE = 8;
6const NFS3_COOKIEVERFSIZE = 8;
7
8typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE];
9
10
11/*unsigned hyper can be overridden by giving rpcgen -DU_INT64_PLATTFORM_TYPE="foo" - for plattforms
12 where rpcgen doesn't know anything about hyper
13 default to unsigned hyper as of rfc 1813 */
14#ifndef U_INT64_PLATTFORM_TYPE
15#define U_INT64_PLATTFORM_TYPE unsigned hyper
16#endif/*U_INT64_PLATTFORM_TYPE*/
17
18typedef U_INT64_PLATTFORM_TYPE uint64;
19typedef uint64 cookie3;
20
21struct nfs_fh3 {
22 opaque data<NFS3_FHSIZE>;
23};
24
25typedef string filename3<>;
26
27struct diropargs3 {
28 nfs_fh3 dir;
29 filename3 name;
30};
31
32enum ftype3 {
33 NF3REG = 1,
34 NF3DIR = 2,
35 NF3BLK = 3,
36 NF3CHR = 4,
37 NF3LNK = 5,
38 NF3SOCK = 6,
39 NF3FIFO = 7
40};
41
42typedef unsigned long uint32;
43
44typedef long int32;
45
46typedef uint32 mode3;
47
48typedef uint32 uid3;
49
50typedef uint32 gid3;
51
52typedef uint64 size3;
53
54typedef uint64 fileid3;
55
56struct specdata3 {
57 uint32 specdata1;
58 uint32 specdata2;
59};
60
61struct nfstime3 {
62 uint32 seconds;
63 uint32 nseconds;
64};
65
66struct fattr3 {
67 ftype3 type;
68 mode3 mode;
69 uint32 nlink;
70 uid3 uid;
71 gid3 gid;
72 size3 size;
73 size3 used;
74 specdata3 rdev;
75 uint64 fsid;
76 fileid3 fileid;
77 nfstime3 atime;
78 nfstime3 mtime;
79 nfstime3 ctime;
80};
81
82union post_op_attr switch (bool attributes_follow) {
83 case TRUE:
84 fattr3 attributes;
85 case FALSE:
86 void;
87};
88
89
90enum nfsstat3 {
91 NFS3_OK = 0,
92 NFS3ERR_PERM = 1,
93 NFS3ERR_NOENT = 2,
94 NFS3ERR_IO = 5,
95 NFS3ERR_NXIO = 6,
96 NFS3ERR_ACCES = 13,
97 NFS3ERR_EXIST = 17,
98 NFS3ERR_XDEV = 18,
99 NFS3ERR_NODEV = 19,
100 NFS3ERR_NOTDIR = 20,
101 NFS3ERR_ISDIR = 21,
102 NFS3ERR_INVAL = 22,
103 NFS3ERR_FBIG = 27,
104 NFS3ERR_NOSPC = 28,
105 NFS3ERR_ROFS = 30,
106 NFS3ERR_MLINK = 31,
107 NFS3ERR_NAMETOOLONG = 63,
108 NFS3ERR_NOTEMPTY = 66,
109 NFS3ERR_DQUOT = 69,
110 NFS3ERR_STALE = 70,
111 NFS3ERR_REMOTE = 71,
112 NFS3ERR_BADHANDLE = 10001,
113 NFS3ERR_NOT_SYNC = 10002,
114 NFS3ERR_BAD_COOKIE = 10003,
115 NFS3ERR_NOTSUPP = 10004,
116 NFS3ERR_TOOSMALL = 10005,
117 NFS3ERR_SERVERFAULT = 10006,
118 NFS3ERR_BADTYPE = 10007,
119 NFS3ERR_JUKEBOX = 10008
120};
121
122enum stable_how {
123 UNSTABLE = 0,
124 DATA_SYNC = 1,
125 FILE_SYNC = 2
126};
127
128typedef uint64 offset3;
129
130typedef uint32 count3;
131
132struct wcc_attr {
133 size3 size;
134 nfstime3 mtime;
135 nfstime3 ctime;
136};
137
138union pre_op_attr switch (bool attributes_follow) {
139 case TRUE:
140 wcc_attr attributes;
141 case FALSE:
142 void;
143};
144
145struct wcc_data {
146 pre_op_attr before;
147 post_op_attr after;
148};
149
150struct WRITE3args {
151 nfs_fh3 file;
152 offset3 offset;
153 count3 count;
154 stable_how stable;
155 opaque data<>;
156};
157
158typedef opaque writeverf3[NFS3_WRITEVERFSIZE];
159
160struct WRITE3resok {
161 wcc_data file_wcc;
162 count3 count;
163 stable_how committed;
164 writeverf3 verf;
165};
166
167struct WRITE3resfail {
168 wcc_data file_wcc;
169};
170
171union WRITE3res switch (nfsstat3 status) {
172 case NFS3_OK:
173 WRITE3resok resok;
174 default:
175 WRITE3resfail resfail;
176};
177
178struct LOOKUP3args {
179 diropargs3 what;
180};
181
182struct LOOKUP3resok {
183 nfs_fh3 object;
184 post_op_attr obj_attributes;
185 post_op_attr dir_attributes;
186};
187
188struct LOOKUP3resfail {
189 post_op_attr dir_attributes;
190};
191
192
193
194union LOOKUP3res switch (nfsstat3 status) {
195 case NFS3_OK:
196 LOOKUP3resok resok;
197 default:
198 LOOKUP3resfail resfail;
199};
200
201struct COMMIT3args {
202 nfs_fh3 file;
203 offset3 offset;
204 count3 count;
205};
206
207struct COMMIT3resok {
208 wcc_data file_wcc;
209 writeverf3 verf;
210};
211
212struct COMMIT3resfail {
213 wcc_data file_wcc;
214};
215
216union COMMIT3res switch (nfsstat3 status) {
217 case NFS3_OK:
218 COMMIT3resok resok;
219 default:
220 COMMIT3resfail resfail;
221};
222
223const ACCESS3_READ = 0x0001;
224const ACCESS3_LOOKUP = 0x0002;
225const ACCESS3_MODIFY = 0x0004;
226const ACCESS3_EXTEND = 0x0008;
227const ACCESS3_DELETE = 0x0010;
228const ACCESS3_EXECUTE = 0x0020;
229
230struct ACCESS3args {
231 nfs_fh3 object;
232 uint32 access;
233};
234
235struct ACCESS3resok {
236 post_op_attr obj_attributes;
237 uint32 access;
238};
239
240struct ACCESS3resfail {
241 post_op_attr obj_attributes;
242};
243
244union ACCESS3res switch (nfsstat3 status) {
245case NFS3_OK:
246 ACCESS3resok resok;
247default:
248 ACCESS3resfail resfail;
249};
250
251struct GETATTR3args {
252 nfs_fh3 object;
253};
254
255struct GETATTR3resok {
256 fattr3 obj_attributes;
257};
258
259union GETATTR3res switch (nfsstat3 status) {
260 case NFS3_OK:
261 GETATTR3resok resok;
262 default:
263 void;
264};
265
266
267
268enum time_how {
269 DONT_CHANGE = 0,
270 SET_TO_SERVER_TIME = 1,
271 SET_TO_CLIENT_TIME = 2
272};
273
274union set_mode3 switch (bool set_it) {
275 case TRUE:
276 mode3 mode;
277 default:
278 void;
279};
280
281union set_uid3 switch (bool set_it) {
282 case TRUE:
283 uid3 uid;
284 default:
285 void;
286};
287
288union set_gid3 switch (bool set_it) {
289 case TRUE:
290 gid3 gid;
291 default:
292 void;
293};
294
295union set_size3 switch (bool set_it) {
296 case TRUE:
297 size3 size;
298 default:
299 void;
300};
301
302union set_atime switch (time_how set_it) {
303 case SET_TO_CLIENT_TIME:
304 nfstime3 atime;
305 default:
306 void;
307};
308
309union set_mtime switch (time_how set_it) {
310 case SET_TO_CLIENT_TIME:
311 nfstime3 mtime;
312 default:
313 void;
314};
315
316struct sattr3 {
317 set_mode3 mode;
318 set_uid3 uid;
319 set_gid3 gid;
320 set_size3 size;
321 set_atime atime;
322 set_mtime mtime;
323};
324
325enum createmode3 {
326 UNCHECKED = 0,
327 GUARDED = 1,
328 EXCLUSIVE = 2
329};
330
331
332typedef opaque createverf3[NFS3_CREATEVERFSIZE];
333
334union createhow3 switch (createmode3 mode) {
335 case UNCHECKED:
dabf4152 336 sattr3 obj_attributes;
5670ec6e
AM
337 case GUARDED:
338 sattr3 g_obj_attributes;
dabf4152
AM
339 case EXCLUSIVE:
340 createverf3 verf;
341};
342
343struct CREATE3args {
344 diropargs3 where;
345 createhow3 how;
346};
347
348union post_op_fh3 switch (bool handle_follows) {
349 case TRUE:
350 nfs_fh3 handle;
351 case FALSE:
352 void;
353};
354
355struct CREATE3resok {
356 post_op_fh3 obj;
357 post_op_attr obj_attributes;
358 wcc_data dir_wcc;
359};
360
361struct CREATE3resfail {
362 wcc_data dir_wcc;
363 };
364
365union CREATE3res switch (nfsstat3 status) {
366 case NFS3_OK:
367 CREATE3resok resok;
368 default:
369 CREATE3resfail resfail;
370};
371
372struct REMOVE3args {
373 diropargs3 object;
374};
375
376struct REMOVE3resok {
377 wcc_data dir_wcc;
378};
379
380struct REMOVE3resfail {
381 wcc_data dir_wcc;
382};
383
384union REMOVE3res switch (nfsstat3 status) {
385 case NFS3_OK:
386 REMOVE3resok resok;
387 default:
388 REMOVE3resfail resfail;
389};
390
391struct READ3args {
392 nfs_fh3 file;
393 offset3 offset;
394 count3 count;
395};
396
397struct READ3resok {
398 post_op_attr file_attributes;
399 count3 count;
400 bool eof;
401 opaque data<>;
402};
403
404struct READ3resfail {
405 post_op_attr file_attributes;
406};
407
408union READ3res switch (nfsstat3 status) {
409 case NFS3_OK:
410 READ3resok resok;
411 default:
412 READ3resfail resfail;
413};
414
415
416const FSF3_LINK = 0x0001;
417const FSF3_SYMLINK = 0x0002;
418const FSF3_HOMOGENEOUS = 0x0008;
419const FSF3_CANSETTIME = 0x0010;
420
421struct FSINFO3args {
422 nfs_fh3 fsroot;
423};
424
425struct FSINFO3resok {
426 post_op_attr obj_attributes;
427 uint32 rtmax;
428 uint32 rtpref;
429 uint32 rtmult;
430 uint32 wtmax;
431 uint32 wtpref;
432 uint32 wtmult;
433 uint32 dtpref;
434 size3 maxfilesize;
435 nfstime3 time_delta;
436 uint32 properties;
437};
438
439struct FSINFO3resfail {
440 post_op_attr obj_attributes;
441};
442
443union FSINFO3res switch (nfsstat3 status) {
444 case NFS3_OK:
445 FSINFO3resok resok;
446 default:
447 FSINFO3resfail resfail;
448};
449
450
451struct FSSTAT3args {
452 nfs_fh3 fsroot;
453};
454
455struct FSSTAT3resok {
456 post_op_attr obj_attributes;
457 size3 tbytes;
458 size3 fbytes;
459 size3 abytes;
460 size3 tfiles;
461 size3 ffiles;
462 size3 afiles;
463 uint32 invarsec;
464};
465
466struct FSSTAT3resfail {
467 post_op_attr obj_attributes;
468};
469
470union FSSTAT3res switch (nfsstat3 status) {
471 case NFS3_OK:
472 FSSTAT3resok resok;
473 default:
474 FSSTAT3resfail resfail;
475};
476
477struct PATHCONF3args {
478 nfs_fh3 object;
479};
480
481struct PATHCONF3resok {
482 post_op_attr obj_attributes;
483 uint32 linkmax;
484 uint32 name_max;
485 bool no_trunc;
486 bool chown_restricted;
487 bool case_insensitive;
488 bool case_preserving;
489};
490
491struct PATHCONF3resfail {
492 post_op_attr obj_attributes;
493};
494
495union PATHCONF3res switch (nfsstat3 status) {
496 case NFS3_OK:
497 PATHCONF3resok resok;
498 default:
499 PATHCONF3resfail resfail;
500};
501
502typedef string nfspath3<>;
503
504struct symlinkdata3 {
505 sattr3 symlink_attributes;
506 nfspath3 symlink_data;
507};
508
509struct SYMLINK3args {
510 diropargs3 where;
511 symlinkdata3 symlink;
512};
513
514struct SYMLINK3resok {
515 post_op_fh3 obj;
516 post_op_attr obj_attributes;
517 wcc_data dir_wcc;
518};
519
520struct SYMLINK3resfail {
521 wcc_data dir_wcc;
522};
523
524union SYMLINK3res switch (nfsstat3 status) {
525 case NFS3_OK:
526 SYMLINK3resok resok;
527 default:
528 SYMLINK3resfail resfail;
529};
530
531
532struct READLINK3args {
533 nfs_fh3 symlink;
534};
535
536struct READLINK3resok {
537 post_op_attr symlink_attributes;
538 nfspath3 data;
539};
540
541struct READLINK3resfail {
542 post_op_attr symlink_attributes;
543};
544
545union READLINK3res switch (nfsstat3 status) {
546 case NFS3_OK:
547 READLINK3resok resok;
548 default:
549 READLINK3resfail resfail;
550};
551
552
553struct devicedata3 {
554 sattr3 dev_attributes;
555 specdata3 spec;
556};
557
558union mknoddata3 switch (ftype3 type) {
559 case NF3CHR:
5670ec6e 560 devicedata3 chr_device;
dabf4152 561 case NF3BLK:
5670ec6e 562 devicedata3 blk_device;
dabf4152 563 case NF3SOCK:
5670ec6e 564 sattr3 sock_attributes;
dabf4152
AM
565 case NF3FIFO:
566 sattr3 pipe_attributes;
567 default:
568 void;
569};
570
571struct MKNOD3args {
572 diropargs3 where;
573 mknoddata3 what;
574};
575
576struct MKNOD3resok {
577 post_op_fh3 obj;
578 post_op_attr obj_attributes;
579 wcc_data dir_wcc;
580};
581
582struct MKNOD3resfail {
583 wcc_data dir_wcc;
584};
585
586union MKNOD3res switch (nfsstat3 status) {
587 case NFS3_OK:
588 MKNOD3resok resok;
589 default:
590 MKNOD3resfail resfail;
591};
592
593
594struct MKDIR3args {
595 diropargs3 where;
596 sattr3 attributes;
597};
598
599struct MKDIR3resok {
600 post_op_fh3 obj;
601 post_op_attr obj_attributes;
602 wcc_data dir_wcc;
603};
604
605struct MKDIR3resfail {
606 wcc_data dir_wcc;
607};
608
609union MKDIR3res switch (nfsstat3 status) {
610 case NFS3_OK:
611 MKDIR3resok resok;
612 default:
613 MKDIR3resfail resfail;
614};
615
616struct RMDIR3args {
617 diropargs3 object;
618};
619
620struct RMDIR3resok {
621 wcc_data dir_wcc;
622};
623
624struct RMDIR3resfail {
625 wcc_data dir_wcc;
626};
627
628union RMDIR3res switch (nfsstat3 status) {
629 case NFS3_OK:
630 RMDIR3resok resok;
631 default:
632 RMDIR3resfail resfail;
633};
634
635struct RENAME3args {
636 diropargs3 from;
637 diropargs3 to;
638};
639
640struct RENAME3resok {
641 wcc_data fromdir_wcc;
642 wcc_data todir_wcc;
643};
644
645struct RENAME3resfail {
646 wcc_data fromdir_wcc;
647 wcc_data todir_wcc;
648};
649
650union RENAME3res switch (nfsstat3 status) {
651 case NFS3_OK:
652 RENAME3resok resok;
653 default:
654 RENAME3resfail resfail;
655};
656
657struct READDIRPLUS3args {
658 nfs_fh3 dir;
659 cookie3 cookie;
660 cookieverf3 cookieverf;
661 count3 dircount;
662 count3 maxcount;
663};
664
665struct entryplus3 {
666 fileid3 fileid;
667 filename3 name;
668 cookie3 cookie;
669 post_op_attr name_attributes;
670 post_op_fh3 name_handle;
671 entryplus3 *nextentry;
672};
673
674struct dirlistplus3 {
675 entryplus3 *entries;
676 bool eof;
677};
678
679struct READDIRPLUS3resok {
680 post_op_attr dir_attributes;
681 cookieverf3 cookieverf;
682 dirlistplus3 reply;
683};
684
685
686struct READDIRPLUS3resfail {
687 post_op_attr dir_attributes;
688};
689
690union READDIRPLUS3res switch (nfsstat3 status) {
691 case NFS3_OK:
692 READDIRPLUS3resok resok;
693 default:
694 READDIRPLUS3resfail resfail;
695};
696
697struct READDIR3args {
698 nfs_fh3 dir;
699 cookie3 cookie;
700 cookieverf3 cookieverf;
701 count3 count;
702};
703
704
705struct entry3 {
706 fileid3 fileid;
707 filename3 name;
708 cookie3 cookie;
709 entry3 *nextentry;
710};
711
712struct dirlist3 {
713 entry3 *entries;
714 bool eof;
715};
716
717struct READDIR3resok {
718 post_op_attr dir_attributes;
719 cookieverf3 cookieverf;
720 dirlist3 reply;
721};
722
723struct READDIR3resfail {
724 post_op_attr dir_attributes;
725};
726
727union READDIR3res switch (nfsstat3 status) {
728 case NFS3_OK:
729 READDIR3resok resok;
730 default:
731 READDIR3resfail resfail;
732};
733
734struct LINK3args {
735 nfs_fh3 file;
736 diropargs3 link;
737};
738
739struct LINK3resok {
740 post_op_attr file_attributes;
741 wcc_data linkdir_wcc;
742};
743
744struct LINK3resfail {
745 post_op_attr file_attributes;
746 wcc_data linkdir_wcc;
747};
748
749union LINK3res switch (nfsstat3 status) {
750 case NFS3_OK:
751 LINK3resok resok;
752 default:
753 LINK3resfail resfail;
754};
755
756union sattrguard3 switch (bool check) {
757 case TRUE:
758 nfstime3 obj_ctime;
759 case FALSE:
760 void;
761};
762
763struct SETATTR3args {
764 nfs_fh3 object;
765 sattr3 new_attributes;
766 sattrguard3 guard;
767};
768
769struct SETATTR3resok {
770 wcc_data obj_wcc;
771};
772
773struct SETATTR3resfail {
774 wcc_data obj_wcc;
775};
776
777union SETATTR3res switch (nfsstat3 status) {
778 case NFS3_OK:
779 SETATTR3resok resok;
780 default:
781 SETATTR3resfail resfail;
782};
783
784program NFS_PROGRAM {
785 version NFS_V3 {
786 void
787 NFS3_NULL(void) = 0;
788
789 GETATTR3res
790 NFS3_GETATTR(GETATTR3args) = 1;
791
792 SETATTR3res
793 NFS3_SETATTR(SETATTR3args) = 2;
794
795 LOOKUP3res
796 NFS3_LOOKUP(LOOKUP3args) = 3;
797
798 ACCESS3res
799 NFS3_ACCESS(ACCESS3args) = 4;
800
801 READLINK3res
802 NFS3_READLINK(READLINK3args) = 5;
803
804 READ3res
805 NFS3_READ(READ3args) = 6;
806
807 WRITE3res
808 NFS3_WRITE(WRITE3args) = 7;
809
810 CREATE3res
811 NFS3_CREATE(CREATE3args) = 8;
812
813 MKDIR3res
814 NFS3_MKDIR(MKDIR3args) = 9;
815
816 SYMLINK3res
817 NFS3_SYMLINK(SYMLINK3args) = 10;
818
5670ec6e
AM
819 MKNOD3res
820 NFS3_MKNOD(MKNOD3args) = 11;
dabf4152
AM
821
822 REMOVE3res
823 NFS3_REMOVE(REMOVE3args) = 12;
824
825 RMDIR3res
826 NFS3_RMDIR(RMDIR3args) = 13;
827
828 RENAME3res
829 NFS3_RENAME(RENAME3args) = 14;
830
831 LINK3res
832 NFS3_LINK(LINK3args) = 15;
833
834 READDIR3res
835 NFS3_READDIR(READDIR3args) = 16;
836
837 READDIRPLUS3res
838 NFS3_READDIRPLUS(READDIRPLUS3args) = 17;
839
840 FSSTAT3res
841 NFS3_FSSTAT(FSSTAT3args) = 18;
842
843 FSINFO3res
844 NFS3_FSINFO(FSINFO3args) = 19;
845
846 PATHCONF3res
847 NFS3_PATHCONF(PATHCONF3args) = 20;
848
849 COMMIT3res
850 NFS3_COMMIT(COMMIT3args) = 21;
851 } = 3;
852} = 100003;
853
854
855
856/* NFS ACL definitions based on wireshark souces and network traces */
857/* NFSACL interface. Uses same port/process as NFS */
858
859enum nfsacl_type {
860 NFSACL_TYPE_USER_OBJ = 0x0001,
861 NFSACL_TYPE_USER = 0x0002,
862 NFSACL_TYPE_GROUP_OBJ = 0x0004,
863 NFSACL_TYPE_GROUP = 0x0008,
864 NFSACL_TYPE_CLASS_OBJ = 0x0010,
865 NFSACL_TYPE_CLASS = 0x0020,
866 NFSACL_TYPE_DEFAULT = 0x1000,
867 NFSACL_TYPE_DEFAULT_USER_OBJ = 0x1001,
868 NFSACL_TYPE_DEFAULT_USER = 0x1002,
869 NFSACL_TYPE_DEFAULT_GROUP_OBJ = 0x1004,
870 NFSACL_TYPE_DEFAULT_GROUP = 0x1008,
871 NFSACL_TYPE_DEFAULT_CLASS_OBJ = 0x1010,
872 NFSACL_TYPE_DEFAULT_OTHER_OBJ = 0x1020
873};
874
875const NFSACL_PERM_READ = 0x04;
876const NFSACL_PERM_WRITE = 0x02;
877const NFSACL_PERM_EXEC = 0x01;
878
879struct nfsacl_ace {
880 enum nfsacl_type type;
881 uint32_t id;
882 uint32_t perm;
883};
884
885const NFSACL_MASK_ACL_ENTRY = 0x0001;
886const NFSACL_MASK_ACL_COUNT = 0x0002;
887const NFSACL_MASK_ACL_DEFAULT_ENTRY = 0x0004;
888const NFSACL_MASK_ACL_DEFAULT_COUNT = 0x0008;
889
890struct GETACL3args {
891 nfs_fh3 dir;
892 uint32 mask;
893};
894
895struct GETACL3resok {
896 post_op_attr attr;
897 uint32_t mask;
898 uint32_t ace_count;
899 struct nfsacl_ace ace<>;
900 uint32_t default_ace_count;
901 struct nfsacl_ace default_ace<>;
902};
903
904union GETACL3res switch (nfsstat3 status) {
905case NFS3_OK:
906 GETACL3resok resok;
907default:
908 void;
909};
910
911program NFSACL_PROGRAM {
912 version NFSACL_V3 {
913 void
914 NFSACL3_NULL(void) = 0;
915
916 GETACL3res
917 NFSACL3_GETACL(GETACL3args) = 1;
918 } = 3;
919} = 100227;