1191783Srmacklem/*-
2191783Srmacklem * Copyright (c) 1989, 1993
3191783Srmacklem *	The Regents of the University of California.  All rights reserved.
4191783Srmacklem *
5191783Srmacklem * This code is derived from software contributed to Berkeley by
6191783Srmacklem * Rick Macklem at The University of Guelph.
7191783Srmacklem *
8191783Srmacklem * Redistribution and use in source and binary forms, with or without
9191783Srmacklem * modification, are permitted provided that the following conditions
10191783Srmacklem * are met:
11191783Srmacklem * 1. Redistributions of source code must retain the above copyright
12191783Srmacklem *    notice, this list of conditions and the following disclaimer.
13191783Srmacklem * 2. Redistributions in binary form must reproduce the above copyright
14191783Srmacklem *    notice, this list of conditions and the following disclaimer in the
15191783Srmacklem *    documentation and/or other materials provided with the distribution.
16191783Srmacklem * 4. Neither the name of the University nor the names of its contributors
17191783Srmacklem *    may be used to endorse or promote products derived from this software
18191783Srmacklem *    without specific prior written permission.
19191783Srmacklem *
20191783Srmacklem * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21191783Srmacklem * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22191783Srmacklem * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23191783Srmacklem * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24191783Srmacklem * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25191783Srmacklem * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26191783Srmacklem * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27191783Srmacklem * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28191783Srmacklem * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29191783Srmacklem * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30191783Srmacklem * SUCH DAMAGE.
31191783Srmacklem *
32191783Srmacklem * $FreeBSD$
33191783Srmacklem */
34191783Srmacklem
35191783Srmacklem#ifndef _NFS_NFSPROTO_H_
36191783Srmacklem#define	_NFS_NFSPROTO_H_
37191783Srmacklem
38191783Srmacklem/*
39191783Srmacklem * nfs definitions as per the Version 2, 3 and 4 specs
40191783Srmacklem */
41191783Srmacklem
42191783Srmacklem/*
43191783Srmacklem * Constants as defined in the NFS Version 2, 3 and 4 specs.
44191783Srmacklem * "NFS: Network File System Protocol Specification" RFC1094
45191783Srmacklem * and in the "NFS: Network File System Version 3 Protocol
46191783Srmacklem * Specification"
47191783Srmacklem */
48191783Srmacklem
49191783Srmacklem#define	NFS_PORT	2049
50191783Srmacklem#define	NFS_PROG	100003
51191783Srmacklem#define	NFS_CALLBCKPROG	0x40000000	/* V4 only */
52191783Srmacklem#define	NFS_VER2	2
53191783Srmacklem#define	NFS_VER3	3
54191783Srmacklem#define	NFS_VER4	4
55191783Srmacklem#define	NFS_V2MAXDATA	8192
56191783Srmacklem#define	NFS_MAXDGRAMDATA 16384
57191783Srmacklem#define	NFS_MAXDATA	NFS_MAXBSIZE
58191783Srmacklem#define	NFS_MAXPATHLEN	1024
59191783Srmacklem#define	NFS_MAXNAMLEN	255
60191783Srmacklem#define	NFS_MAXPKTHDR	404
61191783Srmacklem#define	NFS_MAXPACKET	(NFS_MAXDATA + 2048)
62191783Srmacklem#define	NFS_MINPACKET	20
63191783Srmacklem#define	NFS_FABLKSIZE	512	/* Size in bytes of a block wrt fa_blocks */
64191783Srmacklem#define	NFSV4_MINORVERSION	0	/* V4 Minor version */
65244042Srmacklem#define	NFSV41_MINORVERSION	1	/* V4 Minor version */
66191783Srmacklem#define	NFSV4_CBVERS		1	/* V4 CB Version */
67244042Srmacklem#define	NFSV41_CBVERS		4	/* V4.1 CB Version */
68191783Srmacklem#define	NFSV4_SMALLSTR	50		/* Strings small enough for stack */
69191783Srmacklem
70191783Srmacklem/* Stat numbers for rpc returns (version 2, 3 and 4) */
71221462Srmacklem/*
72221462Srmacklem * These numbers are hard-wired in the RFCs, so they can't be changed.
73221462Srmacklem * The code currently assumes that the ones < 10000 are the same as
74221462Srmacklem * sys/errno.h and that sys/errno.h will never go as high as 10000.
75221462Srmacklem * If the value in sys/errno.h of any entry listed below is changed,
76221462Srmacklem * the NFS code must be modified to do the mapping between them.
77221462Srmacklem * (You can ignore NFSERR_WFLUSH, since it is never actually used.)
78221462Srmacklem */
79191783Srmacklem#define	NFSERR_OK		0
80191783Srmacklem#define	NFSERR_PERM		1
81191783Srmacklem#define	NFSERR_NOENT		2
82191783Srmacklem#define	NFSERR_IO		5
83191783Srmacklem#define	NFSERR_NXIO		6
84191783Srmacklem#define	NFSERR_ACCES		13
85191783Srmacklem#define	NFSERR_EXIST		17
86191783Srmacklem#define	NFSERR_XDEV		18	/* Version 3, 4 only */
87191783Srmacklem#define	NFSERR_NODEV		19
88191783Srmacklem#define	NFSERR_NOTDIR		20
89191783Srmacklem#define	NFSERR_ISDIR		21
90191783Srmacklem#define	NFSERR_INVAL		22	/* Version 3, 4 only */
91191783Srmacklem#define	NFSERR_FBIG		27
92191783Srmacklem#define	NFSERR_NOSPC		28
93191783Srmacklem#define	NFSERR_ROFS		30
94191783Srmacklem#define	NFSERR_MLINK		31	/* Version 3, 4 only */
95191783Srmacklem#define	NFSERR_NAMETOL		63
96191783Srmacklem#define	NFSERR_NOTEMPTY		66
97191783Srmacklem#define	NFSERR_DQUOT		69
98191783Srmacklem#define	NFSERR_STALE		70
99191783Srmacklem#define	NFSERR_REMOTE		71	/* Version 3 only */
100191783Srmacklem#define	NFSERR_WFLUSH		99	/* Version 2 only */
101191783Srmacklem#define	NFSERR_BADHANDLE	10001	/* These are Version 3, 4 only */
102191783Srmacklem#define	NFSERR_NOT_SYNC		10002	/* Version 3 Only */
103191783Srmacklem#define	NFSERR_BAD_COOKIE	10003
104191783Srmacklem#define	NFSERR_NOTSUPP		10004
105191783Srmacklem#define	NFSERR_TOOSMALL		10005
106191783Srmacklem#define	NFSERR_SERVERFAULT	10006
107191783Srmacklem#define	NFSERR_BADTYPE		10007
108191783Srmacklem#define	NFSERR_DELAY		10008	/* Called NFSERR_JUKEBOX for V3 */
109191783Srmacklem#define	NFSERR_SAME		10009	/* These are Version 4 only */
110191783Srmacklem#define	NFSERR_DENIED		10010
111191783Srmacklem#define	NFSERR_EXPIRED		10011
112191783Srmacklem#define	NFSERR_LOCKED		10012
113191783Srmacklem#define	NFSERR_GRACE		10013
114191783Srmacklem#define	NFSERR_FHEXPIRED	10014
115191783Srmacklem#define	NFSERR_SHAREDENIED	10015
116191783Srmacklem#define	NFSERR_WRONGSEC		10016
117191783Srmacklem#define	NFSERR_CLIDINUSE	10017
118191783Srmacklem#define	NFSERR_RESOURCE		10018
119191783Srmacklem#define	NFSERR_MOVED		10019
120191783Srmacklem#define	NFSERR_NOFILEHANDLE	10020
121191783Srmacklem#define	NFSERR_MINORVERMISMATCH	10021
122191783Srmacklem#define	NFSERR_STALECLIENTID	10022
123191783Srmacklem#define	NFSERR_STALESTATEID	10023
124191783Srmacklem#define	NFSERR_OLDSTATEID	10024
125191783Srmacklem#define	NFSERR_BADSTATEID	10025
126191783Srmacklem#define	NFSERR_BADSEQID		10026
127191783Srmacklem#define	NFSERR_NOTSAME		10027
128191783Srmacklem#define	NFSERR_LOCKRANGE	10028
129191783Srmacklem#define	NFSERR_SYMLINK		10029
130191783Srmacklem#define	NFSERR_RESTOREFH	10030
131191783Srmacklem#define	NFSERR_LEASEMOVED	10031
132191783Srmacklem#define	NFSERR_ATTRNOTSUPP	10032
133191783Srmacklem#define	NFSERR_NOGRACE		10033
134191783Srmacklem#define	NFSERR_RECLAIMBAD	10034
135191783Srmacklem#define	NFSERR_RECLAIMCONFLICT	10035
136191783Srmacklem#define	NFSERR_BADXDR		10036
137191783Srmacklem#define	NFSERR_LOCKSHELD	10037
138191783Srmacklem#define	NFSERR_OPENMODE		10038
139191783Srmacklem#define	NFSERR_BADOWNER		10039
140191783Srmacklem#define	NFSERR_BADCHAR		10040
141191783Srmacklem#define	NFSERR_BADNAME		10041
142191783Srmacklem#define	NFSERR_BADRANGE		10042
143191783Srmacklem#define	NFSERR_LOCKNOTSUPP	10043
144191783Srmacklem#define	NFSERR_OPILLEGAL	10044
145191783Srmacklem#define	NFSERR_DEADLOCK		10045
146191783Srmacklem#define	NFSERR_FILEOPEN		10046
147191783Srmacklem#define	NFSERR_ADMINREVOKED	10047
148191783Srmacklem#define	NFSERR_CBPATHDOWN	10048
149191783Srmacklem
150244042Srmacklem/* NFSv4.1 specific errors. */
151244042Srmacklem#define	NFSERR_BADIOMODE	10049
152244042Srmacklem#define	NFSERR_BADLAYOUT	10050
153244042Srmacklem#define	NFSERR_BADSESSIONDIGEST	10051
154244042Srmacklem#define	NFSERR_BADSESSION	10052
155244042Srmacklem#define	NFSERR_BADSLOT		10053
156244042Srmacklem#define	NFSERR_COMPLETEALREADY	10054
157244042Srmacklem#define	NFSERR_NOTBNDTOSESS	10055
158244042Srmacklem#define	NFSERR_DELEGALREADYWANT	10056
159244042Srmacklem#define	NFSERR_BACKCHANBUSY	10057
160244042Srmacklem#define	NFSERR_LAYOUTTRYLATER	10058
161244042Srmacklem#define	NFSERR_LAYOUTUNAVAIL	10059
162244042Srmacklem#define	NFSERR_NOMATCHLAYOUT	10060
163244042Srmacklem#define	NFSERR_RECALLCONFLICT	10061
164244042Srmacklem#define	NFSERR_UNKNLAYOUTTYPE	10062
165244042Srmacklem#define	NFSERR_SEQMISORDERED	10063
166244042Srmacklem#define	NFSERR_SEQUENCEPOS	10064
167244042Srmacklem#define	NFSERR_REQTOOBIG	10065
168244042Srmacklem#define	NFSERR_REPTOOBIG	10066
169244042Srmacklem#define	NFSERR_REPTOOBIGTOCACHE	10067
170244042Srmacklem#define	NFSERR_RETRYUNCACHEDREP	10068
171244042Srmacklem#define	NFSERR_UNSAFECOMPOUND	10069
172244042Srmacklem#define	NFSERR_TOOMANYOPS	10070
173244042Srmacklem#define	NFSERR_OPNOTINSESS	10071
174244042Srmacklem#define	NFSERR_HASHALGUNSUPP	10072
175244042Srmacklem#define	NFSERR_CLIENTIDBUSY	10074
176244042Srmacklem#define	NFSERR_PNFSIOHOLE	10075
177244042Srmacklem#define	NFSERR_SEQFALSERETRY	10076
178244042Srmacklem#define	NFSERR_BADHIGHSLOT	10077
179244042Srmacklem#define	NFSERR_DEADSESSION	10078
180244042Srmacklem#define	NFSERR_ENCRALGUNSUPP	10079
181244042Srmacklem#define	NFSERR_PNFSNOLAYOUT	10080
182244042Srmacklem#define	NFSERR_NOTONLYOP	10081
183244042Srmacklem#define	NFSERR_WRONGCRED	10082
184244042Srmacklem#define	NFSERR_WRONGTYPE	10083
185244042Srmacklem#define	NFSERR_DIRDELEGUNAVAIL	10084
186244042Srmacklem#define	NFSERR_REJECTDELEG	10085
187244042Srmacklem#define	NFSERR_RETURNCONFLICT	10086
188244042Srmacklem#define	NFSERR_DELEGREVOKED	10087
189244042Srmacklem
190191783Srmacklem#define	NFSERR_STALEWRITEVERF	30001	/* Fake return for nfs_commit() */
191191783Srmacklem#define	NFSERR_DONTREPLY	30003	/* Don't process request */
192191783Srmacklem#define	NFSERR_RETVOID		30004	/* Return void, not error */
193191783Srmacklem#define	NFSERR_REPLYFROMCACHE	30005	/* Reply from recent request cache */
194191783Srmacklem#define	NFSERR_STALEDONTRECOVER	30006	/* Don't initiate recovery */
195191783Srmacklem
196191783Srmacklem#define	NFSERR_RPCERR		0x40000000 /* Mark an RPC layer error */
197191783Srmacklem#define	NFSERR_AUTHERR		0x80000000 /* Mark an authentication error */
198191783Srmacklem
199191783Srmacklem#define	NFSERR_RPCMISMATCH	(NFSERR_RPCERR | RPC_MISMATCH)
200191783Srmacklem#define	NFSERR_PROGUNAVAIL	(NFSERR_RPCERR | RPC_PROGUNAVAIL)
201191783Srmacklem#define	NFSERR_PROGMISMATCH	(NFSERR_RPCERR | RPC_PROGMISMATCH)
202191783Srmacklem#define	NFSERR_PROGNOTV4	(NFSERR_RPCERR | 0xffff)
203191783Srmacklem#define	NFSERR_PROCUNAVAIL	(NFSERR_RPCERR | RPC_PROCUNAVAIL)
204191783Srmacklem#define	NFSERR_GARBAGE		(NFSERR_RPCERR | RPC_GARBAGE)
205191783Srmacklem
206191783Srmacklem/* Sizes in bytes of various nfs rpc components */
207191783Srmacklem#define	NFSX_UNSIGNED	4
208191783Srmacklem#define	NFSX_HYPER	(2 * NFSX_UNSIGNED)
209191783Srmacklem
210191783Srmacklem/* specific to NFS Version 2 */
211191783Srmacklem#define	NFSX_V2FH	32
212191783Srmacklem#define	NFSX_V2FATTR	68
213191783Srmacklem#define	NFSX_V2SATTR	32
214191783Srmacklem#define	NFSX_V2COOKIE	4
215191783Srmacklem#define	NFSX_V2STATFS	20
216191783Srmacklem
217191783Srmacklem/* specific to NFS Version 3 */
218191783Srmacklem#define	NFSX_V3FHMAX		64	/* max. allowed by protocol */
219191783Srmacklem#define	NFSX_V3FATTR		84
220191783Srmacklem#define	NFSX_V3SATTR		60	/* max. all fields filled in */
221191783Srmacklem#define	NFSX_V3SRVSATTR		(sizeof (struct nfsv3_sattr))
222191783Srmacklem#define	NFSX_V3POSTOPATTR	(NFSX_V3FATTR + NFSX_UNSIGNED)
223191783Srmacklem#define	NFSX_V3WCCDATA		(NFSX_V3POSTOPATTR + 8 * NFSX_UNSIGNED)
224191783Srmacklem#define	NFSX_V3STATFS		52
225191783Srmacklem#define	NFSX_V3FSINFO		48
226191783Srmacklem#define	NFSX_V3PATHCONF		24
227191783Srmacklem
228191783Srmacklem/* specific to NFS Version 4 */
229191783Srmacklem#define	NFSX_V4FHMAX		128
230191783Srmacklem#define	NFSX_V4FSID		(2 * NFSX_HYPER)
231191783Srmacklem#define	NFSX_V4SPECDATA		(2 * NFSX_UNSIGNED)
232191783Srmacklem#define	NFSX_V4TIME		(NFSX_HYPER + NFSX_UNSIGNED)
233191783Srmacklem#define	NFSX_V4SETTIME		(NFSX_UNSIGNED + NFSX_V4TIME)
234244042Srmacklem#define	NFSX_V4SESSIONID	16
235244042Srmacklem#define	NFSX_V4DEVICEID		16
236191783Srmacklem
237191783Srmacklem/* sizes common to multiple NFS versions */
238191783Srmacklem#define	NFSX_FHMAX		(NFSX_V4FHMAX)
239191783Srmacklem#define	NFSX_MYFH		(sizeof (fhandle_t)) /* size this server uses */
240191783Srmacklem#define	NFSX_VERF 		8
241191783Srmacklem#define	NFSX_STATEIDOTHER	12
242191783Srmacklem#define	NFSX_STATEID		(NFSX_UNSIGNED + NFSX_STATEIDOTHER)
243191783Srmacklem#define	NFSX_GSSH		12
244191783Srmacklem
245191783Srmacklem/* variants for multiple versions */
246191783Srmacklem#define	NFSX_STATFS(v3)		((v3) ? NFSX_V3STATFS : NFSX_V2STATFS)
247191783Srmacklem
248191783Srmacklem/* nfs rpc procedure numbers (before version mapping) */
249191783Srmacklem#define	NFSPROC_NULL		0
250191783Srmacklem#define	NFSPROC_GETATTR		1
251191783Srmacklem#define	NFSPROC_SETATTR		2
252191783Srmacklem#define	NFSPROC_LOOKUP		3
253191783Srmacklem#define	NFSPROC_ACCESS		4
254191783Srmacklem#define	NFSPROC_READLINK	5
255191783Srmacklem#define	NFSPROC_READ		6
256191783Srmacklem#define	NFSPROC_WRITE		7
257191783Srmacklem#define	NFSPROC_CREATE		8
258191783Srmacklem#define	NFSPROC_MKDIR		9
259191783Srmacklem#define	NFSPROC_SYMLINK		10
260191783Srmacklem#define	NFSPROC_MKNOD		11
261191783Srmacklem#define	NFSPROC_REMOVE		12
262191783Srmacklem#define	NFSPROC_RMDIR		13
263191783Srmacklem#define	NFSPROC_RENAME		14
264191783Srmacklem#define	NFSPROC_LINK		15
265191783Srmacklem#define	NFSPROC_READDIR		16
266191783Srmacklem#define	NFSPROC_READDIRPLUS	17
267191783Srmacklem#define	NFSPROC_FSSTAT		18
268191783Srmacklem#define	NFSPROC_FSINFO		19
269191783Srmacklem#define	NFSPROC_PATHCONF	20
270191783Srmacklem#define	NFSPROC_COMMIT		21
271191783Srmacklem
272191783Srmacklem/*
273223280Srmacklem * The lower numbers -> 21 are used by NFSv2 and v3. These define higher
274223280Srmacklem * numbers used by NFSv4.
275223280Srmacklem * NFS_V3NPROCS is one greater than the last V3 op and NFS_NPROCS is
276223280Srmacklem * one greater than the last number.
277223280Srmacklem */
278223280Srmacklem#ifndef	NFS_V3NPROCS
279223280Srmacklem#define	NFS_V3NPROCS		22
280223280Srmacklem
281223280Srmacklem#define	NFSPROC_LOOKUPP		22
282223280Srmacklem#define	NFSPROC_SETCLIENTID	23
283223280Srmacklem#define	NFSPROC_SETCLIENTIDCFRM	24
284223280Srmacklem#define	NFSPROC_LOCK		25
285223280Srmacklem#define	NFSPROC_LOCKU		26
286223280Srmacklem#define	NFSPROC_OPEN		27
287223280Srmacklem#define	NFSPROC_CLOSE		28
288223280Srmacklem#define	NFSPROC_OPENCONFIRM	29
289223280Srmacklem#define	NFSPROC_LOCKT		30
290223280Srmacklem#define	NFSPROC_OPENDOWNGRADE	31
291223280Srmacklem#define	NFSPROC_RENEW		32
292223280Srmacklem#define	NFSPROC_PUTROOTFH	33
293223280Srmacklem#define	NFSPROC_RELEASELCKOWN	34
294223280Srmacklem#define	NFSPROC_DELEGRETURN	35
295223280Srmacklem#define	NFSPROC_RETDELEGREMOVE	36
296223280Srmacklem#define	NFSPROC_RETDELEGRENAME1	37
297223280Srmacklem#define	NFSPROC_RETDELEGRENAME2	38
298223280Srmacklem#define	NFSPROC_GETACL		39
299223280Srmacklem#define	NFSPROC_SETACL		40
300223280Srmacklem
301223280Srmacklem/*
302223280Srmacklem * Must be defined as one higher than the last Proc# above.
303223280Srmacklem */
304223280Srmacklem#define	NFSV4_NPROCS		41
305244042Srmacklem
306244042Srmacklem/* Additional procedures for NFSv4.1. */
307244042Srmacklem#define	NFSPROC_EXCHANGEID	41
308244042Srmacklem#define	NFSPROC_CREATESESSION	42
309244042Srmacklem#define	NFSPROC_DESTROYSESSION	43
310244042Srmacklem#define	NFSPROC_DESTROYCLIENT	44
311244042Srmacklem#define	NFSPROC_FREESTATEID	45
312244042Srmacklem#define	NFSPROC_LAYOUTGET	46
313244042Srmacklem#define	NFSPROC_GETDEVICEINFO	47
314244042Srmacklem#define	NFSPROC_LAYOUTCOMMIT	48
315244042Srmacklem#define	NFSPROC_LAYOUTRETURN	49
316244042Srmacklem#define	NFSPROC_RECLAIMCOMPL	50
317244042Srmacklem#define	NFSPROC_WRITEDS		51
318244042Srmacklem#define	NFSPROC_READDS		52
319244042Srmacklem#define	NFSPROC_COMMITDS	53
320244042Srmacklem
321244042Srmacklem/*
322244042Srmacklem * Must be defined as one higher than the last NFSv4.1 Proc# above.
323244042Srmacklem */
324244042Srmacklem#define	NFSV41_NPROCS		54
325244042Srmacklem
326223280Srmacklem#endif	/* NFS_V3NPROCS */
327223280Srmacklem
328223280Srmacklem/*
329223280Srmacklem * Define NFS_NPROCS as NFSV4_NPROCS for the experimental kernel code.
330223280Srmacklem */
331223280Srmacklem#ifndef	NFS_NPROCS
332223280Srmacklem#define	NFS_NPROCS		NFSV4_NPROCS
333223280Srmacklem#endif
334223280Srmacklem
335223280Srmacklem/*
336191783Srmacklem * NFSPROC_NOOP is a fake op# that can't be the same as any V2/3/4 Procedure
337244042Srmacklem * or Operation#. Since the NFS V4 Op #s go higher, use NFSV41_NOPS, which
338191783Srmacklem * is one greater than the highest Op#.
339191783Srmacklem */
340244042Srmacklem#define	NFSPROC_NOOP		NFSV41_NOPS
341191783Srmacklem
342191783Srmacklem/* Actual Version 2 procedure numbers */
343191783Srmacklem#define	NFSV2PROC_NULL		0
344191783Srmacklem#define	NFSV2PROC_GETATTR	1
345191783Srmacklem#define	NFSV2PROC_SETATTR	2
346191783Srmacklem#define	NFSV2PROC_NOOP		3
347191783Srmacklem#define	NFSV2PROC_ROOT		NFSV2PROC_NOOP	/* Obsolete */
348191783Srmacklem#define	NFSV2PROC_LOOKUP	4
349191783Srmacklem#define	NFSV2PROC_READLINK	5
350191783Srmacklem#define	NFSV2PROC_READ		6
351191783Srmacklem#define	NFSV2PROC_WRITECACHE	NFSV2PROC_NOOP	/* Obsolete */
352191783Srmacklem#define	NFSV2PROC_WRITE		8
353191783Srmacklem#define	NFSV2PROC_CREATE	9
354191783Srmacklem#define	NFSV2PROC_REMOVE	10
355191783Srmacklem#define	NFSV2PROC_RENAME	11
356191783Srmacklem#define	NFSV2PROC_LINK		12
357191783Srmacklem#define	NFSV2PROC_SYMLINK	13
358191783Srmacklem#define	NFSV2PROC_MKDIR		14
359191783Srmacklem#define	NFSV2PROC_RMDIR		15
360191783Srmacklem#define	NFSV2PROC_READDIR	16
361191783Srmacklem#define	NFSV2PROC_STATFS	17
362191783Srmacklem
363191783Srmacklem/*
364192152Srmacklem * V4 Procedure numbers
365191783Srmacklem */
366191783Srmacklem#define	NFSV4PROC_COMPOUND	1
367191783Srmacklem#define	NFSV4PROC_CBNULL	0
368191783Srmacklem#define	NFSV4PROC_CBCOMPOUND	1
369191783Srmacklem
370191783Srmacklem/*
371191783Srmacklem * Constants used by the Version 3 and 4 protocols for various RPCs
372191783Srmacklem */
373191783Srmacklem#define	NFSV3SATTRTIME_DONTCHANGE	0
374191783Srmacklem#define	NFSV3SATTRTIME_TOSERVER		1
375191783Srmacklem#define	NFSV3SATTRTIME_TOCLIENT		2
376191783Srmacklem
377191783Srmacklem#define	NFSV4SATTRTIME_TOSERVER		0
378191783Srmacklem#define	NFSV4SATTRTIME_TOCLIENT		1
379191783Srmacklem
380191783Srmacklem#define	NFSV4LOCKT_READ			1
381191783Srmacklem#define	NFSV4LOCKT_WRITE		2
382191783Srmacklem#define	NFSV4LOCKT_READW		3
383191783Srmacklem#define	NFSV4LOCKT_WRITEW		4
384191783Srmacklem#define	NFSV4LOCKT_RELEASE		5
385191783Srmacklem
386191783Srmacklem#define	NFSV4OPEN_NOCREATE		0
387191783Srmacklem#define	NFSV4OPEN_CREATE		1
388191783Srmacklem#define	NFSV4OPEN_CLAIMNULL		0
389191783Srmacklem#define	NFSV4OPEN_CLAIMPREVIOUS		1
390191783Srmacklem#define	NFSV4OPEN_CLAIMDELEGATECUR	2
391191783Srmacklem#define	NFSV4OPEN_CLAIMDELEGATEPREV	3
392191783Srmacklem#define	NFSV4OPEN_DELEGATENONE		0
393191783Srmacklem#define	NFSV4OPEN_DELEGATEREAD		1
394191783Srmacklem#define	NFSV4OPEN_DELEGATEWRITE		2
395191783Srmacklem#define	NFSV4OPEN_LIMITSIZE		1
396191783Srmacklem#define	NFSV4OPEN_LIMITBLOCKS		2
397191783Srmacklem
398191783Srmacklem/*
399191783Srmacklem * Nfs V4 ACE stuff
400191783Srmacklem */
401191783Srmacklem#define	NFSV4ACE_ALLOWEDTYPE		0x00000000
402191783Srmacklem#define	NFSV4ACE_DENIEDTYPE		0x00000001
403191783Srmacklem#define	NFSV4ACE_AUDITTYPE		0x00000002
404191783Srmacklem#define	NFSV4ACE_ALARMTYPE		0x00000003
405191783Srmacklem
406191783Srmacklem#define	NFSV4ACE_SUPALLOWED		0x00000001
407191783Srmacklem#define	NFSV4ACE_SUPDENIED		0x00000002
408191783Srmacklem#define	NFSV4ACE_SUPAUDIT		0x00000004
409191783Srmacklem#define	NFSV4ACE_SUPALARM		0x00000008
410191783Srmacklem
411191783Srmacklem#define	NFSV4ACE_SUPTYPES	(NFSV4ACE_SUPALLOWED | NFSV4ACE_SUPDENIED)
412191783Srmacklem
413191783Srmacklem#define	NFSV4ACE_FILEINHERIT		0x00000001
414191783Srmacklem#define	NFSV4ACE_DIRECTORYINHERIT	0x00000002
415191783Srmacklem#define	NFSV4ACE_NOPROPAGATEINHERIT	0x00000004
416191783Srmacklem#define	NFSV4ACE_INHERITONLY		0x00000008
417191783Srmacklem#define	NFSV4ACE_SUCCESSFULACCESS	0x00000010
418191783Srmacklem#define	NFSV4ACE_FAILEDACCESS		0x00000020
419191783Srmacklem#define	NFSV4ACE_IDENTIFIERGROUP	0x00000040
420191783Srmacklem
421191783Srmacklem#define	NFSV4ACE_READDATA		0x00000001
422191783Srmacklem#define	NFSV4ACE_LISTDIRECTORY		0x00000001
423191783Srmacklem#define	NFSV4ACE_WRITEDATA		0x00000002
424191783Srmacklem#define	NFSV4ACE_ADDFILE		0x00000002
425191783Srmacklem#define	NFSV4ACE_APPENDDATA		0x00000004
426191783Srmacklem#define	NFSV4ACE_ADDSUBDIRECTORY	0x00000004
427191783Srmacklem#define	NFSV4ACE_READNAMEDATTR		0x00000008
428191783Srmacklem#define	NFSV4ACE_WRITENAMEDATTR		0x00000010
429191783Srmacklem#define	NFSV4ACE_EXECUTE		0x00000020
430191783Srmacklem#define	NFSV4ACE_SEARCH			0x00000020
431191783Srmacklem#define	NFSV4ACE_DELETECHILD		0x00000040
432191783Srmacklem#define	NFSV4ACE_READATTRIBUTES		0x00000080
433191783Srmacklem#define	NFSV4ACE_WRITEATTRIBUTES	0x00000100
434191783Srmacklem#define	NFSV4ACE_DELETE			0x00010000
435191783Srmacklem#define	NFSV4ACE_READACL		0x00020000
436191783Srmacklem#define	NFSV4ACE_WRITEACL		0x00040000
437191783Srmacklem#define	NFSV4ACE_WRITEOWNER		0x00080000
438191783Srmacklem#define	NFSV4ACE_SYNCHRONIZE		0x00100000
439191783Srmacklem
440191783Srmacklem/*
441191783Srmacklem * Here are the mappings between mode bits and acl mask bits for
442191783Srmacklem * directories and other files.
443191783Srmacklem * (Named attributes have not been included, since named attributes are
444191783Srmacklem *  not yet supported.)
445191783Srmacklem * The mailing list seems to indicate that NFSV4ACE_EXECUTE refers to
446191783Srmacklem * searching a directory, although I can't find a statement of that in
447191783Srmacklem * the RFC.
448191783Srmacklem */
449191783Srmacklem#define	NFSV4ACE_ALLFILESMASK	(NFSV4ACE_READATTRIBUTES | NFSV4ACE_READACL)
450191783Srmacklem#define	NFSV4ACE_OWNERMASK	(NFSV4ACE_WRITEATTRIBUTES | NFSV4ACE_WRITEACL)
451191783Srmacklem#define	NFSV4ACE_DIRREADMASK	NFSV4ACE_LISTDIRECTORY
452191783Srmacklem#define	NFSV4ACE_DIREXECUTEMASK	NFSV4ACE_EXECUTE
453191783Srmacklem#define	NFSV4ACE_DIRWRITEMASK	(NFSV4ACE_ADDFILE | 			\
454191783Srmacklem		NFSV4ACE_ADDSUBDIRECTORY | NFSV4ACE_DELETECHILD)
455191783Srmacklem#define	NFSV4ACE_READMASK	NFSV4ACE_READDATA
456191783Srmacklem#define	NFSV4ACE_WRITEMASK	(NFSV4ACE_WRITEDATA | NFSV4ACE_APPENDDATA)
457191783Srmacklem#define	NFSV4ACE_EXECUTEMASK	NFSV4ACE_EXECUTE
458191783Srmacklem#define	NFSV4ACE_ALLFILEBITS	(NFSV4ACE_READMASK | NFSV4ACE_WRITEMASK | \
459191783Srmacklem	NFSV4ACE_EXECUTEMASK | NFSV4ACE_SYNCHRONIZE)
460191783Srmacklem#define	NFSV4ACE_ALLDIRBITS	(NFSV4ACE_DIRREADMASK | 		\
461191783Srmacklem	NFSV4ACE_DIRWRITEMASK | NFSV4ACE_DIREXECUTEMASK)
462191783Srmacklem#define	NFSV4ACE_AUDITMASK	0x0
463191783Srmacklem
464191783Srmacklem/*
465191783Srmacklem * These GENERIC masks are not used and are no longer believed to be useful.
466191783Srmacklem */
467191783Srmacklem#define	NFSV4ACE_GENERICREAD		0x00120081
468191783Srmacklem#define	NFSV4ACE_GENERICWRITE		0x00160106
469191783Srmacklem#define	NFSV4ACE_GENERICEXECUTE		0x001200a0
470191783Srmacklem
471191783Srmacklem#define	NFSSTATEID_PUTALLZERO		0
472191783Srmacklem#define	NFSSTATEID_PUTALLONE		1
473191783Srmacklem#define	NFSSTATEID_PUTSTATEID		2
474244042Srmacklem#define	NFSSTATEID_PUTSEQIDZERO		3
475191783Srmacklem
476191783Srmacklem/*
477191783Srmacklem * Bits for share access and deny.
478191783Srmacklem */
479191783Srmacklem#define	NFSV4OPEN_ACCESSREAD		0x00000001
480191783Srmacklem#define	NFSV4OPEN_ACCESSWRITE		0x00000002
481191783Srmacklem#define	NFSV4OPEN_ACCESSBOTH		0x00000003
482191783Srmacklem
483191783Srmacklem#define	NFSV4OPEN_DENYNONE		0x00000000
484191783Srmacklem#define	NFSV4OPEN_DENYREAD		0x00000001
485191783Srmacklem#define	NFSV4OPEN_DENYWRITE		0x00000002
486191783Srmacklem#define	NFSV4OPEN_DENYBOTH		0x00000003
487191783Srmacklem
488191783Srmacklem/*
489191783Srmacklem * Open result flags
490191783Srmacklem * (The first two are in the spec. The rest are used internally.)
491191783Srmacklem */
492191783Srmacklem#define	NFSV4OPEN_RESULTCONFIRM		0x00000002
493191783Srmacklem#define	NFSV4OPEN_LOCKTYPEPOSIX		0x00000004
494191783Srmacklem#define	NFSV4OPEN_RFLAGS 						\
495191783Srmacklem		(NFSV4OPEN_RESULTCONFIRM | NFSV4OPEN_LOCKTYPEPOSIX)
496191783Srmacklem#define	NFSV4OPEN_RECALL		0x00010000
497191783Srmacklem#define	NFSV4OPEN_READDELEGATE		0x00020000
498191783Srmacklem#define	NFSV4OPEN_WRITEDELEGATE		0x00040000
499191783Srmacklem
500191783Srmacklem/*
501191783Srmacklem * NFS V4 File Handle types
502191783Srmacklem */
503191783Srmacklem#define	NFSV4FHTYPE_PERSISTENT		0x0
504191783Srmacklem#define	NFSV4FHTYPE_NOEXPIREWITHOPEN	0x1
505191783Srmacklem#define	NFSV4FHTYPE_VOLATILEANY		0x2
506191783Srmacklem#define	NFSV4FHTYPE_VOLATILEMIGRATE	0x4
507191783Srmacklem#define	NFSV4FHTYPE_VOLATILERENAME	0x8
508191783Srmacklem
509191783Srmacklem/*
510191783Srmacklem * Maximum size of V4 opaque strings.
511191783Srmacklem */
512191783Srmacklem#define	NFSV4_OPAQUELIMIT	1024
513191783Srmacklem
514191783Srmacklem/*
515191783Srmacklem * These are the same for V3 and V4.
516191783Srmacklem */
517191783Srmacklem#define	NFSACCESS_READ			0x01
518191783Srmacklem#define	NFSACCESS_LOOKUP		0x02
519191783Srmacklem#define	NFSACCESS_MODIFY		0x04
520191783Srmacklem#define	NFSACCESS_EXTEND		0x08
521191783Srmacklem#define	NFSACCESS_DELETE		0x10
522191783Srmacklem#define	NFSACCESS_EXECUTE		0x20
523191783Srmacklem
524191783Srmacklem#define	NFSWRITE_UNSTABLE		0
525191783Srmacklem#define	NFSWRITE_DATASYNC		1
526191783Srmacklem#define	NFSWRITE_FILESYNC		2
527191783Srmacklem
528191783Srmacklem#define	NFSCREATE_UNCHECKED		0
529191783Srmacklem#define	NFSCREATE_GUARDED		1
530191783Srmacklem#define	NFSCREATE_EXCLUSIVE		2
531244042Srmacklem#define	NFSCREATE_EXCLUSIVE41		3
532191783Srmacklem
533191783Srmacklem#define	NFSV3FSINFO_LINK		0x01
534191783Srmacklem#define	NFSV3FSINFO_SYMLINK		0x02
535191783Srmacklem#define	NFSV3FSINFO_HOMOGENEOUS		0x08
536191783Srmacklem#define	NFSV3FSINFO_CANSETTIME		0x10
537191783Srmacklem
538244042Srmacklem/* Flags for Exchange ID */
539244042Srmacklem#define	NFSV4EXCH_SUPPMOVEDREFER	0x00000001
540244042Srmacklem#define	NFSV4EXCH_SUPPMOVEDMIGR	0x00000002
541244042Srmacklem#define	NFSV4EXCH_BINDPRINCSTATEID	0x00000100
542244042Srmacklem#define	NFSV4EXCH_USENONPNFS		0x00010000
543244042Srmacklem#define	NFSV4EXCH_USEPNFSMDS		0x00020000
544244042Srmacklem#define	NFSV4EXCH_USEPNFSDS		0x00040000
545244042Srmacklem#define	NFSV4EXCH_MASKPNFS		0x00070000
546244042Srmacklem#define	NFSV4EXCH_UPDCONFIRMEDRECA	0x40000000
547244042Srmacklem#define	NFSV4EXCH_CONFIRMEDR		0x80000000
548244042Srmacklem
549244042Srmacklem/* State Protects */
550244042Srmacklem#define	NFSV4EXCH_SP4NONE		0
551244042Srmacklem#define	NFSV4EXCH_SP4MACHCRED		1
552244042Srmacklem#define	NFSV4EXCH_SP4SSV		2
553244042Srmacklem
554244042Srmacklem/* Flags for Create Session */
555244042Srmacklem#define	NFSV4CRSESS_PERSIST		0x00000001
556244042Srmacklem#define	NFSV4CRSESS_CONNBACKCHAN	0x00000002
557244042Srmacklem#define	NFSV4CRSESS_CONNRDMA		0x00000004
558244042Srmacklem
559244042Srmacklem/* Flags for Sequence */
560244042Srmacklem#define	NFSV4SEQ_CBPATHDOWN		0x00000001
561244042Srmacklem#define	NFSV4SEQ_CBGSSCONTEXPIRING	0x00000002
562244042Srmacklem#define	NFSV4SEQ_CBGSSCONTEXPIRED	0x00000004
563244042Srmacklem#define	NFSV4SEQ_EXPIREDALLSTATEREVOKED	0x00000008
564244042Srmacklem#define	NFSV4SEQ_EXPIREDSOMESTATEREVOKED 0x00000010
565244042Srmacklem#define	NFSV4SEQ_ADMINSTATEREVOKED	0x00000020
566244042Srmacklem#define	NFSV4SEQ_RECALLABLESTATEREVOKED	0x00000040
567244042Srmacklem#define	NFSV4SEQ_LEASEMOVED		0x00000080
568244042Srmacklem#define	NFSV4SEQ_RESTARTRECLAIMNEEDED	0x00000100
569244042Srmacklem#define	NFSV4SEQ_CBPATHDOWNSESSION	0x00000200
570244042Srmacklem#define	NFSV4SEQ_BACKCHANNELFAULT	0x00000400
571244042Srmacklem#define	NFSV4SEQ_DEVIDCHANGED		0x00000800
572244042Srmacklem#define	NFSV4SEQ_DEVIDDELETED		0x00001000
573244042Srmacklem
574244042Srmacklem/* Flags for Layout. */
575244042Srmacklem#define	NFSLAYOUTRETURN_FILE		1
576244042Srmacklem#define	NFSLAYOUTRETURN_FSID		2
577244042Srmacklem#define	NFSLAYOUTRETURN_ALL		3
578244042Srmacklem
579244042Srmacklem#define	NFSLAYOUT_NFSV4_1_FILES		0x1
580244042Srmacklem#define	NFSLAYOUT_OSD2_OBJECTS		0x2
581244042Srmacklem#define	NFSLAYOUT_BLOCK_VOLUME		0x3
582244042Srmacklem
583244042Srmacklem#define	NFSLAYOUTIOMODE_READ		1
584244042Srmacklem#define	NFSLAYOUTIOMODE_RW		2
585244042Srmacklem#define	NFSLAYOUTIOMODE_ANY		3
586244042Srmacklem
587244042Srmacklem/* Flags for Get Device Info. */
588244042Srmacklem#define	NFSDEVICEIDNOTIFY_CHANGEBIT	0x1
589244042Srmacklem#define	NFSDEVICEIDNOTIFY_DELETEBIT	0x2
590244042Srmacklem
591244042Srmacklem/* Flags for File Layout. */
592244042Srmacklem#define	NFSFLAYUTIL_DENSE		0x1
593244042Srmacklem#define	NFSFLAYUTIL_COMMIT_THRU_MDS	0x2
594244042Srmacklem
595191783Srmacklem/* Conversion macros */
596191783Srmacklem#define	vtonfsv2_mode(t,m) 						\
597191783Srmacklem		txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : 	\
598191783Srmacklem				MAKEIMODE((t), (m)))
599191783Srmacklem#define	vtonfsv34_mode(m)	txdr_unsigned((m) & 07777)
600191783Srmacklem#define	nfstov_mode(a)		(fxdr_unsigned(u_int16_t, (a))&07777)
601191783Srmacklem#define	vtonfsv2_type(a)  (((u_int32_t)(a)) >= 9 ? txdr_unsigned(NFNON) : \
602191783Srmacklem		txdr_unsigned(newnfsv2_type[((u_int32_t)(a))]))
603191783Srmacklem#define	vtonfsv34_type(a)  (((u_int32_t)(a)) >= 9 ? txdr_unsigned(NFNON) : \
604191783Srmacklem		txdr_unsigned(nfsv34_type[((u_int32_t)(a))]))
605191783Srmacklem#define	nfsv2tov_type(a)	newnv2tov_type[fxdr_unsigned(u_int32_t,(a))&0x7]
606191783Srmacklem#define	nfsv34tov_type(a)	nv34tov_type[fxdr_unsigned(u_int32_t,(a))&0x7]
607191783Srmacklem#define	vtonfs_dtype(a)	(((u_int32_t)(a)) >= 9 ? IFTODT(VTTOIF(VNON)) : \
608191783Srmacklem			 IFTODT(VTTOIF(a)))
609191783Srmacklem
610191783Srmacklem/* File types */
611191783Srmacklemtypedef enum { NFNON=0, NFREG=1, NFDIR=2, NFBLK=3, NFCHR=4, NFLNK=5,
612191783Srmacklem	NFSOCK=6, NFFIFO=7, NFATTRDIR=8, NFNAMEDATTR=9 } nfstype;
613191783Srmacklem
614191783Srmacklem/* Structs for common parts of the rpc's */
615191783Srmacklem
616191783Srmacklemstruct nfsv2_time {
617191783Srmacklem	u_int32_t nfsv2_sec;
618191783Srmacklem	u_int32_t nfsv2_usec;
619191783Srmacklem};
620191783Srmacklemtypedef struct nfsv2_time	nfstime2;
621191783Srmacklem
622191783Srmacklemstruct nfsv3_time {
623191783Srmacklem	u_int32_t nfsv3_sec;
624191783Srmacklem	u_int32_t nfsv3_nsec;
625191783Srmacklem};
626191783Srmacklemtypedef struct nfsv3_time	nfstime3;
627191783Srmacklem
628191783Srmacklemstruct nfsv4_time {
629191783Srmacklem	u_int32_t nfsv4_highsec;
630191783Srmacklem	u_int32_t nfsv4_sec;
631191783Srmacklem	u_int32_t nfsv4_nsec;
632191783Srmacklem};
633191783Srmacklemtypedef struct nfsv4_time	nfstime4;
634191783Srmacklem
635191783Srmacklem/*
636191783Srmacklem * Quads are defined as arrays of 2 longs to ensure dense packing for the
637191783Srmacklem * protocol and to facilitate xdr conversion.
638191783Srmacklem */
639191783Srmacklemstruct nfs_uquad {
640191783Srmacklem	u_int32_t nfsuquad[2];
641191783Srmacklem};
642191783Srmacklemtypedef	struct nfs_uquad	nfsuint64;
643191783Srmacklem
644191783Srmacklem/*
645191783Srmacklem * Used to convert between two u_longs and a u_quad_t.
646191783Srmacklem */
647191783Srmacklemunion nfs_quadconvert {
648191783Srmacklem	u_int32_t lval[2];
649191783Srmacklem	u_quad_t  qval;
650191783Srmacklem};
651191783Srmacklemtypedef union nfs_quadconvert	nfsquad_t;
652191783Srmacklem
653191783Srmacklem/*
654191783Srmacklem * NFS Version 3 special file number.
655191783Srmacklem */
656191783Srmacklemstruct nfsv3_spec {
657191783Srmacklem	u_int32_t specdata1;
658191783Srmacklem	u_int32_t specdata2;
659191783Srmacklem};
660191783Srmacklemtypedef	struct nfsv3_spec	nfsv3spec;
661191783Srmacklem
662191783Srmacklem/*
663191783Srmacklem * File attributes and setable attributes. These structures cover both
664191783Srmacklem * NFS version 2 and the version 3 protocol. Note that the union is only
665191783Srmacklem * used so that one pointer can refer to both variants. These structures
666191783Srmacklem * go out on the wire and must be densely packed, so no quad data types
667191783Srmacklem * are used. (all fields are longs or u_longs or structures of same)
668191783Srmacklem * NB: You can't do sizeof(struct nfs_fattr), you must use the
669191783Srmacklem *     NFSX_FATTR(v3) macro.
670191783Srmacklem */
671191783Srmacklemstruct nfs_fattr {
672191783Srmacklem	u_int32_t fa_type;
673191783Srmacklem	u_int32_t fa_mode;
674191783Srmacklem	u_int32_t fa_nlink;
675191783Srmacklem	u_int32_t fa_uid;
676191783Srmacklem	u_int32_t fa_gid;
677191783Srmacklem	union {
678191783Srmacklem		struct {
679191783Srmacklem			u_int32_t nfsv2fa_size;
680191783Srmacklem			u_int32_t nfsv2fa_blocksize;
681191783Srmacklem			u_int32_t nfsv2fa_rdev;
682191783Srmacklem			u_int32_t nfsv2fa_blocks;
683191783Srmacklem			u_int32_t nfsv2fa_fsid;
684191783Srmacklem			u_int32_t nfsv2fa_fileid;
685191783Srmacklem			nfstime2  nfsv2fa_atime;
686191783Srmacklem			nfstime2  nfsv2fa_mtime;
687191783Srmacklem			nfstime2  nfsv2fa_ctime;
688191783Srmacklem		} fa_nfsv2;
689191783Srmacklem		struct {
690191783Srmacklem			nfsuint64 nfsv3fa_size;
691191783Srmacklem			nfsuint64 nfsv3fa_used;
692191783Srmacklem			nfsv3spec nfsv3fa_rdev;
693191783Srmacklem			nfsuint64 nfsv3fa_fsid;
694191783Srmacklem			nfsuint64 nfsv3fa_fileid;
695191783Srmacklem			nfstime3  nfsv3fa_atime;
696191783Srmacklem			nfstime3  nfsv3fa_mtime;
697191783Srmacklem			nfstime3  nfsv3fa_ctime;
698191783Srmacklem		} fa_nfsv3;
699191783Srmacklem	} fa_un;
700191783Srmacklem};
701191783Srmacklem
702191783Srmacklem/* and some ugly defines for accessing union components */
703191783Srmacklem#define	fa2_size		fa_un.fa_nfsv2.nfsv2fa_size
704191783Srmacklem#define	fa2_blocksize		fa_un.fa_nfsv2.nfsv2fa_blocksize
705191783Srmacklem#define	fa2_rdev		fa_un.fa_nfsv2.nfsv2fa_rdev
706191783Srmacklem#define	fa2_blocks		fa_un.fa_nfsv2.nfsv2fa_blocks
707191783Srmacklem#define	fa2_fsid		fa_un.fa_nfsv2.nfsv2fa_fsid
708191783Srmacklem#define	fa2_fileid		fa_un.fa_nfsv2.nfsv2fa_fileid
709191783Srmacklem#define	fa2_atime		fa_un.fa_nfsv2.nfsv2fa_atime
710191783Srmacklem#define	fa2_mtime		fa_un.fa_nfsv2.nfsv2fa_mtime
711191783Srmacklem#define	fa2_ctime		fa_un.fa_nfsv2.nfsv2fa_ctime
712191783Srmacklem#define	fa3_size		fa_un.fa_nfsv3.nfsv3fa_size
713191783Srmacklem#define	fa3_used		fa_un.fa_nfsv3.nfsv3fa_used
714191783Srmacklem#define	fa3_rdev		fa_un.fa_nfsv3.nfsv3fa_rdev
715191783Srmacklem#define	fa3_fsid		fa_un.fa_nfsv3.nfsv3fa_fsid
716191783Srmacklem#define	fa3_fileid		fa_un.fa_nfsv3.nfsv3fa_fileid
717191783Srmacklem#define	fa3_atime		fa_un.fa_nfsv3.nfsv3fa_atime
718191783Srmacklem#define	fa3_mtime		fa_un.fa_nfsv3.nfsv3fa_mtime
719191783Srmacklem#define	fa3_ctime		fa_un.fa_nfsv3.nfsv3fa_ctime
720191783Srmacklem
721191783Srmacklemstruct nfsv2_sattr {
722191783Srmacklem	u_int32_t sa_mode;
723191783Srmacklem	u_int32_t sa_uid;
724191783Srmacklem	u_int32_t sa_gid;
725191783Srmacklem	u_int32_t sa_size;
726191783Srmacklem	nfstime2  sa_atime;
727191783Srmacklem	nfstime2  sa_mtime;
728191783Srmacklem};
729191783Srmacklem
730191783Srmacklem/*
731191783Srmacklem * NFS Version 3 sattr structure for the new node creation case.
732191783Srmacklem */
733191783Srmacklemstruct nfsv3_sattr {
734191783Srmacklem	u_int32_t sa_modetrue;
735191783Srmacklem	u_int32_t sa_mode;
736191783Srmacklem	u_int32_t sa_uidfalse;
737191783Srmacklem	u_int32_t sa_gidfalse;
738191783Srmacklem	u_int32_t sa_sizefalse;
739191783Srmacklem	u_int32_t sa_atimetype;
740191783Srmacklem	nfstime3  sa_atime;
741191783Srmacklem	u_int32_t sa_mtimetype;
742191783Srmacklem	nfstime3  sa_mtime;
743191783Srmacklem};
744191783Srmacklem
745191783Srmacklem/*
746191783Srmacklem * The attribute bits used for V4.
747191783Srmacklem * NFSATTRBIT_xxx defines the attribute# (and its bit position)
748191783Srmacklem * NFSATTRBM_xxx is a 32bit mask with the correct bit set within the
749191783Srmacklem *	appropriate 32bit word.
750191783Srmacklem * NFSATTRBIT_MAX is one greater than the largest NFSATTRBIT_xxx
751191783Srmacklem */
752191783Srmacklem#define	NFSATTRBIT_SUPPORTEDATTRS	0
753191783Srmacklem#define	NFSATTRBIT_TYPE			1
754191783Srmacklem#define	NFSATTRBIT_FHEXPIRETYPE		2
755191783Srmacklem#define	NFSATTRBIT_CHANGE		3
756191783Srmacklem#define	NFSATTRBIT_SIZE			4
757191783Srmacklem#define	NFSATTRBIT_LINKSUPPORT		5
758191783Srmacklem#define	NFSATTRBIT_SYMLINKSUPPORT	6
759191783Srmacklem#define	NFSATTRBIT_NAMEDATTR		7
760191783Srmacklem#define	NFSATTRBIT_FSID			8
761191783Srmacklem#define	NFSATTRBIT_UNIQUEHANDLES	9
762191783Srmacklem#define	NFSATTRBIT_LEASETIME		10
763191783Srmacklem#define	NFSATTRBIT_RDATTRERROR		11
764191783Srmacklem#define	NFSATTRBIT_ACL			12
765191783Srmacklem#define	NFSATTRBIT_ACLSUPPORT		13
766191783Srmacklem#define	NFSATTRBIT_ARCHIVE		14
767191783Srmacklem#define	NFSATTRBIT_CANSETTIME		15
768191783Srmacklem#define	NFSATTRBIT_CASEINSENSITIVE	16
769191783Srmacklem#define	NFSATTRBIT_CASEPRESERVING	17
770191783Srmacklem#define	NFSATTRBIT_CHOWNRESTRICTED	18
771191783Srmacklem#define	NFSATTRBIT_FILEHANDLE		19
772191783Srmacklem#define	NFSATTRBIT_FILEID		20
773191783Srmacklem#define	NFSATTRBIT_FILESAVAIL		21
774191783Srmacklem#define	NFSATTRBIT_FILESFREE		22
775191783Srmacklem#define	NFSATTRBIT_FILESTOTAL		23
776191783Srmacklem#define	NFSATTRBIT_FSLOCATIONS		24
777191783Srmacklem#define	NFSATTRBIT_HIDDEN		25
778191783Srmacklem#define	NFSATTRBIT_HOMOGENEOUS		26
779191783Srmacklem#define	NFSATTRBIT_MAXFILESIZE		27
780191783Srmacklem#define	NFSATTRBIT_MAXLINK		28
781191783Srmacklem#define	NFSATTRBIT_MAXNAME		29
782191783Srmacklem#define	NFSATTRBIT_MAXREAD		30
783191783Srmacklem#define	NFSATTRBIT_MAXWRITE		31
784191783Srmacklem#define	NFSATTRBIT_MIMETYPE		32
785191783Srmacklem#define	NFSATTRBIT_MODE			33
786191783Srmacklem#define	NFSATTRBIT_NOTRUNC		34
787191783Srmacklem#define	NFSATTRBIT_NUMLINKS		35
788191783Srmacklem#define	NFSATTRBIT_OWNER		36
789191783Srmacklem#define	NFSATTRBIT_OWNERGROUP		37
790191783Srmacklem#define	NFSATTRBIT_QUOTAHARD		38
791191783Srmacklem#define	NFSATTRBIT_QUOTASOFT		39
792191783Srmacklem#define	NFSATTRBIT_QUOTAUSED		40
793191783Srmacklem#define	NFSATTRBIT_RAWDEV		41
794191783Srmacklem#define	NFSATTRBIT_SPACEAVAIL		42
795191783Srmacklem#define	NFSATTRBIT_SPACEFREE		43
796191783Srmacklem#define	NFSATTRBIT_SPACETOTAL		44
797191783Srmacklem#define	NFSATTRBIT_SPACEUSED		45
798191783Srmacklem#define	NFSATTRBIT_SYSTEM		46
799191783Srmacklem#define	NFSATTRBIT_TIMEACCESS		47
800191783Srmacklem#define	NFSATTRBIT_TIMEACCESSSET	48
801191783Srmacklem#define	NFSATTRBIT_TIMEBACKUP		49
802191783Srmacklem#define	NFSATTRBIT_TIMECREATE		50
803191783Srmacklem#define	NFSATTRBIT_TIMEDELTA		51
804191783Srmacklem#define	NFSATTRBIT_TIMEMETADATA		52
805191783Srmacklem#define	NFSATTRBIT_TIMEMODIFY		53
806191783Srmacklem#define	NFSATTRBIT_TIMEMODIFYSET	54
807191783Srmacklem#define	NFSATTRBIT_MOUNTEDONFILEID	55
808191783Srmacklem
809191783Srmacklem#define	NFSATTRBM_SUPPORTEDATTRS	0x00000001
810191783Srmacklem#define	NFSATTRBM_TYPE			0x00000002
811191783Srmacklem#define	NFSATTRBM_FHEXPIRETYPE		0x00000004
812191783Srmacklem#define	NFSATTRBM_CHANGE		0x00000008
813191783Srmacklem#define	NFSATTRBM_SIZE			0x00000010
814191783Srmacklem#define	NFSATTRBM_LINKSUPPORT		0x00000020
815191783Srmacklem#define	NFSATTRBM_SYMLINKSUPPORT	0x00000040
816191783Srmacklem#define	NFSATTRBM_NAMEDATTR		0x00000080
817191783Srmacklem#define	NFSATTRBM_FSID			0x00000100
818191783Srmacklem#define	NFSATTRBM_UNIQUEHANDLES		0x00000200
819191783Srmacklem#define	NFSATTRBM_LEASETIME		0x00000400
820191783Srmacklem#define	NFSATTRBM_RDATTRERROR		0x00000800
821191783Srmacklem#define	NFSATTRBM_ACL			0x00001000
822191783Srmacklem#define	NFSATTRBM_ACLSUPPORT		0x00002000
823191783Srmacklem#define	NFSATTRBM_ARCHIVE		0x00004000
824191783Srmacklem#define	NFSATTRBM_CANSETTIME		0x00008000
825191783Srmacklem#define	NFSATTRBM_CASEINSENSITIVE	0x00010000
826191783Srmacklem#define	NFSATTRBM_CASEPRESERVING	0x00020000
827191783Srmacklem#define	NFSATTRBM_CHOWNRESTRICTED	0x00040000
828191783Srmacklem#define	NFSATTRBM_FILEHANDLE		0x00080000
829191783Srmacklem#define	NFSATTRBM_FILEID		0x00100000
830191783Srmacklem#define	NFSATTRBM_FILESAVAIL		0x00200000
831191783Srmacklem#define	NFSATTRBM_FILESFREE		0x00400000
832191783Srmacklem#define	NFSATTRBM_FILESTOTAL		0x00800000
833191783Srmacklem#define	NFSATTRBM_FSLOCATIONS		0x01000000
834191783Srmacklem#define	NFSATTRBM_HIDDEN		0x02000000
835191783Srmacklem#define	NFSATTRBM_HOMOGENEOUS		0x04000000
836191783Srmacklem#define	NFSATTRBM_MAXFILESIZE		0x08000000
837191783Srmacklem#define	NFSATTRBM_MAXLINK		0x10000000
838191783Srmacklem#define	NFSATTRBM_MAXNAME		0x20000000
839191783Srmacklem#define	NFSATTRBM_MAXREAD		0x40000000
840191783Srmacklem#define	NFSATTRBM_MAXWRITE		0x80000000
841191783Srmacklem#define	NFSATTRBM_MIMETYPE		0x00000001
842191783Srmacklem#define	NFSATTRBM_MODE			0x00000002
843191783Srmacklem#define	NFSATTRBM_NOTRUNC		0x00000004
844191783Srmacklem#define	NFSATTRBM_NUMLINKS		0x00000008
845191783Srmacklem#define	NFSATTRBM_OWNER			0x00000010
846191783Srmacklem#define	NFSATTRBM_OWNERGROUP		0x00000020
847191783Srmacklem#define	NFSATTRBM_QUOTAHARD		0x00000040
848191783Srmacklem#define	NFSATTRBM_QUOTASOFT		0x00000080
849191783Srmacklem#define	NFSATTRBM_QUOTAUSED		0x00000100
850191783Srmacklem#define	NFSATTRBM_RAWDEV		0x00000200
851191783Srmacklem#define	NFSATTRBM_SPACEAVAIL		0x00000400
852191783Srmacklem#define	NFSATTRBM_SPACEFREE		0x00000800
853191783Srmacklem#define	NFSATTRBM_SPACETOTAL		0x00001000
854191783Srmacklem#define	NFSATTRBM_SPACEUSED		0x00002000
855191783Srmacklem#define	NFSATTRBM_SYSTEM		0x00004000
856191783Srmacklem#define	NFSATTRBM_TIMEACCESS		0x00008000
857191783Srmacklem#define	NFSATTRBM_TIMEACCESSSET		0x00010000
858191783Srmacklem#define	NFSATTRBM_TIMEBACKUP		0x00020000
859191783Srmacklem#define	NFSATTRBM_TIMECREATE		0x00040000
860191783Srmacklem#define	NFSATTRBM_TIMEDELTA		0x00080000
861191783Srmacklem#define	NFSATTRBM_TIMEMETADATA		0x00100000
862191783Srmacklem#define	NFSATTRBM_TIMEMODIFY		0x00200000
863191783Srmacklem#define	NFSATTRBM_TIMEMODIFYSET		0x00400000
864191783Srmacklem#define	NFSATTRBM_MOUNTEDONFILEID	0x00800000
865191783Srmacklem
866191783Srmacklem#define	NFSATTRBIT_MAX			56
867191783Srmacklem
868191783Srmacklem/*
869191783Srmacklem * Sets of attributes that are supported, by words in the bitmap.
870191783Srmacklem */
871191783Srmacklem/*
872191783Srmacklem * NFSATTRBIT_SUPPORTED - SUPP0 - bits 0<->31
873191783Srmacklem *			  SUPP1 - bits 32<->63
874191783Srmacklem */
875191783Srmacklem#define	NFSATTRBIT_SUPP0						\
876191783Srmacklem 	(NFSATTRBM_SUPPORTEDATTRS |					\
877191783Srmacklem 	NFSATTRBM_TYPE |						\
878191783Srmacklem 	NFSATTRBM_FHEXPIRETYPE |					\
879191783Srmacklem 	NFSATTRBM_CHANGE |						\
880191783Srmacklem 	NFSATTRBM_SIZE |						\
881191783Srmacklem 	NFSATTRBM_LINKSUPPORT |						\
882191783Srmacklem 	NFSATTRBM_SYMLINKSUPPORT |					\
883191783Srmacklem 	NFSATTRBM_NAMEDATTR |						\
884191783Srmacklem 	NFSATTRBM_FSID |						\
885191783Srmacklem 	NFSATTRBM_UNIQUEHANDLES |					\
886191783Srmacklem 	NFSATTRBM_LEASETIME |						\
887191783Srmacklem 	NFSATTRBM_RDATTRERROR |						\
888191783Srmacklem 	NFSATTRBM_ACL |							\
889191783Srmacklem 	NFSATTRBM_ACLSUPPORT |						\
890191783Srmacklem 	NFSATTRBM_CANSETTIME |						\
891191783Srmacklem 	NFSATTRBM_CASEINSENSITIVE |					\
892191783Srmacklem 	NFSATTRBM_CASEPRESERVING |					\
893191783Srmacklem 	NFSATTRBM_CHOWNRESTRICTED |					\
894191783Srmacklem 	NFSATTRBM_FILEHANDLE |						\
895191783Srmacklem 	NFSATTRBM_FILEID |						\
896191783Srmacklem 	NFSATTRBM_FILESAVAIL |						\
897191783Srmacklem 	NFSATTRBM_FILESFREE |						\
898191783Srmacklem 	NFSATTRBM_FILESTOTAL |						\
899191783Srmacklem	NFSATTRBM_FSLOCATIONS |						\
900191783Srmacklem 	NFSATTRBM_HOMOGENEOUS |						\
901191783Srmacklem 	NFSATTRBM_MAXFILESIZE |						\
902191783Srmacklem 	NFSATTRBM_MAXLINK |						\
903191783Srmacklem 	NFSATTRBM_MAXNAME |						\
904191783Srmacklem 	NFSATTRBM_MAXREAD |						\
905191783Srmacklem 	NFSATTRBM_MAXWRITE)
906191783Srmacklem
907191783Srmacklem/*
908191783Srmacklem * NFSATTRBIT_S1 - subset of SUPP1 - OR of the following bits:
909191783Srmacklem */
910191783Srmacklem#define	NFSATTRBIT_S1							\
911191783Srmacklem 	(NFSATTRBM_MODE |						\
912191783Srmacklem 	NFSATTRBM_NOTRUNC |						\
913191783Srmacklem 	NFSATTRBM_NUMLINKS |						\
914191783Srmacklem 	NFSATTRBM_OWNER |						\
915191783Srmacklem 	NFSATTRBM_OWNERGROUP |						\
916191783Srmacklem 	NFSATTRBM_RAWDEV |						\
917191783Srmacklem 	NFSATTRBM_SPACEAVAIL |						\
918191783Srmacklem 	NFSATTRBM_SPACEFREE |						\
919191783Srmacklem 	NFSATTRBM_SPACETOTAL |						\
920191783Srmacklem 	NFSATTRBM_SPACEUSED |						\
921191783Srmacklem 	NFSATTRBM_TIMEACCESS |						\
922191783Srmacklem 	NFSATTRBM_TIMEDELTA |						\
923191783Srmacklem 	NFSATTRBM_TIMEMETADATA |					\
924191783Srmacklem 	NFSATTRBM_TIMEMODIFY |						\
925191783Srmacklem 	NFSATTRBM_MOUNTEDONFILEID)
926191783Srmacklem
927191783Srmacklem#ifdef QUOTA
928191783Srmacklem/*
929191783Srmacklem * If QUOTA OR in NFSATTRBIT_QUOTAHARD, NFSATTRBIT_QUOTASOFT and
930191783Srmacklem * NFSATTRBIT_QUOTAUSED.
931191783Srmacklem */
932191783Srmacklem#define	NFSATTRBIT_SUPP1	(NFSATTRBIT_S1 |			\
933191783Srmacklem				NFSATTRBM_QUOTAHARD |			\
934191783Srmacklem				NFSATTRBM_QUOTASOFT |			\
935191783Srmacklem				NFSATTRBM_QUOTAUSED)
936191783Srmacklem#else
937191783Srmacklem#define	NFSATTRBIT_SUPP1	NFSATTRBIT_S1
938191783Srmacklem#endif
939191783Srmacklem
940191783Srmacklem/*
941191783Srmacklem * NFSATTRBIT_SUPPSETONLY is the OR of NFSATTRBIT_TIMEACCESSSET and
942191783Srmacklem * NFSATTRBIT_TIMEMODIFYSET.
943191783Srmacklem */
944191783Srmacklem#define	NFSATTRBIT_SUPPSETONLY	 (NFSATTRBM_TIMEACCESSSET |		\
945191783Srmacklem				 NFSATTRBM_TIMEMODIFYSET)
946191783Srmacklem
947191783Srmacklem/*
948191783Srmacklem * NFSATTRBIT_SETABLE - SETABLE0 - bits 0<->31
949191783Srmacklem *			SETABLE1 - bits 32<->63
950191783Srmacklem */
951191783Srmacklem#define	NFSATTRBIT_SETABLE0						\
952191783Srmacklem	(NFSATTRBM_SIZE |						\
953191783Srmacklem	NFSATTRBM_ACL)
954191783Srmacklem#define	NFSATTRBIT_SETABLE1						\
955191783Srmacklem 	(NFSATTRBM_MODE |						\
956191783Srmacklem 	NFSATTRBM_OWNER |						\
957191783Srmacklem 	NFSATTRBM_OWNERGROUP |						\
958191783Srmacklem 	NFSATTRBM_TIMEACCESSSET |					\
959191783Srmacklem 	NFSATTRBM_TIMEMODIFYSET)
960191783Srmacklem
961191783Srmacklem/*
962191783Srmacklem * Set of attributes that the getattr vnode op needs.
963191783Srmacklem * OR of the following bits.
964191783Srmacklem * NFSATTRBIT_GETATTR0 - bits 0<->31
965191783Srmacklem */
966191783Srmacklem#define	NFSATTRBIT_GETATTR0						\
967191783Srmacklem 	(NFSATTRBM_SUPPORTEDATTRS |					\
968191783Srmacklem 	NFSATTRBM_TYPE |						\
969191783Srmacklem 	NFSATTRBM_CHANGE |						\
970191783Srmacklem 	NFSATTRBM_SIZE |						\
971191783Srmacklem 	NFSATTRBM_FSID |						\
972191783Srmacklem 	NFSATTRBM_FILEID |						\
973191783Srmacklem 	NFSATTRBM_MAXREAD)
974191783Srmacklem
975191783Srmacklem/*
976191783Srmacklem * NFSATTRBIT_GETATTR1 - bits 32<->63
977191783Srmacklem */
978191783Srmacklem#define	NFSATTRBIT_GETATTR1						\
979191783Srmacklem 	(NFSATTRBM_MODE |						\
980191783Srmacklem 	NFSATTRBM_NUMLINKS |						\
981191783Srmacklem 	NFSATTRBM_OWNER |						\
982191783Srmacklem 	NFSATTRBM_OWNERGROUP |						\
983191783Srmacklem 	NFSATTRBM_RAWDEV |						\
984191783Srmacklem 	NFSATTRBM_SPACEUSED |						\
985191783Srmacklem 	NFSATTRBM_TIMEACCESS |						\
986191783Srmacklem 	NFSATTRBM_TIMEMETADATA |					\
987191783Srmacklem 	NFSATTRBM_TIMEMODIFY)
988191783Srmacklem
989191783Srmacklem/*
990191783Srmacklem * Subset of the above that the Write RPC gets.
991191783Srmacklem * OR of the following bits.
992191783Srmacklem * NFSATTRBIT_WRITEGETATTR0 - bits 0<->31
993191783Srmacklem */
994191783Srmacklem#define	NFSATTRBIT_WRITEGETATTR0					\
995223657Srmacklem 	(NFSATTRBM_SUPPORTEDATTRS |					\
996223657Srmacklem 	NFSATTRBM_TYPE |						\
997223657Srmacklem 	NFSATTRBM_CHANGE |						\
998191783Srmacklem 	NFSATTRBM_SIZE |						\
999223657Srmacklem 	NFSATTRBM_FSID |						\
1000223657Srmacklem 	NFSATTRBM_FILEID |						\
1001223657Srmacklem 	NFSATTRBM_MAXREAD)
1002191783Srmacklem
1003191783Srmacklem/*
1004191783Srmacklem * NFSATTRBIT_WRITEGETATTR1 - bits 32<->63
1005191783Srmacklem */
1006191783Srmacklem#define	NFSATTRBIT_WRITEGETATTR1					\
1007223657Srmacklem 	(NFSATTRBM_MODE |						\
1008223657Srmacklem 	NFSATTRBM_NUMLINKS |						\
1009223657Srmacklem 	NFSATTRBM_RAWDEV |						\
1010223657Srmacklem 	NFSATTRBM_SPACEUSED |						\
1011223657Srmacklem 	NFSATTRBM_TIMEACCESS |						\
1012223657Srmacklem 	NFSATTRBM_TIMEMETADATA |					\
1013191783Srmacklem 	NFSATTRBM_TIMEMODIFY)
1014191783Srmacklem
1015191783Srmacklem/*
1016191783Srmacklem * Set of attributes that the wccattr operation op needs.
1017191783Srmacklem * OR of the following bits.
1018191783Srmacklem * NFSATTRBIT_WCCATTR0 - bits 0<->31
1019191783Srmacklem */
1020191783Srmacklem#define	NFSATTRBIT_WCCATTR0	0
1021191783Srmacklem
1022191783Srmacklem/*
1023191783Srmacklem * NFSATTRBIT_WCCATTR1 - bits 32<->63
1024191783Srmacklem */
1025191783Srmacklem#define	NFSATTRBIT_WCCATTR1						\
1026191783Srmacklem 	(NFSATTRBM_TIMEMODIFY)
1027191783Srmacklem
1028191783Srmacklem/*
1029191783Srmacklem * NFSATTRBIT_CBGETATTR0 - bits 0<->31
1030191783Srmacklem */
1031191783Srmacklem#define	NFSATTRBIT_CBGETATTR0	(NFSATTRBM_CHANGE | NFSATTRBM_SIZE)
1032191783Srmacklem
1033191783Srmacklem/*
1034191783Srmacklem * NFSATTRBIT_CBGETATTR1 - bits 32<->63
1035191783Srmacklem */
1036191783Srmacklem#define	NFSATTRBIT_CBGETATTR1		0x0
1037191783Srmacklem
1038191783Srmacklem/*
1039191783Srmacklem * Sets of attributes that require a VFS_STATFS() call to get the
1040191783Srmacklem * values of.
1041191783Srmacklem * NFSATTRBIT_STATFS0 - bits 0<->31
1042191783Srmacklem */
1043191783Srmacklem#define	NFSATTRBIT_STATFS0						\
1044191783Srmacklem	(NFSATTRBM_LINKSUPPORT |					\
1045191783Srmacklem	NFSATTRBM_SYMLINKSUPPORT |					\
1046191783Srmacklem	NFSATTRBM_CANSETTIME |						\
1047191783Srmacklem 	NFSATTRBM_FILESAVAIL |						\
1048191783Srmacklem 	NFSATTRBM_FILESFREE |						\
1049191783Srmacklem 	NFSATTRBM_FILESTOTAL |						\
1050191783Srmacklem 	NFSATTRBM_HOMOGENEOUS |						\
1051191783Srmacklem 	NFSATTRBM_MAXFILESIZE |						\
1052191783Srmacklem	NFSATTRBM_MAXNAME |						\
1053191783Srmacklem	NFSATTRBM_MAXREAD |						\
1054191783Srmacklem	NFSATTRBM_MAXWRITE)
1055191783Srmacklem
1056191783Srmacklem/*
1057191783Srmacklem * NFSATTRBIT_STATFS1 - bits 32<->63
1058191783Srmacklem */
1059191783Srmacklem#define	NFSATTRBIT_STATFS1						\
1060191783Srmacklem 	(NFSATTRBM_QUOTAHARD |						\
1061191783Srmacklem 	NFSATTRBM_QUOTASOFT |						\
1062191783Srmacklem 	NFSATTRBM_QUOTAUSED |						\
1063191783Srmacklem 	NFSATTRBM_SPACEAVAIL |						\
1064191783Srmacklem 	NFSATTRBM_SPACEFREE |						\
1065191783Srmacklem 	NFSATTRBM_SPACETOTAL |						\
1066191783Srmacklem 	NFSATTRBM_SPACEUSED |						\
1067191783Srmacklem	NFSATTRBM_TIMEDELTA)
1068191783Srmacklem
1069191783Srmacklem/*
1070191783Srmacklem * These are the bits that are needed by the nfs_statfs() call.
1071191783Srmacklem * (The regular getattr bits are or'd in so the vnode gets the correct
1072191783Srmacklem *  type, etc.)
1073191783Srmacklem * NFSGETATTRBIT_STATFS0 - bits 0<->31
1074191783Srmacklem */
1075191783Srmacklem#define	NFSGETATTRBIT_STATFS0	(NFSATTRBIT_GETATTR0 |			\
1076191783Srmacklem				NFSATTRBM_LINKSUPPORT |			\
1077191783Srmacklem				NFSATTRBM_SYMLINKSUPPORT |		\
1078191783Srmacklem				NFSATTRBM_CANSETTIME |			\
1079191783Srmacklem				NFSATTRBM_FILESFREE |			\
1080191783Srmacklem				NFSATTRBM_FILESTOTAL |			\
1081191783Srmacklem				NFSATTRBM_HOMOGENEOUS |			\
1082191783Srmacklem				NFSATTRBM_MAXFILESIZE |			\
1083191783Srmacklem				NFSATTRBM_MAXNAME |			\
1084191783Srmacklem				NFSATTRBM_MAXREAD |			\
1085191783Srmacklem				NFSATTRBM_MAXWRITE)
1086191783Srmacklem
1087191783Srmacklem/*
1088191783Srmacklem * NFSGETATTRBIT_STATFS1 - bits 32<->63
1089191783Srmacklem */
1090191783Srmacklem#define	NFSGETATTRBIT_STATFS1	(NFSATTRBIT_GETATTR1 |			\
1091191783Srmacklem				NFSATTRBM_SPACEAVAIL |			\
1092191783Srmacklem				NFSATTRBM_SPACEFREE |			\
1093191783Srmacklem				NFSATTRBM_SPACETOTAL |			\
1094191783Srmacklem				NFSATTRBM_TIMEDELTA)
1095191783Srmacklem
1096191783Srmacklem/*
1097191783Srmacklem * Set of attributes for the equivalent of an nfsv3 pathconf rpc.
1098191783Srmacklem * NFSGETATTRBIT_PATHCONF0 - bits 0<->31
1099191783Srmacklem */
1100191783Srmacklem#define	NFSGETATTRBIT_PATHCONF0	(NFSATTRBIT_GETATTR0 |			\
1101191783Srmacklem			 	NFSATTRBM_CASEINSENSITIVE |		\
1102191783Srmacklem			 	NFSATTRBM_CASEPRESERVING |		\
1103191783Srmacklem			 	NFSATTRBM_CHOWNRESTRICTED |		\
1104191783Srmacklem			 	NFSATTRBM_MAXLINK |			\
1105191783Srmacklem			 	NFSATTRBM_MAXNAME)
1106191783Srmacklem
1107191783Srmacklem/*
1108191783Srmacklem * NFSGETATTRBIT_PATHCONF1 - bits 32<->63
1109191783Srmacklem */
1110191783Srmacklem#define	NFSGETATTRBIT_PATHCONF1	(NFSATTRBIT_GETATTR1 |			\
1111191783Srmacklem				NFSATTRBM_NOTRUNC)
1112191783Srmacklem
1113191783Srmacklem/*
1114191783Srmacklem * Sets of attributes required by readdir and readdirplus.
1115191783Srmacklem * NFSATTRBIT_READDIRPLUS0	(NFSATTRBIT_GETATTR0 | NFSATTRBIT_FILEHANDLE |
1116191783Srmacklem *				 NFSATTRBIT_RDATTRERROR)
1117191783Srmacklem */
1118191783Srmacklem#define	NFSATTRBIT_READDIRPLUS0	(NFSATTRBIT_GETATTR0 | NFSATTRBM_FILEHANDLE | \
1119191783Srmacklem				NFSATTRBM_RDATTRERROR)
1120191783Srmacklem#define	NFSATTRBIT_READDIRPLUS1	NFSATTRBIT_GETATTR1
1121191783Srmacklem
1122191783Srmacklem/*
1123191783Srmacklem * Set of attributes supported by Referral vnodes.
1124191783Srmacklem */
1125191783Srmacklem#define	NFSATTRBIT_REFERRAL0	(NFSATTRBM_TYPE | NFSATTRBM_FSID |	\
1126191783Srmacklem	NFSATTRBM_RDATTRERROR | NFSATTRBM_FSLOCATIONS)
1127191783Srmacklem#define	NFSATTRBIT_REFERRAL1	NFSATTRBM_MOUNTEDONFILEID
1128191783Srmacklem
1129191783Srmacklem/*
1130191783Srmacklem * Structure for data handled by the statfs rpc. Since some fields are
1131191783Srmacklem * u_int64_t, this cannot be used for copying data on/off the wire, due
1132191783Srmacklem * to alignment concerns.
1133191783Srmacklem */
1134191783Srmacklemstruct nfsstatfs {
1135191783Srmacklem	union {
1136191783Srmacklem		struct {
1137191783Srmacklem			u_int32_t nfsv2sf_tsize;
1138191783Srmacklem			u_int32_t nfsv2sf_bsize;
1139191783Srmacklem			u_int32_t nfsv2sf_blocks;
1140191783Srmacklem			u_int32_t nfsv2sf_bfree;
1141191783Srmacklem			u_int32_t nfsv2sf_bavail;
1142191783Srmacklem		} sf_nfsv2;
1143191783Srmacklem		struct {
1144191783Srmacklem			u_int64_t nfsv3sf_tbytes;
1145191783Srmacklem			u_int64_t nfsv3sf_fbytes;
1146191783Srmacklem			u_int64_t nfsv3sf_abytes;
1147191783Srmacklem			u_int64_t nfsv3sf_tfiles;
1148191783Srmacklem			u_int64_t nfsv3sf_ffiles;
1149191783Srmacklem			u_int64_t nfsv3sf_afiles;
1150191783Srmacklem			u_int32_t nfsv3sf_invarsec;
1151191783Srmacklem		} sf_nfsv3;
1152191783Srmacklem	} sf_un;
1153191783Srmacklem};
1154191783Srmacklem
1155191783Srmacklem#define	sf_tsize	sf_un.sf_nfsv2.nfsv2sf_tsize
1156191783Srmacklem#define	sf_bsize	sf_un.sf_nfsv2.nfsv2sf_bsize
1157191783Srmacklem#define	sf_blocks	sf_un.sf_nfsv2.nfsv2sf_blocks
1158191783Srmacklem#define	sf_bfree	sf_un.sf_nfsv2.nfsv2sf_bfree
1159191783Srmacklem#define	sf_bavail	sf_un.sf_nfsv2.nfsv2sf_bavail
1160191783Srmacklem#define	sf_tbytes	sf_un.sf_nfsv3.nfsv3sf_tbytes
1161191783Srmacklem#define	sf_fbytes	sf_un.sf_nfsv3.nfsv3sf_fbytes
1162191783Srmacklem#define	sf_abytes	sf_un.sf_nfsv3.nfsv3sf_abytes
1163191783Srmacklem#define	sf_tfiles	sf_un.sf_nfsv3.nfsv3sf_tfiles
1164191783Srmacklem#define	sf_ffiles	sf_un.sf_nfsv3.nfsv3sf_ffiles
1165191783Srmacklem#define	sf_afiles	sf_un.sf_nfsv3.nfsv3sf_afiles
1166191783Srmacklem#define	sf_invarsec	sf_un.sf_nfsv3.nfsv3sf_invarsec
1167191783Srmacklem
1168191783Srmacklem/*
1169191783Srmacklem * Now defined using u_int64_t for the 64 bit field(s).
1170191783Srmacklem * (Cannot be used to move data on/off the wire, due to alignment concerns.)
1171191783Srmacklem */
1172191783Srmacklemstruct nfsfsinfo {
1173191783Srmacklem	u_int32_t fs_rtmax;
1174191783Srmacklem	u_int32_t fs_rtpref;
1175191783Srmacklem	u_int32_t fs_rtmult;
1176191783Srmacklem	u_int32_t fs_wtmax;
1177191783Srmacklem	u_int32_t fs_wtpref;
1178191783Srmacklem	u_int32_t fs_wtmult;
1179191783Srmacklem	u_int32_t fs_dtpref;
1180191783Srmacklem	u_int64_t fs_maxfilesize;
1181191783Srmacklem	struct timespec fs_timedelta;
1182191783Srmacklem	u_int32_t fs_properties;
1183191783Srmacklem};
1184191783Srmacklem
1185191783Srmacklem/*
1186191783Srmacklem * Bits for fs_properties
1187191783Srmacklem */
1188191783Srmacklem#define	NFSV3_FSFLINK		0x1
1189191783Srmacklem#define	NFSV3_FSFSYMLINK	0x2
1190191783Srmacklem#define	NFSV3_FSFHOMOGENEOUS	0x4
1191191783Srmacklem#define	NFSV3_FSFCANSETTIME	0x8
1192191783Srmacklem
1193191783Srmacklem/*
1194191783Srmacklem * Yikes, overload fs_rtmult as fs_maxname for V4.
1195191783Srmacklem */
1196191783Srmacklem#define	fs_maxname	fs_rtmult
1197191783Srmacklem
1198191783Srmacklemstruct nfsv3_pathconf {
1199191783Srmacklem	u_int32_t pc_linkmax;
1200191783Srmacklem	u_int32_t pc_namemax;
1201191783Srmacklem	u_int32_t pc_notrunc;
1202191783Srmacklem	u_int32_t pc_chownrestricted;
1203191783Srmacklem	u_int32_t pc_caseinsensitive;
1204191783Srmacklem	u_int32_t pc_casepreserving;
1205191783Srmacklem};
1206191783Srmacklem
1207191783Srmacklem/*
1208191783Srmacklem * NFS V4 data structures.
1209191783Srmacklem */
1210191783Srmacklemstruct nfsv4stateid {
1211191783Srmacklem	u_int32_t	seqid;
1212191783Srmacklem	u_int32_t	other[NFSX_STATEIDOTHER / NFSX_UNSIGNED];
1213191783Srmacklem};
1214191783Srmacklemtypedef struct nfsv4stateid nfsv4stateid_t;
1215191783Srmacklem
1216191783Srmacklem#endif	/* _NFS_NFSPROTO_H_ */
1217