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