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