Merge commit '0b2e8253986c5c761129b58cfdac46d204903de1'
[unleashed.git] / include / rpcsvc / nfs_prot.x
blob1601ccb9f982306c4a522708eb875c71aaa14635
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
23  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
27 %#pragma ident  "%Z%%M% %I%     %E% SMI"
29 #ifdef RPC_HDR
31 %/*
32 % * Definitions for uint64, int64, uint32, and int32
33 % */
34 %#include <rpc/rpc_sztypes.h>
36 #endif
38 const NFS_PORT          = 2049;
39 const NFS_MAXDATA       = 8192;
40 const NFS_MAXPATHLEN    = 1024;
41 const NFS_MAXNAMLEN     = 255;
42 const NFS_FHSIZE        = 32;
43 const NFS_COOKIESIZE    = 4;
44 const NFS_FIFO_DEV      = -1;   /* size kludge for named pipes */
47  * File types
48  */
49 const NFSMODE_FMT  = 0170000;   /* type of file */
50 const NFSMODE_DIR  = 0040000;   /* directory */
51 const NFSMODE_CHR  = 0020000;   /* character special */
52 const NFSMODE_BLK  = 0060000;   /* block special */
53 const NFSMODE_REG  = 0100000;   /* regular */
54 const NFSMODE_LNK  = 0120000;   /* symbolic link */
55 const NFSMODE_SOCK = 0140000;   /* socket */
56 const NFSMODE_FIFO = 0010000;   /* fifo */
59  * Error status
60  */
61 enum 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_XDEV=18,         /* Cross-device link */
70         NFSERR_NODEV=19,        /* No such device */
71         NFSERR_NOTDIR=20,       /* Not a directory*/
72         NFSERR_ISDIR=21,        /* Is a directory */
73         NFSERR_INVAL=22,        /* Invalid argument */
74         NFSERR_FBIG=27,         /* File too large */
75         NFSERR_NOSPC=28,        /* No space left on device */
76         NFSERR_ROFS=30,         /* Read-only file system */
77         NFSERR_OPNOTSUPP=45,    /* Operation not supported */
78         NFSERR_NAMETOOLONG=63,  /* File name too long */
79         NFSERR_NOTEMPTY=66,     /* Directory not empty */
80         NFSERR_DQUOT=69,        /* Disc quota exceeded */
81         NFSERR_STALE=70,        /* Stale NFS file handle */
82         NFSERR_REMOTE=71,       /* Object is remote */
83         NFSERR_WFLUSH=72        /* write cache flushed */
87  * File types
88  */
89 enum ftype {
90         NFNON = 0,      /* non-file */
91         NFREG = 1,      /* regular file */
92         NFDIR = 2,      /* directory */
93         NFBLK = 3,      /* block special */
94         NFCHR = 4,      /* character special */
95         NFLNK = 5,      /* symbolic link */
96         NFSOCK = 6,     /* unix domain sockets */
97         NFBAD = 7,      /* unused */
98         NFFIFO = 8      /* named pipe */
102  * File access handle
103  */
104 struct nfs_fh {
105         opaque data[NFS_FHSIZE];
108 /* 
109  * Timeval
110  */
111 struct nfstime {
112         unsigned seconds;
113         unsigned useconds;
118  * File attributes
119  */
120 struct fattr {
121         ftype type;             /* file type */
122         unsigned mode;          /* protection mode bits */
123         unsigned nlink;         /* # hard links */
124         unsigned uid;           /* owner user id */
125         unsigned gid;           /* owner group id */
126         unsigned size;          /* file size in bytes */
127         unsigned blocksize;     /* prefered block size */
128         unsigned rdev;          /* special device # */
129         unsigned blocks;        /* Kb of disk used by file */
130         unsigned fsid;          /* device # */
131         unsigned fileid;        /* inode # */
132         nfstime atime;          /* time of last access */
133         nfstime mtime;          /* time of last modification */
134         nfstime ctime;          /* time of last change */
138  * File attributes which can be set
139  */
140 struct sattr {
141         unsigned mode;  /* protection mode bits */
142         unsigned uid;   /* owner user id */
143         unsigned gid;   /* owner group id */
144         unsigned size;  /* file size in bytes */
145         nfstime atime;  /* time of last access */
146         nfstime mtime;  /* time of last modification */
150 typedef string filename<NFS_MAXNAMLEN>; 
151 typedef string nfspath<NFS_MAXPATHLEN>;
154  * Reply status with file attributes
155  */
156 union attrstat switch (nfsstat status) {
157 case NFS_OK:
158         fattr attributes;
159 default:
160         void;
163 struct sattrargs {
164         nfs_fh file;
165         sattr attributes;
169  * Arguments for directory operations
170  */
171 struct diropargs {
172         nfs_fh  dir;    /* directory file handle */
173         filename name;          /* name (up to NFS_MAXNAMLEN bytes) */
176 struct diropokres {
177         nfs_fh file;
178         fattr attributes;
182  * Results from directory operation
183  */
184 union diropres switch (nfsstat status) {
185 case NFS_OK:
186         diropokres diropres;
187 default:
188         void;
191 union readlinkres switch (nfsstat status) {
192 case NFS_OK:
193         nfspath data;
194 default:
195         void;
199  * Arguments to remote read
200  */
201 struct readargs {
202         nfs_fh file;            /* handle for file */
203         unsigned offset;        /* byte offset in file */
204         unsigned count;         /* immediate read count */
205         unsigned totalcount;    /* total read count (from this offset)*/
209  * Status OK portion of remote read reply
210  */
211 struct readokres {
212         fattr   attributes;     /* attributes, need for pagin*/
213         opaque data<NFS_MAXDATA>;
216 union readres switch (nfsstat status) {
217 case NFS_OK:
218         readokres reply;
219 default:
220         void;
224  * Arguments to remote write 
225  */
226 struct writeargs {
227         nfs_fh  file;           /* handle for file */
228         unsigned beginoffset;   /* beginning byte offset in file */
229         unsigned offset;        /* current byte offset in file */
230         unsigned totalcount;    /* total write count (to this offset)*/
231         opaque data<NFS_MAXDATA>;
234 struct createargs {
235         diropargs where;
236         sattr attributes;
239 struct renameargs {
240         diropargs from;
241         diropargs to;
244 struct linkargs {
245         nfs_fh from;
246         diropargs to;
249 struct symlinkargs {
250         diropargs from;
251         nfspath to;
252         sattr attributes;
256 typedef opaque nfscookie[NFS_COOKIESIZE];
259  * Arguments to readdir
260  */
261 struct readdirargs {
262         nfs_fh dir;             /* directory handle */
263         nfscookie cookie;
264         unsigned count;         /* number of directory bytes to read */
267 struct entry {
268         unsigned fileid;
269         filename name;
270         nfscookie cookie;
271         entry *nextentry;
274 struct dirlist {
275         entry *entries;
276         bool eof;
279 union readdirres switch (nfsstat status) {
280 case NFS_OK:
281         dirlist reply;
282 default:
283         void;
286 struct statfsokres {
287         unsigned tsize; /* preferred transfer size in bytes */
288         unsigned bsize; /* fundamental file system block size */
289         unsigned blocks;        /* total blocks in file system */
290         unsigned bfree; /* free blocks in fs */
291         unsigned bavail;        /* free blocks avail to non-superuser */
294 union statfsres switch (nfsstat status) {
295 case NFS_OK:
296         statfsokres reply;
297 default:
298         void;
302  * Remote file service routines
303  */
304 program NFS_PROGRAM {
305         version NFS_VERSION {
306                 void 
307                 NFSPROC_NULL(void) = 0;
309                 attrstat 
310                 NFSPROC_GETATTR(nfs_fh) =       1;
312                 attrstat 
313                 NFSPROC_SETATTR(sattrargs) = 2;
315                 void 
316                 NFSPROC_ROOT(void) = 3;
318                 diropres 
319                 NFSPROC_LOOKUP(diropargs) = 4;
321                 readlinkres 
322                 NFSPROC_READLINK(nfs_fh) = 5;
324                 readres 
325                 NFSPROC_READ(readargs) = 6;
327                 void 
328                 NFSPROC_WRITECACHE(void) = 7;
330                 attrstat
331                 NFSPROC_WRITE(writeargs) = 8;
333                 diropres
334                 NFSPROC_CREATE(createargs) = 9;
336                 nfsstat
337                 NFSPROC_REMOVE(diropargs) = 10;
339                 nfsstat
340                 NFSPROC_RENAME(renameargs) = 11;
342                 nfsstat
343                 NFSPROC_LINK(linkargs) = 12;
345                 nfsstat
346                 NFSPROC_SYMLINK(symlinkargs) = 13;
348                 diropres
349                 NFSPROC_MKDIR(createargs) = 14;
351                 nfsstat
352                 NFSPROC_RMDIR(diropargs) = 15;
354                 readdirres
355                 NFSPROC_READDIR(readdirargs) = 16;
357                 statfsres
358                 NFSPROC_STATFS(nfs_fh) = 17;
359         } = 2;
360 } = 100003;
363  * Version 3 declarations and definitions.
364  */
367  * Sizes
368  */
369 const NFS3_FHSIZE         = 64;
370 const NFS3_COOKIEVERFSIZE = 8;
371 const NFS3_CREATEVERFSIZE = 8;
372 const NFS3_WRITEVERFSIZE  = 8;
375  * Basic data types
376  */
377 typedef string          filename3<>;
378 typedef string          nfspath3<>;
379 typedef uint64          fileid3;
380 typedef uint64          cookie3;
381 typedef opaque          cookieverf3[NFS3_COOKIEVERFSIZE];
382 typedef opaque          createverf3[NFS3_CREATEVERFSIZE];
383 typedef opaque          writeverf3[NFS3_WRITEVERFSIZE];
384 typedef uint32          uid3;
385 typedef uint32          gid3;
386 typedef uint64          size3;
387 typedef uint64          offset3;
388 typedef uint32          mode3;
389 typedef uint32          count3;
392  * Error status
393  */
394 enum nfsstat3 {
395         NFS3_OK = 0,
396         NFS3ERR_PERM = 1,
397         NFS3ERR_NOENT = 2,
398         NFS3ERR_IO = 5,
399         NFS3ERR_NXIO = 6,
400         NFS3ERR_ACCES = 13,
401         NFS3ERR_EXIST = 17,
402         NFS3ERR_XDEV = 18,
403         NFS3ERR_NODEV = 19,
404         NFS3ERR_NOTDIR = 20,
405         NFS3ERR_ISDIR = 21,
406         NFS3ERR_INVAL = 22,
407         NFS3ERR_FBIG = 27,
408         NFS3ERR_NOSPC = 28,
409         NFS3ERR_ROFS = 30,
410         NFS3ERR_MLINK = 31,
411         NFS3ERR_NAMETOOLONG = 63,
412         NFS3ERR_NOTEMPTY = 66,
413         NFS3ERR_DQUOT = 69,
414         NFS3ERR_STALE = 70,
415         NFS3ERR_REMOTE = 71,
416         NFS3ERR_BADHANDLE = 10001,
417         NFS3ERR_NOT_SYNC = 10002,
418         NFS3ERR_BAD_COOKIE = 10003,
419         NFS3ERR_NOTSUPP = 10004,
420         NFS3ERR_TOOSMALL = 10005,
421         NFS3ERR_SERVERFAULT = 10006,
422         NFS3ERR_BADTYPE = 10007,
423         NFS3ERR_JUKEBOX = 10008
427  * File types
428  */
429 enum ftype3 {
430         NF3REG = 1,
431         NF3DIR = 2,
432         NF3BLK = 3,
433         NF3CHR = 4,
434         NF3LNK = 5,
435         NF3SOCK = 6,
436         NF3FIFO = 7
439 struct specdata3 {
440         uint32  specdata1;
441         uint32  specdata2;
445  * File access handle
446  */
447 struct nfs_fh3 {
448         opaque data<NFS3_FHSIZE>;
451 /* 
452  * Timeval
453  */
454 struct nfstime3 {
455         uint32 seconds;
456         uint32 nseconds;
460  * File attributes
461  */
462 struct fattr3 {
463         ftype3    type;
464         mode3     mode;
465         uint32    nlink;
466         uid3      uid;
467         gid3      gid;
468         size3     size;
469         size3     used;
470         specdata3 rdev;
471         uint64    fsid;
472         fileid3   fileid;
473         nfstime3  atime;
474         nfstime3  mtime;
475         nfstime3  ctime;
479  * File attributes
480  */
481 union post_op_attr switch (bool attributes_follow) {
482 case TRUE:
483         fattr3 attributes;
484 case FALSE:
485         void;
486 };      
488 struct wcc_attr {
489         size3    size;
490         nfstime3 mtime;
491         nfstime3 ctime;
494 union pre_op_attr switch (bool attributes_follow) {
495 case TRUE:
496         wcc_attr attributes;
497 case FALSE:
498         void;
501 struct wcc_data {
502         pre_op_attr  before;
503         post_op_attr after;
506 union post_op_fh3 switch (bool handle_follows) {
507 case TRUE:
508         nfs_fh3 handle;
509 case FALSE:
510         void;
513 enum time_how {
514         DONT_CHANGE        = 0,
515         SET_TO_SERVER_TIME = 1,
516         SET_TO_CLIENT_TIME = 2
519 union set_mode3 switch (bool set_it) {
520 case TRUE:
521         mode3 mode;
522 default:
523         void;
526 union set_uid3 switch (bool set_it) {
527 case TRUE:
528         uid3 uid;
529 default:
530         void;
533 union set_gid3 switch (bool set_it) {
534 case TRUE:
535         gid3 gid;
536 default:
537         void;
540 union set_size3 switch (bool set_it) {
541 case TRUE:
542         size3   size;
543 default:
544         void;
547 union set_atime switch (time_how set_it) {
548 case SET_TO_CLIENT_TIME:
549         nfstime3 atime;
550 default:
551         void;
554 union set_mtime switch (time_how set_it) {
555 case SET_TO_CLIENT_TIME:
556         nfstime3 mtime;
557 default:
558         void;
561 struct sattr3 {
562         set_mode3 mode; 
563         set_uid3  uid; 
564         set_gid3  gid; 
565         set_size3 size; 
566         set_atime atime; 
567         set_mtime mtime; 
570 struct diropargs3 {
571         nfs_fh3   dir;
572         filename3 name;
576  * GETATTR: Get file attributes
577  */
578 struct GETATTR3args {
579         nfs_fh3 object;
582 struct GETATTR3resok {
583         fattr3 obj_attributes;
586 union GETATTR3res switch (nfsstat3 status) {
587 case NFS3_OK:
588         GETATTR3resok resok;
589 default:
590         void;
594  * SETATTR: Set file attributes
595  */
596 union sattrguard3 switch (bool check) {
597 case TRUE:
598         nfstime3 obj_ctime;
599 case FALSE:
600         void;
603 struct SETATTR3args {
604         nfs_fh3     object;
605         sattr3      new_attributes;
606         sattrguard3 guard;
609 struct SETATTR3resok {
610         wcc_data obj_wcc;
613 struct SETATTR3resfail {
614         wcc_data obj_wcc;
617 union SETATTR3res switch (nfsstat3 status) {
618 case NFS3_OK:
619         SETATTR3resok   resok;
620 default:
621         SETATTR3resfail resfail;
625  * LOOKUP: Lookup filename
626  */
627 struct LOOKUP3args {
628         diropargs3 what;
631 struct LOOKUP3resok {
632         nfs_fh3         object;
633         post_op_attr    obj_attributes;
634         post_op_attr    dir_attributes;
637 struct LOOKUP3resfail {
638         post_op_attr    dir_attributes;
641 union LOOKUP3res switch (nfsstat3 status) {
642 case NFS3_OK:
643         LOOKUP3resok    resok;
644 default:
645         LOOKUP3resfail  resfail;
649  * ACCESS: Check access permission
650  */
651 const ACCESS3_READ      = 0x0001;
652 const ACCESS3_LOOKUP    = 0x0002;
653 const ACCESS3_MODIFY    = 0x0004;
654 const ACCESS3_EXTEND    = 0x0008;
655 const ACCESS3_DELETE    = 0x0010;
656 const ACCESS3_EXECUTE   = 0x0020;
658 struct ACCESS3args {
659         nfs_fh3 object;
660         uint32  access;
663 struct ACCESS3resok {
664         post_op_attr    obj_attributes;
665         uint32          access;
668 struct ACCESS3resfail {
669         post_op_attr    obj_attributes;
672 union ACCESS3res switch (nfsstat3 status) {
673 case NFS3_OK:
674         ACCESS3resok    resok;
675 default:
676         ACCESS3resfail  resfail;
680  * READLINK: Read from symbolic link
681  */
682 struct READLINK3args {
683         nfs_fh3 symlink;
686 struct READLINK3resok {
687         post_op_attr    symlink_attributes;
688         nfspath3        data;
691 struct READLINK3resfail {
692         post_op_attr    symlink_attributes;
694         
695 union READLINK3res switch (nfsstat3 status) {
696 case NFS3_OK:
697         READLINK3resok   resok;
698 default:
699         READLINK3resfail resfail;
703  * READ: Read from file
704  */
705 struct READ3args {
706         nfs_fh3         file;
707         offset3         offset;
708         count3          count;
711 struct READ3resok {
712         post_op_attr    file_attributes;
713         count3          count;
714         bool            eof;
715         opaque          data<>;
718 struct READ3resfail {
719         post_op_attr    file_attributes;
722 union READ3res switch (nfsstat3 status) {
723 case NFS3_OK:
724         READ3resok      resok;
725 default:
726         READ3resfail    resfail;
730  * WRITE: Write to file
731  */
732 enum stable_how {
733         UNSTABLE  = 0,
734         DATA_SYNC = 1,
735         FILE_SYNC = 2
738 struct WRITE3args {
739         nfs_fh3         file;
740         offset3         offset;
741         count3          count;
742         stable_how      stable;
743         opaque          data<>;
746 struct WRITE3resok {
747         wcc_data        file_wcc;
748         count3          count;
749         stable_how      committed;
750         writeverf3      verf;
753 struct WRITE3resfail {
754         wcc_data        file_wcc;
757 union WRITE3res switch (nfsstat3 status) {
758 case NFS3_OK:
759         WRITE3resok     resok;
760 default:
761         WRITE3resfail   resfail;
765  * CREATE: Create a file
766  */
767 enum createmode3 {
768         UNCHECKED = 0,
769         GUARDED   = 1,
770         EXCLUSIVE = 2
773 union createhow3 switch (createmode3 mode) {
774 case UNCHECKED:
775 case GUARDED:
776         sattr3          obj_attributes;
777 case EXCLUSIVE:
778         createverf3     verf;
781 struct CREATE3args {
782         diropargs3      where;
783         createhow3      how;
786 struct CREATE3resok {
787         post_op_fh3     obj;
788         post_op_attr    obj_attributes;
789         wcc_data        dir_wcc;
792 struct CREATE3resfail {
793         wcc_data        dir_wcc;
796 union CREATE3res switch (nfsstat3 status) {
797 case NFS3_OK:
798         CREATE3resok    resok;
799 default:
800         CREATE3resfail  resfail;
804  * MKDIR: Create a directory
805  */
806 struct MKDIR3args {
807         diropargs3      where;
808         sattr3          attributes;
811 struct MKDIR3resok {
812         post_op_fh3     obj;
813         post_op_attr    obj_attributes;
814         wcc_data        dir_wcc;
817 struct MKDIR3resfail {
818         wcc_data        dir_wcc;
821 union MKDIR3res switch (nfsstat3 status) {
822 case NFS3_OK:
823         MKDIR3resok     resok;
824 default:
825         MKDIR3resfail   resfail;
829  * SYMLINK: Create a symbolic link
830  */
831 struct symlinkdata3 {
832         sattr3          symlink_attributes;
833         nfspath3        symlink_data;
836 struct SYMLINK3args {
837         diropargs3      where;
838         symlinkdata3    symlink;
841 struct SYMLINK3resok {
842         post_op_fh3     obj;
843         post_op_attr    obj_attributes;
844         wcc_data        dir_wcc;
847 struct SYMLINK3resfail {
848         wcc_data        dir_wcc;
851 union SYMLINK3res switch (nfsstat3 status) {
852 case NFS3_OK:
853         SYMLINK3resok   resok;
854 default:
855         SYMLINK3resfail resfail;
859  * MKNOD: Create a special file
860  */
861 struct devicedata3 {
862         sattr3          dev_attributes;
863         specdata3       spec;
866 union mknoddata3 switch (ftype3 type) {
867 case NF3CHR:
868 case NF3BLK:
869         devicedata3     device;
870 case NF3SOCK:
871 case NF3FIFO:
872         sattr3          pipe_attributes;
873 default:
874         void;
877 struct MKNOD3args {
878         diropargs3      where;
879         mknoddata3      what;
882 struct MKNOD3resok {
883         post_op_fh3     obj;
884         post_op_attr    obj_attributes;
885         wcc_data        dir_wcc;
888 struct MKNOD3resfail {
889         wcc_data        dir_wcc;
892 union MKNOD3res switch (nfsstat3 status) {
893 case NFS3_OK:
894         MKNOD3resok     resok;
895 default:
896         MKNOD3resfail   resfail;
900  * REMOVE: Remove a file
901  */
902 struct REMOVE3args {
903         diropargs3      object;
906 struct REMOVE3resok {
907         wcc_data        dir_wcc;
910 struct REMOVE3resfail {
911         wcc_data        dir_wcc;
914 union REMOVE3res switch (nfsstat3 status) {
915 case NFS3_OK:
916         REMOVE3resok    resok;
917 default:
918         REMOVE3resfail  resfail;
922  * RMDIR: Remove a directory
923  */
924 struct RMDIR3args {
925         diropargs3 object;
928 struct RMDIR3resok {
929         wcc_data        dir_wcc;
932 struct RMDIR3resfail {
933         wcc_data        dir_wcc;
936 union RMDIR3res switch (nfsstat3 status) {
937 case NFS3_OK:
938         RMDIR3resok     resok;
939 default:
940         RMDIR3resfail   resfail;
944  * RENAME: Rename a file or directory
945  */
946 struct RENAME3args {
947         diropargs3      from;
948         diropargs3      to;
951 struct RENAME3resok {
952         wcc_data        fromdir_wcc;
953         wcc_data        todir_wcc;
956 struct RENAME3resfail {
957         wcc_data        fromdir_wcc;
958         wcc_data        todir_wcc;
961 union RENAME3res switch (nfsstat3 status) {
962 case NFS3_OK:
963         RENAME3resok    resok;
964 default:
965         RENAME3resfail  resfail;
969  * LINK: Create link to an object
970  */
971 struct LINK3args {
972         nfs_fh3         file;
973         diropargs3      link;
976 struct LINK3resok {
977         post_op_attr    file_attributes;
978         wcc_data        linkdir_wcc;
981 struct LINK3resfail {
982         post_op_attr    file_attributes;
983         wcc_data        linkdir_wcc;
986 union LINK3res switch (nfsstat3 status) {
987 case NFS3_OK:
988         LINK3resok      resok;
989 default:
990         LINK3resfail    resfail;
994  * READDIR: Read from directory
995  */
996 struct READDIR3args {
997         nfs_fh3         dir;
998         cookie3         cookie;
999         cookieverf3     cookieverf;
1000         count3          count;
1003 struct entry3 {
1004         fileid3         fileid;
1005         filename3       name;
1006         cookie3         cookie;
1007         entry3          *nextentry;
1010 struct dirlist3 {
1011         entry3  *entries;
1012         bool    eof;
1015 struct READDIR3resok {
1016         post_op_attr    dir_attributes;
1017         cookieverf3     cookieverf;
1018         dirlist3        reply;
1021 struct READDIR3resfail {
1022         post_op_attr    dir_attributes;
1025 union READDIR3res switch (nfsstat3 status) {
1026 case NFS3_OK:
1027         READDIR3resok   resok;
1028 default:
1029         READDIR3resfail resfail;
1033  * READDIRPLUS: Extended read from a directory
1034  */
1035 struct READDIRPLUS3args {
1036         nfs_fh3         dir;
1037         cookie3         cookie;
1038         cookieverf3     cookieverf;
1039         count3          dircount;
1040         count3          maxcount;
1043 struct entryplus3 {
1044         fileid3         fileid;
1045         filename3       name;
1046         cookie3         cookie;
1047         post_op_attr    name_attributes;
1048         post_op_fh3     name_handle;
1049         entryplus3      *nextentry;
1052 struct dirlistplus3 {
1053         entryplus3      *entries;
1054         bool            eof;
1057 struct READDIRPLUS3resok {
1058         post_op_attr    dir_attributes;
1059         cookieverf3     cookieverf;
1060         dirlistplus3    reply;
1063 struct READDIRPLUS3resfail {
1064         post_op_attr    dir_attributes;
1067 union READDIRPLUS3res switch (nfsstat3 status) {
1068 case NFS3_OK:
1069         READDIRPLUS3resok       resok;
1070 default:
1071         READDIRPLUS3resfail     resfail;
1075  * FSSTAT: Get dynamic file system information
1076  */
1077 struct FSSTAT3args {
1078         nfs_fh3 fsroot;
1081 struct FSSTAT3resok {
1082         post_op_attr    obj_attributes;
1083         size3           tbytes;
1084         size3           fbytes;
1085         size3           abytes;
1086         size3           tfiles;
1087         size3           ffiles;
1088         size3           afiles;
1089         uint32          invarsec;
1092 struct FSSTAT3resfail {
1093         post_op_attr    obj_attributes;
1096 union FSSTAT3res switch (nfsstat3 status) {
1097 case NFS3_OK:
1098         FSSTAT3resok    resok;
1099 default:
1100         FSSTAT3resfail  resfail;
1104  * FSINFO: Get static file system information
1105  */
1107 const FSF3_LINK         = 0x0001;
1108 const FSF3_SYMLINK      = 0x0002;
1109 const FSF3_HOMOGENEOUS  = 0x0008;
1110 const FSF3_CANSETTIME   = 0x0010;
1112 struct FSINFO3args {
1113         nfs_fh3 fsroot;
1116 struct FSINFO3resok {
1117         post_op_attr    obj_attributes;
1118         uint32          rtmax;
1119         uint32          rtpref;
1120         uint32          rtmult;
1121         uint32          wtmax;
1122         uint32          wtpref;
1123         uint32          wtmult;
1124         uint32          dtpref;
1125         size3           maxfilesize;
1126         nfstime3        time_delta;
1127         uint32          properties;
1130 struct FSINFO3resfail {
1131         post_op_attr    obj_attributes;
1134 union FSINFO3res switch (nfsstat3 status) {
1135 case NFS3_OK:
1136         FSINFO3resok    resok;
1137 default:
1138         FSINFO3resfail  resfail;
1142  * PATHCONF: Retrieve POSIX information
1143  */
1144 struct PATHCONF3args {
1145         nfs_fh3 object;
1148 struct PATHCONF3resok {
1149         post_op_attr    obj_attributes;
1150         uint32          linkmax;
1151         uint32          name_max;
1152         bool            no_trunc;
1153         bool            chown_restricted;
1154         bool            case_insensitive;
1155         bool            case_preserving;
1158 struct PATHCONF3resfail {
1159         post_op_attr    obj_attributes;
1162 union PATHCONF3res switch (nfsstat3 status) {
1163 case NFS3_OK:
1164         PATHCONF3resok   resok;
1165 default:
1166         PATHCONF3resfail resfail;
1170  * COMMIT: Commit cached data on a server to stable storage
1171  */
1172 struct COMMIT3args {
1173         nfs_fh3 file;
1174         offset3 offset;
1175         count3  count;
1178 struct COMMIT3resok {
1179         wcc_data        file_wcc;
1180         writeverf3      verf;
1183 struct COMMIT3resfail {
1184         wcc_data        file_wcc;
1187 union COMMIT3res switch (nfsstat3 status) {
1188 case NFS3_OK:
1189         COMMIT3resok    resok;
1190 default:
1191         COMMIT3resfail  resfail;
1195  * Remote file service routines
1196  */
1197 program NFS3_PROGRAM {
1198         version NFS_V3 {
1199                 void 
1200                 NFSPROC3_NULL(void) = 0;
1202                 GETATTR3res 
1203                 NFSPROC3_GETATTR(GETATTR3args) = 1;
1205                 SETATTR3res 
1206                 NFSPROC3_SETATTR(SETATTR3args) = 2;
1208                 LOOKUP3res 
1209                 NFSPROC3_LOOKUP(LOOKUP3args) = 3;
1211                 ACCESS3res 
1212                 NFSPROC3_ACCESS(ACCESS3args) = 4;
1214                 READLINK3res 
1215                 NFSPROC3_READLINK(READLINK3args) = 5;
1217                 READ3res 
1218                 NFSPROC3_READ(READ3args) = 6;
1220                 WRITE3res 
1221                 NFSPROC3_WRITE(WRITE3args) = 7;
1223                 CREATE3res      
1224                 NFSPROC3_CREATE(CREATE3args) = 8;
1226                 MKDIR3res
1227                 NFSPROC3_MKDIR(MKDIR3args) = 9;
1229                 SYMLINK3res     
1230                 NFSPROC3_SYMLINK(SYMLINK3args) = 10;
1232                 MKNOD3res
1233                 NFSPROC3_MKNOD(MKNOD3args) = 11;
1235                 REMOVE3res      
1236                 NFSPROC3_REMOVE(REMOVE3args) = 12;
1238                 RMDIR3res       
1239                 NFSPROC3_RMDIR(RMDIR3args) = 13;
1241                 RENAME3res      
1242                 NFSPROC3_RENAME(RENAME3args) = 14;
1244                 LINK3res        
1245                 NFSPROC3_LINK(LINK3args) = 15;
1247                 READDIR3res     
1248                 NFSPROC3_READDIR(READDIR3args) = 16;
1250                 READDIRPLUS3res 
1251                 NFSPROC3_READDIRPLUS(READDIRPLUS3args) = 17;
1253                 FSSTAT3res
1254                 NFSPROC3_FSSTAT(FSSTAT3args) = 18;
1256                 FSINFO3res
1257                 NFSPROC3_FSINFO(FSINFO3args) = 19;
1259                 PATHCONF3res
1260                 NFSPROC3_PATHCONF(PATHCONF3args) = 20;
1262                 COMMIT3res
1263                 NFSPROC3_COMMIT(COMMIT3args) = 21;
1264         } = 3;
1265 } = 100003;