xref: /freebsd-src/sys/fs/nfs/nfsproto.h (revision 709c18911ad70978d47198556c0fb1c0e703fb68)
19ec7b004SRick Macklem /*-
251369649SPedro F. Giffuni  * SPDX-License-Identifier: BSD-3-Clause
351369649SPedro F. Giffuni  *
49ec7b004SRick Macklem  * Copyright (c) 1989, 1993
59ec7b004SRick Macklem  *	The Regents of the University of California.  All rights reserved.
69ec7b004SRick Macklem  *
79ec7b004SRick Macklem  * This code is derived from software contributed to Berkeley by
89ec7b004SRick Macklem  * Rick Macklem at The University of Guelph.
99ec7b004SRick Macklem  *
109ec7b004SRick Macklem  * Redistribution and use in source and binary forms, with or without
119ec7b004SRick Macklem  * modification, are permitted provided that the following conditions
129ec7b004SRick Macklem  * are met:
139ec7b004SRick Macklem  * 1. Redistributions of source code must retain the above copyright
149ec7b004SRick Macklem  *    notice, this list of conditions and the following disclaimer.
159ec7b004SRick Macklem  * 2. Redistributions in binary form must reproduce the above copyright
169ec7b004SRick Macklem  *    notice, this list of conditions and the following disclaimer in the
179ec7b004SRick Macklem  *    documentation and/or other materials provided with the distribution.
18fbbd9655SWarner Losh  * 3. Neither the name of the University nor the names of its contributors
199ec7b004SRick Macklem  *    may be used to endorse or promote products derived from this software
209ec7b004SRick Macklem  *    without specific prior written permission.
219ec7b004SRick Macklem  *
229ec7b004SRick Macklem  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
239ec7b004SRick Macklem  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
249ec7b004SRick Macklem  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
259ec7b004SRick Macklem  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
269ec7b004SRick Macklem  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
279ec7b004SRick Macklem  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
289ec7b004SRick Macklem  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
299ec7b004SRick Macklem  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
309ec7b004SRick Macklem  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
319ec7b004SRick Macklem  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
329ec7b004SRick Macklem  * SUCH DAMAGE.
339ec7b004SRick Macklem  */
349ec7b004SRick Macklem 
359ec7b004SRick Macklem #ifndef _NFS_NFSPROTO_H_
369ec7b004SRick Macklem #define	_NFS_NFSPROTO_H_
379ec7b004SRick Macklem 
389ec7b004SRick Macklem /*
399ec7b004SRick Macklem  * nfs definitions as per the Version 2, 3 and 4 specs
409ec7b004SRick Macklem  */
419ec7b004SRick Macklem 
429ec7b004SRick Macklem /*
439ec7b004SRick Macklem  * Constants as defined in the NFS Version 2, 3 and 4 specs.
449ec7b004SRick Macklem  * "NFS: Network File System Protocol Specification" RFC1094
459ec7b004SRick Macklem  * and in the "NFS: Network File System Version 3 Protocol
469ec7b004SRick Macklem  * Specification"
479ec7b004SRick Macklem  */
489ec7b004SRick Macklem 
499ec7b004SRick Macklem #define	NFS_PORT	2049
509ec7b004SRick Macklem #define	NFS_PROG	100003
519ec7b004SRick Macklem #define	NFS_CALLBCKPROG	0x40000000	/* V4 only */
529ec7b004SRick Macklem #define	NFS_VER2	2
539ec7b004SRick Macklem #define	NFS_VER3	3
549ec7b004SRick Macklem #define	NFS_VER4	4
559ec7b004SRick Macklem #define	NFS_V2MAXDATA	8192
569ec7b004SRick Macklem #define	NFS_MAXDGRAMDATA 16384
579ec7b004SRick Macklem #define	NFS_MAXPATHLEN	1024
589ec7b004SRick Macklem #define	NFS_MAXNAMLEN	255
596149361bSRick Macklem /*
606149361bSRick Macklem  * Calculating the maximum XDR overhead for an NFS RPC isn't easy.
616149361bSRick Macklem  * NFS_MAXPKTHDR is antiquated and assumes AUTH_SYS over UDP.
626149361bSRick Macklem  * NFS_MAXXDR should be sufficient for all NFS versions over TCP.
636149361bSRick Macklem  * It includes:
646149361bSRick Macklem  * - Maximum RPC message header. It can include 2 400byte authenticators plus
656149361bSRick Macklem  *   a machine name of unlimited length, although it is usually relatively
666149361bSRick Macklem  *   small.
676149361bSRick Macklem  * - XDR overheads for the NFSv4 compound. This can include Owner and
686149361bSRick Macklem  *   Owner_group strings, which are usually fairly small, but are allowed
696149361bSRick Macklem  *   to be up to 1024 bytes each.
706149361bSRick Macklem  * 4096 is overkill, but should always be sufficient.
716149361bSRick Macklem  */
729ec7b004SRick Macklem #define	NFS_MAXPKTHDR	404
736149361bSRick Macklem #define	NFS_MAXXDR	4096
749ec7b004SRick Macklem #define	NFS_MINPACKET	20
759ec7b004SRick Macklem #define	NFS_FABLKSIZE	512	/* Size in bytes of a block wrt fa_blocks */
769ec7b004SRick Macklem #define	NFSV4_MINORVERSION	0	/* V4 Minor version */
771f60bfd8SRick Macklem #define	NFSV41_MINORVERSION	1	/* V4 Minor version */
78348d9b56SRick Macklem #define	NFSV42_MINORVERSION	2	/* V4 Minor version */
799ec7b004SRick Macklem #define	NFSV4_CBVERS		1	/* V4 CB Version */
801f60bfd8SRick Macklem #define	NFSV41_CBVERS		4	/* V4.1 CB Version */
819ec7b004SRick Macklem #define	NFSV4_SMALLSTR	50		/* Strings small enough for stack */
829ec7b004SRick Macklem 
8366e80f77SRick Macklem /*
8466e80f77SRick Macklem  * This value isn't a fixed value in the RFCs.
8566e80f77SRick Macklem  * It is the maximum data size supported by NFSv3 or NFSv4 over TCP for
8666e80f77SRick Macklem  * the server.  It should be set to the I/O size preferred by ZFS or
8766e80f77SRick Macklem  * MAXBSIZE, whichever is greater.
8866e80f77SRick Macklem  * ZFS currently prefers 128K.
8966e80f77SRick Macklem  * It used to be called NFS_MAXDATA, but has been renamed to clarify that
9066e80f77SRick Macklem  * it refers to server side only and doesn't conflict with the NFS_MAXDATA
9166e80f77SRick Macklem  * defined in rpcsvc/nfs_prot.h for userland.
9266e80f77SRick Macklem  */
9366e80f77SRick Macklem #define	NFS_SRVMAXIO	(128 * 1024)
9466e80f77SRick Macklem 
959ec7b004SRick Macklem /* Stat numbers for rpc returns (version 2, 3 and 4) */
965a816b92SRick Macklem /*
975a816b92SRick Macklem  * These numbers are hard-wired in the RFCs, so they can't be changed.
985a816b92SRick Macklem  * The code currently assumes that the ones < 10000 are the same as
995a816b92SRick Macklem  * sys/errno.h and that sys/errno.h will never go as high as 10000.
1005a816b92SRick Macklem  * If the value in sys/errno.h of any entry listed below is changed,
1015a816b92SRick Macklem  * the NFS code must be modified to do the mapping between them.
1025a816b92SRick Macklem  * (You can ignore NFSERR_WFLUSH, since it is never actually used.)
1035a816b92SRick Macklem  */
1049ec7b004SRick Macklem #define	NFSERR_OK		0
1059ec7b004SRick Macklem #define	NFSERR_PERM		1
1069ec7b004SRick Macklem #define	NFSERR_NOENT		2
1079ec7b004SRick Macklem #define	NFSERR_IO		5
1089ec7b004SRick Macklem #define	NFSERR_NXIO		6
1099ec7b004SRick Macklem #define	NFSERR_ACCES		13
1109ec7b004SRick Macklem #define	NFSERR_EXIST		17
1119ec7b004SRick Macklem #define	NFSERR_XDEV		18	/* Version 3, 4 only */
1129ec7b004SRick Macklem #define	NFSERR_NODEV		19
1139ec7b004SRick Macklem #define	NFSERR_NOTDIR		20
1149ec7b004SRick Macklem #define	NFSERR_ISDIR		21
1159ec7b004SRick Macklem #define	NFSERR_INVAL		22	/* Version 3, 4 only */
1169ec7b004SRick Macklem #define	NFSERR_FBIG		27
1179ec7b004SRick Macklem #define	NFSERR_NOSPC		28
1189ec7b004SRick Macklem #define	NFSERR_ROFS		30
1199ec7b004SRick Macklem #define	NFSERR_MLINK		31	/* Version 3, 4 only */
1209ec7b004SRick Macklem #define	NFSERR_NAMETOL		63
1219ec7b004SRick Macklem #define	NFSERR_NOTEMPTY		66
1229ec7b004SRick Macklem #define	NFSERR_DQUOT		69
1239ec7b004SRick Macklem #define	NFSERR_STALE		70
1249ec7b004SRick Macklem #define	NFSERR_REMOTE		71	/* Version 3 only */
1259ec7b004SRick Macklem #define	NFSERR_WFLUSH		99	/* Version 2 only */
1269ec7b004SRick Macklem #define	NFSERR_BADHANDLE	10001	/* These are Version 3, 4 only */
1279ec7b004SRick Macklem #define	NFSERR_NOT_SYNC		10002	/* Version 3 Only */
1289ec7b004SRick Macklem #define	NFSERR_BAD_COOKIE	10003
1299ec7b004SRick Macklem #define	NFSERR_NOTSUPP		10004
1309ec7b004SRick Macklem #define	NFSERR_TOOSMALL		10005
1319ec7b004SRick Macklem #define	NFSERR_SERVERFAULT	10006
1329ec7b004SRick Macklem #define	NFSERR_BADTYPE		10007
1339ec7b004SRick Macklem #define	NFSERR_DELAY		10008	/* Called NFSERR_JUKEBOX for V3 */
1349ec7b004SRick Macklem #define	NFSERR_SAME		10009	/* These are Version 4 only */
1359ec7b004SRick Macklem #define	NFSERR_DENIED		10010
1369ec7b004SRick Macklem #define	NFSERR_EXPIRED		10011
1379ec7b004SRick Macklem #define	NFSERR_LOCKED		10012
1389ec7b004SRick Macklem #define	NFSERR_GRACE		10013
1399ec7b004SRick Macklem #define	NFSERR_FHEXPIRED	10014
1409ec7b004SRick Macklem #define	NFSERR_SHAREDENIED	10015
1419ec7b004SRick Macklem #define	NFSERR_WRONGSEC		10016
1429ec7b004SRick Macklem #define	NFSERR_CLIDINUSE	10017
1439ec7b004SRick Macklem #define	NFSERR_RESOURCE		10018
1449ec7b004SRick Macklem #define	NFSERR_MOVED		10019
1459ec7b004SRick Macklem #define	NFSERR_NOFILEHANDLE	10020
1469ec7b004SRick Macklem #define	NFSERR_MINORVERMISMATCH	10021
1479ec7b004SRick Macklem #define	NFSERR_STALECLIENTID	10022
1489ec7b004SRick Macklem #define	NFSERR_STALESTATEID	10023
1499ec7b004SRick Macklem #define	NFSERR_OLDSTATEID	10024
1509ec7b004SRick Macklem #define	NFSERR_BADSTATEID	10025
1519ec7b004SRick Macklem #define	NFSERR_BADSEQID		10026
1529ec7b004SRick Macklem #define	NFSERR_NOTSAME		10027
1539ec7b004SRick Macklem #define	NFSERR_LOCKRANGE	10028
1549ec7b004SRick Macklem #define	NFSERR_SYMLINK		10029
1559ec7b004SRick Macklem #define	NFSERR_RESTOREFH	10030
1569ec7b004SRick Macklem #define	NFSERR_LEASEMOVED	10031
1579ec7b004SRick Macklem #define	NFSERR_ATTRNOTSUPP	10032
1589ec7b004SRick Macklem #define	NFSERR_NOGRACE		10033
1599ec7b004SRick Macklem #define	NFSERR_RECLAIMBAD	10034
1609ec7b004SRick Macklem #define	NFSERR_RECLAIMCONFLICT	10035
1619ec7b004SRick Macklem #define	NFSERR_BADXDR		10036
1629ec7b004SRick Macklem #define	NFSERR_LOCKSHELD	10037
1639ec7b004SRick Macklem #define	NFSERR_OPENMODE		10038
1649ec7b004SRick Macklem #define	NFSERR_BADOWNER		10039
1659ec7b004SRick Macklem #define	NFSERR_BADCHAR		10040
1669ec7b004SRick Macklem #define	NFSERR_BADNAME		10041
1679ec7b004SRick Macklem #define	NFSERR_BADRANGE		10042
1689ec7b004SRick Macklem #define	NFSERR_LOCKNOTSUPP	10043
1699ec7b004SRick Macklem #define	NFSERR_OPILLEGAL	10044
1709ec7b004SRick Macklem #define	NFSERR_DEADLOCK		10045
1719ec7b004SRick Macklem #define	NFSERR_FILEOPEN		10046
1729ec7b004SRick Macklem #define	NFSERR_ADMINREVOKED	10047
1739ec7b004SRick Macklem #define	NFSERR_CBPATHDOWN	10048
1749ec7b004SRick Macklem 
1751f60bfd8SRick Macklem /* NFSv4.1 specific errors. */
1761f60bfd8SRick Macklem #define	NFSERR_BADIOMODE	10049
1771f60bfd8SRick Macklem #define	NFSERR_BADLAYOUT	10050
1781f60bfd8SRick Macklem #define	NFSERR_BADSESSIONDIGEST	10051
1791f60bfd8SRick Macklem #define	NFSERR_BADSESSION	10052
1801f60bfd8SRick Macklem #define	NFSERR_BADSLOT		10053
1811f60bfd8SRick Macklem #define	NFSERR_COMPLETEALREADY	10054
1821f60bfd8SRick Macklem #define	NFSERR_NOTBNDTOSESS	10055
1831f60bfd8SRick Macklem #define	NFSERR_DELEGALREADYWANT	10056
1841f60bfd8SRick Macklem #define	NFSERR_BACKCHANBUSY	10057
1851f60bfd8SRick Macklem #define	NFSERR_LAYOUTTRYLATER	10058
1861f60bfd8SRick Macklem #define	NFSERR_LAYOUTUNAVAIL	10059
1871f60bfd8SRick Macklem #define	NFSERR_NOMATCHLAYOUT	10060
1881f60bfd8SRick Macklem #define	NFSERR_RECALLCONFLICT	10061
1891f60bfd8SRick Macklem #define	NFSERR_UNKNLAYOUTTYPE	10062
1901f60bfd8SRick Macklem #define	NFSERR_SEQMISORDERED	10063
1911f60bfd8SRick Macklem #define	NFSERR_SEQUENCEPOS	10064
1921f60bfd8SRick Macklem #define	NFSERR_REQTOOBIG	10065
1931f60bfd8SRick Macklem #define	NFSERR_REPTOOBIG	10066
1941f60bfd8SRick Macklem #define	NFSERR_REPTOOBIGTOCACHE	10067
1951f60bfd8SRick Macklem #define	NFSERR_RETRYUNCACHEDREP	10068
1961f60bfd8SRick Macklem #define	NFSERR_UNSAFECOMPOUND	10069
1971f60bfd8SRick Macklem #define	NFSERR_TOOMANYOPS	10070
1981f60bfd8SRick Macklem #define	NFSERR_OPNOTINSESS	10071
1991f60bfd8SRick Macklem #define	NFSERR_HASHALGUNSUPP	10072
2001f60bfd8SRick Macklem #define	NFSERR_CLIENTIDBUSY	10074
2011f60bfd8SRick Macklem #define	NFSERR_PNFSIOHOLE	10075
2021f60bfd8SRick Macklem #define	NFSERR_SEQFALSERETRY	10076
2031f60bfd8SRick Macklem #define	NFSERR_BADHIGHSLOT	10077
2041f60bfd8SRick Macklem #define	NFSERR_DEADSESSION	10078
2051f60bfd8SRick Macklem #define	NFSERR_ENCRALGUNSUPP	10079
2061f60bfd8SRick Macklem #define	NFSERR_PNFSNOLAYOUT	10080
2071f60bfd8SRick Macklem #define	NFSERR_NOTONLYOP	10081
2081f60bfd8SRick Macklem #define	NFSERR_WRONGCRED	10082
2091f60bfd8SRick Macklem #define	NFSERR_WRONGTYPE	10083
2101f60bfd8SRick Macklem #define	NFSERR_DIRDELEGUNAVAIL	10084
2111f60bfd8SRick Macklem #define	NFSERR_REJECTDELEG	10085
2121f60bfd8SRick Macklem #define	NFSERR_RETURNCONFLICT	10086
2131f60bfd8SRick Macklem #define	NFSERR_DELEGREVOKED	10087
2141f60bfd8SRick Macklem 
215348d9b56SRick Macklem /* NFSv4.2 specific errors. */
216348d9b56SRick Macklem #define	NFSERR_PARTNERNOTSUPP	10088
217348d9b56SRick Macklem #define	NFSERR_PARTNERNOAUTH	10089
218348d9b56SRick Macklem #define	NFSERR_UNIONNOTSUPP	10090
219348d9b56SRick Macklem #define	NFSERR_OFFLOADDENIED	10091
220348d9b56SRick Macklem #define	NFSERR_WRONGLFS		10092
221348d9b56SRick Macklem #define	NFSERR_BADLABEL		10093
222348d9b56SRick Macklem #define	NFSERR_OFFLOADNOREQS	10094
223348d9b56SRick Macklem 
224348d9b56SRick Macklem /* NFSv4.2 Extended Attribute errors. */
225348d9b56SRick Macklem #define	NFSERR_NOXATTR		10095
226348d9b56SRick Macklem #define	NFSERR_XATTR2BIG	10096
227348d9b56SRick Macklem 
228348d9b56SRick Macklem /* Maximum value of all the NFS error values. */
229348d9b56SRick Macklem #define	NFSERR_MAXERRVAL	NFSERR_XATTR2BIG
230348d9b56SRick Macklem 
2319ec7b004SRick Macklem #define	NFSERR_STALEWRITEVERF	30001	/* Fake return for nfs_commit() */
2329ec7b004SRick Macklem #define	NFSERR_DONTREPLY	30003	/* Don't process request */
2339ec7b004SRick Macklem #define	NFSERR_RETVOID		30004	/* Return void, not error */
2349ec7b004SRick Macklem #define	NFSERR_REPLYFROMCACHE	30005	/* Reply from recent request cache */
2359ec7b004SRick Macklem #define	NFSERR_STALEDONTRECOVER	30006	/* Don't initiate recovery */
2369ec7b004SRick Macklem 
2379ec7b004SRick Macklem #define	NFSERR_RPCERR		0x40000000 /* Mark an RPC layer error */
2389ec7b004SRick Macklem #define	NFSERR_AUTHERR		0x80000000 /* Mark an authentication error */
2399ec7b004SRick Macklem 
2409ec7b004SRick Macklem #define	NFSERR_RPCMISMATCH	(NFSERR_RPCERR | RPC_MISMATCH)
2419ec7b004SRick Macklem #define	NFSERR_PROGUNAVAIL	(NFSERR_RPCERR | RPC_PROGUNAVAIL)
2429ec7b004SRick Macklem #define	NFSERR_PROGMISMATCH	(NFSERR_RPCERR | RPC_PROGMISMATCH)
2439ec7b004SRick Macklem #define	NFSERR_PROGNOTV4	(NFSERR_RPCERR | 0xffff)
2449ec7b004SRick Macklem #define	NFSERR_PROCUNAVAIL	(NFSERR_RPCERR | RPC_PROCUNAVAIL)
2459ec7b004SRick Macklem #define	NFSERR_GARBAGE		(NFSERR_RPCERR | RPC_GARBAGE)
2469ec7b004SRick Macklem 
2479ec7b004SRick Macklem /* Sizes in bytes of various nfs rpc components */
2489ec7b004SRick Macklem #define	NFSX_UNSIGNED	4
2499ec7b004SRick Macklem #define	NFSX_HYPER	(2 * NFSX_UNSIGNED)
2509ec7b004SRick Macklem 
2519ec7b004SRick Macklem /* specific to NFS Version 2 */
2529ec7b004SRick Macklem #define	NFSX_V2FH	32
2539ec7b004SRick Macklem #define	NFSX_V2FATTR	68
2549ec7b004SRick Macklem #define	NFSX_V2SATTR	32
2559ec7b004SRick Macklem #define	NFSX_V2COOKIE	4
2569ec7b004SRick Macklem #define	NFSX_V2STATFS	20
2579ec7b004SRick Macklem 
2589ec7b004SRick Macklem /* specific to NFS Version 3 */
2599ec7b004SRick Macklem #define	NFSX_V3FHMAX		64	/* max. allowed by protocol */
2609ec7b004SRick Macklem #define	NFSX_V3FATTR		84
2619ec7b004SRick Macklem #define	NFSX_V3SATTR		60	/* max. all fields filled in */
2629ec7b004SRick Macklem #define	NFSX_V3SRVSATTR		(sizeof (struct nfsv3_sattr))
2639ec7b004SRick Macklem #define	NFSX_V3POSTOPATTR	(NFSX_V3FATTR + NFSX_UNSIGNED)
2649ec7b004SRick Macklem #define	NFSX_V3WCCDATA		(NFSX_V3POSTOPATTR + 8 * NFSX_UNSIGNED)
2659ec7b004SRick Macklem #define	NFSX_V3STATFS		52
2669ec7b004SRick Macklem #define	NFSX_V3FSINFO		48
2679ec7b004SRick Macklem #define	NFSX_V3PATHCONF		24
2689ec7b004SRick Macklem 
2699ec7b004SRick Macklem /* specific to NFS Version 4 */
2709ec7b004SRick Macklem #define	NFSX_V4FHMAX		128
2719ec7b004SRick Macklem #define	NFSX_V4FSID		(2 * NFSX_HYPER)
2729ec7b004SRick Macklem #define	NFSX_V4SPECDATA		(2 * NFSX_UNSIGNED)
2739ec7b004SRick Macklem #define	NFSX_V4TIME		(NFSX_HYPER + NFSX_UNSIGNED)
2749ec7b004SRick Macklem #define	NFSX_V4SETTIME		(NFSX_UNSIGNED + NFSX_V4TIME)
2751f60bfd8SRick Macklem #define	NFSX_V4SESSIONID	16
2761f60bfd8SRick Macklem #define	NFSX_V4DEVICEID		16
27790d2dfabSRick Macklem #define	NFSX_V4PNFSFH		(sizeof(fhandle_t) + 1)
27890d2dfabSRick Macklem #define	NFSX_V4FILELAYOUT	(4 * NFSX_UNSIGNED + NFSX_V4DEVICEID +	\
27990d2dfabSRick Macklem 				 NFSX_HYPER + NFSM_RNDUP(NFSX_V4PNFSFH))
28090d2dfabSRick Macklem #define	NFSX_V4FLEXLAYOUT(m)	(NFSX_HYPER + 3 * NFSX_UNSIGNED +		\
28190d2dfabSRick Macklem     ((m) * (NFSX_V4DEVICEID + NFSX_STATEID + NFSM_RNDUP(NFSX_V4PNFSFH) +	\
28290d2dfabSRick Macklem     8 * NFSX_UNSIGNED)))
2839ec7b004SRick Macklem 
2849ec7b004SRick Macklem /* sizes common to multiple NFS versions */
2859ec7b004SRick Macklem #define	NFSX_FHMAX		(NFSX_V4FHMAX)
2869ec7b004SRick Macklem #define	NFSX_MYFH		(sizeof (fhandle_t)) /* size this server uses */
2879ec7b004SRick Macklem #define	NFSX_VERF 		8
2889ec7b004SRick Macklem #define	NFSX_STATEIDOTHER	12
2899ec7b004SRick Macklem #define	NFSX_STATEID		(NFSX_UNSIGNED + NFSX_STATEIDOTHER)
2909ec7b004SRick Macklem #define	NFSX_GSSH		12
2919ec7b004SRick Macklem 
2929ec7b004SRick Macklem /* variants for multiple versions */
2939ec7b004SRick Macklem #define	NFSX_STATFS(v3)		((v3) ? NFSX_V3STATFS : NFSX_V2STATFS)
2949ec7b004SRick Macklem 
29590d2dfabSRick Macklem /*
29690d2dfabSRick Macklem  * Beware.  NFSPROC_NULL and friends are defined in
29790d2dfabSRick Macklem  * <rpcsvc/nfs_prot.h> as well and the numbers are different.
29890d2dfabSRick Macklem  */
29990d2dfabSRick Macklem #ifndef	NFSPROC_NULL
3009ec7b004SRick Macklem /* nfs rpc procedure numbers (before version mapping) */
3019ec7b004SRick Macklem #define	NFSPROC_NULL		0
3029ec7b004SRick Macklem #define	NFSPROC_GETATTR		1
3039ec7b004SRick Macklem #define	NFSPROC_SETATTR		2
3049ec7b004SRick Macklem #define	NFSPROC_LOOKUP		3
3059ec7b004SRick Macklem #define	NFSPROC_ACCESS		4
3069ec7b004SRick Macklem #define	NFSPROC_READLINK	5
3079ec7b004SRick Macklem #define	NFSPROC_READ		6
3089ec7b004SRick Macklem #define	NFSPROC_WRITE		7
3099ec7b004SRick Macklem #define	NFSPROC_CREATE		8
3109ec7b004SRick Macklem #define	NFSPROC_MKDIR		9
3119ec7b004SRick Macklem #define	NFSPROC_SYMLINK		10
3129ec7b004SRick Macklem #define	NFSPROC_MKNOD		11
3139ec7b004SRick Macklem #define	NFSPROC_REMOVE		12
3149ec7b004SRick Macklem #define	NFSPROC_RMDIR		13
3159ec7b004SRick Macklem #define	NFSPROC_RENAME		14
3169ec7b004SRick Macklem #define	NFSPROC_LINK		15
3179ec7b004SRick Macklem #define	NFSPROC_READDIR		16
3189ec7b004SRick Macklem #define	NFSPROC_READDIRPLUS	17
3199ec7b004SRick Macklem #define	NFSPROC_FSSTAT		18
3209ec7b004SRick Macklem #define	NFSPROC_FSINFO		19
3219ec7b004SRick Macklem #define	NFSPROC_PATHCONF	20
3229ec7b004SRick Macklem #define	NFSPROC_COMMIT		21
32390d2dfabSRick Macklem #endif	/* NFSPROC_NULL */
3249ec7b004SRick Macklem 
3259ec7b004SRick Macklem /*
3268f0e65c9SRick Macklem  * The lower numbers -> 21 are used by NFSv2 and v3. These define higher
3278f0e65c9SRick Macklem  * numbers used by NFSv4.
3288f0e65c9SRick Macklem  * NFS_V3NPROCS is one greater than the last V3 op and NFS_NPROCS is
3298f0e65c9SRick Macklem  * one greater than the last number.
3308f0e65c9SRick Macklem  */
3318f0e65c9SRick Macklem #ifndef	NFS_V3NPROCS
3328f0e65c9SRick Macklem #define	NFS_V3NPROCS		22
3338f0e65c9SRick Macklem 
3348f0e65c9SRick Macklem #define	NFSPROC_LOOKUPP		22
3358f0e65c9SRick Macklem #define	NFSPROC_SETCLIENTID	23
3368f0e65c9SRick Macklem #define	NFSPROC_SETCLIENTIDCFRM	24
3378f0e65c9SRick Macklem #define	NFSPROC_LOCK		25
3388f0e65c9SRick Macklem #define	NFSPROC_LOCKU		26
3398f0e65c9SRick Macklem #define	NFSPROC_OPEN		27
3408f0e65c9SRick Macklem #define	NFSPROC_CLOSE		28
3418f0e65c9SRick Macklem #define	NFSPROC_OPENCONFIRM	29
3428f0e65c9SRick Macklem #define	NFSPROC_LOCKT		30
3438f0e65c9SRick Macklem #define	NFSPROC_OPENDOWNGRADE	31
3448f0e65c9SRick Macklem #define	NFSPROC_RENEW		32
3458f0e65c9SRick Macklem #define	NFSPROC_PUTROOTFH	33
3468f0e65c9SRick Macklem #define	NFSPROC_RELEASELCKOWN	34
3478f0e65c9SRick Macklem #define	NFSPROC_DELEGRETURN	35
3488f0e65c9SRick Macklem #define	NFSPROC_RETDELEGREMOVE	36
3498f0e65c9SRick Macklem #define	NFSPROC_RETDELEGRENAME1	37
3508f0e65c9SRick Macklem #define	NFSPROC_RETDELEGRENAME2	38
3518f0e65c9SRick Macklem #define	NFSPROC_GETACL		39
3528f0e65c9SRick Macklem #define	NFSPROC_SETACL		40
3538f0e65c9SRick Macklem 
3548f0e65c9SRick Macklem /*
3558f0e65c9SRick Macklem  * Must be defined as one higher than the last Proc# above.
3568f0e65c9SRick Macklem  */
3578f0e65c9SRick Macklem #define	NFSV4_NPROCS		41
3581f60bfd8SRick Macklem 
3591f60bfd8SRick Macklem /* Additional procedures for NFSv4.1. */
3601f60bfd8SRick Macklem #define	NFSPROC_EXCHANGEID	41
3611f60bfd8SRick Macklem #define	NFSPROC_CREATESESSION	42
3621f60bfd8SRick Macklem #define	NFSPROC_DESTROYSESSION	43
3631f60bfd8SRick Macklem #define	NFSPROC_DESTROYCLIENT	44
3641f60bfd8SRick Macklem #define	NFSPROC_FREESTATEID	45
3651f60bfd8SRick Macklem #define	NFSPROC_LAYOUTGET	46
3661f60bfd8SRick Macklem #define	NFSPROC_GETDEVICEINFO	47
3671f60bfd8SRick Macklem #define	NFSPROC_LAYOUTCOMMIT	48
3681f60bfd8SRick Macklem #define	NFSPROC_LAYOUTRETURN	49
3691f60bfd8SRick Macklem #define	NFSPROC_RECLAIMCOMPL	50
3701f60bfd8SRick Macklem #define	NFSPROC_WRITEDS		51
3711f60bfd8SRick Macklem #define	NFSPROC_READDS		52
3721f60bfd8SRick Macklem #define	NFSPROC_COMMITDS	53
373a351e99cSRick Macklem #define	NFSPROC_OPENLAYGET	54
374a351e99cSRick Macklem #define	NFSPROC_CREATELAYGET	55
3751f60bfd8SRick Macklem 
3761f60bfd8SRick Macklem /*
3771f60bfd8SRick Macklem  * Must be defined as one higher than the last NFSv4.1 Proc# above.
3781f60bfd8SRick Macklem  */
379a351e99cSRick Macklem #define	NFSV41_NPROCS		56
3801f60bfd8SRick Macklem 
381348d9b56SRick Macklem /* Additional procedures for NFSv4.2. */
382348d9b56SRick Macklem #define	NFSPROC_IOADVISE	56
383348d9b56SRick Macklem #define	NFSPROC_ALLOCATE	57
384348d9b56SRick Macklem #define	NFSPROC_COPY		58
385348d9b56SRick Macklem #define	NFSPROC_SEEK		59
386348d9b56SRick Macklem #define	NFSPROC_SEEKDS		60
387348d9b56SRick Macklem 
388348d9b56SRick Macklem /* and the ones for the optional Extended attribute support (RFC-8276). */
389348d9b56SRick Macklem #define	NFSPROC_GETEXTATTR	61
390348d9b56SRick Macklem #define	NFSPROC_SETEXTATTR	62
391348d9b56SRick Macklem #define	NFSPROC_RMEXTATTR	63
392348d9b56SRick Macklem #define	NFSPROC_LISTEXTATTR	64
393348d9b56SRick Macklem 
3947763814fSRick Macklem /* BindConnectionToSession, done by the krpc for a new connection. */
3957763814fSRick Macklem #define	NFSPROC_BINDCONNTOSESS	65
3967763814fSRick Macklem 
3973ad1e1c1SRick Macklem /* Do a Lookup+Open for "oneopenown". */
3983ad1e1c1SRick Macklem #define	NFSPROC_LOOKUPOPEN	66
3993ad1e1c1SRick Macklem 
4003ad1e1c1SRick Macklem /* Do an NFSv4.2 Deallocate. */
4013ad1e1c1SRick Macklem #define	NFSPROC_DEALLOCATE	67
4023ad1e1c1SRick Macklem 
40344744f75SRick Macklem /* Do an NFSv4.2 LayoutError. */
40444744f75SRick Macklem #define	NFSPROC_LAYOUTERROR	68
40544744f75SRick Macklem 
406330aa8acSRick Macklem /* Do an NFSv4 Verify+Write. */
407330aa8acSRick Macklem #define	NFSPROC_APPENDWRITE	69
408330aa8acSRick Macklem 
409348d9b56SRick Macklem /*
410348d9b56SRick Macklem  * Must be defined as one higher than the last NFSv4.2 Proc# above.
411348d9b56SRick Macklem  */
412330aa8acSRick Macklem #define	NFSV42_NPROCS		70
413348d9b56SRick Macklem 
414393b7606SWarner Losh /* Value of NFSV42_NPROCS for old nfsstats structure. (Always 69) */
415393b7606SWarner Losh #define	NFSV42_OLDNPROCS	69
416393b7606SWarner Losh 
4178f0e65c9SRick Macklem #endif	/* NFS_V3NPROCS */
4188f0e65c9SRick Macklem 
4198f0e65c9SRick Macklem /*
4208f0e65c9SRick Macklem  * Define NFS_NPROCS as NFSV4_NPROCS for the experimental kernel code.
4218f0e65c9SRick Macklem  */
4228f0e65c9SRick Macklem #ifndef	NFS_NPROCS
4238f0e65c9SRick Macklem #define	NFS_NPROCS		NFSV4_NPROCS
4248f0e65c9SRick Macklem #endif
4258f0e65c9SRick Macklem 
4268f0e65c9SRick Macklem /*
4279ec7b004SRick Macklem  * NFSPROC_NOOP is a fake op# that can't be the same as any V2/3/4 Procedure
4281b819cf2SRick Macklem  * or Operation#. Since the NFS V4 Op #s go higher, use NFSV42_NOPS, which
4299ec7b004SRick Macklem  * is one greater than the highest Op#.
4309ec7b004SRick Macklem  */
4311b819cf2SRick Macklem #define	NFSPROC_NOOP		NFSV42_NOPS
4329ec7b004SRick Macklem 
4339ec7b004SRick Macklem /* Actual Version 2 procedure numbers */
4349ec7b004SRick Macklem #define	NFSV2PROC_NULL		0
4359ec7b004SRick Macklem #define	NFSV2PROC_GETATTR	1
4369ec7b004SRick Macklem #define	NFSV2PROC_SETATTR	2
4379ec7b004SRick Macklem #define	NFSV2PROC_NOOP		3
4389ec7b004SRick Macklem #define	NFSV2PROC_ROOT		NFSV2PROC_NOOP	/* Obsolete */
4399ec7b004SRick Macklem #define	NFSV2PROC_LOOKUP	4
4409ec7b004SRick Macklem #define	NFSV2PROC_READLINK	5
4419ec7b004SRick Macklem #define	NFSV2PROC_READ		6
4429ec7b004SRick Macklem #define	NFSV2PROC_WRITECACHE	NFSV2PROC_NOOP	/* Obsolete */
4439ec7b004SRick Macklem #define	NFSV2PROC_WRITE		8
4449ec7b004SRick Macklem #define	NFSV2PROC_CREATE	9
4459ec7b004SRick Macklem #define	NFSV2PROC_REMOVE	10
4469ec7b004SRick Macklem #define	NFSV2PROC_RENAME	11
4479ec7b004SRick Macklem #define	NFSV2PROC_LINK		12
4489ec7b004SRick Macklem #define	NFSV2PROC_SYMLINK	13
4499ec7b004SRick Macklem #define	NFSV2PROC_MKDIR		14
4509ec7b004SRick Macklem #define	NFSV2PROC_RMDIR		15
4519ec7b004SRick Macklem #define	NFSV2PROC_READDIR	16
4529ec7b004SRick Macklem #define	NFSV2PROC_STATFS	17
4539ec7b004SRick Macklem 
4549ec7b004SRick Macklem /*
4550c794c5dSRick Macklem  * V4 Procedure numbers
4569ec7b004SRick Macklem  */
4579ec7b004SRick Macklem #define	NFSV4PROC_COMPOUND	1
4589ec7b004SRick Macklem #define	NFSV4PROC_CBNULL	0
4599ec7b004SRick Macklem #define	NFSV4PROC_CBCOMPOUND	1
4609ec7b004SRick Macklem 
4619ec7b004SRick Macklem /*
4629ec7b004SRick Macklem  * Constants used by the Version 3 and 4 protocols for various RPCs
4639ec7b004SRick Macklem  */
4649ec7b004SRick Macklem #define	NFSV3SATTRTIME_DONTCHANGE	0
4659ec7b004SRick Macklem #define	NFSV3SATTRTIME_TOSERVER		1
4669ec7b004SRick Macklem #define	NFSV3SATTRTIME_TOCLIENT		2
4679ec7b004SRick Macklem 
4689ec7b004SRick Macklem #define	NFSV4SATTRTIME_TOSERVER		0
4699ec7b004SRick Macklem #define	NFSV4SATTRTIME_TOCLIENT		1
4709ec7b004SRick Macklem 
4719ec7b004SRick Macklem #define	NFSV4LOCKT_READ			1
4729ec7b004SRick Macklem #define	NFSV4LOCKT_WRITE		2
4739ec7b004SRick Macklem #define	NFSV4LOCKT_READW		3
4749ec7b004SRick Macklem #define	NFSV4LOCKT_WRITEW		4
4759ec7b004SRick Macklem #define	NFSV4LOCKT_RELEASE		5
4769ec7b004SRick Macklem 
4779ec7b004SRick Macklem #define	NFSV4OPEN_NOCREATE		0
4789ec7b004SRick Macklem #define	NFSV4OPEN_CREATE		1
4799ec7b004SRick Macklem #define	NFSV4OPEN_CLAIMNULL		0
4809ec7b004SRick Macklem #define	NFSV4OPEN_CLAIMPREVIOUS		1
4819ec7b004SRick Macklem #define	NFSV4OPEN_CLAIMDELEGATECUR	2
4829ec7b004SRick Macklem #define	NFSV4OPEN_CLAIMDELEGATEPREV	3
483c59e4cc3SRick Macklem #define	NFSV4OPEN_CLAIMFH		4
484c59e4cc3SRick Macklem #define	NFSV4OPEN_CLAIMDELEGATECURFH	5
485c59e4cc3SRick Macklem #define	NFSV4OPEN_CLAIMDELEGATEPREVFH	6
4869ec7b004SRick Macklem #define	NFSV4OPEN_DELEGATENONE		0
4879ec7b004SRick Macklem #define	NFSV4OPEN_DELEGATEREAD		1
4889ec7b004SRick Macklem #define	NFSV4OPEN_DELEGATEWRITE		2
489c59e4cc3SRick Macklem #define	NFSV4OPEN_DELEGATENONEEXT	3
4909ec7b004SRick Macklem #define	NFSV4OPEN_LIMITSIZE		1
4919ec7b004SRick Macklem #define	NFSV4OPEN_LIMITBLOCKS		2
4929ec7b004SRick Macklem 
4939ec7b004SRick Macklem /*
4949ec7b004SRick Macklem  * Nfs V4 ACE stuff
4959ec7b004SRick Macklem  */
4969ec7b004SRick Macklem #define	NFSV4ACE_ALLOWEDTYPE		0x00000000
4979ec7b004SRick Macklem #define	NFSV4ACE_DENIEDTYPE		0x00000001
4989ec7b004SRick Macklem #define	NFSV4ACE_AUDITTYPE		0x00000002
4999ec7b004SRick Macklem #define	NFSV4ACE_ALARMTYPE		0x00000003
5009ec7b004SRick Macklem 
5019ec7b004SRick Macklem #define	NFSV4ACE_SUPALLOWED		0x00000001
5029ec7b004SRick Macklem #define	NFSV4ACE_SUPDENIED		0x00000002
5039ec7b004SRick Macklem #define	NFSV4ACE_SUPAUDIT		0x00000004
5049ec7b004SRick Macklem #define	NFSV4ACE_SUPALARM		0x00000008
5059ec7b004SRick Macklem 
5069ec7b004SRick Macklem #define	NFSV4ACE_SUPTYPES	(NFSV4ACE_SUPALLOWED | NFSV4ACE_SUPDENIED)
5079ec7b004SRick Macklem 
5089ec7b004SRick Macklem #define	NFSV4ACE_FILEINHERIT		0x00000001
5099ec7b004SRick Macklem #define	NFSV4ACE_DIRECTORYINHERIT	0x00000002
5109ec7b004SRick Macklem #define	NFSV4ACE_NOPROPAGATEINHERIT	0x00000004
5119ec7b004SRick Macklem #define	NFSV4ACE_INHERITONLY		0x00000008
5129ec7b004SRick Macklem #define	NFSV4ACE_SUCCESSFULACCESS	0x00000010
5139ec7b004SRick Macklem #define	NFSV4ACE_FAILEDACCESS		0x00000020
5149ec7b004SRick Macklem #define	NFSV4ACE_IDENTIFIERGROUP	0x00000040
5159ec7b004SRick Macklem 
5169ec7b004SRick Macklem #define	NFSV4ACE_READDATA		0x00000001
5179ec7b004SRick Macklem #define	NFSV4ACE_LISTDIRECTORY		0x00000001
5189ec7b004SRick Macklem #define	NFSV4ACE_WRITEDATA		0x00000002
5199ec7b004SRick Macklem #define	NFSV4ACE_ADDFILE		0x00000002
5209ec7b004SRick Macklem #define	NFSV4ACE_APPENDDATA		0x00000004
5219ec7b004SRick Macklem #define	NFSV4ACE_ADDSUBDIRECTORY	0x00000004
5229ec7b004SRick Macklem #define	NFSV4ACE_READNAMEDATTR		0x00000008
5239ec7b004SRick Macklem #define	NFSV4ACE_WRITENAMEDATTR		0x00000010
5249ec7b004SRick Macklem #define	NFSV4ACE_EXECUTE		0x00000020
5259ec7b004SRick Macklem #define	NFSV4ACE_SEARCH			0x00000020
5269ec7b004SRick Macklem #define	NFSV4ACE_DELETECHILD		0x00000040
5279ec7b004SRick Macklem #define	NFSV4ACE_READATTRIBUTES		0x00000080
5289ec7b004SRick Macklem #define	NFSV4ACE_WRITEATTRIBUTES	0x00000100
5299ec7b004SRick Macklem #define	NFSV4ACE_DELETE			0x00010000
5309ec7b004SRick Macklem #define	NFSV4ACE_READACL		0x00020000
5319ec7b004SRick Macklem #define	NFSV4ACE_WRITEACL		0x00040000
5329ec7b004SRick Macklem #define	NFSV4ACE_WRITEOWNER		0x00080000
5339ec7b004SRick Macklem #define	NFSV4ACE_SYNCHRONIZE		0x00100000
5349ec7b004SRick Macklem 
5359ec7b004SRick Macklem /*
5369ec7b004SRick Macklem  * Here are the mappings between mode bits and acl mask bits for
5379ec7b004SRick Macklem  * directories and other files.
5389ec7b004SRick Macklem  * (Named attributes have not been included, since named attributes are
5399ec7b004SRick Macklem  *  not yet supported.)
5409ec7b004SRick Macklem  * The mailing list seems to indicate that NFSV4ACE_EXECUTE refers to
5419ec7b004SRick Macklem  * searching a directory, although I can't find a statement of that in
5429ec7b004SRick Macklem  * the RFC.
5439ec7b004SRick Macklem  */
5449ec7b004SRick Macklem #define	NFSV4ACE_ALLFILESMASK	(NFSV4ACE_READATTRIBUTES | NFSV4ACE_READACL)
5459ec7b004SRick Macklem #define	NFSV4ACE_OWNERMASK	(NFSV4ACE_WRITEATTRIBUTES | NFSV4ACE_WRITEACL)
5469ec7b004SRick Macklem #define	NFSV4ACE_DIRREADMASK	NFSV4ACE_LISTDIRECTORY
5479ec7b004SRick Macklem #define	NFSV4ACE_DIREXECUTEMASK	NFSV4ACE_EXECUTE
5489ec7b004SRick Macklem #define	NFSV4ACE_DIRWRITEMASK	(NFSV4ACE_ADDFILE | 			\
5499ec7b004SRick Macklem 		NFSV4ACE_ADDSUBDIRECTORY | NFSV4ACE_DELETECHILD)
5509ec7b004SRick Macklem #define	NFSV4ACE_READMASK	NFSV4ACE_READDATA
5519ec7b004SRick Macklem #define	NFSV4ACE_WRITEMASK	(NFSV4ACE_WRITEDATA | NFSV4ACE_APPENDDATA)
5529ec7b004SRick Macklem #define	NFSV4ACE_EXECUTEMASK	NFSV4ACE_EXECUTE
5539ec7b004SRick Macklem #define	NFSV4ACE_ALLFILEBITS	(NFSV4ACE_READMASK | NFSV4ACE_WRITEMASK | \
5549ec7b004SRick Macklem 	NFSV4ACE_EXECUTEMASK | NFSV4ACE_SYNCHRONIZE)
5559ec7b004SRick Macklem #define	NFSV4ACE_ALLDIRBITS	(NFSV4ACE_DIRREADMASK | 		\
5569ec7b004SRick Macklem 	NFSV4ACE_DIRWRITEMASK | NFSV4ACE_DIREXECUTEMASK)
5579ec7b004SRick Macklem #define	NFSV4ACE_AUDITMASK	0x0
5589ec7b004SRick Macklem 
5599ec7b004SRick Macklem /*
5609ec7b004SRick Macklem  * These GENERIC masks are not used and are no longer believed to be useful.
5619ec7b004SRick Macklem  */
5629ec7b004SRick Macklem #define	NFSV4ACE_GENERICREAD		0x00120081
5639ec7b004SRick Macklem #define	NFSV4ACE_GENERICWRITE		0x00160106
5649ec7b004SRick Macklem #define	NFSV4ACE_GENERICEXECUTE		0x001200a0
5659ec7b004SRick Macklem 
5669ec7b004SRick Macklem #define	NFSSTATEID_PUTALLZERO		0
5679ec7b004SRick Macklem #define	NFSSTATEID_PUTALLONE		1
5689ec7b004SRick Macklem #define	NFSSTATEID_PUTSTATEID		2
5691f60bfd8SRick Macklem #define	NFSSTATEID_PUTSEQIDZERO		3
5709ec7b004SRick Macklem 
5719ec7b004SRick Macklem /*
5729ec7b004SRick Macklem  * Bits for share access and deny.
5739ec7b004SRick Macklem  */
5749ec7b004SRick Macklem #define	NFSV4OPEN_ACCESSREAD		0x00000001
5759ec7b004SRick Macklem #define	NFSV4OPEN_ACCESSWRITE		0x00000002
5769ec7b004SRick Macklem #define	NFSV4OPEN_ACCESSBOTH		0x00000003
577c59e4cc3SRick Macklem #define	NFSV4OPEN_WANTDELEGMASK		0x0000ff00
578c59e4cc3SRick Macklem #define	NFSV4OPEN_WANTREADDELEG		0x00000100
579c59e4cc3SRick Macklem #define	NFSV4OPEN_WANTWRITEDELEG	0x00000200
580c59e4cc3SRick Macklem #define	NFSV4OPEN_WANTANYDELEG		0x00000300
581c59e4cc3SRick Macklem #define	NFSV4OPEN_WANTNODELEG		0x00000400
582c59e4cc3SRick Macklem #define	NFSV4OPEN_WANTCANCEL		0x00000500
583c59e4cc3SRick Macklem #define	NFSV4OPEN_WANTSIGNALDELEG	0x00010000
584c59e4cc3SRick Macklem #define	NFSV4OPEN_WANTPUSHDELEG		0x00020000
5859ec7b004SRick Macklem 
5869ec7b004SRick Macklem #define	NFSV4OPEN_DENYNONE		0x00000000
5879ec7b004SRick Macklem #define	NFSV4OPEN_DENYREAD		0x00000001
5889ec7b004SRick Macklem #define	NFSV4OPEN_DENYWRITE		0x00000002
5899ec7b004SRick Macklem #define	NFSV4OPEN_DENYBOTH		0x00000003
5909ec7b004SRick Macklem 
5919ec7b004SRick Macklem /*
592c59e4cc3SRick Macklem  * Delegate_none_ext reply values.
593c59e4cc3SRick Macklem  */
594c59e4cc3SRick Macklem #define	NFSV4OPEN_NOTWANTED		0
595c59e4cc3SRick Macklem #define	NFSV4OPEN_CONTENTION		1
596c59e4cc3SRick Macklem #define	NFSV4OPEN_RESOURCE		2
597c59e4cc3SRick Macklem #define	NFSV4OPEN_NOTSUPPFTYPE		3
598c59e4cc3SRick Macklem #define	NFSV4OPEN_NOTSUPPWRITEFTYPE	4
599c59e4cc3SRick Macklem #define	NFSV4OPEN_NOTSUPPUPGRADE	5
600c59e4cc3SRick Macklem #define	NFSV4OPEN_NOTSUPPDOWNGRADE	6
601c59e4cc3SRick Macklem #define	NFSV4OPEN_CANCELLED		7
602c59e4cc3SRick Macklem #define	NFSV4OPEN_ISDIR			8
603c59e4cc3SRick Macklem 
604c59e4cc3SRick Macklem /*
6059ec7b004SRick Macklem  * Open result flags
606c59e4cc3SRick Macklem  * (The first four are in the spec. The rest are used internally.)
6079ec7b004SRick Macklem  */
6089ec7b004SRick Macklem #define	NFSV4OPEN_RESULTCONFIRM		0x00000002
6099ec7b004SRick Macklem #define	NFSV4OPEN_LOCKTYPEPOSIX		0x00000004
610c59e4cc3SRick Macklem #define	NFSV4OPEN_PRESERVEUNLINKED	0x00000008
611c59e4cc3SRick Macklem #define	NFSV4OPEN_MAYNOTIFYLOCK		0x00000020
6129ec7b004SRick Macklem #define	NFSV4OPEN_RFLAGS 						\
613c59e4cc3SRick Macklem     (NFSV4OPEN_RESULTCONFIRM | NFSV4OPEN_LOCKTYPEPOSIX |		\
614c59e4cc3SRick Macklem     NFSV4OPEN_PRESERVEUNLINKED | NFSV4OPEN_MAYNOTIFYLOCK)
6159ec7b004SRick Macklem #define	NFSV4OPEN_RECALL		0x00010000
6169ec7b004SRick Macklem #define	NFSV4OPEN_READDELEGATE		0x00020000
6179ec7b004SRick Macklem #define	NFSV4OPEN_WRITEDELEGATE		0x00040000
618c59e4cc3SRick Macklem #define	NFSV4OPEN_WDRESOURCE		0x00080000
619c59e4cc3SRick Macklem #define	NFSV4OPEN_WDCONTENTION		0x00100000
620c59e4cc3SRick Macklem #define	NFSV4OPEN_WDNOTWANTED		0x00200000
6215d54f186SRick Macklem #define	NFSV4OPEN_WDSUPPFTYPE		0x00400000
622dbe7ff25SRick Macklem #define	NFSV4OPEN_WDNOTSUPPDOWNGRADE	0x00800000
623dbe7ff25SRick Macklem #define	NFSV4OPEN_WDNOTSUPPUPGRADE	0x01000000
6249ec7b004SRick Macklem 
6259ec7b004SRick Macklem /*
6269ec7b004SRick Macklem  * NFS V4 File Handle types
6279ec7b004SRick Macklem  */
6289ec7b004SRick Macklem #define	NFSV4FHTYPE_PERSISTENT		0x0
6299ec7b004SRick Macklem #define	NFSV4FHTYPE_NOEXPIREWITHOPEN	0x1
6309ec7b004SRick Macklem #define	NFSV4FHTYPE_VOLATILEANY		0x2
6319ec7b004SRick Macklem #define	NFSV4FHTYPE_VOLATILEMIGRATE	0x4
6329ec7b004SRick Macklem #define	NFSV4FHTYPE_VOLATILERENAME	0x8
6339ec7b004SRick Macklem 
6349ec7b004SRick Macklem /*
6359ec7b004SRick Macklem  * Maximum size of V4 opaque strings.
6369ec7b004SRick Macklem  */
6379ec7b004SRick Macklem #define	NFSV4_OPAQUELIMIT	1024
6389ec7b004SRick Macklem 
6399ec7b004SRick Macklem /*
6409ec7b004SRick Macklem  * These are the same for V3 and V4.
6419ec7b004SRick Macklem  */
6429ec7b004SRick Macklem #define	NFSACCESS_READ			0x01
6439ec7b004SRick Macklem #define	NFSACCESS_LOOKUP		0x02
6449ec7b004SRick Macklem #define	NFSACCESS_MODIFY		0x04
6459ec7b004SRick Macklem #define	NFSACCESS_EXTEND		0x08
6469ec7b004SRick Macklem #define	NFSACCESS_DELETE		0x10
6479ec7b004SRick Macklem #define	NFSACCESS_EXECUTE		0x20
6489ec7b004SRick Macklem 
649348d9b56SRick Macklem /* Additional Extended Attribute access bits RFC-8276. */
650348d9b56SRick Macklem #define	NFSACCESS_XAREAD		0x40
651348d9b56SRick Macklem #define	NFSACCESS_XAWRITE		0x80
652348d9b56SRick Macklem #define	NFSACCESS_XALIST		0x100
653348d9b56SRick Macklem 
6549ec7b004SRick Macklem #define	NFSWRITE_UNSTABLE		0
6559ec7b004SRick Macklem #define	NFSWRITE_DATASYNC		1
6569ec7b004SRick Macklem #define	NFSWRITE_FILESYNC		2
6579ec7b004SRick Macklem 
6589ec7b004SRick Macklem #define	NFSCREATE_UNCHECKED		0
6599ec7b004SRick Macklem #define	NFSCREATE_GUARDED		1
6609ec7b004SRick Macklem #define	NFSCREATE_EXCLUSIVE		2
6611f60bfd8SRick Macklem #define	NFSCREATE_EXCLUSIVE41		3
6629ec7b004SRick Macklem 
6639ec7b004SRick Macklem #define	NFSV3FSINFO_LINK		0x01
6649ec7b004SRick Macklem #define	NFSV3FSINFO_SYMLINK		0x02
6659ec7b004SRick Macklem #define	NFSV3FSINFO_HOMOGENEOUS		0x08
6669ec7b004SRick Macklem #define	NFSV3FSINFO_CANSETTIME		0x10
6679ec7b004SRick Macklem 
6681f60bfd8SRick Macklem /* Flags for Exchange ID */
6691f60bfd8SRick Macklem #define	NFSV4EXCH_SUPPMOVEDREFER	0x00000001
6701f60bfd8SRick Macklem #define	NFSV4EXCH_SUPPMOVEDMIGR	0x00000002
6711f60bfd8SRick Macklem #define	NFSV4EXCH_BINDPRINCSTATEID	0x00000100
6721f60bfd8SRick Macklem #define	NFSV4EXCH_USENONPNFS		0x00010000
6731f60bfd8SRick Macklem #define	NFSV4EXCH_USEPNFSMDS		0x00020000
6741f60bfd8SRick Macklem #define	NFSV4EXCH_USEPNFSDS		0x00040000
6751f60bfd8SRick Macklem #define	NFSV4EXCH_MASKPNFS		0x00070000
6761f60bfd8SRick Macklem #define	NFSV4EXCH_UPDCONFIRMEDRECA	0x40000000
6771f60bfd8SRick Macklem #define	NFSV4EXCH_CONFIRMEDR		0x80000000
6781f60bfd8SRick Macklem 
6791f60bfd8SRick Macklem /* State Protects */
6801f60bfd8SRick Macklem #define	NFSV4EXCH_SP4NONE		0
6811f60bfd8SRick Macklem #define	NFSV4EXCH_SP4MACHCRED		1
6821f60bfd8SRick Macklem #define	NFSV4EXCH_SP4SSV		2
6831f60bfd8SRick Macklem 
6841f60bfd8SRick Macklem /* Flags for Create Session */
6851f60bfd8SRick Macklem #define	NFSV4CRSESS_PERSIST		0x00000001
6861f60bfd8SRick Macklem #define	NFSV4CRSESS_CONNBACKCHAN	0x00000002
6871f60bfd8SRick Macklem #define	NFSV4CRSESS_CONNRDMA		0x00000004
6881f60bfd8SRick Macklem 
6891f60bfd8SRick Macklem /* Flags for Sequence */
6901f60bfd8SRick Macklem #define	NFSV4SEQ_CBPATHDOWN		0x00000001
6911f60bfd8SRick Macklem #define	NFSV4SEQ_CBGSSCONTEXPIRING	0x00000002
6921f60bfd8SRick Macklem #define	NFSV4SEQ_CBGSSCONTEXPIRED	0x00000004
6931f60bfd8SRick Macklem #define	NFSV4SEQ_EXPIREDALLSTATEREVOKED	0x00000008
6941f60bfd8SRick Macklem #define	NFSV4SEQ_EXPIREDSOMESTATEREVOKED 0x00000010
6951f60bfd8SRick Macklem #define	NFSV4SEQ_ADMINSTATEREVOKED	0x00000020
6961f60bfd8SRick Macklem #define	NFSV4SEQ_RECALLABLESTATEREVOKED	0x00000040
6971f60bfd8SRick Macklem #define	NFSV4SEQ_LEASEMOVED		0x00000080
6981f60bfd8SRick Macklem #define	NFSV4SEQ_RESTARTRECLAIMNEEDED	0x00000100
6991f60bfd8SRick Macklem #define	NFSV4SEQ_CBPATHDOWNSESSION	0x00000200
7001f60bfd8SRick Macklem #define	NFSV4SEQ_BACKCHANNELFAULT	0x00000400
7011f60bfd8SRick Macklem #define	NFSV4SEQ_DEVIDCHANGED		0x00000800
7021f60bfd8SRick Macklem #define	NFSV4SEQ_DEVIDDELETED		0x00001000
7031f60bfd8SRick Macklem 
7041f60bfd8SRick Macklem /* Flags for Layout. */
7051f60bfd8SRick Macklem #define	NFSLAYOUTRETURN_FILE		1
7061f60bfd8SRick Macklem #define	NFSLAYOUTRETURN_FSID		2
7071f60bfd8SRick Macklem #define	NFSLAYOUTRETURN_ALL		3
7081f60bfd8SRick Macklem 
7091f60bfd8SRick Macklem #define	NFSLAYOUT_NFSV4_1_FILES		0x1
7101f60bfd8SRick Macklem #define	NFSLAYOUT_OSD2_OBJECTS		0x2
7111f60bfd8SRick Macklem #define	NFSLAYOUT_BLOCK_VOLUME		0x3
71264059dceSRick Macklem #define	NFSLAYOUT_FLEXFILE		0x4
7131f60bfd8SRick Macklem 
7141f60bfd8SRick Macklem #define	NFSLAYOUTIOMODE_READ		1
7151f60bfd8SRick Macklem #define	NFSLAYOUTIOMODE_RW		2
7161f60bfd8SRick Macklem #define	NFSLAYOUTIOMODE_ANY		3
7171f60bfd8SRick Macklem 
7181f60bfd8SRick Macklem /* Flags for Get Device Info. */
7191f60bfd8SRick Macklem #define	NFSDEVICEIDNOTIFY_CHANGEBIT	0x1
7201f60bfd8SRick Macklem #define	NFSDEVICEIDNOTIFY_DELETEBIT	0x2
7211f60bfd8SRick Macklem 
7221f60bfd8SRick Macklem /* Flags for File Layout. */
7231f60bfd8SRick Macklem #define	NFSFLAYUTIL_DENSE		0x1
7241f60bfd8SRick Macklem #define	NFSFLAYUTIL_COMMIT_THRU_MDS	0x2
7258f9259a5SRick Macklem #define	NFSFLAYUTIL_IOADVISE_THRU_MDS	0x4
72690d2dfabSRick Macklem #define	NFSFLAYUTIL_STRIPE_MASK		0xffffffc0
7271f60bfd8SRick Macklem 
72864059dceSRick Macklem /* Flags for Flex File Layout. */
72964059dceSRick Macklem #define	NFSFLEXFLAG_NO_LAYOUTCOMMIT	0x00000001
73064059dceSRick Macklem #define	NFSFLEXFLAG_NOIO_MDS		0x00000002
73164059dceSRick Macklem #define	NFSFLEXFLAG_NO_READIO		0x00000004
73264059dceSRick Macklem #define	NFSFLEXFLAG_WRITE_ONEMIRROR	0x00000008
73364059dceSRick Macklem 
7349442a64eSRick Macklem /* Enum values for Bind Connection to Session. */
7359442a64eSRick Macklem #define	NFSCDFC4_FORE		0x1
7369442a64eSRick Macklem #define	NFSCDFC4_BACK		0x2
7379442a64eSRick Macklem #define	NFSCDFC4_FORE_OR_BOTH	0x3
7389442a64eSRick Macklem #define	NFSCDFC4_BACK_OR_BOTH	0x7
7399442a64eSRick Macklem #define	NFSCDFS4_FORE		0x1
7409442a64eSRick Macklem #define	NFSCDFS4_BACK		0x2
7419442a64eSRick Macklem #define	NFSCDFS4_BOTH		0x3
7429442a64eSRick Macklem 
743947bd247SRick Macklem /* Enum values for Secinfo_no_name. */
744947bd247SRick Macklem #define	NFSSECINFONONAME_CURFH	0
745947bd247SRick Macklem #define	NFSSECINFONONAME_PARENT	1
746947bd247SRick Macklem 
74790d2dfabSRick Macklem #if defined(_KERNEL) || defined(KERNEL)
7489ec7b004SRick Macklem /* Conversion macros */
7499ec7b004SRick Macklem #define	vtonfsv2_mode(t,m) 						\
7509ec7b004SRick Macklem 		txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : 	\
7519ec7b004SRick Macklem 				MAKEIMODE((t), (m)))
7529ec7b004SRick Macklem #define	vtonfsv34_mode(m)	txdr_unsigned((m) & 07777)
7539ec7b004SRick Macklem #define	nfstov_mode(a)		(fxdr_unsigned(u_int16_t, (a))&07777)
7549ec7b004SRick Macklem #define	vtonfsv2_type(a)  (((u_int32_t)(a)) >= 9 ? txdr_unsigned(NFNON) : \
7559ec7b004SRick Macklem 		txdr_unsigned(newnfsv2_type[((u_int32_t)(a))]))
7569ec7b004SRick Macklem #define	vtonfsv34_type(a)  (((u_int32_t)(a)) >= 9 ? txdr_unsigned(NFNON) : \
7579ec7b004SRick Macklem 		txdr_unsigned(nfsv34_type[((u_int32_t)(a))]))
7589ec7b004SRick Macklem #define	nfsv2tov_type(a)	newnv2tov_type[fxdr_unsigned(u_int32_t,(a))&0x7]
7599ec7b004SRick Macklem #define	nfsv34tov_type(a)	nv34tov_type[fxdr_unsigned(u_int32_t,(a))&0x7]
7609ec7b004SRick Macklem #define	vtonfs_dtype(a)	(((u_int32_t)(a)) >= 9 ? IFTODT(VTTOIF(VNON)) : \
7619ec7b004SRick Macklem 			 IFTODT(VTTOIF(a)))
7629ec7b004SRick Macklem 
7639ec7b004SRick Macklem /* File types */
7649ec7b004SRick Macklem typedef enum { NFNON=0, NFREG=1, NFDIR=2, NFBLK=3, NFCHR=4, NFLNK=5,
7659ec7b004SRick Macklem 	NFSOCK=6, NFFIFO=7, NFATTRDIR=8, NFNAMEDATTR=9 } nfstype;
7669ec7b004SRick Macklem 
7679ec7b004SRick Macklem /* Structs for common parts of the rpc's */
7689ec7b004SRick Macklem 
7699ec7b004SRick Macklem struct nfsv2_time {
7709ec7b004SRick Macklem 	u_int32_t nfsv2_sec;
7719ec7b004SRick Macklem 	u_int32_t nfsv2_usec;
7729ec7b004SRick Macklem };
7739ec7b004SRick Macklem typedef struct nfsv2_time	nfstime2;
7749ec7b004SRick Macklem 
7759ec7b004SRick Macklem struct nfsv3_time {
7769ec7b004SRick Macklem 	u_int32_t nfsv3_sec;
7779ec7b004SRick Macklem 	u_int32_t nfsv3_nsec;
7789ec7b004SRick Macklem };
7799ec7b004SRick Macklem typedef struct nfsv3_time	nfstime3;
7809ec7b004SRick Macklem 
7819ec7b004SRick Macklem struct nfsv4_time {
7829ec7b004SRick Macklem 	u_int32_t nfsv4_highsec;
7839ec7b004SRick Macklem 	u_int32_t nfsv4_sec;
7849ec7b004SRick Macklem 	u_int32_t nfsv4_nsec;
7859ec7b004SRick Macklem };
7869ec7b004SRick Macklem typedef struct nfsv4_time	nfstime4;
7879ec7b004SRick Macklem 
7889ec7b004SRick Macklem /*
7899ec7b004SRick Macklem  * Quads are defined as arrays of 2 longs to ensure dense packing for the
7909ec7b004SRick Macklem  * protocol and to facilitate xdr conversion.
7919ec7b004SRick Macklem  */
7929ec7b004SRick Macklem struct nfs_uquad {
7939ec7b004SRick Macklem 	u_int32_t nfsuquad[2];
7949ec7b004SRick Macklem };
7959ec7b004SRick Macklem typedef	struct nfs_uquad	nfsuint64;
7969ec7b004SRick Macklem 
7979ec7b004SRick Macklem /*
7989ec7b004SRick Macklem  * Used to convert between two u_longs and a u_quad_t.
7999ec7b004SRick Macklem  */
8009ec7b004SRick Macklem union nfs_quadconvert {
8019ec7b004SRick Macklem 	u_int32_t lval[2];
8029ec7b004SRick Macklem 	u_quad_t  qval;
8039ec7b004SRick Macklem };
8049ec7b004SRick Macklem typedef union nfs_quadconvert	nfsquad_t;
8059ec7b004SRick Macklem 
8069ec7b004SRick Macklem /*
8079ec7b004SRick Macklem  * NFS Version 3 special file number.
8089ec7b004SRick Macklem  */
8099ec7b004SRick Macklem struct nfsv3_spec {
8109ec7b004SRick Macklem 	u_int32_t specdata1;
8119ec7b004SRick Macklem 	u_int32_t specdata2;
8129ec7b004SRick Macklem };
8139ec7b004SRick Macklem typedef	struct nfsv3_spec	nfsv3spec;
8149ec7b004SRick Macklem 
8159ec7b004SRick Macklem /*
8169ec7b004SRick Macklem  * File attributes and setable attributes. These structures cover both
8179ec7b004SRick Macklem  * NFS version 2 and the version 3 protocol. Note that the union is only
8189ec7b004SRick Macklem  * used so that one pointer can refer to both variants. These structures
8199ec7b004SRick Macklem  * go out on the wire and must be densely packed, so no quad data types
8209ec7b004SRick Macklem  * are used. (all fields are longs or u_longs or structures of same)
8219ec7b004SRick Macklem  * NB: You can't do sizeof(struct nfs_fattr), you must use the
8229ec7b004SRick Macklem  *     NFSX_FATTR(v3) macro.
8239ec7b004SRick Macklem  */
8249ec7b004SRick Macklem struct nfs_fattr {
8259ec7b004SRick Macklem 	u_int32_t fa_type;
8269ec7b004SRick Macklem 	u_int32_t fa_mode;
8279ec7b004SRick Macklem 	u_int32_t fa_nlink;
8289ec7b004SRick Macklem 	u_int32_t fa_uid;
8299ec7b004SRick Macklem 	u_int32_t fa_gid;
8309ec7b004SRick Macklem 	union {
8319ec7b004SRick Macklem 		struct {
8329ec7b004SRick Macklem 			u_int32_t nfsv2fa_size;
8339ec7b004SRick Macklem 			u_int32_t nfsv2fa_blocksize;
8349ec7b004SRick Macklem 			u_int32_t nfsv2fa_rdev;
8359ec7b004SRick Macklem 			u_int32_t nfsv2fa_blocks;
8369ec7b004SRick Macklem 			u_int32_t nfsv2fa_fsid;
8379ec7b004SRick Macklem 			u_int32_t nfsv2fa_fileid;
8389ec7b004SRick Macklem 			nfstime2  nfsv2fa_atime;
8399ec7b004SRick Macklem 			nfstime2  nfsv2fa_mtime;
8409ec7b004SRick Macklem 			nfstime2  nfsv2fa_ctime;
8419ec7b004SRick Macklem 		} fa_nfsv2;
8429ec7b004SRick Macklem 		struct {
8439ec7b004SRick Macklem 			nfsuint64 nfsv3fa_size;
8449ec7b004SRick Macklem 			nfsuint64 nfsv3fa_used;
8459ec7b004SRick Macklem 			nfsv3spec nfsv3fa_rdev;
8469ec7b004SRick Macklem 			nfsuint64 nfsv3fa_fsid;
8479ec7b004SRick Macklem 			nfsuint64 nfsv3fa_fileid;
8489ec7b004SRick Macklem 			nfstime3  nfsv3fa_atime;
8499ec7b004SRick Macklem 			nfstime3  nfsv3fa_mtime;
8509ec7b004SRick Macklem 			nfstime3  nfsv3fa_ctime;
8519ec7b004SRick Macklem 		} fa_nfsv3;
8529ec7b004SRick Macklem 	} fa_un;
8539ec7b004SRick Macklem };
8549ec7b004SRick Macklem 
8559ec7b004SRick Macklem /* and some ugly defines for accessing union components */
8569ec7b004SRick Macklem #define	fa2_size		fa_un.fa_nfsv2.nfsv2fa_size
8579ec7b004SRick Macklem #define	fa2_blocksize		fa_un.fa_nfsv2.nfsv2fa_blocksize
8589ec7b004SRick Macklem #define	fa2_rdev		fa_un.fa_nfsv2.nfsv2fa_rdev
8599ec7b004SRick Macklem #define	fa2_blocks		fa_un.fa_nfsv2.nfsv2fa_blocks
8609ec7b004SRick Macklem #define	fa2_fsid		fa_un.fa_nfsv2.nfsv2fa_fsid
8619ec7b004SRick Macklem #define	fa2_fileid		fa_un.fa_nfsv2.nfsv2fa_fileid
8629ec7b004SRick Macklem #define	fa2_atime		fa_un.fa_nfsv2.nfsv2fa_atime
8639ec7b004SRick Macklem #define	fa2_mtime		fa_un.fa_nfsv2.nfsv2fa_mtime
8649ec7b004SRick Macklem #define	fa2_ctime		fa_un.fa_nfsv2.nfsv2fa_ctime
8659ec7b004SRick Macklem #define	fa3_size		fa_un.fa_nfsv3.nfsv3fa_size
8669ec7b004SRick Macklem #define	fa3_used		fa_un.fa_nfsv3.nfsv3fa_used
8679ec7b004SRick Macklem #define	fa3_rdev		fa_un.fa_nfsv3.nfsv3fa_rdev
8689ec7b004SRick Macklem #define	fa3_fsid		fa_un.fa_nfsv3.nfsv3fa_fsid
8699ec7b004SRick Macklem #define	fa3_fileid		fa_un.fa_nfsv3.nfsv3fa_fileid
8709ec7b004SRick Macklem #define	fa3_atime		fa_un.fa_nfsv3.nfsv3fa_atime
8719ec7b004SRick Macklem #define	fa3_mtime		fa_un.fa_nfsv3.nfsv3fa_mtime
8729ec7b004SRick Macklem #define	fa3_ctime		fa_un.fa_nfsv3.nfsv3fa_ctime
8739ec7b004SRick Macklem 
874a0a073b1SJohn Baldwin #define	NFS_LINK_MAX	UINT32_MAX
875a0a073b1SJohn Baldwin 
8769ec7b004SRick Macklem struct nfsv2_sattr {
8779ec7b004SRick Macklem 	u_int32_t sa_mode;
8789ec7b004SRick Macklem 	u_int32_t sa_uid;
8799ec7b004SRick Macklem 	u_int32_t sa_gid;
8809ec7b004SRick Macklem 	u_int32_t sa_size;
8819ec7b004SRick Macklem 	nfstime2  sa_atime;
8829ec7b004SRick Macklem 	nfstime2  sa_mtime;
8839ec7b004SRick Macklem };
8849ec7b004SRick Macklem 
8859ec7b004SRick Macklem /*
8869ec7b004SRick Macklem  * NFS Version 3 sattr structure for the new node creation case.
8879ec7b004SRick Macklem  */
8889ec7b004SRick Macklem struct nfsv3_sattr {
8899ec7b004SRick Macklem 	u_int32_t sa_modetrue;
8909ec7b004SRick Macklem 	u_int32_t sa_mode;
8919ec7b004SRick Macklem 	u_int32_t sa_uidfalse;
8929ec7b004SRick Macklem 	u_int32_t sa_gidfalse;
8939ec7b004SRick Macklem 	u_int32_t sa_sizefalse;
8949ec7b004SRick Macklem 	u_int32_t sa_atimetype;
8959ec7b004SRick Macklem 	nfstime3  sa_atime;
8969ec7b004SRick Macklem 	u_int32_t sa_mtimetype;
8979ec7b004SRick Macklem 	nfstime3  sa_mtime;
8989ec7b004SRick Macklem };
8998f9259a5SRick Macklem 
9008f9259a5SRick Macklem /*
9018f9259a5SRick Macklem  * IO Advise hint bits for NFSv4.2.
9028f9259a5SRick Macklem  * Since these go on the wire as a bitmap, the NFSATTRBIT macros are
9038f9259a5SRick Macklem  * used to manipulate these bits.
9048f9259a5SRick Macklem  */
9058f9259a5SRick Macklem #define	NFSV4IOHINT_NORMAL		0
9068f9259a5SRick Macklem #define	NFSV4IOHINT_SEQUENTIAL		1
9078f9259a5SRick Macklem #define	NFSV4IOHINT_SEQUENTIALBACK	2
9088f9259a5SRick Macklem #define	NFSV4IOHINT_RANDOM		3
9098f9259a5SRick Macklem #define	NFSV4IOHINT_WILLNEED		4
9108f9259a5SRick Macklem #define	NFSV4IOHINT_WILLNEEDOPTUN	5
9118f9259a5SRick Macklem #define	NFSV4IOHINT_DONTNEED		6
9128f9259a5SRick Macklem #define	NFSV4IOHINT_NOREUSE		7
9138f9259a5SRick Macklem #define	NFSV4IOHINT_READ		8
9148f9259a5SRick Macklem #define	NFSV4IOHINT_WRITE		9
9158f9259a5SRick Macklem #define	NFSV4IOHINT_INITPROXIMITY	10
9168f9259a5SRick Macklem 
91790d2dfabSRick Macklem #endif	/* _KERNEL */
9189ec7b004SRick Macklem 
9199ec7b004SRick Macklem /*
9209ec7b004SRick Macklem  * The attribute bits used for V4.
9219ec7b004SRick Macklem  * NFSATTRBIT_xxx defines the attribute# (and its bit position)
9229ec7b004SRick Macklem  * NFSATTRBM_xxx is a 32bit mask with the correct bit set within the
9239ec7b004SRick Macklem  *	appropriate 32bit word.
9249ec7b004SRick Macklem  * NFSATTRBIT_MAX is one greater than the largest NFSATTRBIT_xxx
9259ec7b004SRick Macklem  */
9269ec7b004SRick Macklem #define	NFSATTRBIT_SUPPORTEDATTRS	0
9279ec7b004SRick Macklem #define	NFSATTRBIT_TYPE			1
9289ec7b004SRick Macklem #define	NFSATTRBIT_FHEXPIRETYPE		2
9299ec7b004SRick Macklem #define	NFSATTRBIT_CHANGE		3
9309ec7b004SRick Macklem #define	NFSATTRBIT_SIZE			4
9319ec7b004SRick Macklem #define	NFSATTRBIT_LINKSUPPORT		5
9329ec7b004SRick Macklem #define	NFSATTRBIT_SYMLINKSUPPORT	6
9339ec7b004SRick Macklem #define	NFSATTRBIT_NAMEDATTR		7
9349ec7b004SRick Macklem #define	NFSATTRBIT_FSID			8
9359ec7b004SRick Macklem #define	NFSATTRBIT_UNIQUEHANDLES	9
9369ec7b004SRick Macklem #define	NFSATTRBIT_LEASETIME		10
9379ec7b004SRick Macklem #define	NFSATTRBIT_RDATTRERROR		11
9389ec7b004SRick Macklem #define	NFSATTRBIT_ACL			12
9399ec7b004SRick Macklem #define	NFSATTRBIT_ACLSUPPORT		13
9409ec7b004SRick Macklem #define	NFSATTRBIT_ARCHIVE		14
9419ec7b004SRick Macklem #define	NFSATTRBIT_CANSETTIME		15
9429ec7b004SRick Macklem #define	NFSATTRBIT_CASEINSENSITIVE	16
9439ec7b004SRick Macklem #define	NFSATTRBIT_CASEPRESERVING	17
9449ec7b004SRick Macklem #define	NFSATTRBIT_CHOWNRESTRICTED	18
9459ec7b004SRick Macklem #define	NFSATTRBIT_FILEHANDLE		19
9469ec7b004SRick Macklem #define	NFSATTRBIT_FILEID		20
9479ec7b004SRick Macklem #define	NFSATTRBIT_FILESAVAIL		21
9489ec7b004SRick Macklem #define	NFSATTRBIT_FILESFREE		22
9499ec7b004SRick Macklem #define	NFSATTRBIT_FILESTOTAL		23
9509ec7b004SRick Macklem #define	NFSATTRBIT_FSLOCATIONS		24
9519ec7b004SRick Macklem #define	NFSATTRBIT_HIDDEN		25
9529ec7b004SRick Macklem #define	NFSATTRBIT_HOMOGENEOUS		26
9539ec7b004SRick Macklem #define	NFSATTRBIT_MAXFILESIZE		27
9549ec7b004SRick Macklem #define	NFSATTRBIT_MAXLINK		28
9559ec7b004SRick Macklem #define	NFSATTRBIT_MAXNAME		29
9569ec7b004SRick Macklem #define	NFSATTRBIT_MAXREAD		30
9579ec7b004SRick Macklem #define	NFSATTRBIT_MAXWRITE		31
9589ec7b004SRick Macklem #define	NFSATTRBIT_MIMETYPE		32
9599ec7b004SRick Macklem #define	NFSATTRBIT_MODE			33
9609ec7b004SRick Macklem #define	NFSATTRBIT_NOTRUNC		34
9619ec7b004SRick Macklem #define	NFSATTRBIT_NUMLINKS		35
9629ec7b004SRick Macklem #define	NFSATTRBIT_OWNER		36
9639ec7b004SRick Macklem #define	NFSATTRBIT_OWNERGROUP		37
9649ec7b004SRick Macklem #define	NFSATTRBIT_QUOTAHARD		38
9659ec7b004SRick Macklem #define	NFSATTRBIT_QUOTASOFT		39
9669ec7b004SRick Macklem #define	NFSATTRBIT_QUOTAUSED		40
9679ec7b004SRick Macklem #define	NFSATTRBIT_RAWDEV		41
9689ec7b004SRick Macklem #define	NFSATTRBIT_SPACEAVAIL		42
9699ec7b004SRick Macklem #define	NFSATTRBIT_SPACEFREE		43
9709ec7b004SRick Macklem #define	NFSATTRBIT_SPACETOTAL		44
9719ec7b004SRick Macklem #define	NFSATTRBIT_SPACEUSED		45
9729ec7b004SRick Macklem #define	NFSATTRBIT_SYSTEM		46
9739ec7b004SRick Macklem #define	NFSATTRBIT_TIMEACCESS		47
9749ec7b004SRick Macklem #define	NFSATTRBIT_TIMEACCESSSET	48
9759ec7b004SRick Macklem #define	NFSATTRBIT_TIMEBACKUP		49
9769ec7b004SRick Macklem #define	NFSATTRBIT_TIMECREATE		50
9779ec7b004SRick Macklem #define	NFSATTRBIT_TIMEDELTA		51
9789ec7b004SRick Macklem #define	NFSATTRBIT_TIMEMETADATA		52
9799ec7b004SRick Macklem #define	NFSATTRBIT_TIMEMODIFY		53
9809ec7b004SRick Macklem #define	NFSATTRBIT_TIMEMODIFYSET	54
9819ec7b004SRick Macklem #define	NFSATTRBIT_MOUNTEDONFILEID	55
982c59e4cc3SRick Macklem #define	NFSATTRBIT_DIRNOTIFDELAY	56
983c59e4cc3SRick Macklem #define	NFSATTRBIT_DIRENTNOTIFDELAY	57
984c59e4cc3SRick Macklem #define	NFSATTRBIT_DACL			58
985c59e4cc3SRick Macklem #define	NFSATTRBIT_SACL			59
986c59e4cc3SRick Macklem #define	NFSATTRBIT_CHANGEPOLICY		60
987c59e4cc3SRick Macklem #define	NFSATTRBIT_FSSTATUS		61
988c59e4cc3SRick Macklem #define	NFSATTRBIT_FSLAYOUTTYPE		62
989c59e4cc3SRick Macklem #define	NFSATTRBIT_LAYOUTHINT		63
990c59e4cc3SRick Macklem #define	NFSATTRBIT_LAYOUTTYPE		64
991c59e4cc3SRick Macklem #define	NFSATTRBIT_LAYOUTBLKSIZE	65
992c59e4cc3SRick Macklem #define	NFSATTRBIT_LAYOUTALIGNMENT	66
993c59e4cc3SRick Macklem #define	NFSATTRBIT_FSLOCATIONSINFO	67
994c59e4cc3SRick Macklem #define	NFSATTRBIT_MDSTHRESHOLD		68
995c59e4cc3SRick Macklem #define	NFSATTRBIT_RETENTIONGET		69
996c59e4cc3SRick Macklem #define	NFSATTRBIT_RETENTIONSET		70
997c59e4cc3SRick Macklem #define	NFSATTRBIT_RETENTEVTGET		71
998c59e4cc3SRick Macklem #define	NFSATTRBIT_RETENTEVTSET		72
999c59e4cc3SRick Macklem #define	NFSATTRBIT_RETENTIONHOLD	73
1000c59e4cc3SRick Macklem #define	NFSATTRBIT_MODESETMASKED	74
1001c59e4cc3SRick Macklem #define	NFSATTRBIT_SUPPATTREXCLCREAT	75
1002c59e4cc3SRick Macklem #define	NFSATTRBIT_FSCHARSETCAP		76
10038f9259a5SRick Macklem #define	NFSATTRBIT_CLONEBLKSIZE		77
10048f9259a5SRick Macklem #define	NFSATTRBIT_SPACEFREED		78
10058f9259a5SRick Macklem #define	NFSATTRBIT_CHANGEATTRTYPE	79
10068f9259a5SRick Macklem #define	NFSATTRBIT_SECLABEL		80
100710d5b434SRick Macklem #define	NFSATTRBIT_MODEUMASK		81
10088f9259a5SRick Macklem #define	NFSATTRBIT_XATTRSUPPORT		82
10099ec7b004SRick Macklem 
10109ec7b004SRick Macklem #define	NFSATTRBM_SUPPORTEDATTRS	0x00000001
10119ec7b004SRick Macklem #define	NFSATTRBM_TYPE			0x00000002
10129ec7b004SRick Macklem #define	NFSATTRBM_FHEXPIRETYPE		0x00000004
10139ec7b004SRick Macklem #define	NFSATTRBM_CHANGE		0x00000008
10149ec7b004SRick Macklem #define	NFSATTRBM_SIZE			0x00000010
10159ec7b004SRick Macklem #define	NFSATTRBM_LINKSUPPORT		0x00000020
10169ec7b004SRick Macklem #define	NFSATTRBM_SYMLINKSUPPORT	0x00000040
10179ec7b004SRick Macklem #define	NFSATTRBM_NAMEDATTR		0x00000080
10189ec7b004SRick Macklem #define	NFSATTRBM_FSID			0x00000100
10199ec7b004SRick Macklem #define	NFSATTRBM_UNIQUEHANDLES		0x00000200
10209ec7b004SRick Macklem #define	NFSATTRBM_LEASETIME		0x00000400
10219ec7b004SRick Macklem #define	NFSATTRBM_RDATTRERROR		0x00000800
10229ec7b004SRick Macklem #define	NFSATTRBM_ACL			0x00001000
10239ec7b004SRick Macklem #define	NFSATTRBM_ACLSUPPORT		0x00002000
10249ec7b004SRick Macklem #define	NFSATTRBM_ARCHIVE		0x00004000
10259ec7b004SRick Macklem #define	NFSATTRBM_CANSETTIME		0x00008000
10269ec7b004SRick Macklem #define	NFSATTRBM_CASEINSENSITIVE	0x00010000
10279ec7b004SRick Macklem #define	NFSATTRBM_CASEPRESERVING	0x00020000
10289ec7b004SRick Macklem #define	NFSATTRBM_CHOWNRESTRICTED	0x00040000
10299ec7b004SRick Macklem #define	NFSATTRBM_FILEHANDLE		0x00080000
10309ec7b004SRick Macklem #define	NFSATTRBM_FILEID		0x00100000
10319ec7b004SRick Macklem #define	NFSATTRBM_FILESAVAIL		0x00200000
10329ec7b004SRick Macklem #define	NFSATTRBM_FILESFREE		0x00400000
10339ec7b004SRick Macklem #define	NFSATTRBM_FILESTOTAL		0x00800000
10349ec7b004SRick Macklem #define	NFSATTRBM_FSLOCATIONS		0x01000000
10359ec7b004SRick Macklem #define	NFSATTRBM_HIDDEN		0x02000000
10369ec7b004SRick Macklem #define	NFSATTRBM_HOMOGENEOUS		0x04000000
10379ec7b004SRick Macklem #define	NFSATTRBM_MAXFILESIZE		0x08000000
10389ec7b004SRick Macklem #define	NFSATTRBM_MAXLINK		0x10000000
10399ec7b004SRick Macklem #define	NFSATTRBM_MAXNAME		0x20000000
10409ec7b004SRick Macklem #define	NFSATTRBM_MAXREAD		0x40000000
10419ec7b004SRick Macklem #define	NFSATTRBM_MAXWRITE		0x80000000
10429ec7b004SRick Macklem #define	NFSATTRBM_MIMETYPE		0x00000001
10439ec7b004SRick Macklem #define	NFSATTRBM_MODE			0x00000002
10449ec7b004SRick Macklem #define	NFSATTRBM_NOTRUNC		0x00000004
10459ec7b004SRick Macklem #define	NFSATTRBM_NUMLINKS		0x00000008
10469ec7b004SRick Macklem #define	NFSATTRBM_OWNER			0x00000010
10479ec7b004SRick Macklem #define	NFSATTRBM_OWNERGROUP		0x00000020
10489ec7b004SRick Macklem #define	NFSATTRBM_QUOTAHARD		0x00000040
10499ec7b004SRick Macklem #define	NFSATTRBM_QUOTASOFT		0x00000080
10509ec7b004SRick Macklem #define	NFSATTRBM_QUOTAUSED		0x00000100
10519ec7b004SRick Macklem #define	NFSATTRBM_RAWDEV		0x00000200
10529ec7b004SRick Macklem #define	NFSATTRBM_SPACEAVAIL		0x00000400
10539ec7b004SRick Macklem #define	NFSATTRBM_SPACEFREE		0x00000800
10549ec7b004SRick Macklem #define	NFSATTRBM_SPACETOTAL		0x00001000
10559ec7b004SRick Macklem #define	NFSATTRBM_SPACEUSED		0x00002000
10569ec7b004SRick Macklem #define	NFSATTRBM_SYSTEM		0x00004000
10579ec7b004SRick Macklem #define	NFSATTRBM_TIMEACCESS		0x00008000
10589ec7b004SRick Macklem #define	NFSATTRBM_TIMEACCESSSET		0x00010000
10599ec7b004SRick Macklem #define	NFSATTRBM_TIMEBACKUP		0x00020000
10609ec7b004SRick Macklem #define	NFSATTRBM_TIMECREATE		0x00040000
10619ec7b004SRick Macklem #define	NFSATTRBM_TIMEDELTA		0x00080000
10629ec7b004SRick Macklem #define	NFSATTRBM_TIMEMETADATA		0x00100000
10639ec7b004SRick Macklem #define	NFSATTRBM_TIMEMODIFY		0x00200000
10649ec7b004SRick Macklem #define	NFSATTRBM_TIMEMODIFYSET		0x00400000
10659ec7b004SRick Macklem #define	NFSATTRBM_MOUNTEDONFILEID	0x00800000
1066c59e4cc3SRick Macklem #define	NFSATTRBM_DIRNOTIFDELAY		0x01000000
1067c59e4cc3SRick Macklem #define	NFSATTRBM_DIRENTNOTIFDELAY	0x02000000
1068c59e4cc3SRick Macklem #define	NFSATTRBM_DACL			0x04000000
1069c59e4cc3SRick Macklem #define	NFSATTRBM_SACL			0x08000000
1070c59e4cc3SRick Macklem #define	NFSATTRBM_CHANGEPOLICY		0x10000000
1071c59e4cc3SRick Macklem #define	NFSATTRBM_FSSTATUS		0x20000000
1072c59e4cc3SRick Macklem #define	NFSATTRBM_FSLAYOUTTYPE		0x40000000
1073c59e4cc3SRick Macklem #define	NFSATTRBM_LAYOUTHINT		0x80000000
1074c59e4cc3SRick Macklem #define	NFSATTRBM_LAYOUTTYPE		0x00000001
1075c59e4cc3SRick Macklem #define	NFSATTRBM_LAYOUTBLKSIZE		0x00000002
1076c59e4cc3SRick Macklem #define	NFSATTRBM_LAYOUTALIGNMENT	0x00000004
1077c59e4cc3SRick Macklem #define	NFSATTRBM_FSLOCATIONSINFO	0x00000008
1078c59e4cc3SRick Macklem #define	NFSATTRBM_MDSTHRESHOLD		0x00000010
1079c59e4cc3SRick Macklem #define	NFSATTRBM_RETENTIONGET		0x00000020
1080c59e4cc3SRick Macklem #define	NFSATTRBM_RETENTIONSET		0x00000040
1081c59e4cc3SRick Macklem #define	NFSATTRBM_RETENTEVTGET		0x00000080
1082c59e4cc3SRick Macklem #define	NFSATTRBM_RETENTEVTSET		0x00000100
1083c59e4cc3SRick Macklem #define	NFSATTRBM_RETENTIONHOLD		0x00000200
1084c59e4cc3SRick Macklem #define	NFSATTRBM_MODESETMASKED		0x00000400
1085c59e4cc3SRick Macklem #define	NFSATTRBM_SUPPATTREXCLCREAT	0x00000800
1086c59e4cc3SRick Macklem #define	NFSATTRBM_FSCHARSETCAP		0x00001000
10878f9259a5SRick Macklem #define	NFSATTRBM_CLONEBLKSIZE		0x00002000
10888f9259a5SRick Macklem #define	NFSATTRBM_SPACEFREED		0x00004000
10898f9259a5SRick Macklem #define	NFSATTRBM_CHANGEATTRTYPE	0x00008000
10908f9259a5SRick Macklem #define	NFSATTRBM_SECLABEL		0x00010000
109110d5b434SRick Macklem #define	NFSATTRBM_MODEUMASK		0x00020000
10928f9259a5SRick Macklem #define	NFSATTRBM_XATTRSUPPORT		0x00040000
10939ec7b004SRick Macklem 
1094c057a378SRick Macklem #define	NFSATTRBIT_MAX			83
10959ec7b004SRick Macklem 
10969ec7b004SRick Macklem /*
10979ec7b004SRick Macklem  * Sets of attributes that are supported, by words in the bitmap.
10989ec7b004SRick Macklem  */
10999ec7b004SRick Macklem /*
11009ec7b004SRick Macklem  * NFSATTRBIT_SUPPORTED - SUPP0 - bits 0<->31
11019ec7b004SRick Macklem  *			  SUPP1 - bits 32<->63
1102c59e4cc3SRick Macklem  *			  SUPP2 - bits 64<->95
11039ec7b004SRick Macklem  */
11049ec7b004SRick Macklem #define	NFSATTRBIT_SUPP0						\
11059ec7b004SRick Macklem  	(NFSATTRBM_SUPPORTEDATTRS |					\
11069ec7b004SRick Macklem  	NFSATTRBM_TYPE |						\
11079ec7b004SRick Macklem  	NFSATTRBM_FHEXPIRETYPE |					\
11089ec7b004SRick Macklem  	NFSATTRBM_CHANGE |						\
11099ec7b004SRick Macklem  	NFSATTRBM_SIZE |						\
11109ec7b004SRick Macklem  	NFSATTRBM_LINKSUPPORT |						\
11119ec7b004SRick Macklem  	NFSATTRBM_SYMLINKSUPPORT |					\
11129ec7b004SRick Macklem  	NFSATTRBM_NAMEDATTR |						\
11139ec7b004SRick Macklem  	NFSATTRBM_FSID |						\
11149ec7b004SRick Macklem  	NFSATTRBM_UNIQUEHANDLES |					\
11159ec7b004SRick Macklem  	NFSATTRBM_LEASETIME |						\
11169ec7b004SRick Macklem  	NFSATTRBM_RDATTRERROR |						\
11179ec7b004SRick Macklem  	NFSATTRBM_ACL |							\
11189ec7b004SRick Macklem  	NFSATTRBM_ACLSUPPORT |						\
11199ec7b004SRick Macklem  	NFSATTRBM_CANSETTIME |						\
11209ec7b004SRick Macklem  	NFSATTRBM_CASEINSENSITIVE |					\
11219ec7b004SRick Macklem  	NFSATTRBM_CASEPRESERVING |					\
11229ec7b004SRick Macklem  	NFSATTRBM_CHOWNRESTRICTED |					\
11239ec7b004SRick Macklem  	NFSATTRBM_FILEHANDLE |						\
11249ec7b004SRick Macklem  	NFSATTRBM_FILEID |						\
11259ec7b004SRick Macklem  	NFSATTRBM_FILESAVAIL |						\
11269ec7b004SRick Macklem  	NFSATTRBM_FILESFREE |						\
11279ec7b004SRick Macklem  	NFSATTRBM_FILESTOTAL |						\
11289ec7b004SRick Macklem 	NFSATTRBM_FSLOCATIONS |						\
11299ec7b004SRick Macklem  	NFSATTRBM_HOMOGENEOUS |						\
11309ec7b004SRick Macklem  	NFSATTRBM_MAXFILESIZE |						\
11319ec7b004SRick Macklem  	NFSATTRBM_MAXLINK |						\
11329ec7b004SRick Macklem  	NFSATTRBM_MAXNAME |						\
11339ec7b004SRick Macklem  	NFSATTRBM_MAXREAD |						\
11349ec7b004SRick Macklem  	NFSATTRBM_MAXWRITE)
11359ec7b004SRick Macklem 
11369ec7b004SRick Macklem /*
11379ec7b004SRick Macklem  * NFSATTRBIT_S1 - subset of SUPP1 - OR of the following bits:
11389ec7b004SRick Macklem  */
11399ec7b004SRick Macklem #define	NFSATTRBIT_S1							\
11409ec7b004SRick Macklem  	(NFSATTRBM_MODE |						\
11419ec7b004SRick Macklem  	NFSATTRBM_NOTRUNC |						\
11429ec7b004SRick Macklem  	NFSATTRBM_NUMLINKS |						\
11439ec7b004SRick Macklem  	NFSATTRBM_OWNER |						\
11449ec7b004SRick Macklem  	NFSATTRBM_OWNERGROUP |						\
11459ec7b004SRick Macklem  	NFSATTRBM_RAWDEV |						\
11469ec7b004SRick Macklem  	NFSATTRBM_SPACEAVAIL |						\
11479ec7b004SRick Macklem  	NFSATTRBM_SPACEFREE |						\
11489ec7b004SRick Macklem  	NFSATTRBM_SPACETOTAL |						\
11499ec7b004SRick Macklem  	NFSATTRBM_SPACEUSED |						\
11509ec7b004SRick Macklem  	NFSATTRBM_TIMEACCESS |						\
1151c07782e1SDoug Rabson  	NFSATTRBM_TIMECREATE |						\
11529ec7b004SRick Macklem  	NFSATTRBM_TIMEDELTA |						\
11539ec7b004SRick Macklem  	NFSATTRBM_TIMEMETADATA |					\
11549ec7b004SRick Macklem  	NFSATTRBM_TIMEMODIFY |						\
1155d8a5961fSMarcelo Araujo  	NFSATTRBM_MOUNTEDONFILEID |					\
1156d8a5961fSMarcelo Araujo 	NFSATTRBM_QUOTAHARD |                        			\
1157d8a5961fSMarcelo Araujo     	NFSATTRBM_QUOTASOFT |                        			\
115890d2dfabSRick Macklem     	NFSATTRBM_QUOTAUSED |						\
115990d2dfabSRick Macklem 	NFSATTRBM_FSLAYOUTTYPE)
1160d8a5961fSMarcelo Araujo 
11619ec7b004SRick Macklem #ifdef QUOTA
11629ec7b004SRick Macklem /*
11639ec7b004SRick Macklem  * If QUOTA OR in NFSATTRBIT_QUOTAHARD, NFSATTRBIT_QUOTASOFT and
11649ec7b004SRick Macklem  * NFSATTRBIT_QUOTAUSED.
11659ec7b004SRick Macklem  */
11669ec7b004SRick Macklem #define	NFSATTRBIT_SUPP1	(NFSATTRBIT_S1 |			\
11679ec7b004SRick Macklem 				NFSATTRBM_QUOTAHARD |			\
11689ec7b004SRick Macklem 				NFSATTRBM_QUOTASOFT |			\
11699ec7b004SRick Macklem 				NFSATTRBM_QUOTAUSED)
11709ec7b004SRick Macklem #else
11719ec7b004SRick Macklem #define	NFSATTRBIT_SUPP1	NFSATTRBIT_S1
11729ec7b004SRick Macklem #endif
11739ec7b004SRick Macklem 
117490d2dfabSRick Macklem #define	NFSATTRBIT_SUPP2						\
117590d2dfabSRick Macklem 	(NFSATTRBM_LAYOUTTYPE |						\
117690d2dfabSRick Macklem 	NFSATTRBM_LAYOUTBLKSIZE |					\
117790d2dfabSRick Macklem 	NFSATTRBM_LAYOUTALIGNMENT |					\
1178394dae30SRick Macklem 	NFSATTRBM_SUPPATTREXCLCREAT |					\
1179*709c1891SRick Macklem 	NFSATTRBM_CHANGEATTRTYPE |					\
1180394dae30SRick Macklem 	NFSATTRBM_XATTRSUPPORT)
1181c59e4cc3SRick Macklem 
11829ec7b004SRick Macklem /*
1183ea5776ecSRick Macklem  * These are the set only attributes.
11849ec7b004SRick Macklem  */
1185ea5776ecSRick Macklem #define	NFSATTRBIT_SUPPSETONLY1	 (NFSATTRBM_TIMEACCESSSET |		\
11869ec7b004SRick Macklem 				 NFSATTRBM_TIMEMODIFYSET)
11872477e88bSRick Macklem #define	NFSATTRBIT_SUPPSETONLY2	(NFSATTRBM_MODESETMASKED |		\
11882477e88bSRick Macklem 				 NFSATTRBM_MODEUMASK)
11899ec7b004SRick Macklem 
11909ec7b004SRick Macklem /*
11919ec7b004SRick Macklem  * NFSATTRBIT_SETABLE - SETABLE0 - bits 0<->31
11929ec7b004SRick Macklem  *			SETABLE1 - bits 32<->63
1193c59e4cc3SRick Macklem  *			SETABLE2 - bits 64<->95
11949ec7b004SRick Macklem  */
11959ec7b004SRick Macklem #define	NFSATTRBIT_SETABLE0						\
11969ec7b004SRick Macklem 	(NFSATTRBM_SIZE |						\
11979ec7b004SRick Macklem 	NFSATTRBM_ACL)
11989ec7b004SRick Macklem #define	NFSATTRBIT_SETABLE1						\
11999ec7b004SRick Macklem  	(NFSATTRBM_MODE |						\
12009ec7b004SRick Macklem  	NFSATTRBM_OWNER |						\
12019ec7b004SRick Macklem  	NFSATTRBM_OWNERGROUP |						\
1202c07782e1SDoug Rabson  	NFSATTRBM_TIMECREATE |						\
12039ec7b004SRick Macklem  	NFSATTRBM_TIMEACCESSSET |					\
12049ec7b004SRick Macklem  	NFSATTRBM_TIMEMODIFYSET)
1205b4372164SRick Macklem #define	NFSATTRBIT_SETABLE2						\
12062477e88bSRick Macklem 	(NFSATTRBM_MODESETMASKED |					\
12072477e88bSRick Macklem 	NFSATTRBM_MODEUMASK)
12089ec7b004SRick Macklem 
12099ec7b004SRick Macklem /*
1210ea5776ecSRick Macklem  * NFSATTRBIT_NFSV41 - Attributes only supported by NFSv4.1.
1211ea5776ecSRick Macklem  */
1212ea5776ecSRick Macklem #define	NFSATTRBIT_NFSV41_1						\
1213ea5776ecSRick Macklem 	(NFSATTRBM_FSLAYOUTTYPE)
1214ea5776ecSRick Macklem #define	NFSATTRBIT_NFSV41_2						\
1215ea5776ecSRick Macklem 	(NFSATTRBM_LAYOUTTYPE |						\
1216ea5776ecSRick Macklem 	NFSATTRBM_LAYOUTBLKSIZE |					\
1217ea5776ecSRick Macklem 	NFSATTRBM_LAYOUTALIGNMENT |					\
1218ea5776ecSRick Macklem 	NFSATTRBM_MODESETMASKED |					\
1219ea5776ecSRick Macklem 	NFSATTRBM_SUPPATTREXCLCREAT)
1220ea5776ecSRick Macklem 
1221ea5776ecSRick Macklem /*
12228f9259a5SRick Macklem  * NFSATTRBIT_NFSV42 - Attributes only supported by NFSv4.2.
12238f9259a5SRick Macklem  */
12242477e88bSRick Macklem #define	NFSATTRBIT_NFSV42_2						\
1225*709c1891SRick Macklem 	(NFSATTRBM_CHANGEATTRTYPE |					\
1226*709c1891SRick Macklem 	NFSATTRBM_XATTRSUPPORT |					\
12272477e88bSRick Macklem 	NFSATTRBM_MODEUMASK)
12288f9259a5SRick Macklem 
12298f9259a5SRick Macklem /*
12309ec7b004SRick Macklem  * Set of attributes that the getattr vnode op needs.
12319ec7b004SRick Macklem  * OR of the following bits.
12329ec7b004SRick Macklem  * NFSATTRBIT_GETATTR0 - bits 0<->31
12339ec7b004SRick Macklem  */
12349ec7b004SRick Macklem #define	NFSATTRBIT_GETATTR0						\
12359ec7b004SRick Macklem  	(NFSATTRBM_SUPPORTEDATTRS |					\
12369ec7b004SRick Macklem  	NFSATTRBM_TYPE |						\
12379ec7b004SRick Macklem  	NFSATTRBM_CHANGE |						\
12389ec7b004SRick Macklem  	NFSATTRBM_SIZE |						\
12399ec7b004SRick Macklem  	NFSATTRBM_FSID |						\
12409ec7b004SRick Macklem  	NFSATTRBM_FILEID |						\
12419ec7b004SRick Macklem  	NFSATTRBM_MAXREAD)
12429ec7b004SRick Macklem 
12439ec7b004SRick Macklem /*
12449ec7b004SRick Macklem  * NFSATTRBIT_GETATTR1 - bits 32<->63
12459ec7b004SRick Macklem  */
12469ec7b004SRick Macklem #define	NFSATTRBIT_GETATTR1						\
12479ec7b004SRick Macklem  	(NFSATTRBM_MODE |						\
12489ec7b004SRick Macklem  	NFSATTRBM_NUMLINKS |						\
12499ec7b004SRick Macklem  	NFSATTRBM_OWNER |						\
12509ec7b004SRick Macklem  	NFSATTRBM_OWNERGROUP |						\
12519ec7b004SRick Macklem  	NFSATTRBM_RAWDEV |						\
12529ec7b004SRick Macklem  	NFSATTRBM_SPACEUSED |						\
12539ec7b004SRick Macklem  	NFSATTRBM_TIMEACCESS |						\
1254dd02d9d6SRick Macklem 	NFSATTRBM_TIMECREATE |						\
12559ec7b004SRick Macklem  	NFSATTRBM_TIMEMETADATA |					\
12569ec7b004SRick Macklem  	NFSATTRBM_TIMEMODIFY)
12579ec7b004SRick Macklem 
12589ec7b004SRick Macklem /*
1259c59e4cc3SRick Macklem  * NFSATTRBIT_GETATTR2 - bits 64<->95
1260c59e4cc3SRick Macklem  */
1261c59e4cc3SRick Macklem #define	NFSATTRBIT_GETATTR2		0
1262c59e4cc3SRick Macklem 
1263c59e4cc3SRick Macklem /*
12649ec7b004SRick Macklem  * Subset of the above that the Write RPC gets.
12659ec7b004SRick Macklem  * OR of the following bits.
12669ec7b004SRick Macklem  * NFSATTRBIT_WRITEGETATTR0 - bits 0<->31
12679ec7b004SRick Macklem  */
12689ec7b004SRick Macklem #define	NFSATTRBIT_WRITEGETATTR0					\
12694875024bSRick Macklem  	(NFSATTRBM_SUPPORTEDATTRS |					\
12704875024bSRick Macklem  	NFSATTRBM_TYPE |						\
12714875024bSRick Macklem  	NFSATTRBM_CHANGE |						\
12729ec7b004SRick Macklem  	NFSATTRBM_SIZE |						\
12734875024bSRick Macklem  	NFSATTRBM_FSID |						\
12744875024bSRick Macklem  	NFSATTRBM_FILEID |						\
12754875024bSRick Macklem  	NFSATTRBM_MAXREAD)
12769ec7b004SRick Macklem 
12779ec7b004SRick Macklem /*
12789ec7b004SRick Macklem  * NFSATTRBIT_WRITEGETATTR1 - bits 32<->63
12799ec7b004SRick Macklem  */
12809ec7b004SRick Macklem #define	NFSATTRBIT_WRITEGETATTR1					\
12814875024bSRick Macklem  	(NFSATTRBM_MODE |						\
12824875024bSRick Macklem  	NFSATTRBM_NUMLINKS |						\
12834875024bSRick Macklem  	NFSATTRBM_RAWDEV |						\
12844875024bSRick Macklem  	NFSATTRBM_SPACEUSED |						\
12854875024bSRick Macklem  	NFSATTRBM_TIMEACCESS |						\
1286dd02d9d6SRick Macklem 	NFSATTRBM_TIMECREATE |						\
12874875024bSRick Macklem  	NFSATTRBM_TIMEMETADATA |					\
12889ec7b004SRick Macklem  	NFSATTRBM_TIMEMODIFY)
12899ec7b004SRick Macklem 
12909ec7b004SRick Macklem /*
1291c59e4cc3SRick Macklem  * NFSATTRBIT_WRITEGETATTR2 - bits 64<->95
1292c59e4cc3SRick Macklem  */
1293c59e4cc3SRick Macklem #define	NFSATTRBIT_WRITEGETATTR2	0
1294c59e4cc3SRick Macklem 
1295c59e4cc3SRick Macklem /*
12969ec7b004SRick Macklem  * Set of attributes that the wccattr operation op needs.
12979ec7b004SRick Macklem  * OR of the following bits.
12989ec7b004SRick Macklem  * NFSATTRBIT_WCCATTR0 - bits 0<->31
12999ec7b004SRick Macklem  */
13009ec7b004SRick Macklem #define	NFSATTRBIT_WCCATTR0	0
13019ec7b004SRick Macklem 
13029ec7b004SRick Macklem /*
13039ec7b004SRick Macklem  * NFSATTRBIT_WCCATTR1 - bits 32<->63
13049ec7b004SRick Macklem  */
13059ec7b004SRick Macklem #define	NFSATTRBIT_WCCATTR1						\
13069ec7b004SRick Macklem  	(NFSATTRBM_TIMEMODIFY)
13079ec7b004SRick Macklem 
13089ec7b004SRick Macklem /*
1309c59e4cc3SRick Macklem  * NFSATTRBIT_WCCATTR2 - bits 64<->95
1310c59e4cc3SRick Macklem  */
1311c59e4cc3SRick Macklem #define	NFSATTRBIT_WCCATTR2		0
1312c59e4cc3SRick Macklem 
1313c59e4cc3SRick Macklem /*
13149ec7b004SRick Macklem  * NFSATTRBIT_CBGETATTR0 - bits 0<->31
13159ec7b004SRick Macklem  */
13169ec7b004SRick Macklem #define	NFSATTRBIT_CBGETATTR0	(NFSATTRBM_CHANGE | NFSATTRBM_SIZE)
13179ec7b004SRick Macklem 
13189ec7b004SRick Macklem /*
13199ec7b004SRick Macklem  * NFSATTRBIT_CBGETATTR1 - bits 32<->63
13209ec7b004SRick Macklem  */
13219ec7b004SRick Macklem #define	NFSATTRBIT_CBGETATTR1		0x0
13229ec7b004SRick Macklem 
13239ec7b004SRick Macklem /*
1324c59e4cc3SRick Macklem  * NFSATTRBIT_CBGETATTR2 - bits 64<->95
1325c59e4cc3SRick Macklem  */
1326c59e4cc3SRick Macklem #define	NFSATTRBIT_CBGETATTR2		0x0
1327c59e4cc3SRick Macklem 
1328c59e4cc3SRick Macklem /*
13299ec7b004SRick Macklem  * Sets of attributes that require a VFS_STATFS() call to get the
13309ec7b004SRick Macklem  * values of.
13319ec7b004SRick Macklem  * NFSATTRBIT_STATFS0 - bits 0<->31
13329ec7b004SRick Macklem  */
13339ec7b004SRick Macklem #define	NFSATTRBIT_STATFS0						\
13349ec7b004SRick Macklem 	(NFSATTRBM_LINKSUPPORT |					\
13359ec7b004SRick Macklem 	NFSATTRBM_SYMLINKSUPPORT |					\
13369ec7b004SRick Macklem 	NFSATTRBM_CANSETTIME |						\
13379ec7b004SRick Macklem  	NFSATTRBM_FILESAVAIL |						\
13389ec7b004SRick Macklem  	NFSATTRBM_FILESFREE |						\
13399ec7b004SRick Macklem  	NFSATTRBM_FILESTOTAL |						\
13409ec7b004SRick Macklem  	NFSATTRBM_HOMOGENEOUS |						\
13419ec7b004SRick Macklem  	NFSATTRBM_MAXFILESIZE |						\
13429ec7b004SRick Macklem 	NFSATTRBM_MAXNAME |						\
13439ec7b004SRick Macklem 	NFSATTRBM_MAXREAD |						\
13449ec7b004SRick Macklem 	NFSATTRBM_MAXWRITE)
13459ec7b004SRick Macklem 
13469ec7b004SRick Macklem /*
13479ec7b004SRick Macklem  * NFSATTRBIT_STATFS1 - bits 32<->63
13489ec7b004SRick Macklem  */
13499ec7b004SRick Macklem #define	NFSATTRBIT_STATFS1						\
13509ec7b004SRick Macklem  	(NFSATTRBM_QUOTAHARD |						\
13519ec7b004SRick Macklem  	NFSATTRBM_QUOTASOFT |						\
13529ec7b004SRick Macklem  	NFSATTRBM_QUOTAUSED |						\
13539ec7b004SRick Macklem  	NFSATTRBM_SPACEAVAIL |						\
13549ec7b004SRick Macklem  	NFSATTRBM_SPACEFREE |						\
13559ec7b004SRick Macklem  	NFSATTRBM_SPACETOTAL |						\
13569ec7b004SRick Macklem  	NFSATTRBM_SPACEUSED |						\
13579ec7b004SRick Macklem 	NFSATTRBM_TIMEDELTA)
13589ec7b004SRick Macklem 
13599ec7b004SRick Macklem /*
1360c59e4cc3SRick Macklem  * NFSATTRBIT_STATFS2 - bits 64<->95
1361c59e4cc3SRick Macklem  */
1362c59e4cc3SRick Macklem #define	NFSATTRBIT_STATFS2		0
1363c59e4cc3SRick Macklem 
1364c59e4cc3SRick Macklem /*
13659ec7b004SRick Macklem  * These are the bits that are needed by the nfs_statfs() call.
13669ec7b004SRick Macklem  * (The regular getattr bits are or'd in so the vnode gets the correct
13679ec7b004SRick Macklem  *  type, etc.)
13689ec7b004SRick Macklem  * NFSGETATTRBIT_STATFS0 - bits 0<->31
13699ec7b004SRick Macklem  */
13709ec7b004SRick Macklem #define	NFSGETATTRBIT_STATFS0	(NFSATTRBIT_GETATTR0 |			\
13719ec7b004SRick Macklem 				NFSATTRBM_LINKSUPPORT |			\
13729ec7b004SRick Macklem 				NFSATTRBM_SYMLINKSUPPORT |		\
13739ec7b004SRick Macklem 				NFSATTRBM_CANSETTIME |			\
13749ec7b004SRick Macklem 				NFSATTRBM_FILESFREE |			\
13759ec7b004SRick Macklem 				NFSATTRBM_FILESTOTAL |			\
13769ec7b004SRick Macklem 				NFSATTRBM_HOMOGENEOUS |			\
13779ec7b004SRick Macklem 				NFSATTRBM_MAXFILESIZE |			\
13789ec7b004SRick Macklem 				NFSATTRBM_MAXNAME |			\
13799ec7b004SRick Macklem 				NFSATTRBM_MAXREAD |			\
13809ec7b004SRick Macklem 				NFSATTRBM_MAXWRITE)
13819ec7b004SRick Macklem 
13829ec7b004SRick Macklem /*
13839ec7b004SRick Macklem  * NFSGETATTRBIT_STATFS1 - bits 32<->63
13849ec7b004SRick Macklem  */
13859ec7b004SRick Macklem #define	NFSGETATTRBIT_STATFS1	(NFSATTRBIT_GETATTR1 |			\
13869ec7b004SRick Macklem 				NFSATTRBM_SPACEAVAIL |			\
13879ec7b004SRick Macklem 				NFSATTRBM_SPACEFREE |			\
13889ec7b004SRick Macklem 				NFSATTRBM_SPACETOTAL |			\
13899ec7b004SRick Macklem 				NFSATTRBM_TIMEDELTA)
13909ec7b004SRick Macklem 
13919ec7b004SRick Macklem /*
1392c59e4cc3SRick Macklem  * NFSGETATTRBIT_STATFS2 - bits 64<->95
1393c59e4cc3SRick Macklem  */
1394c59e4cc3SRick Macklem #define	NFSGETATTRBIT_STATFS2		0
1395c59e4cc3SRick Macklem 
1396c59e4cc3SRick Macklem /*
13979ec7b004SRick Macklem  * Set of attributes for the equivalent of an nfsv3 pathconf rpc.
13989ec7b004SRick Macklem  * NFSGETATTRBIT_PATHCONF0 - bits 0<->31
13999ec7b004SRick Macklem  */
14009ec7b004SRick Macklem #define	NFSGETATTRBIT_PATHCONF0	(NFSATTRBIT_GETATTR0 |			\
14019ec7b004SRick Macklem 			 	NFSATTRBM_CASEINSENSITIVE |		\
14029ec7b004SRick Macklem 			 	NFSATTRBM_CASEPRESERVING |		\
14039ec7b004SRick Macklem 			 	NFSATTRBM_CHOWNRESTRICTED |		\
14049ec7b004SRick Macklem 			 	NFSATTRBM_MAXLINK |			\
14059ec7b004SRick Macklem 			 	NFSATTRBM_MAXNAME)
14069ec7b004SRick Macklem 
14079ec7b004SRick Macklem /*
14089ec7b004SRick Macklem  * NFSGETATTRBIT_PATHCONF1 - bits 32<->63
14099ec7b004SRick Macklem  */
14109ec7b004SRick Macklem #define	NFSGETATTRBIT_PATHCONF1	(NFSATTRBIT_GETATTR1 |			\
14119ec7b004SRick Macklem 				NFSATTRBM_NOTRUNC)
14129ec7b004SRick Macklem 
14139ec7b004SRick Macklem /*
1414c59e4cc3SRick Macklem  * NFSGETATTRBIT_PATHCONF2 - bits 64<->95
1415c59e4cc3SRick Macklem  */
1416c59e4cc3SRick Macklem #define	NFSGETATTRBIT_PATHCONF2		0
1417c59e4cc3SRick Macklem 
1418c59e4cc3SRick Macklem /*
14199ec7b004SRick Macklem  * Sets of attributes required by readdir and readdirplus.
14209ec7b004SRick Macklem  * NFSATTRBIT_READDIRPLUS0	(NFSATTRBIT_GETATTR0 | NFSATTRBIT_FILEHANDLE |
14219ec7b004SRick Macklem  *				 NFSATTRBIT_RDATTRERROR)
14229ec7b004SRick Macklem  */
14239ec7b004SRick Macklem #define	NFSATTRBIT_READDIRPLUS0	(NFSATTRBIT_GETATTR0 | NFSATTRBM_FILEHANDLE | \
14249ec7b004SRick Macklem 				NFSATTRBM_RDATTRERROR)
14259ec7b004SRick Macklem #define	NFSATTRBIT_READDIRPLUS1	NFSATTRBIT_GETATTR1
1426c59e4cc3SRick Macklem #define	NFSATTRBIT_READDIRPLUS2		0
14279ec7b004SRick Macklem 
14289ec7b004SRick Macklem /*
14299ec7b004SRick Macklem  * Set of attributes supported by Referral vnodes.
14309ec7b004SRick Macklem  */
14319ec7b004SRick Macklem #define	NFSATTRBIT_REFERRAL0	(NFSATTRBM_TYPE | NFSATTRBM_FSID |	\
14329ec7b004SRick Macklem 	NFSATTRBM_RDATTRERROR | NFSATTRBM_FSLOCATIONS)
14339ec7b004SRick Macklem #define	NFSATTRBIT_REFERRAL1	NFSATTRBM_MOUNTEDONFILEID
1434c59e4cc3SRick Macklem #define	NFSATTRBIT_REFERRAL2		0
14359ec7b004SRick Macklem 
1436f4179ad4SRick Macklem /* Bits for the operations bitmaps. */
1437f4179ad4SRick Macklem #define	NFSV4OPBM_ACCESS		0x00000008
1438f4179ad4SRick Macklem #define	NFSV4OPBM_CLOSE			0x00000010
1439f4179ad4SRick Macklem #define	NFSV4OPBM_COMMIT		0x00000020
1440f4179ad4SRick Macklem #define	NFSV4OPBM_CREATE		0x00000040
1441f4179ad4SRick Macklem #define	NFSV4OPBM_DELEGPURGE		0x00000080
1442f4179ad4SRick Macklem #define	NFSV4OPBM_DELEGRETURN		0x00000100
1443f4179ad4SRick Macklem #define	NFSV4OPBM_GETATTR		0x00000200
1444f4179ad4SRick Macklem #define	NFSV4OPBM_GETFH			0x00000400
1445f4179ad4SRick Macklem #define	NFSV4OPBM_LINK			0x00000800
1446f4179ad4SRick Macklem #define	NFSV4OPBM_LOCK			0x00001000
1447f4179ad4SRick Macklem #define	NFSV4OPBM_LOCKT			0x00002000
1448f4179ad4SRick Macklem #define	NFSV4OPBM_LOCKU			0x00004000
1449f4179ad4SRick Macklem #define	NFSV4OPBM_LOOKUP		0x00008000
1450f4179ad4SRick Macklem #define	NFSV4OPBM_LOOKUPP		0x00010000
1451f4179ad4SRick Macklem #define	NFSV4OPBM_NVERIFY		0x00020000
1452f4179ad4SRick Macklem #define	NFSV4OPBM_OPEN			0x00040000
1453f4179ad4SRick Macklem #define	NFSV4OPBM_OPENATTR		0x00080000
1454f4179ad4SRick Macklem #define	NFSV4OPBM_OPENCONFIRM		0x00100000
1455f4179ad4SRick Macklem #define	NFSV4OPBM_OPENDOWNGRADE		0x00200000
1456f4179ad4SRick Macklem #define	NFSV4OPBM_PUTFH			0x00400000
1457f4179ad4SRick Macklem #define	NFSV4OPBM_PUTPUBFH		0x00800000
1458f4179ad4SRick Macklem #define	NFSV4OPBM_PUTROOTFH		0x01000000
1459f4179ad4SRick Macklem #define	NFSV4OPBM_READ			0x02000000
1460f4179ad4SRick Macklem #define	NFSV4OPBM_READDIR		0x04000000
1461f4179ad4SRick Macklem #define	NFSV4OPBM_READLINK		0x08000000
1462f4179ad4SRick Macklem #define	NFSV4OPBM_REMOVE		0x10000000
1463f4179ad4SRick Macklem #define	NFSV4OPBM_RENAME		0x20000000
1464f4179ad4SRick Macklem #define	NFSV4OPBM_RENEW			0x40000000
1465f4179ad4SRick Macklem #define	NFSV4OPBM_RESTOREFH		0x80000000
1466f4179ad4SRick Macklem #define	NFSV4OPBM_SAVEFH		0x00000001
1467f4179ad4SRick Macklem #define	NFSV4OPBM_SECINFO		0x00000002
1468f4179ad4SRick Macklem #define	NFSV4OPBM_SETATTR		0x00000004
1469f4179ad4SRick Macklem #define	NFSV4OPBM_SETCLIENTID		0x00000008
1470f4179ad4SRick Macklem #define	NFSV4OPBM_SETCLIENTIDCFRM	0x00000010
1471f4179ad4SRick Macklem #define	NFSV4OPBM_VERIFY		0x00000020
1472f4179ad4SRick Macklem #define	NFSV4OPBM_WRITE			0x00000040
1473f4179ad4SRick Macklem #define	NFSV4OPBM_RELEASELCKOWN		0x00000080
1474f4179ad4SRick Macklem #define	NFSV4OPBM_BACKCHANNELCTL	0x00000100
1475f4179ad4SRick Macklem #define	NFSV4OPBM_BINDCONNTOSESS	0x00000200
1476f4179ad4SRick Macklem #define	NFSV4OPBM_EXCHANGEID		0x00000400
1477f4179ad4SRick Macklem #define	NFSV4OPBM_CREATESESSION		0x00000800
1478f4179ad4SRick Macklem #define	NFSV4OPBM_DESTROYSESSION	0x00001000
1479f4179ad4SRick Macklem #define	NFSV4OPBM_FREESTATEID		0x00002000
1480f4179ad4SRick Macklem #define	NFSV4OPBM_GETDIRDELEG		0x00004000
1481f4179ad4SRick Macklem #define	NFSV4OPBM_GETDEVINFO		0x00008000
1482f4179ad4SRick Macklem #define	NFSV4OPBM_GETDEVLIST		0x00010000
1483f4179ad4SRick Macklem #define	NFSV4OPBM_LAYOUTCOMMIT		0x00020000
1484f4179ad4SRick Macklem #define	NFSV4OPBM_LAYOUTGET		0x00040000
1485f4179ad4SRick Macklem #define	NFSV4OPBM_LAYOUTRETURN		0x00080000
1486f4179ad4SRick Macklem #define	NFSV4OPBM_SECINFONONAME		0x00100000
1487f4179ad4SRick Macklem #define	NFSV4OPBM_SEQUENCE		0x00200000
1488f4179ad4SRick Macklem #define	NFSV4OPBM_SETSSV		0x00400000
1489f4179ad4SRick Macklem #define	NFSV4OPBM_TESTSTATEID		0x00800000
1490f4179ad4SRick Macklem #define	NFSV4OPBM_WANTDELEG		0x01000000
1491f4179ad4SRick Macklem #define	NFSV4OPBM_DESTROYCLIENTID	0x02000000
1492f4179ad4SRick Macklem #define	NFSV4OPBM_RECLAIMCOMPL		0x04000000
1493f4179ad4SRick Macklem #define	NFSV4OPBM_ALLOCATE		0x08000000
1494f4179ad4SRick Macklem #define	NFSV4OPBM_COPY			0x10000000
1495f4179ad4SRick Macklem #define	NFSV4OPBM_COPYNOTIFY		0x20000000
1496f4179ad4SRick Macklem #define	NFSV4OPBM_DEALLOCATE		0x40000000
1497f4179ad4SRick Macklem #define	NFSV4OPBM_IOADVISE		0x80000000
1498f4179ad4SRick Macklem #define	NFSV4OPBM_LAYOUTERROR		0x00000001
1499f4179ad4SRick Macklem #define	NFSV4OPBM_LAYOUTSTATS		0x00000002
1500f4179ad4SRick Macklem #define	NFSV4OPBM_OFFLOADCANCEL		0x00000004
1501f4179ad4SRick Macklem #define	NFSV4OPBM_OFFLOADSTATUS		0x00000008
1502f4179ad4SRick Macklem #define	NFSV4OPBM_READPLUS		0x00000010
1503f4179ad4SRick Macklem #define	NFSV4OPBM_SEEK			0x00000020
1504f4179ad4SRick Macklem #define	NFSV4OPBM_WRITESAME		0x00000040
1505f4179ad4SRick Macklem #define	NFSV4OPBM_CLONE			0x00000080
1506f4179ad4SRick Macklem #define	NFSV4OPBM_GETXATTR		0x00000100
1507f4179ad4SRick Macklem #define	NFSV4OPBM_SETXATTR		0x00000200
1508f4179ad4SRick Macklem #define	NFSV4OPBM_LISTXATTRS		0x00000400
1509f4179ad4SRick Macklem #define	NFSV4OPBM_REMOVEXATTR		0x00000800
1510f4179ad4SRick Macklem 
1511f4179ad4SRick Macklem /*
1512f4179ad4SRick Macklem  * The set of must and allow operations for SP4_MACH_CRED.  These are
1513f4179ad4SRick Macklem  * the operations requested by the Linux NFSv4.1/4.2 client.
1514f4179ad4SRick Macklem  * The must list is also the same ones listed in the RFC.
1515f4179ad4SRick Macklem  */
1516f4179ad4SRick Macklem #define	NFSOPBIT_MUST0	NFSV4OP_DELEGPURGE
1517f4179ad4SRick Macklem 
1518f4179ad4SRick Macklem #define	NFSOPBIT_MUST1							\
1519f4179ad4SRick Macklem 	(NFSV4OPBM_BINDCONNTOSESS |					\
1520f4179ad4SRick Macklem 	NFSV4OPBM_EXCHANGEID |						\
1521f4179ad4SRick Macklem 	NFSV4OPBM_CREATESESSION |					\
1522f4179ad4SRick Macklem 	NFSV4OPBM_DESTROYSESSION |					\
1523f4179ad4SRick Macklem 	NFSV4OPBM_DESTROYCLIENTID)
1524f4179ad4SRick Macklem 
1525f4179ad4SRick Macklem #define	NFSOPBIT_MUST2		0x0
1526f4179ad4SRick Macklem 
1527f4179ad4SRick Macklem #define	NFSOPBIT_CLRNOTMUST(b) do {					\
1528f4179ad4SRick Macklem 	(b)->bits[0] &= NFSOPBIT_MUST0;					\
1529f4179ad4SRick Macklem 	(b)->bits[1] &= NFSOPBIT_MUST1;					\
1530f4179ad4SRick Macklem 	(b)->bits[2] &= NFSOPBIT_MUST2;					\
1531f4179ad4SRick Macklem     } while (0)
1532f4179ad4SRick Macklem 
1533f4179ad4SRick Macklem #define	NFSOPBIT_ALLOWED0						\
1534f4179ad4SRick Macklem 	(NFSV4OPBM_CLOSE |						\
1535f4179ad4SRick Macklem 	NFSV4OPBM_COMMIT |						\
1536f4179ad4SRick Macklem 	NFSV4OPBM_DELEGRETURN |						\
1537f4179ad4SRick Macklem 	NFSV4OPBM_LOCKU |						\
1538f4179ad4SRick Macklem 	NFSV4OPBM_OPENDOWNGRADE)
1539f4179ad4SRick Macklem 
1540f4179ad4SRick Macklem #define	NFSOPBIT_ALLOWED1						\
1541f4179ad4SRick Macklem 	(NFSV4OPBM_SECINFO |						\
1542f4179ad4SRick Macklem 	NFSV4OPBM_WRITE |						\
1543f4179ad4SRick Macklem 	NFSV4OPBM_FREESTATEID |						\
1544f4179ad4SRick Macklem 	NFSV4OPBM_LAYOUTRETURN |					\
1545f4179ad4SRick Macklem 	NFSV4OPBM_SECINFONONAME |					\
1546f4179ad4SRick Macklem 	NFSV4OPBM_TESTSTATEID)
1547f4179ad4SRick Macklem 
1548f4179ad4SRick Macklem #define	NFSOPBIT_ALLOWED2	0x0
1549f4179ad4SRick Macklem 
1550f4179ad4SRick Macklem #define	NFSOPBIT_CLRNOTALLOWED(b) do {					\
1551f4179ad4SRick Macklem 	(b)->bits[0] &= NFSOPBIT_ALLOWED0;				\
1552f4179ad4SRick Macklem 	(b)->bits[1] &= NFSOPBIT_ALLOWED1;				\
1553f4179ad4SRick Macklem 	(b)->bits[2] &= NFSOPBIT_ALLOWED2;				\
1554f4179ad4SRick Macklem     } while (0)
1555f4179ad4SRick Macklem 
15569ec7b004SRick Macklem /*
15579ec7b004SRick Macklem  * Structure for data handled by the statfs rpc. Since some fields are
15589ec7b004SRick Macklem  * u_int64_t, this cannot be used for copying data on/off the wire, due
15599ec7b004SRick Macklem  * to alignment concerns.
15609ec7b004SRick Macklem  */
15619ec7b004SRick Macklem struct nfsstatfs {
15629ec7b004SRick Macklem 	union {
15639ec7b004SRick Macklem 		struct {
15649ec7b004SRick Macklem 			u_int32_t nfsv2sf_tsize;
15659ec7b004SRick Macklem 			u_int32_t nfsv2sf_bsize;
15669ec7b004SRick Macklem 			u_int32_t nfsv2sf_blocks;
15679ec7b004SRick Macklem 			u_int32_t nfsv2sf_bfree;
15689ec7b004SRick Macklem 			u_int32_t nfsv2sf_bavail;
15699ec7b004SRick Macklem 		} sf_nfsv2;
15709ec7b004SRick Macklem 		struct {
15719ec7b004SRick Macklem 			u_int64_t nfsv3sf_tbytes;
15729ec7b004SRick Macklem 			u_int64_t nfsv3sf_fbytes;
15739ec7b004SRick Macklem 			u_int64_t nfsv3sf_abytes;
15749ec7b004SRick Macklem 			u_int64_t nfsv3sf_tfiles;
15759ec7b004SRick Macklem 			u_int64_t nfsv3sf_ffiles;
15769ec7b004SRick Macklem 			u_int64_t nfsv3sf_afiles;
15779ec7b004SRick Macklem 			u_int32_t nfsv3sf_invarsec;
15789ec7b004SRick Macklem 		} sf_nfsv3;
15799ec7b004SRick Macklem 	} sf_un;
15809ec7b004SRick Macklem };
15819ec7b004SRick Macklem 
15829ec7b004SRick Macklem #define	sf_tsize	sf_un.sf_nfsv2.nfsv2sf_tsize
15839ec7b004SRick Macklem #define	sf_bsize	sf_un.sf_nfsv2.nfsv2sf_bsize
15849ec7b004SRick Macklem #define	sf_blocks	sf_un.sf_nfsv2.nfsv2sf_blocks
15859ec7b004SRick Macklem #define	sf_bfree	sf_un.sf_nfsv2.nfsv2sf_bfree
15869ec7b004SRick Macklem #define	sf_bavail	sf_un.sf_nfsv2.nfsv2sf_bavail
15879ec7b004SRick Macklem #define	sf_tbytes	sf_un.sf_nfsv3.nfsv3sf_tbytes
15889ec7b004SRick Macklem #define	sf_fbytes	sf_un.sf_nfsv3.nfsv3sf_fbytes
15899ec7b004SRick Macklem #define	sf_abytes	sf_un.sf_nfsv3.nfsv3sf_abytes
15909ec7b004SRick Macklem #define	sf_tfiles	sf_un.sf_nfsv3.nfsv3sf_tfiles
15919ec7b004SRick Macklem #define	sf_ffiles	sf_un.sf_nfsv3.nfsv3sf_ffiles
15929ec7b004SRick Macklem #define	sf_afiles	sf_un.sf_nfsv3.nfsv3sf_afiles
15939ec7b004SRick Macklem #define	sf_invarsec	sf_un.sf_nfsv3.nfsv3sf_invarsec
15949ec7b004SRick Macklem 
15959ec7b004SRick Macklem /*
15969ec7b004SRick Macklem  * Now defined using u_int64_t for the 64 bit field(s).
15979ec7b004SRick Macklem  * (Cannot be used to move data on/off the wire, due to alignment concerns.)
15989ec7b004SRick Macklem  */
15999ec7b004SRick Macklem struct nfsfsinfo {
16009ec7b004SRick Macklem 	u_int32_t fs_rtmax;
16019ec7b004SRick Macklem 	u_int32_t fs_rtpref;
16029ec7b004SRick Macklem 	u_int32_t fs_rtmult;
16039ec7b004SRick Macklem 	u_int32_t fs_wtmax;
16049ec7b004SRick Macklem 	u_int32_t fs_wtpref;
16059ec7b004SRick Macklem 	u_int32_t fs_wtmult;
16069ec7b004SRick Macklem 	u_int32_t fs_dtpref;
16079ec7b004SRick Macklem 	u_int64_t fs_maxfilesize;
16089ec7b004SRick Macklem 	struct timespec fs_timedelta;
16099ec7b004SRick Macklem 	u_int32_t fs_properties;
16109ec7b004SRick Macklem };
16119ec7b004SRick Macklem 
16129ec7b004SRick Macklem /*
16139ec7b004SRick Macklem  * Bits for fs_properties
16149ec7b004SRick Macklem  */
16159ec7b004SRick Macklem #define	NFSV3_FSFLINK		0x1
16169ec7b004SRick Macklem #define	NFSV3_FSFSYMLINK	0x2
16179ec7b004SRick Macklem #define	NFSV3_FSFHOMOGENEOUS	0x4
16189ec7b004SRick Macklem #define	NFSV3_FSFCANSETTIME	0x8
16199ec7b004SRick Macklem 
16209ec7b004SRick Macklem /*
16219ec7b004SRick Macklem  * Yikes, overload fs_rtmult as fs_maxname for V4.
16229ec7b004SRick Macklem  */
16239ec7b004SRick Macklem #define	fs_maxname	fs_rtmult
16249ec7b004SRick Macklem 
16259ec7b004SRick Macklem struct nfsv3_pathconf {
16269ec7b004SRick Macklem 	u_int32_t pc_linkmax;
16279ec7b004SRick Macklem 	u_int32_t pc_namemax;
16289ec7b004SRick Macklem 	u_int32_t pc_notrunc;
16299ec7b004SRick Macklem 	u_int32_t pc_chownrestricted;
16309ec7b004SRick Macklem 	u_int32_t pc_caseinsensitive;
16319ec7b004SRick Macklem 	u_int32_t pc_casepreserving;
16329ec7b004SRick Macklem };
16339ec7b004SRick Macklem 
16349ec7b004SRick Macklem /*
16359ec7b004SRick Macklem  * NFS V4 data structures.
16369ec7b004SRick Macklem  */
16379ec7b004SRick Macklem struct nfsv4stateid {
16389ec7b004SRick Macklem 	u_int32_t	seqid;
16399ec7b004SRick Macklem 	u_int32_t	other[NFSX_STATEIDOTHER / NFSX_UNSIGNED];
16409ec7b004SRick Macklem };
16419ec7b004SRick Macklem typedef struct nfsv4stateid nfsv4stateid_t;
16429ec7b004SRick Macklem 
164390d2dfabSRick Macklem /* Notify bits and notify bitmap size. */
164490d2dfabSRick Macklem #define	NFSV4NOTIFY_CHANGE	1
164590d2dfabSRick Macklem #define	NFSV4NOTIFY_DELETE	2
164690d2dfabSRick Macklem #define	NFSV4_NOTIFYBITMAP	1	/* # of 32bit values needed for bits */
164790d2dfabSRick Macklem 
164890d2dfabSRick Macklem /* Layoutreturn kinds. */
164990d2dfabSRick Macklem #define	NFSV4LAYOUTRET_FILE	1
165090d2dfabSRick Macklem #define	NFSV4LAYOUTRET_FSID	2
165190d2dfabSRick Macklem #define	NFSV4LAYOUTRET_ALL	3
165290d2dfabSRick Macklem 
16538f9259a5SRick Macklem /* Seek Contents. */
16548f9259a5SRick Macklem #define	NFSV4CONTENT_DATA	0
16558f9259a5SRick Macklem #define	NFSV4CONTENT_HOLE	1
16568f9259a5SRick Macklem 
16578f9259a5SRick Macklem /* Options for Set Extended attribute (RFC-8276). */
16588f9259a5SRick Macklem #define	NFSV4SXATTR_EITHER	0
16598f9259a5SRick Macklem #define	NFSV4SXATTR_CREATE	1
16608f9259a5SRick Macklem #define	NFSV4SXATTR_REPLACE	2
16618f9259a5SRick Macklem 
1662*709c1891SRick Macklem /* Values for ChangeAttrType (RFC-7862). */
1663*709c1891SRick Macklem #define	NFSV4CHANGETYPE_MONOTONIC_INCR		0
1664*709c1891SRick Macklem #define	NFSV4CHANGETYPE_VERS_COUNTER		1
1665*709c1891SRick Macklem #define	NFSV4CHANGETYPE_VERS_COUNTER_NOPNFS	2
1666*709c1891SRick Macklem #define	NFSV4CHANGETYPE_TIME_METADATA		3
1667*709c1891SRick Macklem #define	NFSV4CHANGETYPE_UNDEFINED		4
1668*709c1891SRick Macklem 
16699ec7b004SRick Macklem #endif	/* _NFS_NFSPROTO_H_ */
1670