Fix mdoc(7)/man(7) mix up.
[netbsd-mini2440.git] / lib / librpcsvc / nfs_prot.x
blobbad5447d2656f0718f29bf64e8160d3ff03bca1e
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  */
30 #ifndef RPC_HDR
31 %#include <sys/cdefs.h>
32 %#ifndef __lint__
33 %/*static char sccsid[] = "from: @(#)nfs_prot.x 1.2 87/10/12 Copyr 1987 Sun Micro";*/
34 %/*static char sccsid[] = "from: @(#)nfs_prot.x 2.1 88/08/01 4.0 RPCSRC";*/
35 %__RCSID("$NetBSD: nfs_prot.x,v 1.6 2003/09/21 15:35:46 yamt Exp $");
36 %#endif /* not __lint__ */
37 #endif
39 const NFS_PORT          = 2049;
40 const NFS_MAXDATA       = 8192;
41 const NFS_MAXPATHLEN    = 1024;
42 const NFS_MAXNAMLEN     = 255;
43 const NFS_FHSIZE        = 32;
44 const NFS_COOKIESIZE    = 4;
45 const NFS_FIFO_DEV      = -1;   /* size kludge for named pipes */
48  * File types
49  */
50 const NFSMODE_FMT  = 0170000;   /* type of file */
51 const NFSMODE_DIR  = 0040000;   /* directory */
52 const NFSMODE_CHR  = 0020000;   /* character special */
53 const NFSMODE_BLK  = 0060000;   /* block special */
54 const NFSMODE_REG  = 0100000;   /* regular */
55 const NFSMODE_LNK  = 0120000;   /* symbolic link */
56 const NFSMODE_SOCK = 0140000;   /* socket */
57 const NFSMODE_FIFO = 0010000;   /* fifo */
60  * Error status
61  */
62 enum nfsstat {
63         NFS_OK= 0,              /* no error */
64         NFSERR_PERM=1,          /* Not owner */
65         NFSERR_NOENT=2,         /* No such file or directory */
66         NFSERR_IO=5,            /* I/O error */
67         NFSERR_NXIO=6,          /* No such device or address */
68         NFSERR_ACCES=13,        /* Permission denied */
69         NFSERR_EXIST=17,        /* File exists */
70         NFSERR_NODEV=19,        /* No such device */
71         NFSERR_NOTDIR=20,       /* Not a directory*/
72         NFSERR_ISDIR=21,        /* Is a directory */
73         NFSERR_FBIG=27,         /* File too large */
74         NFSERR_NOSPC=28,        /* No space left on device */
75         NFSERR_ROFS=30,         /* Read-only file system */
76         NFSERR_NAMETOOLONG=63,  /* File name too long */
77         NFSERR_NOTEMPTY=66,     /* Directory not empty */
78         NFSERR_DQUOT=69,        /* Disc quota exceeded */
79         NFSERR_STALE=70,        /* Stale NFS file handle */
80         NFSERR_WFLUSH=99        /* write cache flushed */
84  * File types
85  */
86 enum ftype {
87         NFNON = 0,      /* non-file */
88         NFREG = 1,      /* regular file */
89         NFDIR = 2,      /* directory */
90         NFBLK = 3,      /* block special */
91         NFCHR = 4,      /* character special */
92         NFLNK = 5,      /* symbolic link */
93         NFSOCK = 6,     /* unix domain sockets */
94         NFBAD = 7,      /* unused */
95         NFFIFO = 8      /* named pipe */
99  * File access handle
100  */
101 struct nfs_fh {
102         opaque data[NFS_FHSIZE];
106  * Timeval
107  */
108 struct nfstime {
109         unsigned seconds;
110         unsigned useconds;
115  * File attributes
116  */
117 struct fattr {
118         ftype type;             /* file type */
119         unsigned mode;          /* protection mode bits */
120         unsigned nlink;         /* # hard links */
121         unsigned uid;           /* owner user id */
122         unsigned gid;           /* owner group id */
123         unsigned size;          /* file size in bytes */
124         unsigned blocksize;     /* prefered block size */
125         unsigned rdev;          /* special device # */
126         unsigned blocks;        /* Kb of disk used by file */
127         unsigned fsid;          /* device # */
128         unsigned fileid;        /* inode # */
129         nfstime atime;          /* time of last access */
130         nfstime mtime;          /* time of last modification */
131         nfstime ctime;          /* time of last change */
135  * File attributes which can be set
136  */
137 struct sattr {
138         unsigned mode;  /* protection mode bits */
139         unsigned uid;   /* owner user id */
140         unsigned gid;   /* owner group id */
141         unsigned size;  /* file size in bytes */
142         nfstime atime;  /* time of last access */
143         nfstime mtime;  /* time of last modification */
147 typedef string filename<NFS_MAXNAMLEN>;
148 typedef string nfspath<NFS_MAXPATHLEN>;
151  * Reply status with file attributes
152  */
153 union attrstat switch (nfsstat status) {
154 case NFS_OK:
155         fattr attributes;
156 default:
157         void;
160 struct sattrargs {
161         nfs_fh file;
162         sattr attributes;
166  * Arguments for directory operations
167  */
168 struct diropargs {
169         nfs_fh  dir;    /* directory file handle */
170         filename name;          /* name (up to NFS_MAXNAMLEN bytes) */
173 struct diropokres {
174         nfs_fh file;
175         fattr attributes;
179  * Results from directory operation
180  */
181 union diropres switch (nfsstat status) {
182 case NFS_OK:
183         diropokres diropres;
184 default:
185         void;
188 union readlinkres switch (nfsstat status) {
189 case NFS_OK:
190         nfspath data;
191 default:
192         void;
196  * Arguments to remote read
197  */
198 struct readargs {
199         nfs_fh file;            /* handle for file */
200         unsigned offset;        /* byte offset in file */
201         unsigned count;         /* immediate read count */
202         unsigned totalcount;    /* total read count (from this offset)*/
206  * Status OK portion of remote read reply
207  */
208 struct readokres {
209         fattr   attributes;     /* attributes, need for pagin*/
210         opaque data<NFS_MAXDATA>;
213 union readres switch (nfsstat status) {
214 case NFS_OK:
215         readokres reply;
216 default:
217         void;
221  * Arguments to remote write
222  */
223 struct writeargs {
224         nfs_fh  file;           /* handle for file */
225         unsigned beginoffset;   /* beginning byte offset in file */
226         unsigned offset;        /* current byte offset in file */
227         unsigned totalcount;    /* total write count (to this offset)*/
228         opaque data<NFS_MAXDATA>;
231 struct createargs {
232         diropargs where;
233         sattr attributes;
236 struct renameargs {
237         diropargs from;
238         diropargs to;
241 struct linkargs {
242         nfs_fh from;
243         diropargs to;
246 struct symlinkargs {
247         diropargs from;
248         nfspath to;
249         sattr attributes;
253 typedef opaque nfscookie[NFS_COOKIESIZE];
256  * Arguments to readdir
257  */
258 struct readdirargs {
259         nfs_fh dir;             /* directory handle */
260         nfscookie cookie;
261         unsigned count;         /* number of directory bytes to read */
264 struct entry {
265         unsigned fileid;
266         filename name;
267         nfscookie cookie;
268         entry *nextentry;
271 struct dirlist {
272         entry *entries;
273         bool eof;
276 union readdirres switch (nfsstat status) {
277 case NFS_OK:
278         dirlist reply;
279 default:
280         void;
283 struct statfsokres {
284         unsigned tsize; /* preferred transfer size in bytes */
285         unsigned bsize; /* fundamental file system block size */
286         unsigned blocks;        /* total blocks in file system */
287         unsigned bfree; /* free blocks in fs */
288         unsigned bavail;        /* free blocks avail to non-superuser */
291 union statfsres switch (nfsstat status) {
292 case NFS_OK:
293         statfsokres reply;
294 default:
295         void;
299  * NFSv3 constants and types
300  */
301 const NFS3_FHSIZE       = 64;   /* maximum size in bytes of a file handle */
302 const NFS3_COOKIEVERFSIZE = 8;  /* size of a cookie verifier for READDIR */
303 const NFS3_CREATEVERFSIZE = 8;  /* size of the verifier used for CREATE */
304 const NFS3_WRITEVERFSIZE = 8;   /* size of the verifier used for WRITE */
306 typedef string filename3<>;
307 typedef string nfspath3<>;
308 typedef u_int64_t fileid3;
309 typedef u_int64_t cookie3;
310 typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE];
311 typedef opaque createverf3[NFS3_CREATEVERFSIZE];
312 typedef opaque writeverf3[NFS3_WRITEVERFSIZE];
313 typedef u_int32_t uid3;
314 typedef u_int32_t gid3;
315 typedef u_int64_t size3;
316 typedef u_int64_t offset3;
317 typedef u_int32_t mode3;
318 typedef u_int32_t count3;
321  * Error status (v3)
322  */
323 enum nfsstat3 {
324         NFS3_OK = 0,
325         NFS3ERR_PERM            = 1,
326         NFS3ERR_NOENT           = 2,
327         NFS3ERR_IO              = 5,
328         NFS3ERR_NXIO            = 6,
329         NFS3ERR_ACCES           = 13,
330         NFS3ERR_EXIST           = 17,
331         NFS3ERR_XDEV            = 18,
332         NFS3ERR_NODEV           = 19,
333         NFS3ERR_NOTDIR          = 20,
334         NFS3ERR_ISDIR           = 21,
335         NFS3ERR_INVAL           = 22,
336         NFS3ERR_FBIG            = 27,
337         NFS3ERR_NOSPC           = 28,
338         NFS3ERR_ROFS            = 30,
339         NFS3ERR_MLINK           = 31,
340         NFS3ERR_NAMETOOLONG     = 63,
341         NFS3ERR_NOTEMPTY        = 66,
342         NFS3ERR_DQUOT           = 69,
343         NFS3ERR_STALE           = 70,
344         NFS3ERR_REMOTE          = 71,
345         NFS3ERR_BADHANDLE       = 10001,
346         NFS3ERR_NOT_SYNC        = 10002,
347         NFS3ERR_BAD_COOKIE      = 10003,
348         NFS3ERR_NOTSUPP         = 10004,
349         NFS3ERR_TOOSMALL        = 10005,
350         NFS3ERR_SERVERFAULT     = 10006,
351         NFS3ERR_BADTYPE         = 10007,
352         NFS3ERR_JUKEBOX         = 10008
356  * File types (v3)
357  */
358 enum ftype3 {
359         NF3REG  = 1,            /* regular file */
360         NF3DIR  = 2,            /* directory */
361         NF3BLK  = 3,            /* block special */
362         NF3CHR  = 4,            /* character special */
363         NF3LNK  = 5,            /* symbolic link */
364         NF3SOCK = 6,            /* unix domain sockets */
365         NF3FIFO = 7             /* named pipe */
368 struct specdata3 {
369         u_int32_t       specdata1;
370         u_int32_t       specdata2;
374  * File access handle (v3)
375  */
376 struct nfs_fh3 {
377         opaque data<NFS3_FHSIZE>;
380 /* 
381  * Timeval (v3)
382  */
383 struct nfstime3 {
384         u_int32_t       seconds;
385         u_int32_t       nseconds;
390  * File attributes (v3)
391  */
392 struct fattr3 {
393         ftype3  type;           /* file type */
394         mode3   mode;           /* protection mode bits */
395         u_int32_t       nlink;          /* # hard links */
396         uid3    uid;            /* owner user id */
397         gid3    gid;            /* owner group id */
398         size3   size;           /* file size in bytes */
399         size3   used;           /* prefered block size */
400         specdata3 rdev;         /* special device # */
401         u_int64_t fsid;         /* device # */
402         fileid3 fileid;         /* inode # */
403         nfstime3 atime;         /* time of last access */
404         nfstime3 mtime;         /* time of last modification */
405         nfstime3 ctime;         /* time of last change */
408 union post_op_attr switch (bool attributes_follow) {
409 case TRUE:
410         fattr3  attributes;
411 case FALSE:
412         void;
415 struct wcc_attr {
416         size3   size;
417         nfstime3 mtime;
418         nfstime3 ctime;
421 union pre_op_attr switch (bool attributes_follow) {
422 case TRUE:
423         wcc_attr attributes;
424 case FALSE:
425         void;
428 struct wcc_data {
429         pre_op_attr before;
430         post_op_attr after;
433 union post_op_fh3 switch (bool handle_follows) {
434 case TRUE:
435         nfs_fh3 handle;
436 case FALSE:
437         void;
441  * File attributes which can be set (v3)
442  */
443 enum time_how {
444         DONT_CHANGE             = 0,
445         SET_TO_SERVER_TIME      = 1,
446         SET_TO_CLIENT_TIME      = 2
449 union set_mode3 switch (bool set_it) {
450 case TRUE:
451         mode3   mode;
452 default:
453         void;
456 union set_uid3 switch (bool set_it) {
457 case TRUE:
458         uid3    uid;
459 default:
460         void;
463 union set_gid3 switch (bool set_it) {
464 case TRUE:
465         gid3    gid;
466 default:
467         void;
470 union set_size3 switch (bool set_it) {
471 case TRUE:
472         size3   size;
473 default:
474         void;
477 union set_atime switch (time_how set_it) {
478 case SET_TO_CLIENT_TIME:
479         nfstime3        atime;
480 default:
481         void;
484 union set_mtime switch (time_how set_it) {
485 case SET_TO_CLIENT_TIME:
486         nfstime3        mtime;
487 default:
488         void;
491 struct sattr3 {
492         set_mode3       mode;
493         set_uid3        uid;
494         set_gid3        gid;
495         set_size3       size;
496         set_atime       atime;
497         set_mtime       mtime;
501  * Arguments for directory operations (v3)
502  */
503 struct diropargs3 {
504         nfs_fh3 dir;            /* directory file handle */
505         filename3 name;         /* name (up to NFS_MAXNAMLEN bytes) */
509  * Arguments to getattr (v3).
510  */
511 struct GETATTR3args {
512         nfs_fh3         object;
515 struct GETATTR3resok {
516         fattr3          obj_attributes;
519 union GETATTR3res switch (nfsstat3 status) {
520 case NFS3_OK:
521         GETATTR3resok   resok;
522 default:
523         void;
527  * Arguments to setattr (v3).
528  */
529 union sattrguard3 switch (bool check) {
530 case TRUE:
531         nfstime3        obj_ctime;
532 case FALSE:
533         void;
536 struct SETATTR3args {
537         nfs_fh3         object;
538         sattr3          new_attributes;
539         sattrguard3     guard;
542 struct SETATTR3resok {
543         wcc_data        obj_wcc;
546 struct SETATTR3resfail {
547         wcc_data        obj_wcc;
550 union SETATTR3res switch (nfsstat3 status) {
551 case NFS3_OK:
552         SETATTR3resok   resok;
553 default:
554         SETATTR3resfail resfail;
558  * Arguments to lookup (v3).
559  */
560 struct LOOKUP3args {
561         diropargs3      what;
564 struct LOOKUP3resok {
565         nfs_fh3         object;
566         post_op_attr    obj_attributes;
567         post_op_attr    dir_attributes;
570 struct LOOKUP3resfail {
571         post_op_attr    dir_attributes;
574 union LOOKUP3res switch (nfsstat3 status) {
575 case NFS3_OK:
576         LOOKUP3resok    resok;
577 default:
578         LOOKUP3resfail  resfail;
582  * Arguments to access (v3).
583  */
584 const ACCESS3_READ      = 0x0001;
585 const ACCESS3_LOOKUP    = 0x0002;
586 const ACCESS3_MODIFY    = 0x0004;
587 const ACCESS3_EXTEND    = 0x0008;
588 const ACCESS3_DELETE    = 0x0010;
589 const ACCESS3_EXECUTE   = 0x0020;
591 struct ACCESS3args {
592         nfs_fh3         object;
593         u_int32_t               access;
596 struct ACCESS3resok {
597         post_op_attr    obj_attributes;
598         u_int32_t               access;
601 struct ACCESS3resfail {
602         post_op_attr    obj_attributes;
605 union ACCESS3res switch (nfsstat3 status) {
606 case NFS3_OK:
607         ACCESS3resok    resok;
608 default:
609         ACCESS3resfail  resfail;
613  * Arguments to readlink (v3).
614  */
615 struct READLINK3args {
616         nfs_fh3         symlink;
619 struct READLINK3resok {
620         post_op_attr    symlink_attributes;
621         nfspath3        data;
624 struct READLINK3resfail {
625         post_op_attr    symlink_attributes;
628 union READLINK3res switch (nfsstat3 status) {
629 case NFS3_OK:
630         READLINK3resok  resok;
631 default:
632         READLINK3resfail resfail;
636  * Arguments to read (v3).
637  */
638 struct READ3args {
639         nfs_fh3         file;
640         offset3         offset;
641         count3          count;
644 struct READ3resok {
645         post_op_attr    file_attributes;
646         count3          count;
647         bool            eof;
648         opaque          data<>;
651 struct READ3resfail {
652         post_op_attr    file_attributes;
655 /* XXX: solaris 2.6 uses ``nfsstat'' here */
656 union READ3res switch (nfsstat3 status) {
657 case NFS3_OK:
658         READ3resok      resok;
659 default:
660         READ3resfail    resfail;
664  * Arguments to write (v3).
665  */
666 enum stable_how {
667         UNSTABLE        = 0,
668         DATA_SYNC       = 1,
669         FILE_SYNC       = 2
672 struct WRITE3args {
673         nfs_fh3         file;
674         offset3         offset;
675         count3          count;
676         stable_how      stable;
677         opaque          data<>;
680 struct WRITE3resok {
681         wcc_data        file_wcc;
682         count3          count;
683         stable_how      committed;
684         writeverf3      verf;
687 struct WRITE3resfail {
688         wcc_data        file_wcc;
691 union WRITE3res switch (nfsstat3 status) {
692 case NFS3_OK:
693         WRITE3resok     resok;
694 default:
695         WRITE3resfail   resfail;
699  * Arguments to create (v3).
700  */
701 enum createmode3 {
702         UNCHECKED       = 0,
703         GUARDED         = 1,
704         EXCLUSIVE       = 2
707 union createhow3 switch (createmode3 mode) {
708 case UNCHECKED:
709 case GUARDED:
710         sattr3          obj_attributes;
711 case EXCLUSIVE:
712         createverf3     verf;
715 struct CREATE3args {
716         diropargs3      where;
717         createhow3      how;
720 struct CREATE3resok {
721         post_op_fh3     obj;
722         post_op_attr    obj_attributes;
723         wcc_data        dir_wcc;
726 struct CREATE3resfail {
727         wcc_data        dir_wcc;
730 union CREATE3res switch (nfsstat3 status) {
731 case NFS3_OK:
732         CREATE3resok    resok;
733 default:
734         CREATE3resfail  resfail;
738  * Arguments to mkdir (v3).
739  */
740 struct MKDIR3args {
741         diropargs3      where;
742         sattr3          attributes;
745 struct MKDIR3resok {
746         post_op_fh3     obj;
747         post_op_attr    obj_attributes;
748         wcc_data        dir_wcc;
751 struct MKDIR3resfail {
752         wcc_data        dir_wcc;
755 union MKDIR3res switch (nfsstat3 status) {
756 case NFS3_OK:
757         MKDIR3resok     resok;
758 default:
759         MKDIR3resfail   resfail;
763  * Arguments to symlink (v3).
764  */
765 struct symlinkdata3 {
766         sattr3          symlink_attributes;
767         nfspath3        symlink_data;
770 struct SYMLINK3args {
771         diropargs3      where;
772         symlinkdata3    symlink;
775 struct SYMLINK3resok {
776         post_op_fh3     obj;
777         post_op_attr    obj_attributes;
778         wcc_data        dir_wcc;
781 struct SYMLINK3resfail {
782         wcc_data        dir_wcc;
785 union SYMLINK3res switch (nfsstat3 status) {
786 case NFS3_OK:
787         SYMLINK3resok   resok;
788 default:
789         SYMLINK3resfail resfail;
793  * Arguments to mknod (v3).
794  */
795 struct devicedata3 {
796         sattr3          dev_attributes;
797         specdata3       spec;
800 union mknoddata3 switch (ftype3 type) {
801 case NF3CHR:
802 case NF3BLK:
803         devicedata3     device;
804 case NF3SOCK:
805 case NF3FIFO:
806         sattr3          pipe_attributes;
807 default:
808         void;
811 struct MKNOD3args {
812         diropargs3      where;
813         mknoddata3      what;
816 struct MKNOD3resok {
817         post_op_fh3     obj;
818         post_op_attr    obj_attributes;
819         wcc_data        dir_wcc;
822 struct MKNOD3resfail {
823         wcc_data        dir_wcc;
826 union MKNOD3res switch (nfsstat3 status) {
827 case NFS3_OK:
828         MKNOD3resok     resok;
829 default:
830         MKNOD3resfail   resfail;
834  * Arguments to remove (v3).
835  */
836 struct REMOVE3args {
837         diropargs3      object;
840 struct REMOVE3resok {
841         wcc_data        dir_wcc;
844 struct REMOVE3resfail {
845         wcc_data        dir_wcc;
848 union REMOVE3res switch (nfsstat3 status) {
849 case NFS3_OK:
850         REMOVE3resok    resok;
851 default:
852         REMOVE3resfail  resfail;
856  * Arguments to rmdir (v3).
857  */
858 struct RMDIR3args {
859         diropargs3      object;
862 struct RMDIR3resok {
863         wcc_data        dir_wcc;
866 struct RMDIR3resfail {
867         wcc_data        dir_wcc;
870 union RMDIR3res switch (nfsstat3 status) {
871 case NFS3_OK:
872         RMDIR3resok     resok;
873 default:
874         RMDIR3resfail   resfail;
878  * Arguments to rename (v3).
879  */
880 struct RENAME3args {
881         diropargs3      from;
882         diropargs3      to;
885 struct RENAME3resok {
886         wcc_data        fromdir_wcc;
887         wcc_data        todir_wcc;
890 struct RENAME3resfail {
891         wcc_data        fromdir_wcc;
892         wcc_data        todir_wcc;
895 union RENAME3res switch (nfsstat3 status) {
896 case NFS3_OK:
897         RENAME3resok    resok;
898 default:
899         RENAME3resfail  resfail;
903  * Arguments to link (v3).
904  */
905 struct LINK3args {
906         nfs_fh3         file;
907         diropargs3      link;
910 struct LINK3resok {
911         post_op_attr    file_attributes;
912         wcc_data        linkdir_wcc;
915 struct LINK3resfail {
916         post_op_attr    file_attributes;
917         wcc_data        linkdir_wcc;
920 union LINK3res switch (nfsstat3 status) {
921 case NFS3_OK:
922         LINK3resok      resok;
923 default:
924         LINK3resfail    resfail;
928  * Arguments to readdir (v3).
929  */
930 struct READDIR3args {
931         nfs_fh3         dir;
932         cookie3         cookie;
933         cookieverf3     cookieverf;
934         count3          count;
937 struct entry3 {
938         fileid3         fileid;
939         filename3       name;
940         cookie3         cookie;
941         entry3          *nextentry;
944 struct dirlist3 {
945         entry3          *entries;
946         bool            eof;
949 struct READDIR3resok {
950         post_op_attr    dir_attributes;
951         cookieverf3     cookieverf;
952         dirlist3        reply;
955 struct READDIR3resfail {
956         post_op_attr    dir_attributes;
959 union READDIR3res switch (nfsstat3 status) {
960 case NFS3_OK:
961         READDIR3resok   resok;
962 default:
963         READDIR3resfail resfail;
967  * Arguments to readdirplus (v3).
968  */
969 struct READDIRPLUS3args {
970         nfs_fh3         dir;
971         cookie3         cookie;
972         cookieverf3     cookieverf;
973         count3          dircount;
974         count3          maxcount;
977 struct entryplus3 {
978         fileid3         fileid;
979         filename3       name;
980         cookie3         cookie;
981         post_op_attr    name_attributes;
982         post_op_fh3     name_handle;
983         entryplus3      *nextentry;
986 struct dirlistplus3 {
987         entryplus3      *entries;
988         bool            eof;
991 struct READDIRPLUS3resok {
992         post_op_attr    dir_attributes;
993         cookieverf3     cookieverf;
994         dirlistplus3    reply;
997 struct READDIRPLUS3resfail {
998         post_op_attr    dir_attributes;
1001 union READDIRPLUS3res switch (nfsstat3 status) {
1002 case NFS3_OK:
1003         READDIRPLUS3resok       resok;
1004 default:
1005         READDIRPLUS3resfail     resfail;
1009  * Arguments to fsstat (v3).
1010  */
1011 struct FSSTAT3args {
1012         nfs_fh3         fsroot;
1015 struct FSSTAT3resok {
1016         post_op_attr    obj_attributes;
1017         size3           tbytes;
1018         size3           fbytes;
1019         size3           abytes;
1020         size3           tfiles;
1021         size3           ffiles;
1022         size3           afiles;
1023         u_int32_t               invarsec;
1026 struct FSSTAT3resfail {
1027         post_op_attr    obj_attributes;
1030 union FSSTAT3res switch (nfsstat3 status) {
1031 case NFS3_OK:
1032         FSSTAT3resok    resok;
1033 default:
1034         FSSTAT3resfail  resfail;
1038  * Arguments to fsinfo (v3).
1039  */
1040 const FSF3_LINK         = 0x0001;
1041 const FSF3_SYMLINK      = 0x0002;
1042 const FSF3_HOMOGENEOUS  = 0x0008;
1043 const FSF3_CANSETTIME   = 0x0010;
1045 struct FSINFO3args {
1046         nfs_fh3         fsroot;
1049 struct FSINFO3resok {
1050         post_op_attr    obj_attributes;
1051         u_int32_t               rtmax;
1052         u_int32_t               rtpref;
1053         u_int32_t               rtmult;
1054         u_int32_t               wtmax;
1055         u_int32_t               wtpref;
1056         u_int32_t               wtmult;
1057         u_int32_t               dtpref;
1058         size3           maxfilesize;
1059         nfstime3        time_delta;
1060         u_int32_t               properties;
1063 struct FSINFO3resfail {
1064         post_op_attr    obj_attributes;
1067 union FSINFO3res switch (nfsstat3 status) {
1068 case NFS3_OK:
1069         FSINFO3resok    resok;
1070 default:
1071         FSINFO3resfail  resfail;
1075  * Arguments to pathconf (v3).
1076  */
1077 struct PATHCONF3args {
1078         nfs_fh3         object;
1081 struct PATHCONF3resok {
1082         post_op_attr    obj_attributes;
1083         u_int32_t               linkmax;
1084         u_int32_t               name_max;
1085         bool            no_trunc;
1086         bool            chown_restricted;
1087         bool            case_insensitive;
1088         bool            case_preserving;
1091 struct PATHCONF3resfail {
1092         post_op_attr    obj_attributes;
1095 union PATHCONF3res switch (nfsstat3 status) {
1096 case NFS3_OK:
1097         PATHCONF3resok  resok;
1098 default:
1099         PATHCONF3resfail        resfail;
1103  * Arguments to commit (v3).
1104  */
1105 struct COMMIT3args {
1106         nfs_fh3         file;
1107         offset3         offset;
1108         count3          count;
1111 struct COMMIT3resok {
1112         wcc_data        file_wcc;
1113         writeverf3      verf;
1116 struct COMMIT3resfail {
1117         wcc_data        file_wcc;
1120 union COMMIT3res switch (nfsstat3 status) {
1121 case NFS3_OK:
1122         COMMIT3resok    resok;
1123 default:
1124         COMMIT3resfail  resfail;
1128  * Remote file service routines
1129  */
1130 program NFS_PROGRAM {
1131         version NFS_VERSION {
1132                 void
1133                 NFSPROC_NULL(void) = 0;
1135                 attrstat
1136                 NFSPROC_GETATTR(nfs_fh) =       1;
1138                 attrstat
1139                 NFSPROC_SETATTR(sattrargs) = 2;
1141                 void
1142                 NFSPROC_ROOT(void) = 3;
1144                 diropres
1145                 NFSPROC_LOOKUP(diropargs) = 4;
1147                 readlinkres
1148                 NFSPROC_READLINK(nfs_fh) = 5;
1150                 readres
1151                 NFSPROC_READ(readargs) = 6;
1153                 void
1154                 NFSPROC_WRITECACHE(void) = 7;
1156                 attrstat
1157                 NFSPROC_WRITE(writeargs) = 8;
1159                 diropres
1160                 NFSPROC_CREATE(createargs) = 9;
1162                 nfsstat
1163                 NFSPROC_REMOVE(diropargs) = 10;
1165                 nfsstat
1166                 NFSPROC_RENAME(renameargs) = 11;
1168                 nfsstat
1169                 NFSPROC_LINK(linkargs) = 12;
1171                 nfsstat
1172                 NFSPROC_SYMLINK(symlinkargs) = 13;
1174                 diropres
1175                 NFSPROC_MKDIR(createargs) = 14;
1177                 nfsstat
1178                 NFSPROC_RMDIR(diropargs) = 15;
1180                 readdirres
1181                 NFSPROC_READDIR(readdirargs) = 16;
1183                 statfsres
1184                 NFSPROC_STATFS(nfs_fh) = 17;
1185         } = 2;
1186         version NFS_V3 {
1187                 void
1188                 NFSPROC3_NULL(void)                     = 0;
1190                 GETATTR3res
1191                 NFSPROC3_GETATTR(GETATTR3args)          = 1;
1193                 SETATTR3res
1194                 NFSPROC3_SETATTR(SETATTR3args)          = 2;
1196                 LOOKUP3res
1197                 NFSPROC3_LOOKUP(LOOKUP3args)            = 3;
1199                 ACCESS3res
1200                 NFSPROC3_ACCESS(ACCESS3args)            = 4;
1202                 READLINK3res
1203                 NFSPROC3_READLINK(READLINK3args)        = 5;
1205                 READ3res
1206                 NFSPROC3_READ(READ3args)                = 6;
1208                 WRITE3res
1209                 NFSPROC3_WRITE(WRITE3args)              = 7;
1211                 CREATE3res
1212                 NFSPROC3_CREATE(CREATE3args)            = 8;
1214                 MKDIR3res
1215                 NFSPROC3_MKDIR(MKDIR3args)              = 9;
1217                 SYMLINK3res
1218                 NFSPROC3_SYMLINK(SYMLINK3args)          = 10;
1220                 MKNOD3res
1221                 NFSPROC3_MKNOD(MKNOD3args)              = 11;
1223                 REMOVE3res
1224                 NFSPROC3_REMOVE(REMOVE3args)            = 12;
1226                 RMDIR3res
1227                 NFSPROC3_RMDIR(RMDIR3args)              = 13;
1229                 RENAME3res
1230                 NFSPROC3_RENAME(RENAME3args)            = 14;
1232                 LINK3res
1233                 NFSPROC3_LINK(LINK3args)                = 15;
1235                 READDIR3res
1236                 NFSPROC3_READDIR(READDIR3args)          = 16;
1238                 READDIRPLUS3res
1239                 NFSPROC3_READDIRPLUS(READDIRPLUS3args)  = 17;
1241                 FSSTAT3res
1242                 NFSPROC3_FSSTAT(FSSTAT3args)            = 18;
1244                 FSINFO3res
1245                 NFSPROC3_FSINFO(FSINFO3args)            = 19;
1247                 PATHCONF3res
1248                 NFSPROC3_PATHCONF(PATHCONF3args)        = 20;
1250                 COMMIT3res
1251                 NFSPROC3_COMMIT(COMMIT3args)            = 21;
1252         } = 3;
1253 } = 100003;