xref: /dflybsd-src/contrib/tcpdump/nfs.h (revision 59c07fbdf8168fa08c76c515186d561b5a92690c)
1ea7b4bf5SPeter Avalos /*	NetBSD: nfs.h,v 1.1 1996/05/23 22:49:53 fvdl Exp 	*/
241c99275SPeter Avalos 
341c99275SPeter Avalos /*
441c99275SPeter Avalos  * Copyright (c) 1989, 1993
541c99275SPeter Avalos  *	The Regents of the University of California.  All rights reserved.
641c99275SPeter Avalos  *
741c99275SPeter Avalos  * This code is derived from software contributed to Berkeley by
841c99275SPeter Avalos  * Rick Macklem at The University of Guelph.
941c99275SPeter Avalos  *
1041c99275SPeter Avalos  * Redistribution and use in source and binary forms, with or without
1141c99275SPeter Avalos  * modification, are permitted provided that the following conditions
1241c99275SPeter Avalos  * are met:
1341c99275SPeter Avalos  * 1. Redistributions of source code must retain the above copyright
1441c99275SPeter Avalos  *    notice, this list of conditions and the following disclaimer.
1541c99275SPeter Avalos  * 2. Redistributions in binary form must reproduce the above copyright
1641c99275SPeter Avalos  *    notice, this list of conditions and the following disclaimer in the
1741c99275SPeter Avalos  *    documentation and/or other materials provided with the distribution.
1841c99275SPeter Avalos  * 3. All advertising materials mentioning features or use of this software
1941c99275SPeter Avalos  *    must display the following acknowledgement:
2041c99275SPeter Avalos  *	This product includes software developed by the University of
2141c99275SPeter Avalos  *	California, Berkeley and its contributors.
2241c99275SPeter Avalos  * 4. Neither the name of the University nor the names of its contributors
2341c99275SPeter Avalos  *    may be used to endorse or promote products derived from this software
2441c99275SPeter Avalos  *    without specific prior written permission.
2541c99275SPeter Avalos  *
2641c99275SPeter Avalos  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2741c99275SPeter Avalos  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2841c99275SPeter Avalos  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2941c99275SPeter Avalos  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
3041c99275SPeter Avalos  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
3141c99275SPeter Avalos  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3241c99275SPeter Avalos  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3341c99275SPeter Avalos  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3441c99275SPeter Avalos  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3541c99275SPeter Avalos  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3641c99275SPeter Avalos  * SUCH DAMAGE.
3741c99275SPeter Avalos  *
3841c99275SPeter Avalos  *	@(#)nfsproto.h	8.2 (Berkeley) 3/30/95
3941c99275SPeter Avalos  */
4041c99275SPeter Avalos 
4141c99275SPeter Avalos /*
4241c99275SPeter Avalos  * nfs definitions as per the Version 2 and 3 specs
4341c99275SPeter Avalos  */
4441c99275SPeter Avalos 
4541c99275SPeter Avalos /*
4641c99275SPeter Avalos  * Constants as defined in the Sun NFS Version 2 and 3 specs.
4741c99275SPeter Avalos  * "NFS: Network File System Protocol Specification" RFC1094
4841c99275SPeter Avalos  * and in the "NFS: Network File System Version 3 Protocol
4941c99275SPeter Avalos  * Specification"
5041c99275SPeter Avalos  */
5141c99275SPeter Avalos 
5241c99275SPeter Avalos #define NFS_PORT	2049
5341c99275SPeter Avalos #define	NFS_PROG	100003
5441c99275SPeter Avalos #define NFS_VER2	2
5541c99275SPeter Avalos #define	NFS_VER3	3
5641c99275SPeter Avalos #define NFS_V2MAXDATA	8192
5741c99275SPeter Avalos #define	NFS_MAXDGRAMDATA 16384
5841c99275SPeter Avalos #define	NFS_MAXDATA	32768
5941c99275SPeter Avalos #define	NFS_MAXPATHLEN	1024
6041c99275SPeter Avalos #define	NFS_MAXNAMLEN	255
6141c99275SPeter Avalos #define	NFS_MAXPKTHDR	404
6241c99275SPeter Avalos #define NFS_MAXPACKET	(NFS_MAXPKTHDR + NFS_MAXDATA)
6341c99275SPeter Avalos #define	NFS_MINPACKET	20
6441c99275SPeter Avalos #define	NFS_FABLKSIZE	512	/* Size in bytes of a block wrt fa_blocks */
6541c99275SPeter Avalos 
6641c99275SPeter Avalos /* Stat numbers for rpc returns (version 2 and 3) */
6741c99275SPeter Avalos #define	NFS_OK			0
6841c99275SPeter Avalos #define	NFSERR_PERM		1
6941c99275SPeter Avalos #define	NFSERR_NOENT		2
7041c99275SPeter Avalos #define	NFSERR_IO		5
7141c99275SPeter Avalos #define	NFSERR_NXIO		6
7241c99275SPeter Avalos #define	NFSERR_ACCES		13
7341c99275SPeter Avalos #define	NFSERR_EXIST		17
7441c99275SPeter Avalos #define	NFSERR_XDEV		18	/* Version 3 only */
7541c99275SPeter Avalos #define	NFSERR_NODEV		19
7641c99275SPeter Avalos #define	NFSERR_NOTDIR		20
7741c99275SPeter Avalos #define	NFSERR_ISDIR		21
7841c99275SPeter Avalos #define	NFSERR_INVAL		22	/* Version 3 only */
7941c99275SPeter Avalos #define	NFSERR_FBIG		27
8041c99275SPeter Avalos #define	NFSERR_NOSPC		28
8141c99275SPeter Avalos #define	NFSERR_ROFS		30
8241c99275SPeter Avalos #define	NFSERR_MLINK		31	/* Version 3 only */
8341c99275SPeter Avalos #define	NFSERR_NAMETOL		63
8441c99275SPeter Avalos #define	NFSERR_NOTEMPTY		66
8541c99275SPeter Avalos #define	NFSERR_DQUOT		69
8641c99275SPeter Avalos #define	NFSERR_STALE		70
8741c99275SPeter Avalos #define	NFSERR_REMOTE		71	/* Version 3 only */
8841c99275SPeter Avalos #define	NFSERR_WFLUSH		99	/* Version 2 only */
8941c99275SPeter Avalos #define	NFSERR_BADHANDLE	10001	/* The rest Version 3 only */
9041c99275SPeter Avalos #define	NFSERR_NOT_SYNC		10002
9141c99275SPeter Avalos #define	NFSERR_BAD_COOKIE	10003
9241c99275SPeter Avalos #define	NFSERR_NOTSUPP		10004
9341c99275SPeter Avalos #define	NFSERR_TOOSMALL		10005
9441c99275SPeter Avalos #define	NFSERR_SERVERFAULT	10006
9541c99275SPeter Avalos #define	NFSERR_BADTYPE		10007
9641c99275SPeter Avalos #define	NFSERR_JUKEBOX		10008
9741c99275SPeter Avalos #define NFSERR_TRYLATER		NFSERR_JUKEBOX
9841c99275SPeter Avalos #define	NFSERR_STALEWRITEVERF	30001	/* Fake return for nfs_commit() */
9941c99275SPeter Avalos 
10041c99275SPeter Avalos #define NFSERR_RETVOID		0x20000000 /* Return void, not error */
10141c99275SPeter Avalos #define NFSERR_AUTHERR		0x40000000 /* Mark an authentication error */
10241c99275SPeter Avalos #define NFSERR_RETERR		0x80000000 /* Mark an error return for V3 */
10341c99275SPeter Avalos 
10441c99275SPeter Avalos /* Sizes in bytes of various nfs rpc components */
10541c99275SPeter Avalos #define	NFSX_UNSIGNED	4
10641c99275SPeter Avalos 
10741c99275SPeter Avalos /* specific to NFS Version 2 */
10841c99275SPeter Avalos #define	NFSX_V2FH	32
10941c99275SPeter Avalos #define	NFSX_V2FATTR	68
11041c99275SPeter Avalos #define	NFSX_V2SATTR	32
11141c99275SPeter Avalos #define	NFSX_V2COOKIE	4
11241c99275SPeter Avalos #define NFSX_V2STATFS	20
11341c99275SPeter Avalos 
11441c99275SPeter Avalos /* specific to NFS Version 3 */
11541c99275SPeter Avalos #if 0
11641c99275SPeter Avalos #define NFSX_V3FH		(sizeof (fhandle_t)) /* size this server uses */
11741c99275SPeter Avalos #endif
11841c99275SPeter Avalos #define	NFSX_V3FHMAX		64	/* max. allowed by protocol */
11941c99275SPeter Avalos #define NFSX_V3FATTR		84
12041c99275SPeter Avalos #define NFSX_V3SATTR		60	/* max. all fields filled in */
12141c99275SPeter Avalos #define NFSX_V3POSTOPATTR	(NFSX_V3FATTR + NFSX_UNSIGNED)
12241c99275SPeter Avalos #define NFSX_V3WCCDATA		(NFSX_V3POSTOPATTR + 8 * NFSX_UNSIGNED)
12341c99275SPeter Avalos #define NFSX_V3COOKIEVERF 	8
12441c99275SPeter Avalos #define NFSX_V3WRITEVERF 	8
12541c99275SPeter Avalos #define NFSX_V3CREATEVERF	8
12641c99275SPeter Avalos #define NFSX_V3STATFS		52
12741c99275SPeter Avalos #define NFSX_V3FSINFO		48
12841c99275SPeter Avalos #define NFSX_V3PATHCONF		24
12941c99275SPeter Avalos 
13041c99275SPeter Avalos /* variants for both versions */
13141c99275SPeter Avalos #define NFSX_FH(v3)		((v3) ? (NFSX_V3FHMAX + NFSX_UNSIGNED) : \
13241c99275SPeter Avalos 					NFSX_V2FH)
13341c99275SPeter Avalos #define NFSX_SRVFH(v3)		((v3) ? NFSX_V3FH : NFSX_V2FH)
13441c99275SPeter Avalos #define	NFSX_FATTR(v3)		((v3) ? NFSX_V3FATTR : NFSX_V2FATTR)
13541c99275SPeter Avalos #define NFSX_PREOPATTR(v3)	((v3) ? (7 * NFSX_UNSIGNED) : 0)
13641c99275SPeter Avalos #define NFSX_POSTOPATTR(v3)	((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : 0)
13741c99275SPeter Avalos #define NFSX_POSTOPORFATTR(v3)	((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : \
13841c99275SPeter Avalos 					NFSX_V2FATTR)
13941c99275SPeter Avalos #define NFSX_WCCDATA(v3)	((v3) ? NFSX_V3WCCDATA : 0)
14041c99275SPeter Avalos #define NFSX_WCCORFATTR(v3)	((v3) ? NFSX_V3WCCDATA : NFSX_V2FATTR)
14141c99275SPeter Avalos #define	NFSX_COOKIEVERF(v3)	((v3) ? NFSX_V3COOKIEVERF : 0)
14241c99275SPeter Avalos #define	NFSX_WRITEVERF(v3)	((v3) ? NFSX_V3WRITEVERF : 0)
14341c99275SPeter Avalos #define NFSX_READDIR(v3)	((v3) ? (5 * NFSX_UNSIGNED) : \
14441c99275SPeter Avalos 					(2 * NFSX_UNSIGNED))
14541c99275SPeter Avalos #define	NFSX_STATFS(v3)		((v3) ? NFSX_V3STATFS : NFSX_V2STATFS)
14641c99275SPeter Avalos 
14741c99275SPeter Avalos /* nfs rpc procedure numbers (before version mapping) */
14841c99275SPeter Avalos #define	NFSPROC_NULL		0
14941c99275SPeter Avalos #define	NFSPROC_GETATTR		1
15041c99275SPeter Avalos #define	NFSPROC_SETATTR		2
15141c99275SPeter Avalos #define	NFSPROC_LOOKUP		3
15241c99275SPeter Avalos #define	NFSPROC_ACCESS		4
15341c99275SPeter Avalos #define	NFSPROC_READLINK	5
15441c99275SPeter Avalos #define	NFSPROC_READ		6
15541c99275SPeter Avalos #define	NFSPROC_WRITE		7
15641c99275SPeter Avalos #define	NFSPROC_CREATE		8
15741c99275SPeter Avalos #define	NFSPROC_MKDIR		9
15841c99275SPeter Avalos #define	NFSPROC_SYMLINK		10
15941c99275SPeter Avalos #define	NFSPROC_MKNOD		11
16041c99275SPeter Avalos #define	NFSPROC_REMOVE		12
16141c99275SPeter Avalos #define	NFSPROC_RMDIR		13
16241c99275SPeter Avalos #define	NFSPROC_RENAME		14
16341c99275SPeter Avalos #define	NFSPROC_LINK		15
16441c99275SPeter Avalos #define	NFSPROC_READDIR		16
16541c99275SPeter Avalos #define	NFSPROC_READDIRPLUS	17
16641c99275SPeter Avalos #define	NFSPROC_FSSTAT		18
16741c99275SPeter Avalos #define	NFSPROC_FSINFO		19
16841c99275SPeter Avalos #define	NFSPROC_PATHCONF	20
16941c99275SPeter Avalos #define	NFSPROC_COMMIT		21
17041c99275SPeter Avalos 
17141c99275SPeter Avalos /* And leasing (nqnfs) procedure numbers (must be last) */
17241c99275SPeter Avalos #define	NQNFSPROC_GETLEASE	22
17341c99275SPeter Avalos #define	NQNFSPROC_VACATED	23
17441c99275SPeter Avalos #define	NQNFSPROC_EVICTED	24
17541c99275SPeter Avalos 
17641c99275SPeter Avalos #define NFSPROC_NOOP		25
17741c99275SPeter Avalos #define	NFS_NPROCS		26
17841c99275SPeter Avalos 
17941c99275SPeter Avalos /* Actual Version 2 procedure numbers */
18041c99275SPeter Avalos #define	NFSV2PROC_NULL		0
18141c99275SPeter Avalos #define	NFSV2PROC_GETATTR	1
18241c99275SPeter Avalos #define	NFSV2PROC_SETATTR	2
18341c99275SPeter Avalos #define	NFSV2PROC_NOOP		3
18441c99275SPeter Avalos #define	NFSV2PROC_ROOT		NFSV2PROC_NOOP	/* Obsolete */
18541c99275SPeter Avalos #define	NFSV2PROC_LOOKUP	4
18641c99275SPeter Avalos #define	NFSV2PROC_READLINK	5
18741c99275SPeter Avalos #define	NFSV2PROC_READ		6
18841c99275SPeter Avalos #define	NFSV2PROC_WRITECACHE	NFSV2PROC_NOOP	/* Obsolete */
18941c99275SPeter Avalos #define	NFSV2PROC_WRITE		8
19041c99275SPeter Avalos #define	NFSV2PROC_CREATE	9
19141c99275SPeter Avalos #define	NFSV2PROC_REMOVE	10
19241c99275SPeter Avalos #define	NFSV2PROC_RENAME	11
19341c99275SPeter Avalos #define	NFSV2PROC_LINK		12
19441c99275SPeter Avalos #define	NFSV2PROC_SYMLINK	13
19541c99275SPeter Avalos #define	NFSV2PROC_MKDIR		14
19641c99275SPeter Avalos #define	NFSV2PROC_RMDIR		15
19741c99275SPeter Avalos #define	NFSV2PROC_READDIR	16
19841c99275SPeter Avalos #define	NFSV2PROC_STATFS	17
19941c99275SPeter Avalos 
20041c99275SPeter Avalos /*
20141c99275SPeter Avalos  * Constants used by the Version 3 protocol for various RPCs
20241c99275SPeter Avalos  */
20341c99275SPeter Avalos #define NFSV3SATTRTIME_DONTCHANGE	0
20441c99275SPeter Avalos #define NFSV3SATTRTIME_TOSERVER		1
20541c99275SPeter Avalos #define NFSV3SATTRTIME_TOCLIENT		2
20641c99275SPeter Avalos 
20741c99275SPeter Avalos #define NFSV3ATTRTIME_NMODES		3
20841c99275SPeter Avalos 
20941c99275SPeter Avalos #define NFSV3ACCESS_READ		0x01
21041c99275SPeter Avalos #define NFSV3ACCESS_LOOKUP		0x02
21141c99275SPeter Avalos #define NFSV3ACCESS_MODIFY		0x04
21241c99275SPeter Avalos #define NFSV3ACCESS_EXTEND		0x08
21341c99275SPeter Avalos #define NFSV3ACCESS_DELETE		0x10
21441c99275SPeter Avalos #define NFSV3ACCESS_EXECUTE		0x20
21527bfbee1SPeter Avalos #define NFSV3ACCESS_FULL		0x3f
21641c99275SPeter Avalos 
21741c99275SPeter Avalos #define NFSV3WRITE_UNSTABLE		0
21841c99275SPeter Avalos #define NFSV3WRITE_DATASYNC		1
21941c99275SPeter Avalos #define NFSV3WRITE_FILESYNC		2
22041c99275SPeter Avalos 
22141c99275SPeter Avalos #define NFSV3WRITE_NMODES		3
22241c99275SPeter Avalos 
22341c99275SPeter Avalos #define NFSV3CREATE_UNCHECKED		0
22441c99275SPeter Avalos #define NFSV3CREATE_GUARDED		1
22541c99275SPeter Avalos #define NFSV3CREATE_EXCLUSIVE		2
22641c99275SPeter Avalos 
22741c99275SPeter Avalos #define NFSV3CREATE_NMODES		3
22841c99275SPeter Avalos 
22941c99275SPeter Avalos #define NFSV3FSINFO_LINK		0x01
23041c99275SPeter Avalos #define NFSV3FSINFO_SYMLINK		0x02
23141c99275SPeter Avalos #define NFSV3FSINFO_HOMOGENEOUS		0x08
23241c99275SPeter Avalos #define NFSV3FSINFO_CANSETTIME		0x10
23341c99275SPeter Avalos 
23441c99275SPeter Avalos /* Conversion macros */
23541c99275SPeter Avalos #define	vtonfsv2_mode(t,m) \
23641c99275SPeter Avalos 		txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : \
23741c99275SPeter Avalos 				MAKEIMODE((t), (m)))
23841c99275SPeter Avalos #define vtonfsv3_mode(m)	txdr_unsigned((m) & 07777)
239411677aeSAaron LI #define	nfstov_mode(a)		(fxdr_unsigned(uint16_t, (a))&07777)
24041c99275SPeter Avalos #define	vtonfsv2_type(a)	txdr_unsigned(nfsv2_type[((int32_t)(a))])
24141c99275SPeter Avalos #define	vtonfsv3_type(a)	txdr_unsigned(nfsv3_type[((int32_t)(a))])
242411677aeSAaron LI #define	nfsv2tov_type(a)	nv2tov_type[fxdr_unsigned(uint32_t,(a))&0x7]
243411677aeSAaron LI #define	nfsv3tov_type(a)	nv3tov_type[fxdr_unsigned(uint32_t,(a))&0x7]
24441c99275SPeter Avalos 
24541c99275SPeter Avalos /* File types */
24641c99275SPeter Avalos typedef enum { NFNON=0, NFREG=1, NFDIR=2, NFBLK=3, NFCHR=4, NFLNK=5,
24741c99275SPeter Avalos 	NFSOCK=6, NFFIFO=7 } nfs_type;
24841c99275SPeter Avalos 
249*ed775ee7SAntonio Huete Jimenez /*
250*ed775ee7SAntonio Huete Jimenez  * Structs for common parts of the rpc's
251*ed775ee7SAntonio Huete Jimenez  *
252*ed775ee7SAntonio Huete Jimenez  * NOTE: these structures are not always overlaid directly on the
253*ed775ee7SAntonio Huete Jimenez  * packet data - sometimes we declare a local variable of that type,
254*ed775ee7SAntonio Huete Jimenez  * and fill it up with fields extracted using byte pointers - so we
255*ed775ee7SAntonio Huete Jimenez  * don't use nd_ types for their members.
256*ed775ee7SAntonio Huete Jimenez  */
257*ed775ee7SAntonio Huete Jimenez 
25841c99275SPeter Avalos /*
25941c99275SPeter Avalos  * File Handle (32 bytes for version 2), variable up to 64 for version 3.
26041c99275SPeter Avalos  * File Handles of up to NFS_SMALLFH in size are stored directly in the
26141c99275SPeter Avalos  * nfs node, whereas larger ones are malloc'd. (This never happens when
26241c99275SPeter Avalos  * NFS_SMALLFH is set to 64.)
26341c99275SPeter Avalos  * NFS_SMALLFH should be in the range of 32 to 64 and be divisible by 4.
26441c99275SPeter Avalos  */
26541c99275SPeter Avalos #ifndef NFS_SMALLFH
26641c99275SPeter Avalos #define NFS_SMALLFH	64
26741c99275SPeter Avalos #endif
26841c99275SPeter Avalos union nfsfh {
26941c99275SPeter Avalos /*	fhandle_t fh_generic; */
27041c99275SPeter Avalos 	u_char    fh_bytes[NFS_SMALLFH];
27141c99275SPeter Avalos };
27241c99275SPeter Avalos typedef union nfsfh nfsfh_t;
27341c99275SPeter Avalos 
27441c99275SPeter Avalos struct nfsv2_time {
275*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t nfsv2_sec;
276*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t nfsv2_usec;
27741c99275SPeter Avalos };
27841c99275SPeter Avalos typedef struct nfsv2_time	nfstime2;
27941c99275SPeter Avalos 
28041c99275SPeter Avalos struct nfsv3_time {
281*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t nfsv3_sec;
282*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t nfsv3_nsec;
28341c99275SPeter Avalos };
28441c99275SPeter Avalos typedef struct nfsv3_time	nfstime3;
28541c99275SPeter Avalos 
28641c99275SPeter Avalos /*
28741c99275SPeter Avalos  * NFS Version 3 special file number.
28841c99275SPeter Avalos  */
28941c99275SPeter Avalos struct nfsv3_spec {
290*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t specdata1;
291*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t specdata2;
29241c99275SPeter Avalos };
29341c99275SPeter Avalos typedef	struct nfsv3_spec	nfsv3spec;
29441c99275SPeter Avalos 
29541c99275SPeter Avalos /*
29641c99275SPeter Avalos  * File attributes and setable attributes. These structures cover both
29741c99275SPeter Avalos  * NFS version 2 and the version 3 protocol. Note that the union is only
29841c99275SPeter Avalos  * used so that one pointer can refer to both variants. These structures
29941c99275SPeter Avalos  * go out on the wire and must be densely packed, so no quad data types
30041c99275SPeter Avalos  * are used. (all fields are longs or u_longs or structures of same)
30141c99275SPeter Avalos  * NB: You can't do sizeof(struct nfs_fattr), you must use the
30241c99275SPeter Avalos  *     NFSX_FATTR(v3) macro.
30341c99275SPeter Avalos  */
30441c99275SPeter Avalos struct nfs_fattr {
305*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t fa_type;
306*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t fa_mode;
307*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t fa_nlink;
308*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t fa_uid;
309*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t fa_gid;
31041c99275SPeter Avalos 	union {
31141c99275SPeter Avalos 		struct {
312*ed775ee7SAntonio Huete Jimenez 			nd_uint32_t nfsv2fa_size;
313*ed775ee7SAntonio Huete Jimenez 			nd_uint32_t nfsv2fa_blocksize;
314*ed775ee7SAntonio Huete Jimenez 			nd_uint32_t nfsv2fa_rdev;
315*ed775ee7SAntonio Huete Jimenez 			nd_uint32_t nfsv2fa_blocks;
316*ed775ee7SAntonio Huete Jimenez 			nd_uint32_t nfsv2fa_fsid;
317*ed775ee7SAntonio Huete Jimenez 			nd_uint32_t nfsv2fa_fileid;
31841c99275SPeter Avalos 			nfstime2    nfsv2fa_atime;
31941c99275SPeter Avalos 			nfstime2    nfsv2fa_mtime;
32041c99275SPeter Avalos 			nfstime2    nfsv2fa_ctime;
32141c99275SPeter Avalos 		} fa_nfsv2;
32241c99275SPeter Avalos 		struct {
323*ed775ee7SAntonio Huete Jimenez 			nd_uint64_t nfsv3fa_size;
324*ed775ee7SAntonio Huete Jimenez 			nd_uint64_t nfsv3fa_used;
32541c99275SPeter Avalos 			nfsv3spec   nfsv3fa_rdev;
326*ed775ee7SAntonio Huete Jimenez 			nd_uint64_t nfsv3fa_fsid;
327*ed775ee7SAntonio Huete Jimenez 			nd_uint64_t nfsv3fa_fileid;
32841c99275SPeter Avalos 			nfstime3    nfsv3fa_atime;
32941c99275SPeter Avalos 			nfstime3    nfsv3fa_mtime;
33041c99275SPeter Avalos 			nfstime3    nfsv3fa_ctime;
33141c99275SPeter Avalos 		} fa_nfsv3;
33241c99275SPeter Avalos 	} fa_un;
33341c99275SPeter Avalos };
33441c99275SPeter Avalos 
33541c99275SPeter Avalos /* and some ugly defines for accessing union components */
33641c99275SPeter Avalos #define	fa2_size		fa_un.fa_nfsv2.nfsv2fa_size
33741c99275SPeter Avalos #define	fa2_blocksize		fa_un.fa_nfsv2.nfsv2fa_blocksize
33841c99275SPeter Avalos #define	fa2_rdev		fa_un.fa_nfsv2.nfsv2fa_rdev
33941c99275SPeter Avalos #define	fa2_blocks		fa_un.fa_nfsv2.nfsv2fa_blocks
34041c99275SPeter Avalos #define	fa2_fsid		fa_un.fa_nfsv2.nfsv2fa_fsid
34141c99275SPeter Avalos #define	fa2_fileid		fa_un.fa_nfsv2.nfsv2fa_fileid
34241c99275SPeter Avalos #define	fa2_atime		fa_un.fa_nfsv2.nfsv2fa_atime
34341c99275SPeter Avalos #define	fa2_mtime		fa_un.fa_nfsv2.nfsv2fa_mtime
34441c99275SPeter Avalos #define	fa2_ctime		fa_un.fa_nfsv2.nfsv2fa_ctime
34541c99275SPeter Avalos #define	fa3_size		fa_un.fa_nfsv3.nfsv3fa_size
34641c99275SPeter Avalos #define	fa3_used		fa_un.fa_nfsv3.nfsv3fa_used
34741c99275SPeter Avalos #define	fa3_rdev		fa_un.fa_nfsv3.nfsv3fa_rdev
34841c99275SPeter Avalos #define	fa3_fsid		fa_un.fa_nfsv3.nfsv3fa_fsid
34941c99275SPeter Avalos #define	fa3_fileid		fa_un.fa_nfsv3.nfsv3fa_fileid
35041c99275SPeter Avalos #define	fa3_atime		fa_un.fa_nfsv3.nfsv3fa_atime
35141c99275SPeter Avalos #define	fa3_mtime		fa_un.fa_nfsv3.nfsv3fa_mtime
35241c99275SPeter Avalos #define	fa3_ctime		fa_un.fa_nfsv3.nfsv3fa_ctime
35341c99275SPeter Avalos 
35441c99275SPeter Avalos struct nfsv2_sattr {
355*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t sa_mode;
356*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t sa_uid;
357*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t sa_gid;
358*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t sa_size;
35941c99275SPeter Avalos 	nfstime2    sa_atime;
36041c99275SPeter Avalos 	nfstime2    sa_mtime;
36141c99275SPeter Avalos };
36241c99275SPeter Avalos 
36341c99275SPeter Avalos struct nfs_statfs {
36441c99275SPeter Avalos 	union {
36541c99275SPeter Avalos 		struct {
366*ed775ee7SAntonio Huete Jimenez 			nd_uint32_t nfsv2sf_tsize;
367*ed775ee7SAntonio Huete Jimenez 			nd_uint32_t nfsv2sf_bsize;
368*ed775ee7SAntonio Huete Jimenez 			nd_uint32_t nfsv2sf_blocks;
369*ed775ee7SAntonio Huete Jimenez 			nd_uint32_t nfsv2sf_bfree;
370*ed775ee7SAntonio Huete Jimenez 			nd_uint32_t nfsv2sf_bavail;
37141c99275SPeter Avalos 		} sf_nfsv2;
37241c99275SPeter Avalos 		struct {
373*ed775ee7SAntonio Huete Jimenez 			nd_uint64_t nfsv3sf_tbytes;
374*ed775ee7SAntonio Huete Jimenez 			nd_uint64_t nfsv3sf_fbytes;
375*ed775ee7SAntonio Huete Jimenez 			nd_uint64_t nfsv3sf_abytes;
376*ed775ee7SAntonio Huete Jimenez 			nd_uint64_t nfsv3sf_tfiles;
377*ed775ee7SAntonio Huete Jimenez 			nd_uint64_t nfsv3sf_ffiles;
378*ed775ee7SAntonio Huete Jimenez 			nd_uint64_t nfsv3sf_afiles;
379*ed775ee7SAntonio Huete Jimenez 			nd_uint32_t nfsv3sf_invarsec;
38041c99275SPeter Avalos 		} sf_nfsv3;
38141c99275SPeter Avalos 	} sf_un;
38241c99275SPeter Avalos };
38341c99275SPeter Avalos 
38441c99275SPeter Avalos #define sf_tsize	sf_un.sf_nfsv2.nfsv2sf_tsize
38541c99275SPeter Avalos #define sf_bsize	sf_un.sf_nfsv2.nfsv2sf_bsize
38641c99275SPeter Avalos #define sf_blocks	sf_un.sf_nfsv2.nfsv2sf_blocks
38741c99275SPeter Avalos #define sf_bfree	sf_un.sf_nfsv2.nfsv2sf_bfree
38841c99275SPeter Avalos #define sf_bavail	sf_un.sf_nfsv2.nfsv2sf_bavail
38941c99275SPeter Avalos #define sf_tbytes	sf_un.sf_nfsv3.nfsv3sf_tbytes
39041c99275SPeter Avalos #define sf_fbytes	sf_un.sf_nfsv3.nfsv3sf_fbytes
39141c99275SPeter Avalos #define sf_abytes	sf_un.sf_nfsv3.nfsv3sf_abytes
39241c99275SPeter Avalos #define sf_tfiles	sf_un.sf_nfsv3.nfsv3sf_tfiles
39341c99275SPeter Avalos #define sf_ffiles	sf_un.sf_nfsv3.nfsv3sf_ffiles
39441c99275SPeter Avalos #define sf_afiles	sf_un.sf_nfsv3.nfsv3sf_afiles
39541c99275SPeter Avalos #define sf_invarsec	sf_un.sf_nfsv3.nfsv3sf_invarsec
39641c99275SPeter Avalos 
39741c99275SPeter Avalos struct nfsv3_fsinfo {
398*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t fs_rtmax;
399*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t fs_rtpref;
400*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t fs_rtmult;
401*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t fs_wtmax;
402*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t fs_wtpref;
403*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t fs_wtmult;
404*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t fs_dtpref;
405*ed775ee7SAntonio Huete Jimenez 	nd_uint64_t fs_maxfilesize;
40641c99275SPeter Avalos 	nfstime3    fs_timedelta;
407*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t fs_properties;
40841c99275SPeter Avalos };
40941c99275SPeter Avalos 
41041c99275SPeter Avalos struct nfsv3_pathconf {
411*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t pc_linkmax;
412*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t pc_namemax;
413*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t pc_notrunc;
414*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t pc_chownrestricted;
415*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t pc_caseinsensitive;
416*ed775ee7SAntonio Huete Jimenez 	nd_uint32_t pc_casepreserving;
41741c99275SPeter Avalos };
418