1259117Shrs/*-
2259117Shrs * Copyright (c) 2010, Oracle America, Inc.
3259117Shrs *
4259117Shrs * Redistribution and use in source and binary forms, with or without
5259117Shrs * modification, are permitted provided that the following conditions are
6259117Shrs * met:
7259117Shrs *
8259117Shrs *     * Redistributions of source code must retain the above copyright
9259117Shrs *       notice, this list of conditions and the following disclaimer.
10259117Shrs *     * Redistributions in binary form must reproduce the above
11259117Shrs *       copyright notice, this list of conditions and the following
12259117Shrs *       disclaimer in the documentation and/or other materials
13259117Shrs *       provided with the distribution.
14259117Shrs *     * Neither the name of the "Oracle America, Inc." nor the names of its
15259117Shrs *       contributors may be used to endorse or promote products derived
16259117Shrs *       from this software without specific prior written permission.
17259117Shrs *
18259117Shrs *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19259117Shrs *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20259117Shrs *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21259117Shrs *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
22259117Shrs *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
23259117Shrs *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24259117Shrs *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
25259117Shrs *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26259117Shrs *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27259117Shrs *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28259117Shrs *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29259117Shrs *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
301832Swollman */
311832Swollman
321832Swollman#ifndef RPC_HDR
331832Swollman%#ifndef lint
341832Swollman%/*static char sccsid[] = "from: @(#)nfs_prot.x 1.2 87/10/12 Copyr 1987 Sun Micro";*/
351832Swollman%/*static char sccsid[] = "from: @(#)nfs_prot.x	2.1 88/08/01 4.0 RPCSRC";*/
361832Swollman%#endif /* not lint */
37114629Sobrien%#include <sys/cdefs.h>
38114629Sobrien%__FBSDID("$FreeBSD$");
391832Swollman#endif
401832Swollman
411832Swollmanconst NFS_PORT          = 2049;
421832Swollmanconst NFS_MAXDATA       = 8192;
431832Swollmanconst NFS_MAXPATHLEN    = 1024;
441832Swollmanconst NFS_MAXNAMLEN	= 255;
451832Swollmanconst NFS_FHSIZE	= 32;
461832Swollmanconst NFS_COOKIESIZE	= 4;
471832Swollmanconst NFS_FIFO_DEV	= -1;	/* size kludge for named pipes */
481832Swollman
491832Swollman/*
501832Swollman * File types
511832Swollman */
521832Swollmanconst NFSMODE_FMT  = 0170000;	/* type of file */
531832Swollmanconst NFSMODE_DIR  = 0040000;	/* directory */
541832Swollmanconst NFSMODE_CHR  = 0020000;	/* character special */
551832Swollmanconst NFSMODE_BLK  = 0060000;	/* block special */
561832Swollmanconst NFSMODE_REG  = 0100000;	/* regular */
571832Swollmanconst NFSMODE_LNK  = 0120000;	/* symbolic link */
581832Swollmanconst NFSMODE_SOCK = 0140000;	/* socket */
591832Swollmanconst NFSMODE_FIFO = 0010000;	/* fifo */
601832Swollman
611832Swollman/*
621832Swollman * Error status
631832Swollman */
641832Swollmanenum nfsstat {
651832Swollman	NFS_OK= 0,		/* no error */
661832Swollman	NFSERR_PERM=1,		/* Not owner */
671832Swollman	NFSERR_NOENT=2,		/* No such file or directory */
681832Swollman	NFSERR_IO=5,		/* I/O error */
691832Swollman	NFSERR_NXIO=6,		/* No such device or address */
701832Swollman	NFSERR_ACCES=13,	/* Permission denied */
711832Swollman	NFSERR_EXIST=17,	/* File exists */
721832Swollman	NFSERR_NODEV=19,	/* No such device */
731832Swollman	NFSERR_NOTDIR=20,	/* Not a directory*/
741832Swollman	NFSERR_ISDIR=21,	/* Is a directory */
751832Swollman	NFSERR_FBIG=27,		/* File too large */
761832Swollman	NFSERR_NOSPC=28,	/* No space left on device */
771832Swollman	NFSERR_ROFS=30,		/* Read-only file system */
781832Swollman	NFSERR_NAMETOOLONG=63,	/* File name too long */
791832Swollman	NFSERR_NOTEMPTY=66,	/* Directory not empty */
801832Swollman	NFSERR_DQUOT=69,	/* Disc quota exceeded */
811832Swollman	NFSERR_STALE=70,	/* Stale NFS file handle */
821832Swollman	NFSERR_WFLUSH=99	/* write cache flushed */
831832Swollman};
841832Swollman
851832Swollman/*
861832Swollman * File types
871832Swollman */
881832Swollmanenum ftype {
891832Swollman	NFNON = 0,	/* non-file */
901832Swollman	NFREG = 1,	/* regular file */
911832Swollman	NFDIR = 2,	/* directory */
921832Swollman	NFBLK = 3,	/* block special */
931832Swollman	NFCHR = 4,	/* character special */
941832Swollman	NFLNK = 5,	/* symbolic link */
951832Swollman	NFSOCK = 6,	/* unix domain sockets */
961832Swollman	NFBAD = 7,	/* unused */
971832Swollman	NFFIFO = 8 	/* named pipe */
981832Swollman};
991832Swollman
1001832Swollman/*
1011832Swollman * File access handle
1021832Swollman */
1031832Swollmanstruct nfs_fh {
1041832Swollman	opaque data[NFS_FHSIZE];
1051832Swollman};
1061832Swollman
1071832Swollman/*
1081832Swollman * Timeval
1091832Swollman */
1101832Swollmanstruct nfstime {
1111832Swollman	unsigned seconds;
1121832Swollman	unsigned useconds;
1131832Swollman};
1141832Swollman
1151832Swollman
1161832Swollman/*
1171832Swollman * File attributes
1181832Swollman */
1191832Swollmanstruct fattr {
1201832Swollman	ftype type;		/* file type */
1211832Swollman	unsigned mode;		/* protection mode bits */
1221832Swollman	unsigned nlink;		/* # hard links */
1231832Swollman	unsigned uid;		/* owner user id */
1241832Swollman	unsigned gid;		/* owner group id */
1251832Swollman	unsigned size;		/* file size in bytes */
126229781Suqs	unsigned blocksize;	/* preferred block size */
1271832Swollman	unsigned rdev;		/* special device # */
1281832Swollman	unsigned blocks;	/* Kb of disk used by file */
1291832Swollman	unsigned fsid;		/* device # */
1301832Swollman	unsigned fileid;	/* inode # */
1311832Swollman	nfstime	atime;		/* time of last access */
1321832Swollman	nfstime	mtime;		/* time of last modification */
1331832Swollman	nfstime	ctime;		/* time of last change */
1341832Swollman};
1351832Swollman
1361832Swollman/*
1371832Swollman * File attributes which can be set
1381832Swollman */
1391832Swollmanstruct sattr {
1401832Swollman	unsigned mode;	/* protection mode bits */
1411832Swollman	unsigned uid;	/* owner user id */
1421832Swollman	unsigned gid;	/* owner group id */
1431832Swollman	unsigned size;	/* file size in bytes */
1441832Swollman	nfstime	atime;	/* time of last access */
1451832Swollman	nfstime	mtime;	/* time of last modification */
1461832Swollman};
1471832Swollman
1481832Swollman
1491832Swollmantypedef string filename<NFS_MAXNAMLEN>;
1501832Swollmantypedef string nfspath<NFS_MAXPATHLEN>;
1511832Swollman
1521832Swollman/*
1531832Swollman * Reply status with file attributes
1541832Swollman */
1551832Swollmanunion attrstat switch (nfsstat status) {
1561832Swollmancase NFS_OK:
1571832Swollman	fattr attributes;
1581832Swollmandefault:
1591832Swollman	void;
1601832Swollman};
1611832Swollman
1621832Swollmanstruct sattrargs {
1631832Swollman	nfs_fh file;
1641832Swollman	sattr attributes;
1651832Swollman};
1661832Swollman
1671832Swollman/*
1681832Swollman * Arguments for directory operations
1691832Swollman */
1701832Swollmanstruct diropargs {
1711832Swollman	nfs_fh	dir;	/* directory file handle */
1721832Swollman	filename name;		/* name (up to NFS_MAXNAMLEN bytes) */
1731832Swollman};
1741832Swollman
1751832Swollmanstruct diropokres {
1761832Swollman	nfs_fh file;
1771832Swollman	fattr attributes;
1781832Swollman};
1791832Swollman
1801832Swollman/*
1811832Swollman * Results from directory operation
1821832Swollman */
1831832Swollmanunion diropres switch (nfsstat status) {
1841832Swollmancase NFS_OK:
1851832Swollman	diropokres diropres;
1861832Swollmandefault:
1871832Swollman	void;
1881832Swollman};
1891832Swollman
1901832Swollmanunion readlinkres switch (nfsstat status) {
1911832Swollmancase NFS_OK:
1921832Swollman	nfspath data;
1931832Swollmandefault:
1941832Swollman	void;
1951832Swollman};
1961832Swollman
1971832Swollman/*
1981832Swollman * Arguments to remote read
1991832Swollman */
2001832Swollmanstruct readargs {
2011832Swollman	nfs_fh file;		/* handle for file */
2021832Swollman	unsigned offset;	/* byte offset in file */
2031832Swollman	unsigned count;		/* immediate read count */
2041832Swollman	unsigned totalcount;	/* total read count (from this offset)*/
2051832Swollman};
2061832Swollman
2071832Swollman/*
2081832Swollman * Status OK portion of remote read reply
2091832Swollman */
2101832Swollmanstruct readokres {
2111832Swollman	fattr	attributes;	/* attributes, need for pagin*/
2121832Swollman	opaque data<NFS_MAXDATA>;
2131832Swollman};
2141832Swollman
2151832Swollmanunion readres switch (nfsstat status) {
2161832Swollmancase NFS_OK:
2171832Swollman	readokres reply;
2181832Swollmandefault:
2191832Swollman	void;
2201832Swollman};
2211832Swollman
2221832Swollman/*
2231832Swollman * Arguments to remote write
2241832Swollman */
2251832Swollmanstruct writeargs {
2261832Swollman	nfs_fh	file;		/* handle for file */
2271832Swollman	unsigned beginoffset;	/* beginning byte offset in file */
2281832Swollman	unsigned offset;	/* current byte offset in file */
2291832Swollman	unsigned totalcount;	/* total write count (to this offset)*/
2301832Swollman	opaque data<NFS_MAXDATA>;
2311832Swollman};
2321832Swollman
2331832Swollmanstruct createargs {
2341832Swollman	diropargs where;
2351832Swollman	sattr attributes;
2361832Swollman};
2371832Swollman
2381832Swollmanstruct renameargs {
2391832Swollman	diropargs from;
2401832Swollman	diropargs to;
2411832Swollman};
2421832Swollman
2431832Swollmanstruct linkargs {
2441832Swollman	nfs_fh from;
2451832Swollman	diropargs to;
2461832Swollman};
2471832Swollman
2481832Swollmanstruct symlinkargs {
2491832Swollman	diropargs from;
2501832Swollman	nfspath to;
2511832Swollman	sattr attributes;
2521832Swollman};
2531832Swollman
2541832Swollman
2551832Swollmantypedef opaque nfscookie[NFS_COOKIESIZE];
2561832Swollman
2571832Swollman/*
2581832Swollman * Arguments to readdir
2591832Swollman */
2601832Swollmanstruct readdirargs {
2611832Swollman	nfs_fh dir;		/* directory handle */
2621832Swollman	nfscookie cookie;
2631832Swollman	unsigned count;		/* number of directory bytes to read */
2641832Swollman};
2651832Swollman
2661832Swollmanstruct entry {
2671832Swollman	unsigned fileid;
2681832Swollman	filename name;
2691832Swollman	nfscookie cookie;
2701832Swollman	entry *nextentry;
2711832Swollman};
2721832Swollman
2731832Swollmanstruct dirlist {
2741832Swollman	entry *entries;
2751832Swollman	bool eof;
2761832Swollman};
2771832Swollman
2781832Swollmanunion readdirres switch (nfsstat status) {
2791832Swollmancase NFS_OK:
2801832Swollman	dirlist reply;
2811832Swollmandefault:
2821832Swollman	void;
2831832Swollman};
2841832Swollman
2851832Swollmanstruct statfsokres {
2861832Swollman	unsigned tsize;	/* preferred transfer size in bytes */
2871832Swollman	unsigned bsize;	/* fundamental file system block size */
2881832Swollman	unsigned blocks;	/* total blocks in file system */
2891832Swollman	unsigned bfree;	/* free blocks in fs */
2901832Swollman	unsigned bavail;	/* free blocks avail to non-superuser */
2911832Swollman};
2921832Swollman
2931832Swollmanunion statfsres switch (nfsstat status) {
2941832Swollmancase NFS_OK:
2951832Swollman	statfsokres reply;
2961832Swollmandefault:
2971832Swollman	void;
2981832Swollman};
2991832Swollman
30025000Sdfr#ifdef WANT_NFS3
30125000Sdfr
3021832Swollman/*
30325000Sdfr * NFSv3 constants and types
30425000Sdfr */
30525000Sdfrconst NFS3_FHSIZE	= 64;	/* maximum size in bytes of a file handle */
30625000Sdfrconst NFS3_COOKIEVERFSIZE = 8;	/* size of a cookie verifier for READDIR */
30725000Sdfrconst NFS3_CREATEVERFSIZE = 8;	/* size of the verifier used for CREATE */
30825000Sdfrconst NFS3_WRITEVERFSIZE = 8;	/* size of the verifier used for WRITE */
30925000Sdfr
31025000Sdfrtypedef unsigned hyper uint64;
31125000Sdfrtypedef hyper int64;
31225000Sdfrtypedef unsigned long uint32;
31325000Sdfrtypedef long int32;
31425000Sdfrtypedef string filename3<>;
31525000Sdfrtypedef string nfspath3<>;
31625000Sdfrtypedef uint64 fileid3;
31725000Sdfrtypedef uint64 cookie3;
31825000Sdfrtypedef opaque cookieverf3[NFS3_COOKIEVERFSIZE];
31925000Sdfrtypedef opaque createverf3[NFS3_CREATEVERFSIZE];
32025000Sdfrtypedef opaque writeverf3[NFS3_WRITEVERFSIZE];
32125000Sdfrtypedef uint32 uid3;
32225000Sdfrtypedef uint32 gid3;
32325000Sdfrtypedef uint64 size3;
32425000Sdfrtypedef uint64 offset3;
32525000Sdfrtypedef uint32 mode3;
32625000Sdfrtypedef uint32 count3;
32725000Sdfr
32825000Sdfr/*
32925000Sdfr * Error status (v3)
33025000Sdfr */
33125000Sdfrenum nfsstat3 {
33225000Sdfr	NFS3_OK	= 0,
33325000Sdfr	NFS3ERR_PERM		= 1,
33425000Sdfr	NFS3ERR_NOENT		= 2,
33525000Sdfr	NFS3ERR_IO		= 5,
33625000Sdfr	NFS3ERR_NXIO		= 6,
33725000Sdfr	NFS3ERR_ACCES		= 13,
33825000Sdfr	NFS3ERR_EXIST		= 17,
33925000Sdfr	NFS3ERR_XDEV		= 18,
34025000Sdfr	NFS3ERR_NODEV		= 19,
34125000Sdfr	NFS3ERR_NOTDIR		= 20,
34225000Sdfr	NFS3ERR_ISDIR		= 21,
34325000Sdfr	NFS3ERR_INVAL		= 22,
34425000Sdfr	NFS3ERR_FBIG		= 27,
34525000Sdfr	NFS3ERR_NOSPC		= 28,
34625000Sdfr	NFS3ERR_ROFS		= 30,
34725000Sdfr	NFS3ERR_MLINK		= 31,
34825000Sdfr	NFS3ERR_NAMETOOLONG	= 63,
34925000Sdfr	NFS3ERR_NOTEMPTY	= 66,
35025000Sdfr	NFS3ERR_DQUOT		= 69,
35125000Sdfr	NFS3ERR_STALE		= 70,
35225000Sdfr	NFS3ERR_REMOTE		= 71,
35325000Sdfr	NFS3ERR_BADHANDLE	= 10001,
35425000Sdfr	NFS3ERR_NOT_SYNC	= 10002,
35525000Sdfr	NFS3ERR_BAD_COOKIE	= 10003,
35625000Sdfr	NFS3ERR_NOTSUPP		= 10004,
35725000Sdfr	NFS3ERR_TOOSMALL	= 10005,
35825000Sdfr	NFS3ERR_SERVERFAULT	= 10006,
35925000Sdfr	NFS3ERR_BADTYPE		= 10007,
36025000Sdfr	NFS3ERR_JUKEBOX		= 10008
36125000Sdfr};
36225000Sdfr
36325000Sdfr/*
36425000Sdfr * File types (v3)
36525000Sdfr */
36625000Sdfrenum ftype3 {
36725000Sdfr	NF3REG	= 1,		/* regular file */
36825000Sdfr	NF3DIR	= 2,		/* directory */
36925000Sdfr	NF3BLK	= 3,		/* block special */
37025000Sdfr	NF3CHR	= 4,		/* character special */
37125000Sdfr	NF3LNK	= 5,		/* symbolic link */
37225000Sdfr	NF3SOCK	= 6,		/* unix domain sockets */
37325000Sdfr	NF3FIFO	= 7		/* named pipe */
37425000Sdfr};
37525000Sdfr
37625000Sdfrstruct specdata3 {
37725000Sdfr	uint32	specdata1;
37825000Sdfr	uint32	specdata2;
37925000Sdfr};
38025000Sdfr
38125000Sdfr/*
38225000Sdfr * File access handle (v3)
38325000Sdfr */
38425000Sdfrstruct nfs_fh3 {
38525000Sdfr	opaque data<NFS3_FHSIZE>;
38625000Sdfr};
38725000Sdfr
38825000Sdfr/*
38925000Sdfr * Timeval (v3)
39025000Sdfr */
39125000Sdfrstruct nfstime3 {
39225000Sdfr	uint32	seconds;
39325000Sdfr	uint32	nseconds;
39425000Sdfr};
39525000Sdfr
39625000Sdfr
39725000Sdfr/*
39825000Sdfr * File attributes (v3)
39925000Sdfr */
40025000Sdfrstruct fattr3 {
40125000Sdfr	ftype3	type;		/* file type */
40225000Sdfr	mode3	mode;		/* protection mode bits */
40325000Sdfr	uint32	nlink;		/* # hard links */
40425000Sdfr	uid3	uid;		/* owner user id */
40525000Sdfr	gid3	gid;		/* owner group id */
40625000Sdfr	size3	size;		/* file size in bytes */
407229781Suqs	size3	used;		/* preferred block size */
40825000Sdfr	specdata3 rdev;		/* special device # */
40925000Sdfr	uint64 fsid;		/* device # */
41025000Sdfr	fileid3	fileid;		/* inode # */
41125000Sdfr	nfstime3 atime;		/* time of last access */
41225000Sdfr	nfstime3 mtime;		/* time of last modification */
41325000Sdfr	nfstime3 ctime;		/* time of last change */
41425000Sdfr};
41525000Sdfr
41625000Sdfrunion post_op_attr switch (bool attributes_follow) {
41725000Sdfrcase TRUE:
41825000Sdfr	fattr3	attributes;
41925000Sdfrcase FALSE:
42025000Sdfr	void;
42125000Sdfr};
42225000Sdfr
42325000Sdfrstruct wcc_attr {
42425000Sdfr	size3	size;
42525000Sdfr	nfstime3 mtime;
42625000Sdfr	nfstime3 ctime;
42725000Sdfr};
42825000Sdfr
42925000Sdfrunion pre_op_attr switch (bool attributes_follow) {
43025000Sdfrcase TRUE:
43125000Sdfr	wcc_attr attributes;
43225000Sdfrcase FALSE:
43325000Sdfr	void;
43425000Sdfr};
43525000Sdfr
43625000Sdfrstruct wcc_data {
43725000Sdfr	pre_op_attr before;
43825000Sdfr	post_op_attr after;
43925000Sdfr};
44025000Sdfr
44125000Sdfrunion post_op_fh3 switch (bool handle_follows) {
44225000Sdfrcase TRUE:
44325000Sdfr	nfs_fh3	handle;
44425000Sdfrcase FALSE:
44525000Sdfr	void;
44625000Sdfr};
44725000Sdfr
44825000Sdfr/*
44925000Sdfr * File attributes which can be set (v3)
45025000Sdfr */
45125000Sdfrenum time_how {
45225000Sdfr	DONT_CHANGE		= 0,
45325000Sdfr	SET_TO_SERVER_TIME	= 1,
45425000Sdfr	SET_TO_CLIENT_TIME	= 2
45525000Sdfr};
45625000Sdfr
45725000Sdfrunion set_mode3 switch (bool set_it) {
45825000Sdfrcase TRUE:
45925000Sdfr	mode3	mode;
46025000Sdfrdefault:
46125000Sdfr	void;
46225000Sdfr};
46325000Sdfr
46425000Sdfrunion set_uid3 switch (bool set_it) {
46525000Sdfrcase TRUE:
46638879Sobrien	uid3	uid;
46725000Sdfrdefault:
46825000Sdfr	void;
46925000Sdfr};
47025000Sdfr
47125000Sdfrunion set_gid3 switch (bool set_it) {
47225000Sdfrcase TRUE:
47338879Sobrien	gid3	gid;
47425000Sdfrdefault:
47525000Sdfr	void;
47625000Sdfr};
47725000Sdfr
47825000Sdfrunion set_size3 switch (bool set_it) {
47925000Sdfrcase TRUE:
48038879Sobrien	size3	size;
48125000Sdfrdefault:
48225000Sdfr	void;
48325000Sdfr};
48425000Sdfr
48525000Sdfrunion set_atime switch (time_how set_it) {
48625000Sdfrcase SET_TO_CLIENT_TIME:
48738879Sobrien	nfstime3	atime;
48825000Sdfrdefault:
48925000Sdfr	void;
49025000Sdfr};
49125000Sdfr
49225000Sdfrunion set_mtime switch (time_how set_it) {
49325000Sdfrcase SET_TO_CLIENT_TIME:
49438879Sobrien	nfstime3	mtime;
49525000Sdfrdefault:
49625000Sdfr	void;
49725000Sdfr};
49825000Sdfr
49925000Sdfrstruct sattr3 {
50025000Sdfr	set_mode3	mode;
50125000Sdfr	set_uid3	uid;
50225000Sdfr	set_gid3	gid;
50325000Sdfr	set_size3	size;
50425000Sdfr	set_atime	atime;
50525000Sdfr	set_mtime	mtime;
50625000Sdfr};
50725000Sdfr
50825000Sdfr/*
50925000Sdfr * Arguments for directory operations (v3)
51025000Sdfr */
51125000Sdfrstruct diropargs3 {
51225000Sdfr	nfs_fh3	dir;		/* directory file handle */
51325000Sdfr	filename3 name;		/* name (up to NFS_MAXNAMLEN bytes) */
51425000Sdfr};
51525000Sdfr
51625000Sdfr/*
51725000Sdfr * Arguments to getattr (v3).
51825000Sdfr */
51925000Sdfrstruct GETATTR3args {
52025000Sdfr	nfs_fh3		object;
52125000Sdfr};
52225000Sdfr
52325000Sdfrstruct GETATTR3resok {
52425000Sdfr	fattr3		obj_attributes;
52525000Sdfr};
52625000Sdfr
52725000Sdfrunion GETATTR3res switch (nfsstat3 status) {
52825000Sdfrcase NFS3_OK:
52925000Sdfr	GETATTR3resok	resok;
53025000Sdfrdefault:
53125000Sdfr	void;
53225000Sdfr};
53325000Sdfr
53425000Sdfr/*
53525000Sdfr * Arguments to setattr (v3).
53625000Sdfr */
53725000Sdfrunion sattrguard3 switch (bool check) {
53825000Sdfrcase TRUE:
53925000Sdfr	nfstime3	obj_ctime;
54025000Sdfrcase FALSE:
54125000Sdfr	void;
54225000Sdfr};
54325000Sdfr
54425000Sdfrstruct SETATTR3args {
54525000Sdfr	nfs_fh3		object;
54625000Sdfr	sattr3		new_attributes;
54725000Sdfr	sattrguard3	guard;
54825000Sdfr};
54925000Sdfr
55025000Sdfrstruct SETATTR3resok {
55125000Sdfr	wcc_data	obj_wcc;
55225000Sdfr};
55325000Sdfr
55425000Sdfrstruct SETATTR3resfail {
55525000Sdfr	wcc_data	obj_wcc;
55625000Sdfr};
55725000Sdfr
55825000Sdfrunion SETATTR3res switch (nfsstat3 status) {
55925000Sdfrcase NFS3_OK:
56025000Sdfr	SETATTR3resok	resok;
56125000Sdfrdefault:
56225000Sdfr	SETATTR3resfail	resfail;
56325000Sdfr};
56425000Sdfr
56525000Sdfr/*
56625000Sdfr * Arguments to lookup (v3).
56725000Sdfr */
56825000Sdfrstruct LOOKUP3args {
56925000Sdfr	diropargs3	what;
57025000Sdfr};
57125000Sdfr
57225000Sdfrstruct LOOKUP3resok {
57325000Sdfr	nfs_fh3		object;
57425000Sdfr	post_op_attr	obj_attributes;
57525000Sdfr	post_op_attr	dir_attributes;
57625000Sdfr};
57725000Sdfr
57825000Sdfrstruct LOOKUP3resfail {
57925000Sdfr	post_op_attr	dir_attributes;
58025000Sdfr};
58125000Sdfr
58225000Sdfrunion LOOKUP3res switch (nfsstat3 status) {
58325000Sdfrcase NFS3_OK:
58425000Sdfr	LOOKUP3resok	resok;
58525000Sdfrdefault:
58625000Sdfr	LOOKUP3resfail	resfail;
58725000Sdfr};
58825000Sdfr
58925000Sdfr/*
59025000Sdfr * Arguments to access (v3).
59125000Sdfr */
59225000Sdfrconst ACCESS3_READ	= 0x0001;
59325000Sdfrconst ACCESS3_LOOKUP	= 0x0002;
59425000Sdfrconst ACCESS3_MODIFY	= 0x0004;
59525000Sdfrconst ACCESS3_EXTEND	= 0x0008;
59625000Sdfrconst ACCESS3_DELETE	= 0x0010;
59725000Sdfrconst ACCESS3_EXECUTE	= 0x0020;
59825000Sdfr
59925000Sdfrstruct ACCESS3args {
60025000Sdfr	nfs_fh3		object;
60125000Sdfr	uint32		access;
60225000Sdfr};
60325000Sdfr
60425000Sdfrstruct ACCESS3resok {
60525000Sdfr	post_op_attr	obj_attributes;
60625000Sdfr	uint32		access;
60725000Sdfr};
60825000Sdfr
60925000Sdfrstruct ACCESS3resfail {
61025000Sdfr	post_op_attr	obj_attributes;
61125000Sdfr};
61225000Sdfr
61325000Sdfrunion ACCESS3res switch (nfsstat3 status) {
61425000Sdfrcase NFS3_OK:
61525000Sdfr	ACCESS3resok	resok;
61625000Sdfrdefault:
61725000Sdfr	ACCESS3resfail	resfail;
61825000Sdfr};
61925000Sdfr
62025000Sdfr/*
62125000Sdfr * Arguments to readlink (v3).
62225000Sdfr */
62325000Sdfrstruct READLINK3args {
62425000Sdfr	nfs_fh3		symlink;
62525000Sdfr};
62625000Sdfr
62725000Sdfrstruct READLINK3resok {
62825000Sdfr	post_op_attr	symlink_attributes;
62925000Sdfr	nfspath3	data;
63025000Sdfr};
63125000Sdfr
63225000Sdfrstruct READLINK3resfail {
63325000Sdfr	post_op_attr	symlink_attributes;
63425000Sdfr};
63525000Sdfr
63625000Sdfrunion READLINK3res switch (nfsstat3 status) {
63725000Sdfrcase NFS3_OK:
63825000Sdfr	READLINK3resok	resok;
63925000Sdfrdefault:
64025000Sdfr	READLINK3resfail resfail;
64125000Sdfr};
64225000Sdfr
64325000Sdfr/*
64425000Sdfr * Arguments to read (v3).
64525000Sdfr */
64625000Sdfrstruct READ3args {
64725000Sdfr	nfs_fh3		file;
64825000Sdfr	offset3		offset;
64925000Sdfr	count3		count;
65025000Sdfr};
65125000Sdfr
65225000Sdfrstruct READ3resok {
65325000Sdfr	post_op_attr	file_attributes;
65425000Sdfr	count3		count;
65525000Sdfr	bool		eof;
65625000Sdfr	opaque		data<>;
65725000Sdfr};
65825000Sdfr
65925000Sdfrstruct READ3resfail {
66025000Sdfr	post_op_attr	file_attributes;
66125000Sdfr};
66225000Sdfr
66338879Sobrien/* XXX: solaris 2.6 uses ``nfsstat'' here */
66425000Sdfrunion READ3res switch (nfsstat3 status) {
66525000Sdfrcase NFS3_OK:
66625000Sdfr	READ3resok	resok;
66725000Sdfrdefault:
66825000Sdfr	READ3resfail	resfail;
66925000Sdfr};
67025000Sdfr
67125000Sdfr/*
67225000Sdfr * Arguments to write (v3).
67325000Sdfr */
67425000Sdfrenum stable_how {
67525000Sdfr	UNSTABLE	= 0,
67625000Sdfr	DATA_SYNC	= 1,
67725000Sdfr	FILE_SYNC	= 2
67825000Sdfr};
67925000Sdfr
68025000Sdfrstruct WRITE3args {
68125000Sdfr	nfs_fh3		file;
68225000Sdfr	offset3		offset;
68325000Sdfr	count3		count;
68425000Sdfr	stable_how	stable;
68525000Sdfr	opaque		data<>;
68625000Sdfr};
68725000Sdfr
68825000Sdfrstruct WRITE3resok {
68925000Sdfr	wcc_data	file_wcc;
69025000Sdfr	count3		count;
69138879Sobrien	stable_how	committed;
69225000Sdfr	writeverf3	verf;
69325000Sdfr};
69425000Sdfr
69525000Sdfrstruct WRITE3resfail {
69625000Sdfr	wcc_data	file_wcc;
69725000Sdfr};
69825000Sdfr
69925000Sdfrunion WRITE3res switch (nfsstat3 status) {
70025000Sdfrcase NFS3_OK:
70125000Sdfr	WRITE3resok	resok;
70225000Sdfrdefault:
70325000Sdfr	WRITE3resfail	resfail;
70425000Sdfr};
70525000Sdfr
70625000Sdfr/*
70725000Sdfr * Arguments to create (v3).
70825000Sdfr */
70925000Sdfrenum createmode3 {
71025000Sdfr	UNCHECKED	= 0,
71125000Sdfr	GUARDED		= 1,
71225000Sdfr	EXCLUSIVE	= 2
71325000Sdfr};
71425000Sdfr
71525000Sdfrunion createhow3 switch (createmode3 mode) {
71625000Sdfrcase UNCHECKED:
71725000Sdfrcase GUARDED:
71825000Sdfr	sattr3		obj_attributes;
71925000Sdfrcase EXCLUSIVE:
72025000Sdfr	createverf3	verf;
72125000Sdfr};
72225000Sdfr
72325000Sdfrstruct CREATE3args {
72425000Sdfr	diropargs3	where;
72525000Sdfr	createhow3	how;
72625000Sdfr};
72725000Sdfr
72825000Sdfrstruct CREATE3resok {
72925000Sdfr	post_op_fh3	obj;
73025000Sdfr	post_op_attr	obj_attributes;
73125000Sdfr	wcc_data	dir_wcc;
73225000Sdfr};
73325000Sdfr
73425000Sdfrstruct CREATE3resfail {
73525000Sdfr	wcc_data	dir_wcc;
73625000Sdfr};
73725000Sdfr
73825000Sdfrunion CREATE3res switch (nfsstat3 status) {
73925000Sdfrcase NFS3_OK:
74025000Sdfr	CREATE3resok	resok;
74125000Sdfrdefault:
74225000Sdfr	CREATE3resfail	resfail;
74325000Sdfr};
74425000Sdfr
74525000Sdfr/*
74625000Sdfr * Arguments to mkdir (v3).
74725000Sdfr */
74825000Sdfrstruct MKDIR3args {
74925000Sdfr	diropargs3	where;
75025000Sdfr	sattr3		attributes;
75125000Sdfr};
75225000Sdfr
75325000Sdfrstruct MKDIR3resok {
75425000Sdfr	post_op_fh3	obj;
75525000Sdfr	post_op_attr	obj_attributes;
75625000Sdfr	wcc_data	dir_wcc;
75725000Sdfr};
75825000Sdfr
75925000Sdfrstruct MKDIR3resfail {
76025000Sdfr	wcc_data	dir_wcc;
76125000Sdfr};
76225000Sdfr
76325000Sdfrunion MKDIR3res switch (nfsstat3 status) {
76425000Sdfrcase NFS3_OK:
76525000Sdfr	MKDIR3resok	resok;
76625000Sdfrdefault:
76725000Sdfr	MKDIR3resfail	resfail;
76825000Sdfr};
76925000Sdfr
77025000Sdfr/*
77125000Sdfr * Arguments to symlink (v3).
77225000Sdfr */
77325000Sdfrstruct symlinkdata3 {
77425000Sdfr	sattr3		symlink_attributes;
77525000Sdfr	nfspath3	symlink_data;
77625000Sdfr};
77725000Sdfr
77825000Sdfrstruct SYMLINK3args {
77925000Sdfr	diropargs3	where;
78025000Sdfr	symlinkdata3	symlink;
78125000Sdfr};
78225000Sdfr
78325000Sdfrstruct SYMLINK3resok {
78425000Sdfr	post_op_fh3	obj;
78525000Sdfr	post_op_attr	obj_attributes;
78625000Sdfr	wcc_data	dir_wcc;
78725000Sdfr};
78825000Sdfr
78925000Sdfrstruct SYMLINK3resfail {
79025000Sdfr	wcc_data	dir_wcc;
79125000Sdfr};
79225000Sdfr
79325000Sdfrunion SYMLINK3res switch (nfsstat3 status) {
79425000Sdfrcase NFS3_OK:
79525000Sdfr	SYMLINK3resok	resok;
79625000Sdfrdefault:
79725000Sdfr	SYMLINK3resfail	resfail;
79825000Sdfr};
79925000Sdfr
80025000Sdfr/*
80125000Sdfr * Arguments to mknod (v3).
80225000Sdfr */
80325000Sdfrstruct devicedata3 {
80425000Sdfr	sattr3		dev_attributes;
80525000Sdfr	specdata3	spec;
80625000Sdfr};
80725000Sdfr
80825000Sdfrunion mknoddata3 switch (ftype3 type) {
80925000Sdfrcase NF3CHR:
81025000Sdfrcase NF3BLK:
81125000Sdfr	devicedata3	device;
81225000Sdfrcase NF3SOCK:
81325000Sdfrcase NF3FIFO:
81425000Sdfr	sattr3		pipe_attributes;
81525000Sdfrdefault:
81625000Sdfr	void;
81725000Sdfr};
81825000Sdfr
81925000Sdfrstruct MKNOD3args {
82025000Sdfr	diropargs3	where;
82125000Sdfr	mknoddata3	what;
82225000Sdfr};
82325000Sdfr
82425000Sdfrstruct MKNOD3resok {
82525000Sdfr	post_op_fh3	obj;
82625000Sdfr	post_op_attr	obj_attributes;
82725000Sdfr	wcc_data	dir_wcc;
82825000Sdfr};
82925000Sdfr
83025000Sdfrstruct MKNOD3resfail {
83125000Sdfr	wcc_data	dir_wcc;
83225000Sdfr};
83325000Sdfr
83425000Sdfrunion MKNOD3res switch (nfsstat3 status) {
83525000Sdfrcase NFS3_OK:
83625000Sdfr	MKNOD3resok	resok;
83725000Sdfrdefault:
83825000Sdfr	MKNOD3resfail	resfail;
83925000Sdfr};
84025000Sdfr
84125000Sdfr/*
84225000Sdfr * Arguments to remove (v3).
84325000Sdfr */
84425000Sdfrstruct REMOVE3args {
84525000Sdfr	diropargs3	object;
84625000Sdfr};
84725000Sdfr
84825000Sdfrstruct REMOVE3resok {
84925000Sdfr	wcc_data	dir_wcc;
85025000Sdfr};
85125000Sdfr
85225000Sdfrstruct REMOVE3resfail {
85325000Sdfr	wcc_data	dir_wcc;
85425000Sdfr};
85525000Sdfr
85625000Sdfrunion REMOVE3res switch (nfsstat3 status) {
85725000Sdfrcase NFS3_OK:
85825000Sdfr	REMOVE3resok	resok;
85925000Sdfrdefault:
86025000Sdfr	REMOVE3resfail	resfail;
86125000Sdfr};
86225000Sdfr
86325000Sdfr/*
86425000Sdfr * Arguments to rmdir (v3).
86525000Sdfr */
86625000Sdfrstruct RMDIR3args {
86725000Sdfr	diropargs3	object;
86825000Sdfr};
86925000Sdfr
87025000Sdfrstruct RMDIR3resok {
87125000Sdfr	wcc_data	dir_wcc;
87225000Sdfr};
87325000Sdfr
87425000Sdfrstruct RMDIR3resfail {
87525000Sdfr	wcc_data	dir_wcc;
87625000Sdfr};
87725000Sdfr
87825000Sdfrunion RMDIR3res switch (nfsstat3 status) {
87925000Sdfrcase NFS3_OK:
88025000Sdfr	RMDIR3resok	resok;
88125000Sdfrdefault:
88225000Sdfr	RMDIR3resfail	resfail;
88325000Sdfr};
88425000Sdfr
88525000Sdfr/*
88625000Sdfr * Arguments to rename (v3).
88725000Sdfr */
88825000Sdfrstruct RENAME3args {
88925000Sdfr	diropargs3	from;
89025000Sdfr	diropargs3	to;
89125000Sdfr};
89225000Sdfr
89325000Sdfrstruct RENAME3resok {
89425000Sdfr	wcc_data	fromdir_wcc;
89525000Sdfr	wcc_data	todir_wcc;
89625000Sdfr};
89725000Sdfr
89825000Sdfrstruct RENAME3resfail {
89925000Sdfr	wcc_data	fromdir_wcc;
90025000Sdfr	wcc_data	todir_wcc;
90125000Sdfr};
90225000Sdfr
90325000Sdfrunion RENAME3res switch (nfsstat3 status) {
90425000Sdfrcase NFS3_OK:
90525000Sdfr	RENAME3resok	resok;
90625000Sdfrdefault:
90725000Sdfr	RENAME3resfail	resfail;
90825000Sdfr};
90925000Sdfr
91025000Sdfr/*
91125000Sdfr * Arguments to link (v3).
91225000Sdfr */
91325000Sdfrstruct LINK3args {
91425000Sdfr	nfs_fh3		file;
91525000Sdfr	diropargs3	link;
91625000Sdfr};
91725000Sdfr
91825000Sdfrstruct LINK3resok {
91925000Sdfr	post_op_attr	file_attributes;
92025000Sdfr	wcc_data	linkdir_wcc;
92125000Sdfr};
92225000Sdfr
92325000Sdfrstruct LINK3resfail {
92425000Sdfr	post_op_attr	file_attributes;
92525000Sdfr	wcc_data	linkdir_wcc;
92625000Sdfr};
92725000Sdfr
92825000Sdfrunion LINK3res switch (nfsstat3 status) {
92925000Sdfrcase NFS3_OK:
93025000Sdfr	LINK3resok	resok;
93125000Sdfrdefault:
93225000Sdfr	LINK3resfail	resfail;
93325000Sdfr};
93425000Sdfr
93525000Sdfr/*
93625000Sdfr * Arguments to readdir (v3).
93725000Sdfr */
93825000Sdfrstruct READDIR3args {
93925000Sdfr	nfs_fh3		dir;
94025000Sdfr	cookie3		cookie;
94125000Sdfr	cookieverf3	cookieverf;
94225000Sdfr	count3		count;
94325000Sdfr};
94425000Sdfr
94525000Sdfrstruct entry3 {
94625000Sdfr	fileid3		fileid;
94725000Sdfr	filename3	name;
94825000Sdfr	cookie3		cookie;
94925000Sdfr	entry3		*nextentry;
95025000Sdfr};
95125000Sdfr
95225000Sdfrstruct dirlist3 {
95325000Sdfr	entry3		*entries;
95425000Sdfr	bool		eof;
95525000Sdfr};
95625000Sdfr
95725000Sdfrstruct READDIR3resok {
95825000Sdfr	post_op_attr	dir_attributes;
95925000Sdfr	cookieverf3	cookieverf;
96025000Sdfr	dirlist3	reply;
96125000Sdfr};
96225000Sdfr
96325000Sdfrstruct READDIR3resfail {
96425000Sdfr	post_op_attr	dir_attributes;
96525000Sdfr};
96625000Sdfr
96725000Sdfrunion READDIR3res switch (nfsstat3 status) {
96825000Sdfrcase NFS3_OK:
96925000Sdfr	READDIR3resok	resok;
97025000Sdfrdefault:
97125000Sdfr	READDIR3resfail	resfail;
97225000Sdfr};
97325000Sdfr
97425000Sdfr/*
97525000Sdfr * Arguments to readdirplus (v3).
97625000Sdfr */
97725000Sdfrstruct READDIRPLUS3args {
97825000Sdfr	nfs_fh3		dir;
97925000Sdfr	cookie3		cookie;
98025000Sdfr	cookieverf3	cookieverf;
98125000Sdfr	count3		dircount;
98225000Sdfr	count3		maxcount;
98325000Sdfr};
98425000Sdfr
98525000Sdfrstruct entryplus3 {
98625000Sdfr	fileid3		fileid;
98725000Sdfr	filename3	name;
98825000Sdfr	cookie3		cookie;
98925000Sdfr	post_op_attr	name_attributes;
99025000Sdfr	post_op_fh3	name_handle;
99125000Sdfr	entryplus3	*nextentry;
99225000Sdfr};
99325000Sdfr
99425000Sdfrstruct dirlistplus3 {
99525000Sdfr	entryplus3	*entries;
99625000Sdfr	bool		eof;
99725000Sdfr};
99825000Sdfr
99925000Sdfrstruct READDIRPLUS3resok {
100025000Sdfr	post_op_attr	dir_attributes;
100125000Sdfr	cookieverf3	cookieverf;
100225000Sdfr	dirlistplus3	reply;
100325000Sdfr};
100425000Sdfr
100525000Sdfrstruct READDIRPLUS3resfail {
100625000Sdfr	post_op_attr	dir_attributes;
100725000Sdfr};
100825000Sdfr
100925000Sdfrunion READDIRPLUS3res switch (nfsstat3 status) {
101025000Sdfrcase NFS3_OK:
101125000Sdfr	READDIRPLUS3resok	resok;
101225000Sdfrdefault:
101325000Sdfr	READDIRPLUS3resfail	resfail;
101425000Sdfr};
101525000Sdfr
101625000Sdfr/*
101725000Sdfr * Arguments to fsstat (v3).
101825000Sdfr */
101925000Sdfrstruct FSSTAT3args {
102025000Sdfr	nfs_fh3		fsroot;
102125000Sdfr};
102225000Sdfr
102325000Sdfrstruct FSSTAT3resok {
102425000Sdfr	post_op_attr	obj_attributes;
102525000Sdfr	size3		tbytes;
102625000Sdfr	size3		fbytes;
102725000Sdfr	size3		abytes;
102825000Sdfr	size3		tfiles;
102925000Sdfr	size3		ffiles;
103025000Sdfr	size3		afiles;
103125000Sdfr	uint32		invarsec;
103225000Sdfr};
103325000Sdfr
103425000Sdfrstruct FSSTAT3resfail {
103525000Sdfr	post_op_attr	obj_attributes;
103625000Sdfr};
103725000Sdfr
103825000Sdfrunion FSSTAT3res switch (nfsstat3 status) {
103925000Sdfrcase NFS3_OK:
104025000Sdfr	FSSTAT3resok	resok;
104125000Sdfrdefault:
104225000Sdfr	FSSTAT3resfail	resfail;
104325000Sdfr};
104425000Sdfr
104525000Sdfr/*
104625000Sdfr * Arguments to fsinfo (v3).
104725000Sdfr */
104825000Sdfrconst FSF3_LINK		= 0x0001;
104925000Sdfrconst FSF3_SYMLINK	= 0x0002;
105025000Sdfrconst FSF3_HOMOGENEOUS	= 0x0008;
105125000Sdfrconst FSF3_CANSETTIME	= 0x0010;
105225000Sdfr
105325000Sdfrstruct FSINFO3args {
105425000Sdfr	nfs_fh3		fsroot;
105525000Sdfr};
105625000Sdfr
105725000Sdfrstruct FSINFO3resok {
105825000Sdfr	post_op_attr	obj_attributes;
105925000Sdfr	uint32		rtmax;
106025000Sdfr	uint32		rtpref;
106125000Sdfr	uint32		rtmult;
106225000Sdfr	uint32		wtmax;
106325000Sdfr	uint32		wtpref;
106425000Sdfr	uint32		wtmult;
106525000Sdfr	uint32		dtpref;
106625000Sdfr	size3		maxfilesize;
106725000Sdfr	nfstime3	time_delta;
106825000Sdfr	uint32		properties;
106925000Sdfr};
107025000Sdfr
107125000Sdfrstruct FSINFO3resfail {
107225000Sdfr	post_op_attr	obj_attributes;
107325000Sdfr};
107425000Sdfr
107525000Sdfrunion FSINFO3res switch (nfsstat3 status) {
107625000Sdfrcase NFS3_OK:
107725000Sdfr	FSINFO3resok	resok;
107825000Sdfrdefault:
107925000Sdfr	FSINFO3resfail	resfail;
108025000Sdfr};
108125000Sdfr
108225000Sdfr/*
108325000Sdfr * Arguments to pathconf (v3).
108425000Sdfr */
108525000Sdfrstruct PATHCONF3args {
108625000Sdfr	nfs_fh3		object;
108725000Sdfr};
108825000Sdfr
108925000Sdfrstruct PATHCONF3resok {
109025000Sdfr	post_op_attr	obj_attributes;
109125000Sdfr	uint32		linkmax;
109225000Sdfr	uint32		name_max;
109325000Sdfr	bool		no_trunc;
109425000Sdfr	bool		chown_restricted;
109525000Sdfr	bool		case_insensitive;
109625000Sdfr	bool		case_preserving;
109725000Sdfr};
109825000Sdfr
109925000Sdfrstruct PATHCONF3resfail {
110025000Sdfr	post_op_attr	obj_attributes;
110125000Sdfr};
110225000Sdfr
110325000Sdfrunion PATHCONF3res switch (nfsstat3 status) {
110425000Sdfrcase NFS3_OK:
110538879Sobrien	PATHCONF3resok	resok;
110625000Sdfrdefault:
110738879Sobrien	PATHCONF3resfail	resfail;
110825000Sdfr};
110925000Sdfr
111025000Sdfr/*
111125000Sdfr * Arguments to commit (v3).
111225000Sdfr */
111325000Sdfrstruct COMMIT3args {
111425000Sdfr	nfs_fh3		file;
111525000Sdfr	offset3		offset;
111625000Sdfr	count3		count;
111725000Sdfr};
111825000Sdfr
111925000Sdfrstruct COMMIT3resok {
112025000Sdfr	wcc_data	file_wcc;
112125000Sdfr	writeverf3	verf;
112225000Sdfr};
112325000Sdfr
112425000Sdfrstruct COMMIT3resfail {
112525000Sdfr	wcc_data	file_wcc;
112625000Sdfr};
112725000Sdfr
112825000Sdfrunion COMMIT3res switch (nfsstat3 status) {
112925000Sdfrcase NFS3_OK:
113038879Sobrien	COMMIT3resok	resok;
113125000Sdfrdefault:
113238879Sobrien	COMMIT3resfail	resfail;
113325000Sdfr};
113425000Sdfr
113525000Sdfr#endif /* WANT_NFS3 */
113625000Sdfr
113725000Sdfr/*
11381832Swollman * Remote file service routines
11391832Swollman */
11401832Swollmanprogram NFS_PROGRAM {
11411832Swollman	version NFS_VERSION {
11421832Swollman		void
11431832Swollman		NFSPROC_NULL(void) = 0;
11441832Swollman
11451832Swollman		attrstat
11461832Swollman		NFSPROC_GETATTR(nfs_fh) =	1;
11471832Swollman
11481832Swollman		attrstat
11491832Swollman		NFSPROC_SETATTR(sattrargs) = 2;
11501832Swollman
11511832Swollman		void
11521832Swollman		NFSPROC_ROOT(void) = 3;
11531832Swollman
11541832Swollman		diropres
11551832Swollman		NFSPROC_LOOKUP(diropargs) = 4;
11561832Swollman
11571832Swollman		readlinkres
11581832Swollman		NFSPROC_READLINK(nfs_fh) = 5;
11591832Swollman
11601832Swollman		readres
11611832Swollman		NFSPROC_READ(readargs) = 6;
11621832Swollman
11631832Swollman		void
11641832Swollman		NFSPROC_WRITECACHE(void) = 7;
11651832Swollman
11661832Swollman		attrstat
11671832Swollman		NFSPROC_WRITE(writeargs) = 8;
11681832Swollman
11691832Swollman		diropres
11701832Swollman		NFSPROC_CREATE(createargs) = 9;
11711832Swollman
11721832Swollman		nfsstat
11731832Swollman		NFSPROC_REMOVE(diropargs) = 10;
11741832Swollman
11751832Swollman		nfsstat
11761832Swollman		NFSPROC_RENAME(renameargs) = 11;
11771832Swollman
11781832Swollman		nfsstat
11791832Swollman		NFSPROC_LINK(linkargs) = 12;
11801832Swollman
11811832Swollman		nfsstat
11821832Swollman		NFSPROC_SYMLINK(symlinkargs) = 13;
11831832Swollman
11841832Swollman		diropres
11851832Swollman		NFSPROC_MKDIR(createargs) = 14;
11861832Swollman
11871832Swollman		nfsstat
11881832Swollman		NFSPROC_RMDIR(diropargs) = 15;
11891832Swollman
11901832Swollman		readdirres
11911832Swollman		NFSPROC_READDIR(readdirargs) = 16;
11921832Swollman
11931832Swollman		statfsres
11941832Swollman		NFSPROC_STATFS(nfs_fh) = 17;
11951832Swollman	} = 2;
119638879Sobrien} = 100003;
119725000Sdfr#ifdef WANT_NFS3
119838879Sobrienprogram NFS3_PROGRAM {
119925000Sdfr	version NFS_V3 {
120025000Sdfr		void
120125000Sdfr		NFSPROC3_NULL(void)			= 0;
120225000Sdfr
120325000Sdfr		GETATTR3res
120425000Sdfr		NFSPROC3_GETATTR(GETATTR3args)		= 1;
120525000Sdfr
120625000Sdfr		SETATTR3res
120725000Sdfr		NFSPROC3_SETATTR(SETATTR3args)		= 2;
120825000Sdfr
120925000Sdfr		LOOKUP3res
121025000Sdfr		NFSPROC3_LOOKUP(LOOKUP3args)		= 3;
121125000Sdfr
121225000Sdfr		ACCESS3res
121325000Sdfr		NFSPROC3_ACCESS(ACCESS3args)		= 4;
121425000Sdfr
121525000Sdfr		READLINK3res
121625000Sdfr		NFSPROC3_READLINK(READLINK3args)	= 5;
121725000Sdfr
121825000Sdfr		READ3res
121925000Sdfr		NFSPROC3_READ(READ3args)		= 6;
122025000Sdfr
122125000Sdfr		WRITE3res
122225000Sdfr		NFSPROC3_WRITE(WRITE3args)		= 7;
122325000Sdfr
122425000Sdfr		CREATE3res
122525000Sdfr		NFSPROC3_CREATE(CREATE3args)		= 8;
122625000Sdfr
122725000Sdfr		MKDIR3res
122825000Sdfr		NFSPROC3_MKDIR(MKDIR3args)		= 9;
122925000Sdfr
123025000Sdfr		SYMLINK3res
123125000Sdfr		NFSPROC3_SYMLINK(SYMLINK3args)		= 10;
123225000Sdfr
123325000Sdfr		MKNOD3res
123425000Sdfr		NFSPROC3_MKNOD(MKNOD3args)		= 11;
123525000Sdfr
123625000Sdfr		REMOVE3res
123725000Sdfr		NFSPROC3_REMOVE(REMOVE3args)		= 12;
123825000Sdfr
123925000Sdfr		RMDIR3res
124025000Sdfr		NFSPROC3_RMDIR(RMDIR3args)		= 13;
124125000Sdfr
124225000Sdfr		RENAME3res
124325000Sdfr		NFSPROC3_RENAME(RENAME3args)		= 14;
124425000Sdfr
124525000Sdfr		LINK3res
124625000Sdfr		NFSPROC3_LINK(LINK3args)		= 15;
124725000Sdfr
124825000Sdfr		READDIR3res
124925000Sdfr		NFSPROC3_READDIR(READDIR3args)		= 16;
125025000Sdfr
125125000Sdfr		READDIRPLUS3res
125225000Sdfr		NFSPROC3_READDIRPLUS(READDIRPLUS3args)	= 17;
125325000Sdfr
125425000Sdfr		FSSTAT3res
125525000Sdfr		NFSPROC3_FSSTAT(FSSTAT3args)		= 18;
125625000Sdfr
125725000Sdfr		FSINFO3res
125825000Sdfr		NFSPROC3_FSINFO(FSINFO3args)		= 19;
125925000Sdfr
126025000Sdfr		PATHCONF3res
126125000Sdfr		NFSPROC3_PATHCONF(PATHCONF3args)	= 20;
126225000Sdfr
126325000Sdfr		COMMIT3res
126425000Sdfr		NFSPROC3_COMMIT(COMMIT3args)		= 21;
126538879Sobrien	} = 3;
126638879Sobrien} = 100003;
126725000Sdfr#endif
12681832Swollman
1269