inet6: require RTF_ANNOUNCE to proxy NS
[dragonfly.git] / include / rpcsvc / nfs_prot.x
blob59d0eb83b92b486707da54bbe9f59830fa2f1acb
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, MERCHANTABILITY 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  * @(#)nfs_prot.x 1.2 87/10/12 Copyr 1987 Sun Micro
30  * @(#)nfs_prot.x       2.1 88/08/01 4.0 RPCSRC
31  * $FreeBSD: src/include/rpcsvc/nfs_prot.x,v 1.7 1999/08/27 23:45:08 peter Exp $
32  */
34 const NFS_PORT          = 2049;
35 const NFS_MAXDATA       = 8192;
36 const NFS_MAXPATHLEN    = 1024;
37 const NFS_MAXNAMLEN     = 255;
38 const NFS_FHSIZE        = 32;
39 const NFS_COOKIESIZE    = 4;
40 const NFS_FIFO_DEV      = -1;   /* size kludge for named pipes */
43  * File types
44  */
45 const NFSMODE_FMT  = 0170000;   /* type of file */
46 const NFSMODE_DIR  = 0040000;   /* directory */
47 const NFSMODE_CHR  = 0020000;   /* character special */
48 const NFSMODE_BLK  = 0060000;   /* block special */
49 const NFSMODE_REG  = 0100000;   /* regular */
50 const NFSMODE_LNK  = 0120000;   /* symbolic link */
51 const NFSMODE_SOCK = 0140000;   /* socket */
52 const NFSMODE_FIFO = 0010000;   /* fifo */
55  * Error status
56  */
57 enum nfsstat {
58         NFS_OK= 0,              /* no error */
59         NFSERR_PERM=1,          /* Not owner */
60         NFSERR_NOENT=2,         /* No such file or directory */
61         NFSERR_IO=5,            /* I/O error */
62         NFSERR_NXIO=6,          /* No such device or address */
63         NFSERR_ACCES=13,        /* Permission denied */
64         NFSERR_EXIST=17,        /* File exists */
65         NFSERR_NODEV=19,        /* No such device */
66         NFSERR_NOTDIR=20,       /* Not a directory*/
67         NFSERR_ISDIR=21,        /* Is a directory */
68         NFSERR_FBIG=27,         /* File too large */
69         NFSERR_NOSPC=28,        /* No space left on device */
70         NFSERR_ROFS=30,         /* Read-only file system */
71         NFSERR_NAMETOOLONG=63,  /* File name too long */
72         NFSERR_NOTEMPTY=66,     /* Directory not empty */
73         NFSERR_DQUOT=69,        /* Disc quota exceeded */
74         NFSERR_STALE=70,        /* Stale NFS file handle */
75         NFSERR_WFLUSH=99        /* write cache flushed */
79  * File types
80  */
81 enum ftype {
82         NFNON = 0,      /* non-file */
83         NFREG = 1,      /* regular file */
84         NFDIR = 2,      /* directory */
85         NFBLK = 3,      /* block special */
86         NFCHR = 4,      /* character special */
87         NFLNK = 5,      /* symbolic link */
88         NFSOCK = 6,     /* unix domain sockets */
89         NFBAD = 7,      /* unused */
90         NFFIFO = 8      /* named pipe */
94  * File access handle
95  */
96 struct nfs_fh {
97         opaque data[NFS_FHSIZE];
100 /* 
101  * Timeval
102  */
103 struct nfstime {
104         unsigned seconds;
105         unsigned useconds;
110  * File attributes
111  */
112 struct fattr {
113         ftype type;             /* file type */
114         unsigned mode;          /* protection mode bits */
115         unsigned nlink;         /* # hard links */
116         unsigned uid;           /* owner user id */
117         unsigned gid;           /* owner group id */
118         unsigned size;          /* file size in bytes */
119         unsigned blocksize;     /* prefered block size */
120         unsigned rdev;          /* special device # */
121         unsigned blocks;        /* Kb of disk used by file */
122         unsigned fsid;          /* device # */
123         unsigned fileid;        /* inode # */
124         nfstime atime;          /* time of last access */
125         nfstime mtime;          /* time of last modification */
126         nfstime ctime;          /* time of last change */
130  * File attributes which can be set
131  */
132 struct sattr {
133         unsigned mode;  /* protection mode bits */
134         unsigned uid;   /* owner user id */
135         unsigned gid;   /* owner group id */
136         unsigned size;  /* file size in bytes */
137         nfstime atime;  /* time of last access */
138         nfstime mtime;  /* time of last modification */
142 typedef string filename<NFS_MAXNAMLEN>; 
143 typedef string nfspath<NFS_MAXPATHLEN>;
146  * Reply status with file attributes
147  */
148 union attrstat switch (nfsstat status) {
149 case NFS_OK:
150         fattr attributes;
151 default:
152         void;
155 struct sattrargs {
156         nfs_fh file;
157         sattr attributes;
161  * Arguments for directory operations
162  */
163 struct diropargs {
164         nfs_fh  dir;    /* directory file handle */
165         filename name;          /* name (up to NFS_MAXNAMLEN bytes) */
168 struct diropokres {
169         nfs_fh file;
170         fattr attributes;
174  * Results from directory operation
175  */
176 union diropres switch (nfsstat status) {
177 case NFS_OK:
178         diropokres diropres;
179 default:
180         void;
183 union readlinkres switch (nfsstat status) {
184 case NFS_OK:
185         nfspath data;
186 default:
187         void;
191  * Arguments to remote read
192  */
193 struct readargs {
194         nfs_fh file;            /* handle for file */
195         unsigned offset;        /* byte offset in file */
196         unsigned count;         /* immediate read count */
197         unsigned totalcount;    /* total read count (from this offset)*/
201  * Status OK portion of remote read reply
202  */
203 struct readokres {
204         fattr   attributes;     /* attributes, need for pagin*/
205         opaque data<NFS_MAXDATA>;
208 union readres switch (nfsstat status) {
209 case NFS_OK:
210         readokres reply;
211 default:
212         void;
216  * Arguments to remote write 
217  */
218 struct writeargs {
219         nfs_fh  file;           /* handle for file */
220         unsigned beginoffset;   /* beginning byte offset in file */
221         unsigned offset;        /* current byte offset in file */
222         unsigned totalcount;    /* total write count (to this offset)*/
223         opaque data<NFS_MAXDATA>;
226 struct createargs {
227         diropargs where;
228         sattr attributes;
231 struct renameargs {
232         diropargs from;
233         diropargs to;
236 struct linkargs {
237         nfs_fh from;
238         diropargs to;
241 struct symlinkargs {
242         diropargs from;
243         nfspath to;
244         sattr attributes;
248 typedef opaque nfscookie[NFS_COOKIESIZE];
251  * Arguments to readdir
252  */
253 struct readdirargs {
254         nfs_fh dir;             /* directory handle */
255         nfscookie cookie;
256         unsigned count;         /* number of directory bytes to read */
259 struct entry {
260         unsigned fileid;
261         filename name;
262         nfscookie cookie;
263         entry *nextentry;
266 struct dirlist {
267         entry *entries;
268         bool eof;
271 union readdirres switch (nfsstat status) {
272 case NFS_OK:
273         dirlist reply;
274 default:
275         void;
278 struct statfsokres {
279         unsigned tsize; /* preferred transfer size in bytes */
280         unsigned bsize; /* fundamental file system block size */
281         unsigned blocks;        /* total blocks in file system */
282         unsigned bfree; /* free blocks in fs */
283         unsigned bavail;        /* free blocks avail to non-superuser */
286 union statfsres switch (nfsstat status) {
287 case NFS_OK:
288         statfsokres reply;
289 default:
290         void;
293 #ifdef WANT_NFS3
296  * NFSv3 constants and types
297  */
298 const NFS3_FHSIZE       = 64;   /* maximum size in bytes of a file handle */
299 const NFS3_COOKIEVERFSIZE = 8;  /* size of a cookie verifier for READDIR */
300 const NFS3_CREATEVERFSIZE = 8;  /* size of the verifier used for CREATE */
301 const NFS3_WRITEVERFSIZE = 8;   /* size of the verifier used for WRITE */
303 typedef unsigned hyper uint64;
304 typedef hyper int64;
305 typedef unsigned long uint32;
306 typedef long int32;
307 typedef string filename3<>;
308 typedef string nfspath3<>;
309 typedef uint64 fileid3;
310 typedef uint64 cookie3;
311 typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE];
312 typedef opaque createverf3[NFS3_CREATEVERFSIZE];
313 typedef opaque writeverf3[NFS3_WRITEVERFSIZE];
314 typedef uint32 uid3;
315 typedef uint32 gid3;
316 typedef uint64 size3;
317 typedef uint64 offset3;
318 typedef uint32 mode3;
319 typedef uint32 count3;
322  * Error status (v3)
323  */
324 enum nfsstat3 {
325         NFS3_OK = 0,
326         NFS3ERR_PERM            = 1,
327         NFS3ERR_NOENT           = 2,
328         NFS3ERR_IO              = 5,
329         NFS3ERR_NXIO            = 6,
330         NFS3ERR_ACCES           = 13,
331         NFS3ERR_EXIST           = 17,
332         NFS3ERR_XDEV            = 18,
333         NFS3ERR_NODEV           = 19,
334         NFS3ERR_NOTDIR          = 20,
335         NFS3ERR_ISDIR           = 21,
336         NFS3ERR_INVAL           = 22,
337         NFS3ERR_FBIG            = 27,
338         NFS3ERR_NOSPC           = 28,
339         NFS3ERR_ROFS            = 30,
340         NFS3ERR_MLINK           = 31,
341         NFS3ERR_NAMETOOLONG     = 63,
342         NFS3ERR_NOTEMPTY        = 66,
343         NFS3ERR_DQUOT           = 69,
344         NFS3ERR_STALE           = 70,
345         NFS3ERR_REMOTE          = 71,
346         NFS3ERR_BADHANDLE       = 10001,
347         NFS3ERR_NOT_SYNC        = 10002,
348         NFS3ERR_BAD_COOKIE      = 10003,
349         NFS3ERR_NOTSUPP         = 10004,
350         NFS3ERR_TOOSMALL        = 10005,
351         NFS3ERR_SERVERFAULT     = 10006,
352         NFS3ERR_BADTYPE         = 10007,
353         NFS3ERR_JUKEBOX         = 10008
357  * File types (v3)
358  */
359 enum ftype3 {
360         NF3REG  = 1,            /* regular file */
361         NF3DIR  = 2,            /* directory */
362         NF3BLK  = 3,            /* block special */
363         NF3CHR  = 4,            /* character special */
364         NF3LNK  = 5,            /* symbolic link */
365         NF3SOCK = 6,            /* unix domain sockets */
366         NF3FIFO = 7             /* named pipe */
369 struct specdata3 {
370         uint32  specdata1;
371         uint32  specdata2;
375  * File access handle (v3)
376  */
377 struct nfs_fh3 {
378         opaque data<NFS3_FHSIZE>;
381 /* 
382  * Timeval (v3)
383  */
384 struct nfstime3 {
385         uint32  seconds;
386         uint32  nseconds;
391  * File attributes (v3)
392  */
393 struct fattr3 {
394         ftype3  type;           /* file type */
395         mode3   mode;           /* protection mode bits */
396         uint32  nlink;          /* # hard links */
397         uid3    uid;            /* owner user id */
398         gid3    gid;            /* owner group id */
399         size3   size;           /* file size in bytes */
400         size3   used;           /* prefered block size */
401         specdata3 rdev;         /* special device # */
402         uint64 fsid;            /* device # */
403         fileid3 fileid;         /* inode # */
404         nfstime3 atime;         /* time of last access */
405         nfstime3 mtime;         /* time of last modification */
406         nfstime3 ctime;         /* time of last change */
409 union post_op_attr switch (bool attributes_follow) {
410 case TRUE:
411         fattr3  attributes;
412 case FALSE:
413         void;
416 struct wcc_attr {
417         size3   size;
418         nfstime3 mtime;
419         nfstime3 ctime;
422 union pre_op_attr switch (bool attributes_follow) {
423 case TRUE:
424         wcc_attr attributes;
425 case FALSE:
426         void;
429 struct wcc_data {
430         pre_op_attr before;
431         post_op_attr after;
434 union post_op_fh3 switch (bool handle_follows) {
435 case TRUE:
436         nfs_fh3 handle;
437 case FALSE:
438         void;
442  * File attributes which can be set (v3)
443  */
444 enum time_how {
445         DONT_CHANGE             = 0,
446         SET_TO_SERVER_TIME      = 1,
447         SET_TO_CLIENT_TIME      = 2
450 union set_mode3 switch (bool set_it) {
451 case TRUE:
452         mode3   mode;
453 default:
454         void;
457 union set_uid3 switch (bool set_it) {
458 case TRUE:
459         uid3    uid;
460 default:
461         void;
464 union set_gid3 switch (bool set_it) {
465 case TRUE:
466         gid3    gid;
467 default:
468         void;
471 union set_size3 switch (bool set_it) {
472 case TRUE:
473         size3   size;
474 default:
475         void;
478 union set_atime switch (time_how set_it) {
479 case SET_TO_CLIENT_TIME:
480         nfstime3        atime;
481 default:
482         void;
485 union set_mtime switch (time_how set_it) {
486 case SET_TO_CLIENT_TIME:
487         nfstime3        mtime;
488 default:
489         void;
492 struct sattr3 {
493         set_mode3       mode;
494         set_uid3        uid;
495         set_gid3        gid;
496         set_size3       size;
497         set_atime       atime;
498         set_mtime       mtime;
502  * Arguments for directory operations (v3)
503  */
504 struct diropargs3 {
505         nfs_fh3 dir;            /* directory file handle */
506         filename3 name;         /* name (up to NFS_MAXNAMLEN bytes) */
510  * Arguments to getattr (v3).
511  */
512 struct GETATTR3args {
513         nfs_fh3         object;
516 struct GETATTR3resok {
517         fattr3          obj_attributes;
520 union GETATTR3res switch (nfsstat3 status) {
521 case NFS3_OK:
522         GETATTR3resok   resok;
523 default:
524         void;
528  * Arguments to setattr (v3).
529  */
530 union sattrguard3 switch (bool check) {
531 case TRUE:
532         nfstime3        obj_ctime;
533 case FALSE:
534         void;
537 struct SETATTR3args {
538         nfs_fh3         object;
539         sattr3          new_attributes;
540         sattrguard3     guard;
543 struct SETATTR3resok {
544         wcc_data        obj_wcc;
547 struct SETATTR3resfail {
548         wcc_data        obj_wcc;
551 union SETATTR3res switch (nfsstat3 status) {
552 case NFS3_OK:
553         SETATTR3resok   resok;
554 default:
555         SETATTR3resfail resfail;
559  * Arguments to lookup (v3).
560  */
561 struct LOOKUP3args {
562         diropargs3      what;
565 struct LOOKUP3resok {
566         nfs_fh3         object;
567         post_op_attr    obj_attributes;
568         post_op_attr    dir_attributes;
571 struct LOOKUP3resfail {
572         post_op_attr    dir_attributes;
575 union LOOKUP3res switch (nfsstat3 status) {
576 case NFS3_OK:
577         LOOKUP3resok    resok;
578 default:
579         LOOKUP3resfail  resfail;
583  * Arguments to access (v3).
584  */
585 const ACCESS3_READ      = 0x0001;
586 const ACCESS3_LOOKUP    = 0x0002;
587 const ACCESS3_MODIFY    = 0x0004;
588 const ACCESS3_EXTEND    = 0x0008;
589 const ACCESS3_DELETE    = 0x0010;
590 const ACCESS3_EXECUTE   = 0x0020;
592 struct ACCESS3args {
593         nfs_fh3         object;
594         uint32          access;
597 struct ACCESS3resok {
598         post_op_attr    obj_attributes;
599         uint32          access;
602 struct ACCESS3resfail {
603         post_op_attr    obj_attributes;
606 union ACCESS3res switch (nfsstat3 status) {
607 case NFS3_OK:
608         ACCESS3resok    resok;
609 default:
610         ACCESS3resfail  resfail;
614  * Arguments to readlink (v3).
615  */
616 struct READLINK3args {
617         nfs_fh3         symlink;
620 struct READLINK3resok {
621         post_op_attr    symlink_attributes;
622         nfspath3        data;
625 struct READLINK3resfail {
626         post_op_attr    symlink_attributes;
629 union READLINK3res switch (nfsstat3 status) {
630 case NFS3_OK:
631         READLINK3resok  resok;
632 default:
633         READLINK3resfail resfail;
637  * Arguments to read (v3).
638  */
639 struct READ3args {
640         nfs_fh3         file;
641         offset3         offset;
642         count3          count;
645 struct READ3resok {
646         post_op_attr    file_attributes;
647         count3          count;
648         bool            eof;
649         opaque          data<>;
652 struct READ3resfail {
653         post_op_attr    file_attributes;
656 /* XXX: solaris 2.6 uses ``nfsstat'' here */
657 union READ3res switch (nfsstat3 status) {
658 case NFS3_OK:
659         READ3resok      resok;
660 default:
661         READ3resfail    resfail;
665  * Arguments to write (v3).
666  */
667 enum stable_how {
668         UNSTABLE        = 0,
669         DATA_SYNC       = 1,
670         FILE_SYNC       = 2
673 struct WRITE3args {
674         nfs_fh3         file;
675         offset3         offset;
676         count3          count;
677         stable_how      stable;
678         opaque          data<>;
681 struct WRITE3resok {
682         wcc_data        file_wcc;
683         count3          count;
684         stable_how      committed;
685         writeverf3      verf;
688 struct WRITE3resfail {
689         wcc_data        file_wcc;
692 union WRITE3res switch (nfsstat3 status) {
693 case NFS3_OK:
694         WRITE3resok     resok;
695 default:
696         WRITE3resfail   resfail;
700  * Arguments to create (v3).
701  */
702 enum createmode3 {
703         UNCHECKED       = 0,
704         GUARDED         = 1,
705         EXCLUSIVE       = 2
708 union createhow3 switch (createmode3 mode) {
709 case UNCHECKED:
710 case GUARDED:
711         sattr3          obj_attributes;
712 case EXCLUSIVE:
713         createverf3     verf;
716 struct CREATE3args {
717         diropargs3      where;
718         createhow3      how;
721 struct CREATE3resok {
722         post_op_fh3     obj;
723         post_op_attr    obj_attributes;
724         wcc_data        dir_wcc;
727 struct CREATE3resfail {
728         wcc_data        dir_wcc;
731 union CREATE3res switch (nfsstat3 status) {
732 case NFS3_OK:
733         CREATE3resok    resok;
734 default:
735         CREATE3resfail  resfail;
739  * Arguments to mkdir (v3).
740  */
741 struct MKDIR3args {
742         diropargs3      where;
743         sattr3          attributes;
746 struct MKDIR3resok {
747         post_op_fh3     obj;
748         post_op_attr    obj_attributes;
749         wcc_data        dir_wcc;
752 struct MKDIR3resfail {
753         wcc_data        dir_wcc;
756 union MKDIR3res switch (nfsstat3 status) {
757 case NFS3_OK:
758         MKDIR3resok     resok;
759 default:
760         MKDIR3resfail   resfail;
764  * Arguments to symlink (v3).
765  */
766 struct symlinkdata3 {
767         sattr3          symlink_attributes;
768         nfspath3        symlink_data;
771 struct SYMLINK3args {
772         diropargs3      where;
773         symlinkdata3    symlink;
776 struct SYMLINK3resok {
777         post_op_fh3     obj;
778         post_op_attr    obj_attributes;
779         wcc_data        dir_wcc;
782 struct SYMLINK3resfail {
783         wcc_data        dir_wcc;
786 union SYMLINK3res switch (nfsstat3 status) {
787 case NFS3_OK:
788         SYMLINK3resok   resok;
789 default:
790         SYMLINK3resfail resfail;
794  * Arguments to mknod (v3).
795  */
796 struct devicedata3 {
797         sattr3          dev_attributes;
798         specdata3       spec;
801 union mknoddata3 switch (ftype3 type) {
802 case NF3CHR:
803 case NF3BLK:
804         devicedata3     device;
805 case NF3SOCK:
806 case NF3FIFO:
807         sattr3          pipe_attributes;
808 default:
809         void;
812 struct MKNOD3args {
813         diropargs3      where;
814         mknoddata3      what;
817 struct MKNOD3resok {
818         post_op_fh3     obj;
819         post_op_attr    obj_attributes;
820         wcc_data        dir_wcc;
823 struct MKNOD3resfail {
824         wcc_data        dir_wcc;
827 union MKNOD3res switch (nfsstat3 status) {
828 case NFS3_OK:
829         MKNOD3resok     resok;
830 default:
831         MKNOD3resfail   resfail;
835  * Arguments to remove (v3).
836  */
837 struct REMOVE3args {
838         diropargs3      object;
841 struct REMOVE3resok {
842         wcc_data        dir_wcc;
845 struct REMOVE3resfail {
846         wcc_data        dir_wcc;
849 union REMOVE3res switch (nfsstat3 status) {
850 case NFS3_OK:
851         REMOVE3resok    resok;
852 default:
853         REMOVE3resfail  resfail;
857  * Arguments to rmdir (v3).
858  */
859 struct RMDIR3args {
860         diropargs3      object;
863 struct RMDIR3resok {
864         wcc_data        dir_wcc;
867 struct RMDIR3resfail {
868         wcc_data        dir_wcc;
871 union RMDIR3res switch (nfsstat3 status) {
872 case NFS3_OK:
873         RMDIR3resok     resok;
874 default:
875         RMDIR3resfail   resfail;
879  * Arguments to rename (v3).
880  */
881 struct RENAME3args {
882         diropargs3      from;
883         diropargs3      to;
886 struct RENAME3resok {
887         wcc_data        fromdir_wcc;
888         wcc_data        todir_wcc;
891 struct RENAME3resfail {
892         wcc_data        fromdir_wcc;
893         wcc_data        todir_wcc;
896 union RENAME3res switch (nfsstat3 status) {
897 case NFS3_OK:
898         RENAME3resok    resok;
899 default:
900         RENAME3resfail  resfail;
904  * Arguments to link (v3).
905  */
906 struct LINK3args {
907         nfs_fh3         file;
908         diropargs3      link;
911 struct LINK3resok {
912         post_op_attr    file_attributes;
913         wcc_data        linkdir_wcc;
916 struct LINK3resfail {
917         post_op_attr    file_attributes;
918         wcc_data        linkdir_wcc;
921 union LINK3res switch (nfsstat3 status) {
922 case NFS3_OK:
923         LINK3resok      resok;
924 default:
925         LINK3resfail    resfail;
929  * Arguments to readdir (v3).
930  */
931 struct READDIR3args {
932         nfs_fh3         dir;
933         cookie3         cookie;
934         cookieverf3     cookieverf;
935         count3          count;
938 struct entry3 {
939         fileid3         fileid;
940         filename3       name;
941         cookie3         cookie;
942         entry3          *nextentry;
945 struct dirlist3 {
946         entry3          *entries;
947         bool            eof;
950 struct READDIR3resok {
951         post_op_attr    dir_attributes;
952         cookieverf3     cookieverf;
953         dirlist3        reply;
956 struct READDIR3resfail {
957         post_op_attr    dir_attributes;
960 union READDIR3res switch (nfsstat3 status) {
961 case NFS3_OK:
962         READDIR3resok   resok;
963 default:
964         READDIR3resfail resfail;
968  * Arguments to readdirplus (v3).
969  */
970 struct READDIRPLUS3args {
971         nfs_fh3         dir;
972         cookie3         cookie;
973         cookieverf3     cookieverf;
974         count3          dircount;
975         count3          maxcount;
978 struct entryplus3 {
979         fileid3         fileid;
980         filename3       name;
981         cookie3         cookie;
982         post_op_attr    name_attributes;
983         post_op_fh3     name_handle;
984         entryplus3      *nextentry;
987 struct dirlistplus3 {
988         entryplus3      *entries;
989         bool            eof;
992 struct READDIRPLUS3resok {
993         post_op_attr    dir_attributes;
994         cookieverf3     cookieverf;
995         dirlistplus3    reply;
998 struct READDIRPLUS3resfail {
999         post_op_attr    dir_attributes;
1002 union READDIRPLUS3res switch (nfsstat3 status) {
1003 case NFS3_OK:
1004         READDIRPLUS3resok       resok;
1005 default:
1006         READDIRPLUS3resfail     resfail;
1010  * Arguments to fsstat (v3).
1011  */
1012 struct FSSTAT3args {
1013         nfs_fh3         fsroot;
1016 struct FSSTAT3resok {
1017         post_op_attr    obj_attributes;
1018         size3           tbytes;
1019         size3           fbytes;
1020         size3           abytes;
1021         size3           tfiles;
1022         size3           ffiles;
1023         size3           afiles;
1024         uint32          invarsec;
1027 struct FSSTAT3resfail {
1028         post_op_attr    obj_attributes;
1031 union FSSTAT3res switch (nfsstat3 status) {
1032 case NFS3_OK:
1033         FSSTAT3resok    resok;
1034 default:
1035         FSSTAT3resfail  resfail;
1039  * Arguments to fsinfo (v3).
1040  */
1041 const FSF3_LINK         = 0x0001;
1042 const FSF3_SYMLINK      = 0x0002;
1043 const FSF3_HOMOGENEOUS  = 0x0008;
1044 const FSF3_CANSETTIME   = 0x0010;
1046 struct FSINFO3args {
1047         nfs_fh3         fsroot;
1050 struct FSINFO3resok {
1051         post_op_attr    obj_attributes;
1052         uint32          rtmax;
1053         uint32          rtpref;
1054         uint32          rtmult;
1055         uint32          wtmax;
1056         uint32          wtpref;
1057         uint32          wtmult;
1058         uint32          dtpref;
1059         size3           maxfilesize;
1060         nfstime3        time_delta;
1061         uint32          properties;
1064 struct FSINFO3resfail {
1065         post_op_attr    obj_attributes;
1068 union FSINFO3res switch (nfsstat3 status) {
1069 case NFS3_OK:
1070         FSINFO3resok    resok;
1071 default:
1072         FSINFO3resfail  resfail;
1076  * Arguments to pathconf (v3).
1077  */
1078 struct PATHCONF3args {
1079         nfs_fh3         object;
1082 struct PATHCONF3resok {
1083         post_op_attr    obj_attributes;
1084         uint32          linkmax;
1085         uint32          name_max;
1086         bool            no_trunc;
1087         bool            chown_restricted;
1088         bool            case_insensitive;
1089         bool            case_preserving;
1092 struct PATHCONF3resfail {
1093         post_op_attr    obj_attributes;
1096 union PATHCONF3res switch (nfsstat3 status) {
1097 case NFS3_OK:
1098         PATHCONF3resok  resok;
1099 default:
1100         PATHCONF3resfail        resfail;
1104  * Arguments to commit (v3).
1105  */
1106 struct COMMIT3args {
1107         nfs_fh3         file;
1108         offset3         offset;
1109         count3          count;
1112 struct COMMIT3resok {
1113         wcc_data        file_wcc;
1114         writeverf3      verf;
1117 struct COMMIT3resfail {
1118         wcc_data        file_wcc;
1121 union COMMIT3res switch (nfsstat3 status) {
1122 case NFS3_OK:
1123         COMMIT3resok    resok;
1124 default:
1125         COMMIT3resfail  resfail;
1128 #endif /* WANT_NFS3 */
1131  * Remote file service routines
1132  */
1133 program NFS_PROGRAM {
1134         version NFS_VERSION {
1135                 void 
1136                 NFSPROC_NULL(void) = 0;
1138                 attrstat 
1139                 NFSPROC_GETATTR(nfs_fh) =       1;
1141                 attrstat 
1142                 NFSPROC_SETATTR(sattrargs) = 2;
1144                 void 
1145                 NFSPROC_ROOT(void) = 3;
1147                 diropres 
1148                 NFSPROC_LOOKUP(diropargs) = 4;
1150                 readlinkres 
1151                 NFSPROC_READLINK(nfs_fh) = 5;
1153                 readres 
1154                 NFSPROC_READ(readargs) = 6;
1156                 void 
1157                 NFSPROC_WRITECACHE(void) = 7;
1159                 attrstat
1160                 NFSPROC_WRITE(writeargs) = 8;
1162                 diropres
1163                 NFSPROC_CREATE(createargs) = 9;
1165                 nfsstat
1166                 NFSPROC_REMOVE(diropargs) = 10;
1168                 nfsstat
1169                 NFSPROC_RENAME(renameargs) = 11;
1171                 nfsstat
1172                 NFSPROC_LINK(linkargs) = 12;
1174                 nfsstat
1175                 NFSPROC_SYMLINK(symlinkargs) = 13;
1177                 diropres
1178                 NFSPROC_MKDIR(createargs) = 14;
1180                 nfsstat
1181                 NFSPROC_RMDIR(diropargs) = 15;
1183                 readdirres
1184                 NFSPROC_READDIR(readdirargs) = 16;
1186                 statfsres
1187                 NFSPROC_STATFS(nfs_fh) = 17;
1188         } = 2;
1189 } = 100003;
1190 #ifdef WANT_NFS3
1191 program NFS3_PROGRAM {
1192         version NFS_V3 {
1193                 void
1194                 NFSPROC3_NULL(void)                     = 0;
1196                 GETATTR3res
1197                 NFSPROC3_GETATTR(GETATTR3args)          = 1;
1199                 SETATTR3res
1200                 NFSPROC3_SETATTR(SETATTR3args)          = 2;
1202                 LOOKUP3res
1203                 NFSPROC3_LOOKUP(LOOKUP3args)            = 3;
1205                 ACCESS3res
1206                 NFSPROC3_ACCESS(ACCESS3args)            = 4;
1208                 READLINK3res
1209                 NFSPROC3_READLINK(READLINK3args)        = 5;
1211                 READ3res
1212                 NFSPROC3_READ(READ3args)                = 6;
1214                 WRITE3res
1215                 NFSPROC3_WRITE(WRITE3args)              = 7;
1217                 CREATE3res
1218                 NFSPROC3_CREATE(CREATE3args)            = 8;
1220                 MKDIR3res
1221                 NFSPROC3_MKDIR(MKDIR3args)              = 9;
1223                 SYMLINK3res
1224                 NFSPROC3_SYMLINK(SYMLINK3args)          = 10;
1226                 MKNOD3res
1227                 NFSPROC3_MKNOD(MKNOD3args)              = 11;
1229                 REMOVE3res
1230                 NFSPROC3_REMOVE(REMOVE3args)            = 12;
1232                 RMDIR3res
1233                 NFSPROC3_RMDIR(RMDIR3args)              = 13;
1235                 RENAME3res
1236                 NFSPROC3_RENAME(RENAME3args)            = 14;
1238                 LINK3res
1239                 NFSPROC3_LINK(LINK3args)                = 15;
1241                 READDIR3res
1242                 NFSPROC3_READDIR(READDIR3args)          = 16;
1244                 READDIRPLUS3res
1245                 NFSPROC3_READDIRPLUS(READDIRPLUS3args)  = 17;
1247                 FSSTAT3res
1248                 NFSPROC3_FSSTAT(FSSTAT3args)            = 18;
1250                 FSINFO3res
1251                 NFSPROC3_FSINFO(FSINFO3args)            = 19;
1253                 PATHCONF3res
1254                 NFSPROC3_PATHCONF(PATHCONF3args)        = 20;
1256                 COMMIT3res
1257                 NFSPROC3_COMMIT(COMMIT3args)            = 21;
1258         } = 3;
1259 } = 100003;
1260 #endif