source: rtems/c/src/nfsclient/proto/nfs_prot.x @ c589ebc8

4.104.114.84.95
Last change on this file since c589ebc8 was c589ebc8, checked in by Ralf Corsepius <ralf.corsepius@…>, on 07/25/07 at 05:22:23

Import from rtems-nfs-1.5.tgz.

  • Property mode set to 100644
File size: 21.7 KB
Line 
1/*
2 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
3 * unrestricted use provided that this legend is included on all tape
4 * media and as a part of the software program in whole or part.  Users
5 * may copy or modify Sun RPC without charge, but are not authorized
6 * to license or distribute it to anyone else except as part of a product or
7 * program developed by the user.
8 *
9 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
10 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
11 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
12 *
13 * Sun RPC is provided with no support and without any obligation on the
14 * part of Sun Microsystems, Inc. to assist in its use, correction,
15 * modification or enhancement.
16 *
17 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
18 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
19 * OR ANY PART THEREOF.
20 *
21 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
22 * or profits or other special, indirect and consequential damages, even if
23 * Sun has been advised of the possibility of such damages.
24 *
25 * Sun Microsystems, Inc.
26 * 2550 Garcia Avenue
27 * Mountain View, California  94043
28 */
29
30#ifndef RPC_HDR
31%#ifndef lint
32%/*static char sccsid[] = "from: @(#)nfs_prot.x 1.2 87/10/12 Copyr 1987 Sun Micro";*/
33%/*static char sccsid[] = "from: @(#)nfs_prot.x 2.1 88/08/01 4.0 RPCSRC";*/
34%static char rcsid[] = "$Id$";
35%#endif /* not lint */
36#endif
37
38const NFS_PORT          = 2049;
39const NFS_MAXDATA       = 8192;
40const NFS_MAXPATHLEN    = 1024;
41const NFS_MAXNAMLEN     = 255;
42const NFS_FHSIZE        = 32;
43const NFS_COOKIESIZE    = 4;
44const NFS_FIFO_DEV      = -1;   /* size kludge for named pipes */
45
46/*
47 * File types
48 */
49const NFSMODE_FMT  = 0170000;   /* type of file */
50const NFSMODE_DIR  = 0040000;   /* directory */
51const NFSMODE_CHR  = 0020000;   /* character special */
52const NFSMODE_BLK  = 0060000;   /* block special */
53const NFSMODE_REG  = 0100000;   /* regular */
54const NFSMODE_LNK  = 0120000;   /* symbolic link */
55const NFSMODE_SOCK = 0140000;   /* socket */
56const NFSMODE_FIFO = 0010000;   /* fifo */
57
58/*
59 * Error status
60 */
61enum nfsstat {
62        NFS_OK= 0,              /* no error */
63        NFSERR_PERM=1,          /* Not owner */
64        NFSERR_NOENT=2,         /* No such file or directory */
65        NFSERR_IO=5,            /* I/O error */
66        NFSERR_NXIO=6,          /* No such device or address */
67        NFSERR_ACCES=13,        /* Permission denied */
68        NFSERR_EXIST=17,        /* File exists */
69        NFSERR_NODEV=19,        /* No such device */
70        NFSERR_NOTDIR=20,       /* Not a directory*/
71        NFSERR_ISDIR=21,        /* Is a directory */
72        NFSERR_FBIG=27,         /* File too large */
73        NFSERR_NOSPC=28,        /* No space left on device */
74        NFSERR_ROFS=30,         /* Read-only file system */
75        NFSERR_NAMETOOLONG=63,  /* File name too long */
76        NFSERR_NOTEMPTY=66,     /* Directory not empty */
77        NFSERR_DQUOT=69,        /* Disc quota exceeded */
78        NFSERR_STALE=70,        /* Stale NFS file handle */
79        NFSERR_WFLUSH=99        /* write cache flushed */
80};
81
82/*
83 * File types
84 */
85enum ftype {
86        NFNON = 0,      /* non-file */
87        NFREG = 1,      /* regular file */
88        NFDIR = 2,      /* directory */
89        NFBLK = 3,      /* block special */
90        NFCHR = 4,      /* character special */
91        NFLNK = 5,      /* symbolic link */
92        NFSOCK = 6,     /* unix domain sockets */
93        NFBAD = 7,      /* unused */
94        NFFIFO = 8      /* named pipe */
95};
96
97/*
98 * File access handle
99 */
100struct nfs_fh {
101        opaque data[NFS_FHSIZE];
102};
103
104/*
105 * Timeval
106 */
107struct nfstime {
108        unsigned seconds;
109        unsigned useconds;
110};
111
112
113/*
114 * File attributes
115 */
116struct fattr {
117        ftype type;             /* file type */
118        unsigned mode;          /* protection mode bits */
119        unsigned nlink;         /* # hard links */
120        unsigned uid;           /* owner user id */
121        unsigned gid;           /* owner group id */
122        unsigned size;          /* file size in bytes */
123        unsigned blocksize;     /* prefered block size */
124        unsigned rdev;          /* special device # */
125        unsigned blocks;        /* Kb of disk used by file */
126        unsigned fsid;          /* device # */
127        unsigned fileid;        /* inode # */
128        nfstime atime;          /* time of last access */
129        nfstime mtime;          /* time of last modification */
130        nfstime ctime;          /* time of last change */
131};
132
133/*
134 * File attributes which can be set
135 */
136struct sattr {
137        unsigned mode;  /* protection mode bits */
138        unsigned uid;   /* owner user id */
139        unsigned gid;   /* owner group id */
140        unsigned size;  /* file size in bytes */
141        nfstime atime;  /* time of last access */
142        nfstime mtime;  /* time of last modification */
143};
144
145
146typedef string filename<NFS_MAXNAMLEN>;
147typedef string nfspath<NFS_MAXPATHLEN>;
148
149/*
150 * Reply status with file attributes
151 */
152union attrstat switch (nfsstat status) {
153case NFS_OK:
154        fattr attributes;
155default:
156        void;
157};
158
159struct sattrargs {
160        nfs_fh file;
161        sattr attributes;
162};
163
164/*
165 * Arguments for directory operations
166 */
167struct diropargs {
168        nfs_fh  dir;    /* directory file handle */
169        filename name;          /* name (up to NFS_MAXNAMLEN bytes) */
170};
171
172struct diropokres {
173        nfs_fh file;
174        fattr attributes;
175};
176
177/*
178 * Results from directory operation
179 */
180union diropres switch (nfsstat status) {
181case NFS_OK:
182        diropokres diropres;
183default:
184        void;
185};
186
187union readlinkres switch (nfsstat status) {
188case NFS_OK:
189        nfspath data;
190default:
191        void;
192};
193
194/*
195 * Arguments to remote read
196 */
197struct readargs {
198        nfs_fh file;            /* handle for file */
199        unsigned offset;        /* byte offset in file */
200        unsigned count;         /* immediate read count */
201        unsigned totalcount;    /* total read count (from this offset)*/
202};
203
204/*
205 * Status OK portion of remote read reply
206 */
207struct readokres {
208        fattr   attributes;     /* attributes, need for pagin*/
209        opaque data<NFS_MAXDATA>;
210};
211
212union readres switch (nfsstat status) {
213case NFS_OK:
214        readokres reply;
215default:
216        void;
217};
218
219/*
220 * Arguments to remote write
221 */
222struct writeargs {
223        nfs_fh  file;           /* handle for file */
224        unsigned beginoffset;   /* beginning byte offset in file */
225        unsigned offset;        /* current byte offset in file */
226        unsigned totalcount;    /* total write count (to this offset)*/
227        opaque data<NFS_MAXDATA>;
228};
229
230struct createargs {
231        diropargs where;
232        sattr attributes;
233};
234
235struct renameargs {
236        diropargs from;
237        diropargs to;
238};
239
240struct linkargs {
241        nfs_fh from;
242        diropargs to;
243};
244
245struct symlinkargs {
246        diropargs from;
247        nfspath to;
248        sattr attributes;
249};
250
251
252/* TS, 10/21/2002; converted cookie to struct */
253struct nfscookie {
254        opaque data[NFS_COOKIESIZE];
255};
256
257/*
258 * Arguments to readdir
259 */
260struct readdirargs {
261        nfs_fh dir;             /* directory handle */
262        nfscookie cookie;
263        unsigned count;         /* number of directory bytes to read */
264};
265
266struct entry {
267        unsigned fileid;
268        filename name;
269        nfscookie cookie;
270        entry *nextentry;
271};
272
273struct dirlist {
274        entry *entries;
275        bool eof;
276};
277
278union readdirres switch (nfsstat status) {
279case NFS_OK:
280        dirlist reply;
281default:
282        void;
283};
284
285struct statfsokres {
286        unsigned tsize; /* preferred transfer size in bytes */
287        unsigned bsize; /* fundamental file system block size */
288        unsigned blocks;        /* total blocks in file system */
289        unsigned bfree; /* free blocks in fs */
290        unsigned bavail;        /* free blocks avail to non-superuser */
291};
292
293union statfsres switch (nfsstat status) {
294case NFS_OK:
295        statfsokres reply;
296default:
297        void;
298};
299
300#ifdef WANT_NFS3
301
302/*
303 * NFSv3 constants and types
304 */
305const NFS3_FHSIZE       = 64;   /* maximum size in bytes of a file handle */
306const NFS3_COOKIEVERFSIZE = 8;  /* size of a cookie verifier for READDIR */
307const NFS3_CREATEVERFSIZE = 8;  /* size of the verifier used for CREATE */
308const NFS3_WRITEVERFSIZE = 8;   /* size of the verifier used for WRITE */
309
310typedef unsigned hyper uint64;
311typedef hyper int64;
312typedef unsigned long uint32;
313typedef long int32;
314typedef string filename3<>;
315typedef string nfspath3<>;
316typedef uint64 fileid3;
317typedef uint64 cookie3;
318typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE];
319typedef opaque createverf3[NFS3_CREATEVERFSIZE];
320typedef opaque writeverf3[NFS3_WRITEVERFSIZE];
321typedef uint32 uid3;
322typedef uint32 gid3;
323typedef uint64 size3;
324typedef uint64 offset3;
325typedef uint32 mode3;
326typedef uint32 count3;
327
328/*
329 * Error status (v3)
330 */
331enum nfsstat3 {
332        NFS3_OK = 0,
333        NFS3ERR_PERM            = 1,
334        NFS3ERR_NOENT           = 2,
335        NFS3ERR_IO              = 5,
336        NFS3ERR_NXIO            = 6,
337        NFS3ERR_ACCES           = 13,
338        NFS3ERR_EXIST           = 17,
339        NFS3ERR_XDEV            = 18,
340        NFS3ERR_NODEV           = 19,
341        NFS3ERR_NOTDIR          = 20,
342        NFS3ERR_ISDIR           = 21,
343        NFS3ERR_INVAL           = 22,
344        NFS3ERR_FBIG            = 27,
345        NFS3ERR_NOSPC           = 28,
346        NFS3ERR_ROFS            = 30,
347        NFS3ERR_MLINK           = 31,
348        NFS3ERR_NAMETOOLONG     = 63,
349        NFS3ERR_NOTEMPTY        = 66,
350        NFS3ERR_DQUOT           = 69,
351        NFS3ERR_STALE           = 70,
352        NFS3ERR_REMOTE          = 71,
353        NFS3ERR_BADHANDLE       = 10001,
354        NFS3ERR_NOT_SYNC        = 10002,
355        NFS3ERR_BAD_COOKIE      = 10003,
356        NFS3ERR_NOTSUPP         = 10004,
357        NFS3ERR_TOOSMALL        = 10005,
358        NFS3ERR_SERVERFAULT     = 10006,
359        NFS3ERR_BADTYPE         = 10007,
360        NFS3ERR_JUKEBOX         = 10008
361};
362
363/*
364 * File types (v3)
365 */
366enum ftype3 {
367        NF3REG  = 1,            /* regular file */
368        NF3DIR  = 2,            /* directory */
369        NF3BLK  = 3,            /* block special */
370        NF3CHR  = 4,            /* character special */
371        NF3LNK  = 5,            /* symbolic link */
372        NF3SOCK = 6,            /* unix domain sockets */
373        NF3FIFO = 7             /* named pipe */
374};
375
376struct specdata3 {
377        uint32  specdata1;
378        uint32  specdata2;
379};
380
381/*
382 * File access handle (v3)
383 */
384struct nfs_fh3 {
385        opaque data<NFS3_FHSIZE>;
386};
387
388/*
389 * Timeval (v3)
390 */
391struct nfstime3 {
392        uint32  seconds;
393        uint32  nseconds;
394};
395
396
397/*
398 * File attributes (v3)
399 */
400struct fattr3 {
401        ftype3  type;           /* file type */
402        mode3   mode;           /* protection mode bits */
403        uint32  nlink;          /* # hard links */
404        uid3    uid;            /* owner user id */
405        gid3    gid;            /* owner group id */
406        size3   size;           /* file size in bytes */
407        size3   used;           /* prefered block size */
408        specdata3 rdev;         /* special device # */
409        uint64 fsid;            /* device # */
410        fileid3 fileid;         /* inode # */
411        nfstime3 atime;         /* time of last access */
412        nfstime3 mtime;         /* time of last modification */
413        nfstime3 ctime;         /* time of last change */
414};
415
416union post_op_attr switch (bool attributes_follow) {
417case TRUE:
418        fattr3  attributes;
419case FALSE:
420        void;
421};
422
423struct wcc_attr {
424        size3   size;
425        nfstime3 mtime;
426        nfstime3 ctime;
427};
428
429union pre_op_attr switch (bool attributes_follow) {
430case TRUE:
431        wcc_attr attributes;
432case FALSE:
433        void;
434};
435
436struct wcc_data {
437        pre_op_attr before;
438        post_op_attr after;
439};
440
441union post_op_fh3 switch (bool handle_follows) {
442case TRUE:
443        nfs_fh3 handle;
444case FALSE:
445        void;
446};
447
448/*
449 * File attributes which can be set (v3)
450 */
451enum time_how {
452        DONT_CHANGE             = 0,
453        SET_TO_SERVER_TIME      = 1,
454        SET_TO_CLIENT_TIME      = 2
455};
456
457union set_mode3 switch (bool set_it) {
458case TRUE:
459        mode3   mode;
460default:
461        void;
462};
463
464union set_uid3 switch (bool set_it) {
465case TRUE:
466        uid3    uid;
467default:
468        void;
469};
470
471union set_gid3 switch (bool set_it) {
472case TRUE:
473        gid3    gid;
474default:
475        void;
476};
477
478union set_size3 switch (bool set_it) {
479case TRUE:
480        size3   size;
481default:
482        void;
483};
484
485union set_atime switch (time_how set_it) {
486case SET_TO_CLIENT_TIME:
487        nfstime3        atime;
488default:
489        void;
490};
491
492union set_mtime switch (time_how set_it) {
493case SET_TO_CLIENT_TIME:
494        nfstime3        mtime;
495default:
496        void;
497};
498
499struct sattr3 {
500        set_mode3       mode;
501        set_uid3        uid;
502        set_gid3        gid;
503        set_size3       size;
504        set_atime       atime;
505        set_mtime       mtime;
506};
507
508/*
509 * Arguments for directory operations (v3)
510 */
511struct diropargs3 {
512        nfs_fh3 dir;            /* directory file handle */
513        filename3 name;         /* name (up to NFS_MAXNAMLEN bytes) */
514};
515
516/*
517 * Arguments to getattr (v3).
518 */
519struct GETATTR3args {
520        nfs_fh3         object;
521};
522
523struct GETATTR3resok {
524        fattr3          obj_attributes;
525};
526
527union GETATTR3res switch (nfsstat3 status) {
528case NFS3_OK:
529        GETATTR3resok   resok;
530default:
531        void;
532};
533
534/*
535 * Arguments to setattr (v3).
536 */
537union sattrguard3 switch (bool check) {
538case TRUE:
539        nfstime3        obj_ctime;
540case FALSE:
541        void;
542};
543
544struct SETATTR3args {
545        nfs_fh3         object;
546        sattr3          new_attributes;
547        sattrguard3     guard;
548};
549
550struct SETATTR3resok {
551        wcc_data        obj_wcc;
552};
553
554struct SETATTR3resfail {
555        wcc_data        obj_wcc;
556};
557
558union SETATTR3res switch (nfsstat3 status) {
559case NFS3_OK:
560        SETATTR3resok   resok;
561default:
562        SETATTR3resfail resfail;
563};
564
565/*
566 * Arguments to lookup (v3).
567 */
568struct LOOKUP3args {
569        diropargs3      what;
570};
571
572struct LOOKUP3resok {
573        nfs_fh3         object;
574        post_op_attr    obj_attributes;
575        post_op_attr    dir_attributes;
576};
577
578struct LOOKUP3resfail {
579        post_op_attr    dir_attributes;
580};
581
582union LOOKUP3res switch (nfsstat3 status) {
583case NFS3_OK:
584        LOOKUP3resok    resok;
585default:
586        LOOKUP3resfail  resfail;
587};
588
589/*
590 * Arguments to access (v3).
591 */
592const ACCESS3_READ      = 0x0001;
593const ACCESS3_LOOKUP    = 0x0002;
594const ACCESS3_MODIFY    = 0x0004;
595const ACCESS3_EXTEND    = 0x0008;
596const ACCESS3_DELETE    = 0x0010;
597const ACCESS3_EXECUTE   = 0x0020;
598
599struct ACCESS3args {
600        nfs_fh3         object;
601        uint32          access;
602};
603
604struct ACCESS3resok {
605        post_op_attr    obj_attributes;
606        uint32          access;
607};
608
609struct ACCESS3resfail {
610        post_op_attr    obj_attributes;
611};
612
613union ACCESS3res switch (nfsstat3 status) {
614case NFS3_OK:
615        ACCESS3resok    resok;
616default:
617        ACCESS3resfail  resfail;
618};
619
620/*
621 * Arguments to readlink (v3).
622 */
623struct READLINK3args {
624        nfs_fh3         symlink;
625};
626
627struct READLINK3resok {
628        post_op_attr    symlink_attributes;
629        nfspath3        data;
630};
631
632struct READLINK3resfail {
633        post_op_attr    symlink_attributes;
634};
635
636union READLINK3res switch (nfsstat3 status) {
637case NFS3_OK:
638        READLINK3resok  resok;
639default:
640        READLINK3resfail resfail;
641};
642
643/*
644 * Arguments to read (v3).
645 */
646struct READ3args {
647        nfs_fh3         file;
648        offset3         offset;
649        count3          count;
650};
651
652struct READ3resok {
653        post_op_attr    file_attributes;
654        count3          count;
655        bool            eof;
656        opaque          data<>;
657};
658
659struct READ3resfail {
660        post_op_attr    file_attributes;
661};
662
663/* XXX: solaris 2.6 uses ``nfsstat'' here */
664union READ3res switch (nfsstat3 status) {
665case NFS3_OK:
666        READ3resok      resok;
667default:
668        READ3resfail    resfail;
669};
670
671/*
672 * Arguments to write (v3).
673 */
674enum stable_how {
675        UNSTABLE        = 0,
676        DATA_SYNC       = 1,
677        FILE_SYNC       = 2
678};
679
680struct WRITE3args {
681        nfs_fh3         file;
682        offset3         offset;
683        count3          count;
684        stable_how      stable;
685        opaque          data<>;
686};
687
688struct WRITE3resok {
689        wcc_data        file_wcc;
690        count3          count;
691        stable_how      committed;
692        writeverf3      verf;
693};
694
695struct WRITE3resfail {
696        wcc_data        file_wcc;
697};
698
699union WRITE3res switch (nfsstat3 status) {
700case NFS3_OK:
701        WRITE3resok     resok;
702default:
703        WRITE3resfail   resfail;
704};
705
706/*
707 * Arguments to create (v3).
708 */
709enum createmode3 {
710        UNCHECKED       = 0,
711        GUARDED         = 1,
712        EXCLUSIVE       = 2
713};
714
715union createhow3 switch (createmode3 mode) {
716case UNCHECKED:
717case GUARDED:
718        sattr3          obj_attributes;
719case EXCLUSIVE:
720        createverf3     verf;
721};
722
723struct CREATE3args {
724        diropargs3      where;
725        createhow3      how;
726};
727
728struct CREATE3resok {
729        post_op_fh3     obj;
730        post_op_attr    obj_attributes;
731        wcc_data        dir_wcc;
732};
733
734struct CREATE3resfail {
735        wcc_data        dir_wcc;
736};
737
738union CREATE3res switch (nfsstat3 status) {
739case NFS3_OK:
740        CREATE3resok    resok;
741default:
742        CREATE3resfail  resfail;
743};
744
745/*
746 * Arguments to mkdir (v3).
747 */
748struct MKDIR3args {
749        diropargs3      where;
750        sattr3          attributes;
751};
752
753struct MKDIR3resok {
754        post_op_fh3     obj;
755        post_op_attr    obj_attributes;
756        wcc_data        dir_wcc;
757};
758
759struct MKDIR3resfail {
760        wcc_data        dir_wcc;
761};
762
763union MKDIR3res switch (nfsstat3 status) {
764case NFS3_OK:
765        MKDIR3resok     resok;
766default:
767        MKDIR3resfail   resfail;
768};
769
770/*
771 * Arguments to symlink (v3).
772 */
773struct symlinkdata3 {
774        sattr3          symlink_attributes;
775        nfspath3        symlink_data;
776};
777
778struct SYMLINK3args {
779        diropargs3      where;
780        symlinkdata3    symlink;
781};
782
783struct SYMLINK3resok {
784        post_op_fh3     obj;
785        post_op_attr    obj_attributes;
786        wcc_data        dir_wcc;
787};
788
789struct SYMLINK3resfail {
790        wcc_data        dir_wcc;
791};
792
793union SYMLINK3res switch (nfsstat3 status) {
794case NFS3_OK:
795        SYMLINK3resok   resok;
796default:
797        SYMLINK3resfail resfail;
798};
799
800/*
801 * Arguments to mknod (v3).
802 */
803struct devicedata3 {
804        sattr3          dev_attributes;
805        specdata3       spec;
806};
807
808union mknoddata3 switch (ftype3 type) {
809case NF3CHR:
810case NF3BLK:
811        devicedata3     device;
812case NF3SOCK:
813case NF3FIFO:
814        sattr3          pipe_attributes;
815default:
816        void;
817};
818
819struct MKNOD3args {
820        diropargs3      where;
821        mknoddata3      what;
822};
823
824struct MKNOD3resok {
825        post_op_fh3     obj;
826        post_op_attr    obj_attributes;
827        wcc_data        dir_wcc;
828};
829
830struct MKNOD3resfail {
831        wcc_data        dir_wcc;
832};
833
834union MKNOD3res switch (nfsstat3 status) {
835case NFS3_OK:
836        MKNOD3resok     resok;
837default:
838        MKNOD3resfail   resfail;
839};
840
841/*
842 * Arguments to remove (v3).
843 */
844struct REMOVE3args {
845        diropargs3      object;
846};
847
848struct REMOVE3resok {
849        wcc_data        dir_wcc;
850};
851
852struct REMOVE3resfail {
853        wcc_data        dir_wcc;
854};
855
856union REMOVE3res switch (nfsstat3 status) {
857case NFS3_OK:
858        REMOVE3resok    resok;
859default:
860        REMOVE3resfail  resfail;
861};
862
863/*
864 * Arguments to rmdir (v3).
865 */
866struct RMDIR3args {
867        diropargs3      object;
868};
869
870struct RMDIR3resok {
871        wcc_data        dir_wcc;
872};
873
874struct RMDIR3resfail {
875        wcc_data        dir_wcc;
876};
877
878union RMDIR3res switch (nfsstat3 status) {
879case NFS3_OK:
880        RMDIR3resok     resok;
881default:
882        RMDIR3resfail   resfail;
883};
884
885/*
886 * Arguments to rename (v3).
887 */
888struct RENAME3args {
889        diropargs3      from;
890        diropargs3      to;
891};
892
893struct RENAME3resok {
894        wcc_data        fromdir_wcc;
895        wcc_data        todir_wcc;
896};
897
898struct RENAME3resfail {
899        wcc_data        fromdir_wcc;
900        wcc_data        todir_wcc;
901};
902
903union RENAME3res switch (nfsstat3 status) {
904case NFS3_OK:
905        RENAME3resok    resok;
906default:
907        RENAME3resfail  resfail;
908};
909
910/*
911 * Arguments to link (v3).
912 */
913struct LINK3args {
914        nfs_fh3         file;
915        diropargs3      link;
916};
917
918struct LINK3resok {
919        post_op_attr    file_attributes;
920        wcc_data        linkdir_wcc;
921};
922
923struct LINK3resfail {
924        post_op_attr    file_attributes;
925        wcc_data        linkdir_wcc;
926};
927
928union LINK3res switch (nfsstat3 status) {
929case NFS3_OK:
930        LINK3resok      resok;
931default:
932        LINK3resfail    resfail;
933};
934
935/*
936 * Arguments to readdir (v3).
937 */
938struct READDIR3args {
939        nfs_fh3         dir;
940        cookie3         cookie;
941        cookieverf3     cookieverf;
942        count3          count;
943};
944
945struct entry3 {
946        fileid3         fileid;
947        filename3       name;
948        cookie3         cookie;
949        entry3          *nextentry;
950};
951
952struct dirlist3 {
953        entry3          *entries;
954        bool            eof;
955};
956
957struct READDIR3resok {
958        post_op_attr    dir_attributes;
959        cookieverf3     cookieverf;
960        dirlist3        reply;
961};
962
963struct READDIR3resfail {
964        post_op_attr    dir_attributes;
965};
966
967union READDIR3res switch (nfsstat3 status) {
968case NFS3_OK:
969        READDIR3resok   resok;
970default:
971        READDIR3resfail resfail;
972};
973
974/*
975 * Arguments to readdirplus (v3).
976 */
977struct READDIRPLUS3args {
978        nfs_fh3         dir;
979        cookie3         cookie;
980        cookieverf3     cookieverf;
981        count3          dircount;
982        count3          maxcount;
983};
984
985struct entryplus3 {
986        fileid3         fileid;
987        filename3       name;
988        cookie3         cookie;
989        post_op_attr    name_attributes;
990        post_op_fh3     name_handle;
991        entryplus3      *nextentry;
992};
993
994struct dirlistplus3 {
995        entryplus3      *entries;
996        bool            eof;
997};
998
999struct READDIRPLUS3resok {
1000        post_op_attr    dir_attributes;
1001        cookieverf3     cookieverf;
1002        dirlistplus3    reply;
1003};
1004
1005struct READDIRPLUS3resfail {
1006        post_op_attr    dir_attributes;
1007};
1008
1009union READDIRPLUS3res switch (nfsstat3 status) {
1010case NFS3_OK:
1011        READDIRPLUS3resok       resok;
1012default:
1013        READDIRPLUS3resfail     resfail;
1014};
1015
1016/*
1017 * Arguments to fsstat (v3).
1018 */
1019struct FSSTAT3args {
1020        nfs_fh3         fsroot;
1021};
1022
1023struct FSSTAT3resok {
1024        post_op_attr    obj_attributes;
1025        size3           tbytes;
1026        size3           fbytes;
1027        size3           abytes;
1028        size3           tfiles;
1029        size3           ffiles;
1030        size3           afiles;
1031        uint32          invarsec;
1032};
1033
1034struct FSSTAT3resfail {
1035        post_op_attr    obj_attributes;
1036};
1037
1038union FSSTAT3res switch (nfsstat3 status) {
1039case NFS3_OK:
1040        FSSTAT3resok    resok;
1041default:
1042        FSSTAT3resfail  resfail;
1043};
1044
1045/*
1046 * Arguments to fsinfo (v3).
1047 */
1048const FSF3_LINK         = 0x0001;
1049const FSF3_SYMLINK      = 0x0002;
1050const FSF3_HOMOGENEOUS  = 0x0008;
1051const FSF3_CANSETTIME   = 0x0010;
1052
1053struct FSINFO3args {
1054        nfs_fh3         fsroot;
1055};
1056
1057struct FSINFO3resok {
1058        post_op_attr    obj_attributes;
1059        uint32          rtmax;
1060        uint32          rtpref;
1061        uint32          rtmult;
1062        uint32          wtmax;
1063        uint32          wtpref;
1064        uint32          wtmult;
1065        uint32          dtpref;
1066        size3           maxfilesize;
1067        nfstime3        time_delta;
1068        uint32          properties;
1069};
1070
1071struct FSINFO3resfail {
1072        post_op_attr    obj_attributes;
1073};
1074
1075union FSINFO3res switch (nfsstat3 status) {
1076case NFS3_OK:
1077        FSINFO3resok    resok;
1078default:
1079        FSINFO3resfail  resfail;
1080};
1081
1082/*
1083 * Arguments to pathconf (v3).
1084 */
1085struct PATHCONF3args {
1086        nfs_fh3         object;
1087};
1088
1089struct PATHCONF3resok {
1090        post_op_attr    obj_attributes;
1091        uint32          linkmax;
1092        uint32          name_max;
1093        bool            no_trunc;
1094        bool            chown_restricted;
1095        bool            case_insensitive;
1096        bool            case_preserving;
1097};
1098
1099struct PATHCONF3resfail {
1100        post_op_attr    obj_attributes;
1101};
1102
1103union PATHCONF3res switch (nfsstat3 status) {
1104case NFS3_OK:
1105        PATHCONF3resok  resok;
1106default:
1107        PATHCONF3resfail        resfail;
1108};
1109
1110/*
1111 * Arguments to commit (v3).
1112 */
1113struct COMMIT3args {
1114        nfs_fh3         file;
1115        offset3         offset;
1116        count3          count;
1117};
1118
1119struct COMMIT3resok {
1120        wcc_data        file_wcc;
1121        writeverf3      verf;
1122};
1123
1124struct COMMIT3resfail {
1125        wcc_data        file_wcc;
1126};
1127
1128union COMMIT3res switch (nfsstat3 status) {
1129case NFS3_OK:
1130        COMMIT3resok    resok;
1131default:
1132        COMMIT3resfail  resfail;
1133};
1134
1135#endif /* WANT_NFS3 */
1136
1137/*
1138 * Remote file service routines
1139 */
1140program NFS_PROGRAM {
1141        version NFS_VERSION {
1142                void
1143                NFSPROC_NULL(void) = 0;
1144
1145                attrstat
1146                NFSPROC_GETATTR(nfs_fh) =       1;
1147
1148                attrstat
1149                NFSPROC_SETATTR(sattrargs) = 2;
1150
1151                void
1152                NFSPROC_ROOT(void) = 3;
1153
1154                diropres
1155                NFSPROC_LOOKUP(diropargs) = 4;
1156
1157                readlinkres
1158                NFSPROC_READLINK(nfs_fh) = 5;
1159
1160                readres
1161                NFSPROC_READ(readargs) = 6;
1162
1163                void
1164                NFSPROC_WRITECACHE(void) = 7;
1165
1166                attrstat
1167                NFSPROC_WRITE(writeargs) = 8;
1168
1169                diropres
1170                NFSPROC_CREATE(createargs) = 9;
1171
1172                nfsstat
1173                NFSPROC_REMOVE(diropargs) = 10;
1174
1175                nfsstat
1176                NFSPROC_RENAME(renameargs) = 11;
1177
1178                nfsstat
1179                NFSPROC_LINK(linkargs) = 12;
1180
1181                nfsstat
1182                NFSPROC_SYMLINK(symlinkargs) = 13;
1183
1184                diropres
1185                NFSPROC_MKDIR(createargs) = 14;
1186
1187                nfsstat
1188                NFSPROC_RMDIR(diropargs) = 15;
1189
1190                readdirres
1191                NFSPROC_READDIR(readdirargs) = 16;
1192
1193                statfsres
1194                NFSPROC_STATFS(nfs_fh) = 17;
1195        } = 2;
1196} = 100003;
1197#ifdef WANT_NFS3
1198program NFS3_PROGRAM {
1199        version NFS_V3 {
1200                void
1201                NFSPROC3_NULL(void)                     = 0;
1202
1203                GETATTR3res
1204                NFSPROC3_GETATTR(GETATTR3args)          = 1;
1205
1206                SETATTR3res
1207                NFSPROC3_SETATTR(SETATTR3args)          = 2;
1208
1209                LOOKUP3res
1210                NFSPROC3_LOOKUP(LOOKUP3args)            = 3;
1211
1212                ACCESS3res
1213                NFSPROC3_ACCESS(ACCESS3args)            = 4;
1214
1215                READLINK3res
1216                NFSPROC3_READLINK(READLINK3args)        = 5;
1217
1218                READ3res
1219                NFSPROC3_READ(READ3args)                = 6;
1220
1221                WRITE3res
1222                NFSPROC3_WRITE(WRITE3args)              = 7;
1223
1224                CREATE3res
1225                NFSPROC3_CREATE(CREATE3args)            = 8;
1226
1227                MKDIR3res
1228                NFSPROC3_MKDIR(MKDIR3args)              = 9;
1229
1230                SYMLINK3res
1231                NFSPROC3_SYMLINK(SYMLINK3args)          = 10;
1232
1233                MKNOD3res
1234                NFSPROC3_MKNOD(MKNOD3args)              = 11;
1235
1236                REMOVE3res
1237                NFSPROC3_REMOVE(REMOVE3args)            = 12;
1238
1239                RMDIR3res
1240                NFSPROC3_RMDIR(RMDIR3args)              = 13;
1241
1242                RENAME3res
1243                NFSPROC3_RENAME(RENAME3args)            = 14;
1244
1245                LINK3res
1246                NFSPROC3_LINK(LINK3args)                = 15;
1247
1248                READDIR3res
1249                NFSPROC3_READDIR(READDIR3args)          = 16;
1250
1251                READDIRPLUS3res
1252                NFSPROC3_READDIRPLUS(READDIRPLUS3args)  = 17;
1253
1254                FSSTAT3res
1255                NFSPROC3_FSSTAT(FSSTAT3args)            = 18;
1256
1257                FSINFO3res
1258                NFSPROC3_FSINFO(FSINFO3args)            = 19;
1259
1260                PATHCONF3res
1261                NFSPROC3_PATHCONF(PATHCONF3args)        = 20;
1262
1263                COMMIT3res
1264                NFSPROC3_COMMIT(COMMIT3args)            = 21;
1265        } = 3;
1266} = 100003;
1267#endif
1268
Note: See TracBrowser for help on using the repository browser.