xref: /illumos-gate/usr/src/uts/common/nfs/nfs4_kprot.h (revision f44e1126)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
50a701b1eSRobert Gordon  * Common Development and Distribution License (the "License").
60a701b1eSRobert Gordon  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
21bbe876c0SMarcel Telka 
22bbe876c0SMarcel Telka /*
23bbe876c0SMarcel Telka  * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
24*f44e1126SVitaliy Gusev  * Copyright 2020 RackTop Systems, Inc.
25bbe876c0SMarcel Telka  */
26bbe876c0SMarcel Telka 
277c478bd9Sstevel@tonic-gate /*
282f172c55SRobert Thurlow  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
297c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
307c478bd9Sstevel@tonic-gate  */
317c478bd9Sstevel@tonic-gate 
327c478bd9Sstevel@tonic-gate #ifndef _NFS4_KPROT_H
337c478bd9Sstevel@tonic-gate #define	_NFS4_KPROT_H
347c478bd9Sstevel@tonic-gate 
357c478bd9Sstevel@tonic-gate /*
367c478bd9Sstevel@tonic-gate  * Kernel specific version.
37*f44e1126SVitaliy Gusev  * NFS Version 4 protocol definitions.  From nfs4_prot.x RFC 5662
387c478bd9Sstevel@tonic-gate  */
397c478bd9Sstevel@tonic-gate 
407c478bd9Sstevel@tonic-gate #ifdef __cplusplus
417c478bd9Sstevel@tonic-gate extern "C" {
427c478bd9Sstevel@tonic-gate #endif
437c478bd9Sstevel@tonic-gate 
447c478bd9Sstevel@tonic-gate #include <rpc/rpc.h>
450a701b1eSRobert Gordon #ifdef _KERNEL
460a701b1eSRobert Gordon #include <rpc/rpc_rdma.h>
470a701b1eSRobert Gordon #endif
487c478bd9Sstevel@tonic-gate #include <sys/stream.h>
497c478bd9Sstevel@tonic-gate 
50*f44e1126SVitaliy Gusev #include <rpc/auth_sys.h>
51*f44e1126SVitaliy Gusev typedef struct authsys_parms authsys_parms;
52*f44e1126SVitaliy Gusev 
537c478bd9Sstevel@tonic-gate #define	NFS4_FHSIZE 128
547c478bd9Sstevel@tonic-gate #define	NFS4_VERIFIER_SIZE 8
55bbe876c0SMarcel Telka #define	NFS4_OTHER_SIZE 12
567c478bd9Sstevel@tonic-gate 
577c478bd9Sstevel@tonic-gate /*
587c478bd9Sstevel@tonic-gate  * Reasonable upper bounds to catch badly behaving partners
597c478bd9Sstevel@tonic-gate  */
607c478bd9Sstevel@tonic-gate #define	NFS4_OPAQUE_LIMIT	1024
617c478bd9Sstevel@tonic-gate #define	NFS4_COMPOUND_LIMIT	2048
627c478bd9Sstevel@tonic-gate #define	NFS4_FS_LOCATIONS_LIMIT	65536
637c478bd9Sstevel@tonic-gate #define	NFS4_ACL_LIMIT		65536
647c478bd9Sstevel@tonic-gate #define	NFS4_SECINFO_LIMIT	65536
657c478bd9Sstevel@tonic-gate #define	NFS4_FATTR4_LIMIT	1048576
667c478bd9Sstevel@tonic-gate #define	NFS4_DATA_LIMIT		134217728
677c478bd9Sstevel@tonic-gate 
68*f44e1126SVitaliy Gusev #define	NFS4_SESSIONID_SIZE	16
69*f44e1126SVitaliy Gusev 
707c478bd9Sstevel@tonic-gate enum nfs_ftype4 {
717c478bd9Sstevel@tonic-gate 	NF4REG = 1,
727c478bd9Sstevel@tonic-gate 	NF4DIR = 2,
737c478bd9Sstevel@tonic-gate 	NF4BLK = 3,
747c478bd9Sstevel@tonic-gate 	NF4CHR = 4,
757c478bd9Sstevel@tonic-gate 	NF4LNK = 5,
767c478bd9Sstevel@tonic-gate 	NF4SOCK = 6,
777c478bd9Sstevel@tonic-gate 	NF4FIFO = 7,
787c478bd9Sstevel@tonic-gate 	NF4ATTRDIR = 8,
797c478bd9Sstevel@tonic-gate 	NF4NAMEDATTR = 9
807c478bd9Sstevel@tonic-gate };
817c478bd9Sstevel@tonic-gate typedef enum nfs_ftype4 nfs_ftype4;
827c478bd9Sstevel@tonic-gate 
837c478bd9Sstevel@tonic-gate enum nfsstat4 {
847c478bd9Sstevel@tonic-gate 	NFS4_OK = 0,
857c478bd9Sstevel@tonic-gate 	NFS4ERR_PERM = 1,
867c478bd9Sstevel@tonic-gate 	NFS4ERR_NOENT = 2,
877c478bd9Sstevel@tonic-gate 	NFS4ERR_IO = 5,
887c478bd9Sstevel@tonic-gate 	NFS4ERR_NXIO = 6,
897c478bd9Sstevel@tonic-gate 	NFS4ERR_ACCESS = 13,
907c478bd9Sstevel@tonic-gate 	NFS4ERR_EXIST = 17,
917c478bd9Sstevel@tonic-gate 	NFS4ERR_XDEV = 18,
927c478bd9Sstevel@tonic-gate 	NFS4ERR_NOTDIR = 20,
937c478bd9Sstevel@tonic-gate 	NFS4ERR_ISDIR = 21,
947c478bd9Sstevel@tonic-gate 	NFS4ERR_INVAL = 22,
957c478bd9Sstevel@tonic-gate 	NFS4ERR_FBIG = 27,
967c478bd9Sstevel@tonic-gate 	NFS4ERR_NOSPC = 28,
977c478bd9Sstevel@tonic-gate 	NFS4ERR_ROFS = 30,
987c478bd9Sstevel@tonic-gate 	NFS4ERR_MLINK = 31,
997c478bd9Sstevel@tonic-gate 	NFS4ERR_NAMETOOLONG = 63,
1007c478bd9Sstevel@tonic-gate 	NFS4ERR_NOTEMPTY = 66,
1017c478bd9Sstevel@tonic-gate 	NFS4ERR_DQUOT = 69,
1027c478bd9Sstevel@tonic-gate 	NFS4ERR_STALE = 70,
1037c478bd9Sstevel@tonic-gate 	NFS4ERR_BADHANDLE = 10001,
1047c478bd9Sstevel@tonic-gate 	NFS4ERR_BAD_COOKIE = 10003,
1057c478bd9Sstevel@tonic-gate 	NFS4ERR_NOTSUPP = 10004,
1067c478bd9Sstevel@tonic-gate 	NFS4ERR_TOOSMALL = 10005,
1077c478bd9Sstevel@tonic-gate 	NFS4ERR_SERVERFAULT = 10006,
1087c478bd9Sstevel@tonic-gate 	NFS4ERR_BADTYPE = 10007,
1097c478bd9Sstevel@tonic-gate 	NFS4ERR_DELAY = 10008,
1107c478bd9Sstevel@tonic-gate 	NFS4ERR_SAME = 10009,
1117c478bd9Sstevel@tonic-gate 	NFS4ERR_DENIED = 10010,
1127c478bd9Sstevel@tonic-gate 	NFS4ERR_EXPIRED = 10011,
1137c478bd9Sstevel@tonic-gate 	NFS4ERR_LOCKED = 10012,
1147c478bd9Sstevel@tonic-gate 	NFS4ERR_GRACE = 10013,
1157c478bd9Sstevel@tonic-gate 	NFS4ERR_FHEXPIRED = 10014,
1167c478bd9Sstevel@tonic-gate 	NFS4ERR_SHARE_DENIED = 10015,
1177c478bd9Sstevel@tonic-gate 	NFS4ERR_WRONGSEC = 10016,
1187c478bd9Sstevel@tonic-gate 	NFS4ERR_CLID_INUSE = 10017,
1197c478bd9Sstevel@tonic-gate 	NFS4ERR_RESOURCE = 10018,
1207c478bd9Sstevel@tonic-gate 	NFS4ERR_MOVED = 10019,
1217c478bd9Sstevel@tonic-gate 	NFS4ERR_NOFILEHANDLE = 10020,
1227c478bd9Sstevel@tonic-gate 	NFS4ERR_MINOR_VERS_MISMATCH = 10021,
1237c478bd9Sstevel@tonic-gate 	NFS4ERR_STALE_CLIENTID = 10022,
1247c478bd9Sstevel@tonic-gate 	NFS4ERR_STALE_STATEID = 10023,
1257c478bd9Sstevel@tonic-gate 	NFS4ERR_OLD_STATEID = 10024,
1267c478bd9Sstevel@tonic-gate 	NFS4ERR_BAD_STATEID = 10025,
1277c478bd9Sstevel@tonic-gate 	NFS4ERR_BAD_SEQID = 10026,
1287c478bd9Sstevel@tonic-gate 	NFS4ERR_NOT_SAME = 10027,
1297c478bd9Sstevel@tonic-gate 	NFS4ERR_LOCK_RANGE = 10028,
1307c478bd9Sstevel@tonic-gate 	NFS4ERR_SYMLINK = 10029,
1317c478bd9Sstevel@tonic-gate 	NFS4ERR_RESTOREFH = 10030,
1327c478bd9Sstevel@tonic-gate 	NFS4ERR_LEASE_MOVED = 10031,
1337c478bd9Sstevel@tonic-gate 	NFS4ERR_ATTRNOTSUPP = 10032,
1347c478bd9Sstevel@tonic-gate 	NFS4ERR_NO_GRACE = 10033,
1357c478bd9Sstevel@tonic-gate 	NFS4ERR_RECLAIM_BAD = 10034,
1367c478bd9Sstevel@tonic-gate 	NFS4ERR_RECLAIM_CONFLICT = 10035,
1377c478bd9Sstevel@tonic-gate 	NFS4ERR_BADXDR = 10036,
1387c478bd9Sstevel@tonic-gate 	NFS4ERR_LOCKS_HELD = 10037,
1397c478bd9Sstevel@tonic-gate 	NFS4ERR_OPENMODE = 10038,
1407c478bd9Sstevel@tonic-gate 	NFS4ERR_BADOWNER = 10039,
1417c478bd9Sstevel@tonic-gate 	NFS4ERR_BADCHAR = 10040,
1427c478bd9Sstevel@tonic-gate 	NFS4ERR_BADNAME = 10041,
1437c478bd9Sstevel@tonic-gate 	NFS4ERR_BAD_RANGE = 10042,
1447c478bd9Sstevel@tonic-gate 	NFS4ERR_LOCK_NOTSUPP = 10043,
1457c478bd9Sstevel@tonic-gate 	NFS4ERR_OP_ILLEGAL = 10044,
1467c478bd9Sstevel@tonic-gate 	NFS4ERR_DEADLOCK = 10045,
1477c478bd9Sstevel@tonic-gate 	NFS4ERR_FILE_OPEN = 10046,
1487c478bd9Sstevel@tonic-gate 	NFS4ERR_ADMIN_REVOKED = 10047,
149*f44e1126SVitaliy Gusev 	NFS4ERR_CB_PATH_DOWN = 10048,
150*f44e1126SVitaliy Gusev 	NFS4ERR_BADIOMODE = 10049,	/*  nfsv4.1 */
151*f44e1126SVitaliy Gusev 	NFS4ERR_BADLAYOUT = 10050,
152*f44e1126SVitaliy Gusev 	NFS4ERR_BAD_SESSION_DIGEST = 10051,
153*f44e1126SVitaliy Gusev 	NFS4ERR_BADSESSION = 10052,
154*f44e1126SVitaliy Gusev 	NFS4ERR_BADSLOT = 10053,
155*f44e1126SVitaliy Gusev 	NFS4ERR_COMPLETE_ALREADY = 10054,
156*f44e1126SVitaliy Gusev 	NFS4ERR_CONN_NOT_BOUND_TO_SESSION = 10055,
157*f44e1126SVitaliy Gusev 	NFS4ERR_DELEG_ALREADY_WANTED = 10056,
158*f44e1126SVitaliy Gusev 	NFS4ERR_BACK_CHAN_BUSY = 10057,
159*f44e1126SVitaliy Gusev 	NFS4ERR_LAYOUTTRYLATER = 10058,
160*f44e1126SVitaliy Gusev 	NFS4ERR_LAYOUTUNAVAILABLE = 10059,
161*f44e1126SVitaliy Gusev 	NFS4ERR_NOMATCHING_LAYOUT = 10060,
162*f44e1126SVitaliy Gusev 	NFS4ERR_RECALLCONFLICT = 10061,
163*f44e1126SVitaliy Gusev 	NFS4ERR_UNKNOWN_LAYOUTTYPE = 10062,
164*f44e1126SVitaliy Gusev 	NFS4ERR_SEQ_MISORDERED = 10063,
165*f44e1126SVitaliy Gusev 	NFS4ERR_SEQUENCE_POS = 10064,
166*f44e1126SVitaliy Gusev 	NFS4ERR_REQ_TOO_BIG = 10065,
167*f44e1126SVitaliy Gusev 	NFS4ERR_REP_TOO_BIG = 10066,
168*f44e1126SVitaliy Gusev 	NFS4ERR_REP_TOO_BIG_TO_CACHE = 10067,
169*f44e1126SVitaliy Gusev 	NFS4ERR_RETRY_UNCACHED_REP = 10068,
170*f44e1126SVitaliy Gusev 	NFS4ERR_UNSAFE_COMPOUND = 10069,
171*f44e1126SVitaliy Gusev 	NFS4ERR_TOO_MANY_OPS = 10070,
172*f44e1126SVitaliy Gusev 	NFS4ERR_OP_NOT_IN_SESSION = 10071,
173*f44e1126SVitaliy Gusev 	NFS4ERR_HASH_ALG_UNSUPP = 10072,
174*f44e1126SVitaliy Gusev 	NFS4ERR_CLIENTID_BUSY = 10074,
175*f44e1126SVitaliy Gusev 	NFS4ERR_PNFS_IO_HOLE = 10075,
176*f44e1126SVitaliy Gusev 	NFS4ERR_SEQ_FALSE_RETRY = 10076,
177*f44e1126SVitaliy Gusev 	NFS4ERR_BAD_HIGH_SLOT = 10077,
178*f44e1126SVitaliy Gusev 	NFS4ERR_DEADSESSION = 10078,
179*f44e1126SVitaliy Gusev 	NFS4ERR_ENCR_ALG_UNSUPP = 10079,
180*f44e1126SVitaliy Gusev 	NFS4ERR_PNFS_NO_LAYOUT = 10080,
181*f44e1126SVitaliy Gusev 	NFS4ERR_NOT_ONLY_OP = 10081,
182*f44e1126SVitaliy Gusev 	NFS4ERR_WRONG_CRED = 10082,
183*f44e1126SVitaliy Gusev 	NFS4ERR_WRONG_TYPE = 10083,
184*f44e1126SVitaliy Gusev 	NFS4ERR_DIRDELEG_UNAVAIL = 10084,
185*f44e1126SVitaliy Gusev 	NFS4ERR_REJECT_DELEG = 10085,
186*f44e1126SVitaliy Gusev 	NFS4ERR_RETURNCONFLICT = 10086,
187*f44e1126SVitaliy Gusev 	NFS4ERR_DELEG_REVOKED = 10087,
188*f44e1126SVitaliy Gusev 
189*f44e1126SVitaliy Gusev 	/* for internal use */
190*f44e1126SVitaliy Gusev 	NFS4ERR_REPLAY_CACHE = 30000
1917c478bd9Sstevel@tonic-gate };
1927c478bd9Sstevel@tonic-gate typedef enum nfsstat4 nfsstat4;
1937c478bd9Sstevel@tonic-gate 
1947c478bd9Sstevel@tonic-gate /*
1957c478bd9Sstevel@tonic-gate  * A bitmap can only be 56 bits, treat it as a uint64_t for now
1967c478bd9Sstevel@tonic-gate  */
1977c478bd9Sstevel@tonic-gate typedef uint64_t bitmap4;
1987c478bd9Sstevel@tonic-gate 
199*f44e1126SVitaliy Gusev typedef struct {
200*f44e1126SVitaliy Gusev 	uint_t attrlist4_len;
201*f44e1126SVitaliy Gusev 	char *attrlist4_val;
202*f44e1126SVitaliy Gusev } attrlist4;
203*f44e1126SVitaliy Gusev 
2047c478bd9Sstevel@tonic-gate typedef uint64_t offset4;
2057c478bd9Sstevel@tonic-gate 
2067c478bd9Sstevel@tonic-gate typedef uint32_t count4;
2077c478bd9Sstevel@tonic-gate 
2087c478bd9Sstevel@tonic-gate typedef uint64_t length4;
2097c478bd9Sstevel@tonic-gate 
2107c478bd9Sstevel@tonic-gate typedef uint64_t clientid4;
2117c478bd9Sstevel@tonic-gate 
212bbe876c0SMarcel Telka typedef uint32_t nfs_lease4;
213bbe876c0SMarcel Telka 
2147c478bd9Sstevel@tonic-gate typedef uint32_t seqid4;
2157c478bd9Sstevel@tonic-gate 
216*f44e1126SVitaliy Gusev typedef uint32_t sequenceid4;
217*f44e1126SVitaliy Gusev 
218*f44e1126SVitaliy Gusev typedef char sessionid4[NFS4_SESSIONID_SIZE];
219*f44e1126SVitaliy Gusev 
220*f44e1126SVitaliy Gusev typedef uint32_t slotid4;
221*f44e1126SVitaliy Gusev 
2227c478bd9Sstevel@tonic-gate typedef struct {
2237c478bd9Sstevel@tonic-gate 	uint_t utf8string_len;
2247c478bd9Sstevel@tonic-gate 	char *utf8string_val;
2257c478bd9Sstevel@tonic-gate } utf8string;
2267c478bd9Sstevel@tonic-gate 
2277c478bd9Sstevel@tonic-gate typedef utf8string component4;
2287c478bd9Sstevel@tonic-gate 
229*f44e1126SVitaliy Gusev typedef utf8string utf8str_cis;
230*f44e1126SVitaliy Gusev 
231*f44e1126SVitaliy Gusev typedef utf8string utf8str_cs;
232*f44e1126SVitaliy Gusev 
233*f44e1126SVitaliy Gusev typedef utf8string utf8str_mixed;
234*f44e1126SVitaliy Gusev 
2357c478bd9Sstevel@tonic-gate typedef struct {
2367c478bd9Sstevel@tonic-gate 	uint_t pathname4_len;
2377c478bd9Sstevel@tonic-gate 	component4 *pathname4_val;
2387c478bd9Sstevel@tonic-gate } pathname4;
2397c478bd9Sstevel@tonic-gate 
2407c478bd9Sstevel@tonic-gate typedef uint64_t nfs_cookie4;
2417c478bd9Sstevel@tonic-gate 
242bbe876c0SMarcel Telka typedef struct {
243bbe876c0SMarcel Telka 	uint_t linktext4_len;
244bbe876c0SMarcel Telka 	char *linktext4_val;
245bbe876c0SMarcel Telka } linktext4;
246bbe876c0SMarcel Telka 
247bbe876c0SMarcel Telka typedef utf8string ascii_REQUIRED4;
2487c478bd9Sstevel@tonic-gate 
2497c478bd9Sstevel@tonic-gate typedef struct {
2507c478bd9Sstevel@tonic-gate 	uint_t sec_oid4_len;
2517c478bd9Sstevel@tonic-gate 	char *sec_oid4_val;
2527c478bd9Sstevel@tonic-gate } sec_oid4;
2537c478bd9Sstevel@tonic-gate 
2547c478bd9Sstevel@tonic-gate typedef uint32_t qop4;
2557c478bd9Sstevel@tonic-gate 
2567c478bd9Sstevel@tonic-gate typedef uint32_t mode4;
2577c478bd9Sstevel@tonic-gate 
2587c478bd9Sstevel@tonic-gate typedef uint64_t changeid4;
2597c478bd9Sstevel@tonic-gate 
2607c478bd9Sstevel@tonic-gate typedef uint64_t verifier4;
2617c478bd9Sstevel@tonic-gate 
2627c478bd9Sstevel@tonic-gate struct nfstime4 {
2637c478bd9Sstevel@tonic-gate 	int64_t seconds;
2647c478bd9Sstevel@tonic-gate 	uint32_t nseconds;
2657c478bd9Sstevel@tonic-gate };
2667c478bd9Sstevel@tonic-gate typedef struct nfstime4 nfstime4;
2677c478bd9Sstevel@tonic-gate 
2687c478bd9Sstevel@tonic-gate enum time_how4 {
2697c478bd9Sstevel@tonic-gate 	SET_TO_SERVER_TIME4 = 0,
2707c478bd9Sstevel@tonic-gate 	SET_TO_CLIENT_TIME4 = 1
2717c478bd9Sstevel@tonic-gate };
2727c478bd9Sstevel@tonic-gate typedef enum time_how4 time_how4;
2737c478bd9Sstevel@tonic-gate 
2747c478bd9Sstevel@tonic-gate struct settime4 {
2757c478bd9Sstevel@tonic-gate 	time_how4 set_it;
2767c478bd9Sstevel@tonic-gate 	nfstime4 time;
2777c478bd9Sstevel@tonic-gate };
2787c478bd9Sstevel@tonic-gate typedef struct settime4 settime4;
2797c478bd9Sstevel@tonic-gate 
2807c478bd9Sstevel@tonic-gate typedef struct {
2817c478bd9Sstevel@tonic-gate 	uint_t nfs_fh4_len;
2827c478bd9Sstevel@tonic-gate 	char *nfs_fh4_val;
2837c478bd9Sstevel@tonic-gate } nfs_fh4;
2847c478bd9Sstevel@tonic-gate 
2857c478bd9Sstevel@tonic-gate struct fsid4 {
2867c478bd9Sstevel@tonic-gate 	uint64_t major;
2877c478bd9Sstevel@tonic-gate 	uint64_t minor;
2887c478bd9Sstevel@tonic-gate };
2897c478bd9Sstevel@tonic-gate typedef struct fsid4 fsid4;
2907c478bd9Sstevel@tonic-gate 
291*f44e1126SVitaliy Gusev struct change_policy4 {
292*f44e1126SVitaliy Gusev 	uint64_t cp_major;
293*f44e1126SVitaliy Gusev 	uint64_t cp_minor;
294*f44e1126SVitaliy Gusev };
295*f44e1126SVitaliy Gusev typedef struct change_policy4 change_policy4;
296*f44e1126SVitaliy Gusev 
2977c478bd9Sstevel@tonic-gate struct fs_location4 {
2987c478bd9Sstevel@tonic-gate 	uint_t server_len;
2997c478bd9Sstevel@tonic-gate 	utf8string *server_val;
3007c478bd9Sstevel@tonic-gate 	pathname4 rootpath;
3017c478bd9Sstevel@tonic-gate };
3027c478bd9Sstevel@tonic-gate typedef struct fs_location4 fs_location4;
3037c478bd9Sstevel@tonic-gate 
3047c478bd9Sstevel@tonic-gate struct fs_locations4 {
3057c478bd9Sstevel@tonic-gate 	pathname4 fs_root;
3067c478bd9Sstevel@tonic-gate 	uint_t locations_len;
3077c478bd9Sstevel@tonic-gate 	fs_location4 *locations_val;
3087c478bd9Sstevel@tonic-gate };
3097c478bd9Sstevel@tonic-gate typedef struct fs_locations4 fs_locations4;
3107c478bd9Sstevel@tonic-gate 
311bbe876c0SMarcel Telka /*
312bbe876c0SMarcel Telka  * This structure is declared in nfs4.h
313bbe876c0SMarcel Telka  */
314bbe876c0SMarcel Telka struct nfs_fsl_info;
3152f172c55SRobert Thurlow 
3167c478bd9Sstevel@tonic-gate /*
3177c478bd9Sstevel@tonic-gate  * ACL support
3187c478bd9Sstevel@tonic-gate  */
3197c478bd9Sstevel@tonic-gate 
3207c478bd9Sstevel@tonic-gate #define	ACL4_SUPPORT_ALLOW_ACL 0x00000001
3217c478bd9Sstevel@tonic-gate #define	ACL4_SUPPORT_DENY_ACL 0x00000002
3227c478bd9Sstevel@tonic-gate #define	ACL4_SUPPORT_AUDIT_ACL 0x00000004
3237c478bd9Sstevel@tonic-gate #define	ACL4_SUPPORT_ALARM_ACL 0x00000008
3247c478bd9Sstevel@tonic-gate 
3257c478bd9Sstevel@tonic-gate typedef uint32_t acetype4;
3267c478bd9Sstevel@tonic-gate #define	ACE4_ACCESS_ALLOWED_ACE_TYPE 0x00000000
3277c478bd9Sstevel@tonic-gate #define	ACE4_ACCESS_DENIED_ACE_TYPE 0x00000001
3287c478bd9Sstevel@tonic-gate #define	ACE4_SYSTEM_AUDIT_ACE_TYPE 0x00000002
3297c478bd9Sstevel@tonic-gate #define	ACE4_SYSTEM_ALARM_ACE_TYPE 0x00000003
3307c478bd9Sstevel@tonic-gate 
3317c478bd9Sstevel@tonic-gate typedef uint32_t aceflag4;
3327c478bd9Sstevel@tonic-gate #define	ACE4_FILE_INHERIT_ACE 0x00000001
3337c478bd9Sstevel@tonic-gate #define	ACE4_DIRECTORY_INHERIT_ACE 0x00000002
3347c478bd9Sstevel@tonic-gate #define	ACE4_NO_PROPAGATE_INHERIT_ACE 0x00000004
3357c478bd9Sstevel@tonic-gate #define	ACE4_INHERIT_ONLY_ACE 0x00000008
3367c478bd9Sstevel@tonic-gate #define	ACE4_SUCCESSFUL_ACCESS_ACE_FLAG 0x00000010
3377c478bd9Sstevel@tonic-gate #define	ACE4_FAILED_ACCESS_ACE_FLAG 0x00000020
3387c478bd9Sstevel@tonic-gate #define	ACE4_IDENTIFIER_GROUP 0x00000040
339*f44e1126SVitaliy Gusev #define	ACE4_INHERITED_ACE 0x00000080
340*f44e1126SVitaliy Gusev 
3417c478bd9Sstevel@tonic-gate /*
342ee89337bSMarcel Telka  * This defines all valid flag bits, as defined by RFC 7530.  If
3437c478bd9Sstevel@tonic-gate  * any additional flag bits are deemed part of the NFSv4 spec,
3447c478bd9Sstevel@tonic-gate  * you must also add them to the definition below.
3457c478bd9Sstevel@tonic-gate  */
3467c478bd9Sstevel@tonic-gate #define	ACE4_VALID_FLAG_BITS (\
3477c478bd9Sstevel@tonic-gate     ACE4_FILE_INHERIT_ACE | \
3487c478bd9Sstevel@tonic-gate     ACE4_DIRECTORY_INHERIT_ACE | \
3497c478bd9Sstevel@tonic-gate     ACE4_NO_PROPAGATE_INHERIT_ACE | \
3507c478bd9Sstevel@tonic-gate     ACE4_INHERIT_ONLY_ACE | \
3517c478bd9Sstevel@tonic-gate     ACE4_SUCCESSFUL_ACCESS_ACE_FLAG | \
3527c478bd9Sstevel@tonic-gate     ACE4_FAILED_ACCESS_ACE_FLAG | \
3537c478bd9Sstevel@tonic-gate     ACE4_IDENTIFIER_GROUP)
3547c478bd9Sstevel@tonic-gate 
3557c478bd9Sstevel@tonic-gate typedef uint32_t acemask4;
3567c478bd9Sstevel@tonic-gate #define	ACE4_READ_DATA 0x00000001
3577c478bd9Sstevel@tonic-gate #define	ACE4_LIST_DIRECTORY 0x00000001
3587c478bd9Sstevel@tonic-gate #define	ACE4_WRITE_DATA 0x00000002
3597c478bd9Sstevel@tonic-gate #define	ACE4_ADD_FILE 0x00000002
3607c478bd9Sstevel@tonic-gate #define	ACE4_APPEND_DATA 0x00000004
3617c478bd9Sstevel@tonic-gate #define	ACE4_ADD_SUBDIRECTORY 0x00000004
3627c478bd9Sstevel@tonic-gate #define	ACE4_READ_NAMED_ATTRS 0x00000008
3637c478bd9Sstevel@tonic-gate #define	ACE4_WRITE_NAMED_ATTRS 0x00000010
3647c478bd9Sstevel@tonic-gate #define	ACE4_EXECUTE 0x00000020
3657c478bd9Sstevel@tonic-gate #define	ACE4_DELETE_CHILD 0x00000040
3667c478bd9Sstevel@tonic-gate #define	ACE4_READ_ATTRIBUTES 0x00000080
3677c478bd9Sstevel@tonic-gate #define	ACE4_WRITE_ATTRIBUTES 0x00000100
368*f44e1126SVitaliy Gusev #define	ACE4_WRITE_RETENTION 0x00000200
369*f44e1126SVitaliy Gusev #define	ACE4_WRITE_RETENTION_HOLD 0x00000400
3707c478bd9Sstevel@tonic-gate #define	ACE4_DELETE 0x00010000
3717c478bd9Sstevel@tonic-gate #define	ACE4_READ_ACL 0x00020000
3727c478bd9Sstevel@tonic-gate #define	ACE4_WRITE_ACL 0x00040000
3737c478bd9Sstevel@tonic-gate #define	ACE4_WRITE_OWNER 0x00080000
3747c478bd9Sstevel@tonic-gate #define	ACE4_SYNCHRONIZE 0x00100000
3757c478bd9Sstevel@tonic-gate #define	ACE4_GENERIC_READ 0x00120081
3767c478bd9Sstevel@tonic-gate #define	ACE4_GENERIC_WRITE 0x00160106
3777c478bd9Sstevel@tonic-gate #define	ACE4_GENERIC_EXECUTE 0x001200A0
3787c478bd9Sstevel@tonic-gate /*
379ee89337bSMarcel Telka  * This defines all valid access mask bits, as defined by RFC 7530.  If
3807c478bd9Sstevel@tonic-gate  * any additional access mask bits are deemed part of the NFSv4 spec,
3817c478bd9Sstevel@tonic-gate  * you must also add them to the definition below.
3827c478bd9Sstevel@tonic-gate  */
3837c478bd9Sstevel@tonic-gate #define	ACE4_VALID_MASK_BITS (\
3847c478bd9Sstevel@tonic-gate     ACE4_READ_DATA | \
3857c478bd9Sstevel@tonic-gate     ACE4_LIST_DIRECTORY | \
3867c478bd9Sstevel@tonic-gate     ACE4_WRITE_DATA | \
3877c478bd9Sstevel@tonic-gate     ACE4_ADD_FILE | \
3887c478bd9Sstevel@tonic-gate     ACE4_APPEND_DATA | \
3897c478bd9Sstevel@tonic-gate     ACE4_ADD_SUBDIRECTORY | \
3907c478bd9Sstevel@tonic-gate     ACE4_READ_NAMED_ATTRS | \
3917c478bd9Sstevel@tonic-gate     ACE4_WRITE_NAMED_ATTRS | \
3927c478bd9Sstevel@tonic-gate     ACE4_EXECUTE | \
3937c478bd9Sstevel@tonic-gate     ACE4_DELETE_CHILD | \
3947c478bd9Sstevel@tonic-gate     ACE4_READ_ATTRIBUTES | \
3957c478bd9Sstevel@tonic-gate     ACE4_WRITE_ATTRIBUTES | \
3967c478bd9Sstevel@tonic-gate     ACE4_DELETE | \
3977c478bd9Sstevel@tonic-gate     ACE4_READ_ACL | \
3987c478bd9Sstevel@tonic-gate     ACE4_WRITE_ACL | \
3997c478bd9Sstevel@tonic-gate     ACE4_WRITE_OWNER | \
4007c478bd9Sstevel@tonic-gate     ACE4_SYNCHRONIZE)
4017c478bd9Sstevel@tonic-gate 
4027c478bd9Sstevel@tonic-gate /* Used to signify an undefined value for an acemask4 */
4037c478bd9Sstevel@tonic-gate #define	ACE4_MASK_UNDEFINED 0x80000000
4047c478bd9Sstevel@tonic-gate 
4057c478bd9Sstevel@tonic-gate #define	ACE4_WHO_OWNER		"OWNER@"
4067c478bd9Sstevel@tonic-gate #define	ACE4_WHO_GROUP		"GROUP@"
4077c478bd9Sstevel@tonic-gate #define	ACE4_WHO_EVERYONE	"EVERYONE@"
4087c478bd9Sstevel@tonic-gate 
4097c478bd9Sstevel@tonic-gate struct nfsace4 {
4107c478bd9Sstevel@tonic-gate 	acetype4 type;
4117c478bd9Sstevel@tonic-gate 	aceflag4 flag;
4127c478bd9Sstevel@tonic-gate 	acemask4 access_mask;
4137c478bd9Sstevel@tonic-gate 	utf8string who;
4147c478bd9Sstevel@tonic-gate };
4157c478bd9Sstevel@tonic-gate typedef struct nfsace4 nfsace4;
416*f44e1126SVitaliy Gusev 
417*f44e1126SVitaliy Gusev typedef uint32_t aclflag4;		/* 4.1 */
418*f44e1126SVitaliy Gusev #define	ACL4_AUTO_INHERIT 0x00000001
419*f44e1126SVitaliy Gusev #define	ACL4_PROTECTED 0x00000002
420*f44e1126SVitaliy Gusev #define	ACL4_DEFAULTED 0x00000004
421*f44e1126SVitaliy Gusev 
422*f44e1126SVitaliy Gusev struct nfsacl41 {			/* 4.1 */
423*f44e1126SVitaliy Gusev 	aclflag4 na41_flag;
424*f44e1126SVitaliy Gusev 	struct {
425*f44e1126SVitaliy Gusev 		uint_t na41_aces_len;
426*f44e1126SVitaliy Gusev 		nfsace4 *na41_aces_val;
427*f44e1126SVitaliy Gusev 	} na41_aces;
428*f44e1126SVitaliy Gusev };
429*f44e1126SVitaliy Gusev typedef struct nfsacl41 nfsacl41;
430*f44e1126SVitaliy Gusev 
4317c478bd9Sstevel@tonic-gate #define	MODE4_SUID 0x800
4327c478bd9Sstevel@tonic-gate #define	MODE4_SGID 0x400
4337c478bd9Sstevel@tonic-gate #define	MODE4_SVTX 0x200
4347c478bd9Sstevel@tonic-gate #define	MODE4_RUSR 0x100
4357c478bd9Sstevel@tonic-gate #define	MODE4_WUSR 0x080
4367c478bd9Sstevel@tonic-gate #define	MODE4_XUSR 0x040
4377c478bd9Sstevel@tonic-gate #define	MODE4_RGRP 0x020
4387c478bd9Sstevel@tonic-gate #define	MODE4_WGRP 0x010
4397c478bd9Sstevel@tonic-gate #define	MODE4_XGRP 0x008
4407c478bd9Sstevel@tonic-gate #define	MODE4_ROTH 0x004
4417c478bd9Sstevel@tonic-gate #define	MODE4_WOTH 0x002
4427c478bd9Sstevel@tonic-gate #define	MODE4_XOTH 0x001
4437c478bd9Sstevel@tonic-gate 
444*f44e1126SVitaliy Gusev struct mode_masked4 {			/* 4.1 */
445*f44e1126SVitaliy Gusev 	mode4 mm_value_to_set;
446*f44e1126SVitaliy Gusev 	mode4 mm_mask_bits;
447*f44e1126SVitaliy Gusev };
448*f44e1126SVitaliy Gusev typedef struct mode_masked4 mode_masked4;
449*f44e1126SVitaliy Gusev 
4507c478bd9Sstevel@tonic-gate /*
4517c478bd9Sstevel@tonic-gate  * ACL conversion helpers
4527c478bd9Sstevel@tonic-gate  */
4537c478bd9Sstevel@tonic-gate 
4547c478bd9Sstevel@tonic-gate typedef enum {
4557c478bd9Sstevel@tonic-gate 	ace4_unused,
4567c478bd9Sstevel@tonic-gate 	ace4_user_obj,
4577c478bd9Sstevel@tonic-gate 	ace4_user,
4587c478bd9Sstevel@tonic-gate 	ace4_group, /* includes GROUP and GROUP_OBJ */
4597c478bd9Sstevel@tonic-gate 	ace4_other_obj
4607c478bd9Sstevel@tonic-gate } ace4_to_aent_state_t;
4617c478bd9Sstevel@tonic-gate 
4627c478bd9Sstevel@tonic-gate typedef struct ace4vals {
4637c478bd9Sstevel@tonic-gate 	utf8string *key; /* NB: not allocated here; points to existing utf8 */
4647c478bd9Sstevel@tonic-gate 	avl_node_t avl;
4657c478bd9Sstevel@tonic-gate 	acemask4 mask;
4667c478bd9Sstevel@tonic-gate 	acemask4 allowed;
4677c478bd9Sstevel@tonic-gate 	acemask4 denied;
4687c478bd9Sstevel@tonic-gate 	int aent_type;
4697c478bd9Sstevel@tonic-gate } ace4vals_t;
4707c478bd9Sstevel@tonic-gate 
4717c478bd9Sstevel@tonic-gate typedef struct ace4_list {
4727c478bd9Sstevel@tonic-gate 	ace4vals_t user_obj;
4737c478bd9Sstevel@tonic-gate 	avl_tree_t user;
4747c478bd9Sstevel@tonic-gate 	int numusers;
4757c478bd9Sstevel@tonic-gate 	ace4vals_t group_obj;
4767c478bd9Sstevel@tonic-gate 	avl_tree_t group;
4777c478bd9Sstevel@tonic-gate 	int numgroups;
4787c478bd9Sstevel@tonic-gate 	ace4vals_t other_obj;
4797c478bd9Sstevel@tonic-gate 	acemask4 acl_mask;
4807c478bd9Sstevel@tonic-gate 	int hasmask;
4817c478bd9Sstevel@tonic-gate 	int dfacl_flag;
4827c478bd9Sstevel@tonic-gate 	ace4_to_aent_state_t state;
4837c478bd9Sstevel@tonic-gate 	int seen; /* bitmask of all aclent_t a_type values seen */
4847c478bd9Sstevel@tonic-gate } ace4_list_t;
4857c478bd9Sstevel@tonic-gate 
4867c478bd9Sstevel@tonic-gate struct specdata4 {
4877c478bd9Sstevel@tonic-gate 	uint32_t specdata1;
4887c478bd9Sstevel@tonic-gate 	uint32_t specdata2;
4897c478bd9Sstevel@tonic-gate };
4907c478bd9Sstevel@tonic-gate typedef struct specdata4 specdata4;
4917c478bd9Sstevel@tonic-gate #define	FH4_PERSISTENT 0x00000000
4927c478bd9Sstevel@tonic-gate #define	FH4_NOEXPIRE_WITH_OPEN 0x00000001
4937c478bd9Sstevel@tonic-gate #define	FH4_VOLATILE_ANY 0x00000002
4947c478bd9Sstevel@tonic-gate #define	FH4_VOL_MIGRATION 0x00000004
4957c478bd9Sstevel@tonic-gate #define	FH4_VOL_RENAME 0x00000008
4967c478bd9Sstevel@tonic-gate 
497*f44e1126SVitaliy Gusev /*
498*f44e1126SVitaliy Gusev  * nfsv4.1
499*f44e1126SVitaliy Gusev  */
500*f44e1126SVitaliy Gusev struct netaddr4 {
501*f44e1126SVitaliy Gusev 	char *na_r_netid;
502*f44e1126SVitaliy Gusev 	char *na_r_addr;
503*f44e1126SVitaliy Gusev };
504*f44e1126SVitaliy Gusev typedef struct netaddr4 netaddr4;
505*f44e1126SVitaliy Gusev 
506*f44e1126SVitaliy Gusev struct nfs_impl_id4 {
507*f44e1126SVitaliy Gusev 	utf8str_cis nii_domain;
508*f44e1126SVitaliy Gusev 	utf8str_cs nii_name;
509*f44e1126SVitaliy Gusev 	nfstime4 nii_date;
510*f44e1126SVitaliy Gusev };
511*f44e1126SVitaliy Gusev typedef struct nfs_impl_id4 nfs_impl_id4;
512*f44e1126SVitaliy Gusev 
513*f44e1126SVitaliy Gusev struct stateid4 {
514*f44e1126SVitaliy Gusev 	uint32_t seqid;
515*f44e1126SVitaliy Gusev 	char other[NFS4_OTHER_SIZE];
516*f44e1126SVitaliy Gusev };
517*f44e1126SVitaliy Gusev typedef struct stateid4 stateid4;
518*f44e1126SVitaliy Gusev 
519*f44e1126SVitaliy Gusev enum layouttype4 {
520*f44e1126SVitaliy Gusev 	LAYOUT4_NFSV4_1_FILES = 0x1,
521*f44e1126SVitaliy Gusev 	LAYOUT4_OSD2_OBJECTS = 0x2,
522*f44e1126SVitaliy Gusev 	LAYOUT4_BLOCK_VOLUME = 0x3
523*f44e1126SVitaliy Gusev };
524*f44e1126SVitaliy Gusev typedef enum layouttype4 layouttype4;
525*f44e1126SVitaliy Gusev 
526*f44e1126SVitaliy Gusev struct layout_content4 {
527*f44e1126SVitaliy Gusev 	layouttype4 loc_type;
528*f44e1126SVitaliy Gusev 	struct {
529*f44e1126SVitaliy Gusev 		uint_t loc_body_len;
530*f44e1126SVitaliy Gusev 		char *loc_body_val;
531*f44e1126SVitaliy Gusev 	} loc_body;
532*f44e1126SVitaliy Gusev };
533*f44e1126SVitaliy Gusev typedef struct layout_content4 layout_content4;
534*f44e1126SVitaliy Gusev 
535*f44e1126SVitaliy Gusev /*
536*f44e1126SVitaliy Gusev  * LAYOUT4_OSD2_OBJECTS loc_body description
537*f44e1126SVitaliy Gusev  * is in a separate .x file
538*f44e1126SVitaliy Gusev  */
539*f44e1126SVitaliy Gusev 
540*f44e1126SVitaliy Gusev /*
541*f44e1126SVitaliy Gusev  * LAYOUT4_BLOCK_VOLUME loc_body description
542*f44e1126SVitaliy Gusev  * is in a separate .x file
543*f44e1126SVitaliy Gusev  */
544*f44e1126SVitaliy Gusev 
545*f44e1126SVitaliy Gusev struct layouthint4 {
546*f44e1126SVitaliy Gusev 	layouttype4 loh_type;
547*f44e1126SVitaliy Gusev 	struct {
548*f44e1126SVitaliy Gusev 		uint_t loh_body_len;
549*f44e1126SVitaliy Gusev 		char *loh_body_val;
550*f44e1126SVitaliy Gusev 	} loh_body;
551*f44e1126SVitaliy Gusev };
552*f44e1126SVitaliy Gusev typedef struct layouthint4 layouthint4;
553*f44e1126SVitaliy Gusev 
554*f44e1126SVitaliy Gusev enum layoutiomode4 {
555*f44e1126SVitaliy Gusev 	LAYOUTIOMODE4_READ = 1,
556*f44e1126SVitaliy Gusev 	LAYOUTIOMODE4_RW = 2,
557*f44e1126SVitaliy Gusev 	LAYOUTIOMODE4_ANY = 3
558*f44e1126SVitaliy Gusev };
559*f44e1126SVitaliy Gusev typedef enum layoutiomode4 layoutiomode4;
560*f44e1126SVitaliy Gusev 
561*f44e1126SVitaliy Gusev struct layout4 {
562*f44e1126SVitaliy Gusev 	offset4 lo_offset;
563*f44e1126SVitaliy Gusev 	length4 lo_length;
564*f44e1126SVitaliy Gusev 	layoutiomode4 lo_iomode;
565*f44e1126SVitaliy Gusev 	layout_content4 lo_content;
566*f44e1126SVitaliy Gusev };
567*f44e1126SVitaliy Gusev typedef struct layout4 layout4;
568*f44e1126SVitaliy Gusev #define	NFS4_DEVICEID4_SIZE 16
569*f44e1126SVitaliy Gusev 
570*f44e1126SVitaliy Gusev typedef char deviceid4[NFS4_DEVICEID4_SIZE];
571*f44e1126SVitaliy Gusev 
572*f44e1126SVitaliy Gusev struct device_addr4 {
573*f44e1126SVitaliy Gusev 	layouttype4 da_layout_type;
574*f44e1126SVitaliy Gusev 	struct {
575*f44e1126SVitaliy Gusev 		uint_t da_addr_body_len;
576*f44e1126SVitaliy Gusev 		char *da_addr_body_val;
577*f44e1126SVitaliy Gusev 	} da_addr_body;
578*f44e1126SVitaliy Gusev };
579*f44e1126SVitaliy Gusev typedef struct device_addr4 device_addr4;
580*f44e1126SVitaliy Gusev 
581*f44e1126SVitaliy Gusev struct layoutupdate4 {
582*f44e1126SVitaliy Gusev 	layouttype4 lou_type;
583*f44e1126SVitaliy Gusev 	struct {
584*f44e1126SVitaliy Gusev 		uint_t lou_body_len;
585*f44e1126SVitaliy Gusev 		char *lou_body_val;
586*f44e1126SVitaliy Gusev 	} lou_body;
587*f44e1126SVitaliy Gusev };
588*f44e1126SVitaliy Gusev typedef struct layoutupdate4 layoutupdate4;
589*f44e1126SVitaliy Gusev 
590*f44e1126SVitaliy Gusev #define	LAYOUT4_RET_REC_FILE 1
591*f44e1126SVitaliy Gusev #define	LAYOUT4_RET_REC_FSID 2
592*f44e1126SVitaliy Gusev #define	LAYOUT4_RET_REC_ALL 3
593*f44e1126SVitaliy Gusev 
594*f44e1126SVitaliy Gusev enum layoutreturn_type4 {
595*f44e1126SVitaliy Gusev 	LAYOUTRETURN4_FILE = LAYOUT4_RET_REC_FILE,
596*f44e1126SVitaliy Gusev 	LAYOUTRETURN4_FSID = LAYOUT4_RET_REC_FSID,
597*f44e1126SVitaliy Gusev 	LAYOUTRETURN4_ALL = LAYOUT4_RET_REC_ALL
598*f44e1126SVitaliy Gusev };
599*f44e1126SVitaliy Gusev typedef enum layoutreturn_type4 layoutreturn_type4;
600*f44e1126SVitaliy Gusev 
601*f44e1126SVitaliy Gusev /* layouttype4 specific data */
602*f44e1126SVitaliy Gusev 
603*f44e1126SVitaliy Gusev struct layoutreturn_file4 {
604*f44e1126SVitaliy Gusev 	offset4 lrf_offset;
605*f44e1126SVitaliy Gusev 	length4 lrf_length;
606*f44e1126SVitaliy Gusev 	stateid4 lrf_stateid;
607*f44e1126SVitaliy Gusev 	struct {
608*f44e1126SVitaliy Gusev 		uint_t lrf_body_len;
609*f44e1126SVitaliy Gusev 		char *lrf_body_val;
610*f44e1126SVitaliy Gusev 	} lrf_body;
611*f44e1126SVitaliy Gusev };
612*f44e1126SVitaliy Gusev typedef struct layoutreturn_file4 layoutreturn_file4;
613*f44e1126SVitaliy Gusev 
614*f44e1126SVitaliy Gusev struct layoutreturn4 {
615*f44e1126SVitaliy Gusev 	layoutreturn_type4 lr_returntype;
616*f44e1126SVitaliy Gusev 	union {
617*f44e1126SVitaliy Gusev 		layoutreturn_file4 lr_layout;
618*f44e1126SVitaliy Gusev 	} layoutreturn4_u;
619*f44e1126SVitaliy Gusev };
620*f44e1126SVitaliy Gusev typedef struct layoutreturn4 layoutreturn4;
621*f44e1126SVitaliy Gusev 
622*f44e1126SVitaliy Gusev enum fs4_status_type {
623*f44e1126SVitaliy Gusev 	STATUS4_FIXED = 1,
624*f44e1126SVitaliy Gusev 	STATUS4_UPDATED = 2,
625*f44e1126SVitaliy Gusev 	STATUS4_VERSIONED = 3,
626*f44e1126SVitaliy Gusev 	STATUS4_WRITABLE = 4,
627*f44e1126SVitaliy Gusev 	STATUS4_REFERRAL = 5
628*f44e1126SVitaliy Gusev };
629*f44e1126SVitaliy Gusev typedef enum fs4_status_type fs4_status_type;
630*f44e1126SVitaliy Gusev 
631*f44e1126SVitaliy Gusev struct fs4_status {
632*f44e1126SVitaliy Gusev 	bool_t fss_absent;
633*f44e1126SVitaliy Gusev 	fs4_status_type fss_type;
634*f44e1126SVitaliy Gusev 	utf8str_cs fss_source;
635*f44e1126SVitaliy Gusev 	utf8str_cs fss_current;
636*f44e1126SVitaliy Gusev 	int32_t fss_age;
637*f44e1126SVitaliy Gusev 	nfstime4 fss_version;
638*f44e1126SVitaliy Gusev };
639*f44e1126SVitaliy Gusev typedef struct fs4_status fs4_status;
640*f44e1126SVitaliy Gusev 
641*f44e1126SVitaliy Gusev #define	TH4_READ_SIZE 0
642*f44e1126SVitaliy Gusev #define	TH4_WRITE_SIZE 1
643*f44e1126SVitaliy Gusev #define	TH4_READ_IOSIZE 2
644*f44e1126SVitaliy Gusev #define	TH4_WRITE_IOSIZE 3
645*f44e1126SVitaliy Gusev 
646*f44e1126SVitaliy Gusev typedef length4 threshold4_read_size;
647*f44e1126SVitaliy Gusev 
648*f44e1126SVitaliy Gusev typedef length4 threshold4_write_size;
649*f44e1126SVitaliy Gusev 
650*f44e1126SVitaliy Gusev typedef length4 threshold4_read_iosize;
651*f44e1126SVitaliy Gusev 
652*f44e1126SVitaliy Gusev typedef length4 threshold4_write_iosize;
653*f44e1126SVitaliy Gusev 
654*f44e1126SVitaliy Gusev struct threshold_item4 {
655*f44e1126SVitaliy Gusev 	layouttype4 thi_layout_type;
656*f44e1126SVitaliy Gusev 	bitmap4 thi_hintset;
657*f44e1126SVitaliy Gusev 	struct {
658*f44e1126SVitaliy Gusev 		uint_t thi_hintlist_len;
659*f44e1126SVitaliy Gusev 		char *thi_hintlist_val;
660*f44e1126SVitaliy Gusev 	} thi_hintlist;
661*f44e1126SVitaliy Gusev };
662*f44e1126SVitaliy Gusev typedef struct threshold_item4 threshold_item4;
663*f44e1126SVitaliy Gusev 
664*f44e1126SVitaliy Gusev struct mdsthreshold4 {
665*f44e1126SVitaliy Gusev 	struct {
666*f44e1126SVitaliy Gusev 		uint_t mth_hints_len;
667*f44e1126SVitaliy Gusev 		threshold_item4 *mth_hints_val;
668*f44e1126SVitaliy Gusev 	} mth_hints;
669*f44e1126SVitaliy Gusev };
670*f44e1126SVitaliy Gusev typedef struct mdsthreshold4 mdsthreshold4;
671*f44e1126SVitaliy Gusev #define	RET4_DURATION_INFINITE 0xffffffffffffffff
672*f44e1126SVitaliy Gusev 
673*f44e1126SVitaliy Gusev struct retention_get4 {
674*f44e1126SVitaliy Gusev 	uint64_t rg_duration;
675*f44e1126SVitaliy Gusev 	struct {
676*f44e1126SVitaliy Gusev 		uint_t rg_begin_time_len;
677*f44e1126SVitaliy Gusev 		nfstime4 *rg_begin_time_val;
678*f44e1126SVitaliy Gusev 	} rg_begin_time;
679*f44e1126SVitaliy Gusev };
680*f44e1126SVitaliy Gusev typedef struct retention_get4 retention_get4;
681*f44e1126SVitaliy Gusev 
682*f44e1126SVitaliy Gusev struct retention_set4 {
683*f44e1126SVitaliy Gusev 	bool_t rs_enable;
684*f44e1126SVitaliy Gusev 	struct {
685*f44e1126SVitaliy Gusev 		uint_t rs_duration_len;
686*f44e1126SVitaliy Gusev 		uint64_t *rs_duration_val;
687*f44e1126SVitaliy Gusev 	} rs_duration;
688*f44e1126SVitaliy Gusev };
689*f44e1126SVitaliy Gusev typedef struct retention_set4 retention_set4;
690*f44e1126SVitaliy Gusev #define	FSCHARSET_CAP4_CONTAINS_NON_UTF8 0x1
691*f44e1126SVitaliy Gusev #define	FSCHARSET_CAP4_ALLOWS_ONLY_UTF8 0x2
692*f44e1126SVitaliy Gusev 
693*f44e1126SVitaliy Gusev typedef uint32_t fs_charset_cap4;
694*f44e1126SVitaliy Gusev 
695*f44e1126SVitaliy Gusev /* nfsv4.1 end */
696*f44e1126SVitaliy Gusev 
6977c478bd9Sstevel@tonic-gate typedef bitmap4 fattr4_supported_attrs;
6987c478bd9Sstevel@tonic-gate 
6997c478bd9Sstevel@tonic-gate typedef nfs_ftype4 fattr4_type;
7007c478bd9Sstevel@tonic-gate 
7017c478bd9Sstevel@tonic-gate typedef uint32_t fattr4_fh_expire_type;
7027c478bd9Sstevel@tonic-gate 
7037c478bd9Sstevel@tonic-gate typedef changeid4 fattr4_change;
7047c478bd9Sstevel@tonic-gate 
7057c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_size;
7067c478bd9Sstevel@tonic-gate 
7077c478bd9Sstevel@tonic-gate typedef bool_t fattr4_link_support;
7087c478bd9Sstevel@tonic-gate 
7097c478bd9Sstevel@tonic-gate typedef bool_t fattr4_symlink_support;
7107c478bd9Sstevel@tonic-gate 
7117c478bd9Sstevel@tonic-gate typedef bool_t fattr4_named_attr;
7127c478bd9Sstevel@tonic-gate 
7137c478bd9Sstevel@tonic-gate typedef fsid4 fattr4_fsid;
7147c478bd9Sstevel@tonic-gate 
7157c478bd9Sstevel@tonic-gate typedef bool_t fattr4_unique_handles;
7167c478bd9Sstevel@tonic-gate 
717bbe876c0SMarcel Telka typedef nfs_lease4 fattr4_lease_time;
7187c478bd9Sstevel@tonic-gate 
7197c478bd9Sstevel@tonic-gate typedef nfsstat4 fattr4_rdattr_error;
7207c478bd9Sstevel@tonic-gate 
7217c478bd9Sstevel@tonic-gate typedef struct {
7227c478bd9Sstevel@tonic-gate 	uint_t fattr4_acl_len;
7237c478bd9Sstevel@tonic-gate 	nfsace4 *fattr4_acl_val;
7247c478bd9Sstevel@tonic-gate } fattr4_acl;
7257c478bd9Sstevel@tonic-gate 
7267c478bd9Sstevel@tonic-gate typedef uint32_t fattr4_aclsupport;
7277c478bd9Sstevel@tonic-gate 
7287c478bd9Sstevel@tonic-gate typedef bool_t fattr4_archive;
7297c478bd9Sstevel@tonic-gate 
7307c478bd9Sstevel@tonic-gate typedef bool_t fattr4_cansettime;
7317c478bd9Sstevel@tonic-gate 
7327c478bd9Sstevel@tonic-gate typedef bool_t fattr4_case_insensitive;
7337c478bd9Sstevel@tonic-gate 
7347c478bd9Sstevel@tonic-gate typedef bool_t fattr4_case_preserving;
7357c478bd9Sstevel@tonic-gate 
7367c478bd9Sstevel@tonic-gate typedef bool_t fattr4_chown_restricted;
7377c478bd9Sstevel@tonic-gate 
7387c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_fileid;
7397c478bd9Sstevel@tonic-gate 
7407c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_files_avail;
7417c478bd9Sstevel@tonic-gate 
7427c478bd9Sstevel@tonic-gate typedef nfs_fh4 fattr4_filehandle;
7437c478bd9Sstevel@tonic-gate 
7447c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_files_free;
7457c478bd9Sstevel@tonic-gate 
7467c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_files_total;
7477c478bd9Sstevel@tonic-gate 
7487c478bd9Sstevel@tonic-gate typedef fs_locations4 fattr4_fs_locations;
7497c478bd9Sstevel@tonic-gate 
7507c478bd9Sstevel@tonic-gate typedef bool_t fattr4_hidden;
7517c478bd9Sstevel@tonic-gate 
7527c478bd9Sstevel@tonic-gate typedef bool_t fattr4_homogeneous;
7537c478bd9Sstevel@tonic-gate 
7547c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_maxfilesize;
7557c478bd9Sstevel@tonic-gate 
7567c478bd9Sstevel@tonic-gate typedef uint32_t fattr4_maxlink;
7577c478bd9Sstevel@tonic-gate 
7587c478bd9Sstevel@tonic-gate typedef uint32_t fattr4_maxname;
7597c478bd9Sstevel@tonic-gate 
7607c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_maxread;
7617c478bd9Sstevel@tonic-gate 
7627c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_maxwrite;
7637c478bd9Sstevel@tonic-gate 
764bbe876c0SMarcel Telka typedef ascii_REQUIRED4 fattr4_mimetype;
7657c478bd9Sstevel@tonic-gate 
7667c478bd9Sstevel@tonic-gate typedef mode4 fattr4_mode;
7677c478bd9Sstevel@tonic-gate 
768*f44e1126SVitaliy Gusev typedef mode_masked4 fattr4_mode_set_masked;
769*f44e1126SVitaliy Gusev 
7707c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_mounted_on_fileid;
7717c478bd9Sstevel@tonic-gate 
7727c478bd9Sstevel@tonic-gate typedef bool_t fattr4_no_trunc;
7737c478bd9Sstevel@tonic-gate 
7747c478bd9Sstevel@tonic-gate typedef uint32_t fattr4_numlinks;
7757c478bd9Sstevel@tonic-gate 
7767c478bd9Sstevel@tonic-gate typedef utf8string fattr4_owner;
7777c478bd9Sstevel@tonic-gate 
7787c478bd9Sstevel@tonic-gate typedef utf8string fattr4_owner_group;
7797c478bd9Sstevel@tonic-gate 
7807c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_quota_avail_hard;
7817c478bd9Sstevel@tonic-gate 
7827c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_quota_avail_soft;
7837c478bd9Sstevel@tonic-gate 
7847c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_quota_used;
7857c478bd9Sstevel@tonic-gate 
7867c478bd9Sstevel@tonic-gate typedef specdata4 fattr4_rawdev;
7877c478bd9Sstevel@tonic-gate 
7887c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_space_avail;
7897c478bd9Sstevel@tonic-gate 
7907c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_space_free;
7917c478bd9Sstevel@tonic-gate 
7927c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_space_total;
7937c478bd9Sstevel@tonic-gate 
7947c478bd9Sstevel@tonic-gate typedef uint64_t fattr4_space_used;
7957c478bd9Sstevel@tonic-gate 
7967c478bd9Sstevel@tonic-gate typedef bool_t fattr4_system;
7977c478bd9Sstevel@tonic-gate 
7987c478bd9Sstevel@tonic-gate typedef nfstime4 fattr4_time_access;
7997c478bd9Sstevel@tonic-gate 
8007c478bd9Sstevel@tonic-gate typedef settime4 fattr4_time_access_set;
8017c478bd9Sstevel@tonic-gate 
8027c478bd9Sstevel@tonic-gate typedef nfstime4 fattr4_time_backup;
8037c478bd9Sstevel@tonic-gate 
8047c478bd9Sstevel@tonic-gate typedef nfstime4 fattr4_time_create;
8057c478bd9Sstevel@tonic-gate 
8067c478bd9Sstevel@tonic-gate typedef nfstime4 fattr4_time_delta;
8077c478bd9Sstevel@tonic-gate 
8087c478bd9Sstevel@tonic-gate typedef nfstime4 fattr4_time_metadata;
8097c478bd9Sstevel@tonic-gate 
8107c478bd9Sstevel@tonic-gate typedef nfstime4 fattr4_time_modify;
8117c478bd9Sstevel@tonic-gate 
8127c478bd9Sstevel@tonic-gate typedef settime4 fattr4_time_modify_set;
813*f44e1126SVitaliy Gusev 
814*f44e1126SVitaliy Gusev /* nfsv4.1 */
815*f44e1126SVitaliy Gusev typedef bitmap4 fattr4_suppattr_exclcreat;
816*f44e1126SVitaliy Gusev 
817*f44e1126SVitaliy Gusev typedef nfstime4 fattr4_dir_notif_delay;
818*f44e1126SVitaliy Gusev 
819*f44e1126SVitaliy Gusev typedef nfstime4 fattr4_dirent_notif_delay;
820*f44e1126SVitaliy Gusev 
821*f44e1126SVitaliy Gusev typedef struct {
822*f44e1126SVitaliy Gusev 	uint_t fattr4_fs_layout_types_len;
823*f44e1126SVitaliy Gusev 	layouttype4 *fattr4_fs_layout_types_val;
824*f44e1126SVitaliy Gusev } fattr4_fs_layout_types;
825*f44e1126SVitaliy Gusev 
826*f44e1126SVitaliy Gusev typedef fs4_status fattr4_fs_status;
827*f44e1126SVitaliy Gusev 
828*f44e1126SVitaliy Gusev typedef fs_charset_cap4 fattr4_fs_charset_cap;
829*f44e1126SVitaliy Gusev 
830*f44e1126SVitaliy Gusev typedef uint32_t fattr4_layout_alignment;
831*f44e1126SVitaliy Gusev 
832*f44e1126SVitaliy Gusev typedef uint32_t fattr4_layout_blksize;
833*f44e1126SVitaliy Gusev 
834*f44e1126SVitaliy Gusev typedef layouthint4 fattr4_layout_hint;
835*f44e1126SVitaliy Gusev 
836*f44e1126SVitaliy Gusev typedef struct {
837*f44e1126SVitaliy Gusev 	uint_t fattr4_layout_types_len;
838*f44e1126SVitaliy Gusev 	layouttype4 *fattr4_layout_types_val;
839*f44e1126SVitaliy Gusev } fattr4_layout_types;
840*f44e1126SVitaliy Gusev 
841*f44e1126SVitaliy Gusev typedef mdsthreshold4 fattr4_mdsthreshold;
842*f44e1126SVitaliy Gusev 
843*f44e1126SVitaliy Gusev typedef retention_get4 fattr4_retention_get;
844*f44e1126SVitaliy Gusev 
845*f44e1126SVitaliy Gusev typedef retention_set4 fattr4_retention_set;
846*f44e1126SVitaliy Gusev 
847*f44e1126SVitaliy Gusev typedef retention_get4 fattr4_retentevt_get;
848*f44e1126SVitaliy Gusev 
849*f44e1126SVitaliy Gusev typedef retention_set4 fattr4_retentevt_set;
850*f44e1126SVitaliy Gusev 
851*f44e1126SVitaliy Gusev typedef uint64_t fattr4_retention_hold;
852*f44e1126SVitaliy Gusev 
853*f44e1126SVitaliy Gusev typedef nfsacl41 fattr4_dacl;
854*f44e1126SVitaliy Gusev 
855*f44e1126SVitaliy Gusev typedef nfsacl41 fattr4_sacl;
856*f44e1126SVitaliy Gusev 
857*f44e1126SVitaliy Gusev typedef change_policy4 fattr4_change_policy;
858*f44e1126SVitaliy Gusev 
859*f44e1126SVitaliy Gusev /* nfsv4.1 end */
860*f44e1126SVitaliy Gusev 
861*f44e1126SVitaliy Gusev /*
862*f44e1126SVitaliy Gusev  * REQUIRED Attributes
863*f44e1126SVitaliy Gusev  */
8647c478bd9Sstevel@tonic-gate #define	FATTR4_SUPPORTED_ATTRS 0
8657c478bd9Sstevel@tonic-gate #define	FATTR4_TYPE 1
8667c478bd9Sstevel@tonic-gate #define	FATTR4_FH_EXPIRE_TYPE 2
8677c478bd9Sstevel@tonic-gate #define	FATTR4_CHANGE 3
8687c478bd9Sstevel@tonic-gate #define	FATTR4_SIZE 4
8697c478bd9Sstevel@tonic-gate #define	FATTR4_LINK_SUPPORT 5
8707c478bd9Sstevel@tonic-gate #define	FATTR4_SYMLINK_SUPPORT 6
8717c478bd9Sstevel@tonic-gate #define	FATTR4_NAMED_ATTR 7
8727c478bd9Sstevel@tonic-gate #define	FATTR4_FSID 8
8737c478bd9Sstevel@tonic-gate #define	FATTR4_UNIQUE_HANDLES 9
8747c478bd9Sstevel@tonic-gate #define	FATTR4_LEASE_TIME 10
8757c478bd9Sstevel@tonic-gate #define	FATTR4_RDATTR_ERROR 11
8767c478bd9Sstevel@tonic-gate #define	FATTR4_FILEHANDLE 19
877*f44e1126SVitaliy Gusev /* new to NFSV4.1 */
878*f44e1126SVitaliy Gusev #define	FATTR4_SUPPATTR_EXCLCREAT 75
879*f44e1126SVitaliy Gusev 
880*f44e1126SVitaliy Gusev /*
881*f44e1126SVitaliy Gusev  * RECOMMENDED Attributes
882*f44e1126SVitaliy Gusev  */
8837c478bd9Sstevel@tonic-gate #define	FATTR4_ACL 12
8847c478bd9Sstevel@tonic-gate #define	FATTR4_ACLSUPPORT 13
8857c478bd9Sstevel@tonic-gate #define	FATTR4_ARCHIVE 14
8867c478bd9Sstevel@tonic-gate #define	FATTR4_CANSETTIME 15
8877c478bd9Sstevel@tonic-gate #define	FATTR4_CASE_INSENSITIVE 16
8887c478bd9Sstevel@tonic-gate #define	FATTR4_CASE_PRESERVING 17
8897c478bd9Sstevel@tonic-gate #define	FATTR4_CHOWN_RESTRICTED 18
8907c478bd9Sstevel@tonic-gate #define	FATTR4_FILEID 20
8917c478bd9Sstevel@tonic-gate #define	FATTR4_FILES_AVAIL 21
8927c478bd9Sstevel@tonic-gate #define	FATTR4_FILES_FREE 22
8937c478bd9Sstevel@tonic-gate #define	FATTR4_FILES_TOTAL 23
8947c478bd9Sstevel@tonic-gate #define	FATTR4_FS_LOCATIONS 24
8957c478bd9Sstevel@tonic-gate #define	FATTR4_HIDDEN 25
8967c478bd9Sstevel@tonic-gate #define	FATTR4_HOMOGENEOUS 26
8977c478bd9Sstevel@tonic-gate #define	FATTR4_MAXFILESIZE 27
8987c478bd9Sstevel@tonic-gate #define	FATTR4_MAXLINK 28
8997c478bd9Sstevel@tonic-gate #define	FATTR4_MAXNAME 29
9007c478bd9Sstevel@tonic-gate #define	FATTR4_MAXREAD 30
9017c478bd9Sstevel@tonic-gate #define	FATTR4_MAXWRITE 31
9027c478bd9Sstevel@tonic-gate #define	FATTR4_MIMETYPE 32
9037c478bd9Sstevel@tonic-gate #define	FATTR4_MODE 33
9047c478bd9Sstevel@tonic-gate #define	FATTR4_NO_TRUNC 34
9057c478bd9Sstevel@tonic-gate #define	FATTR4_NUMLINKS 35
9067c478bd9Sstevel@tonic-gate #define	FATTR4_OWNER 36
9077c478bd9Sstevel@tonic-gate #define	FATTR4_OWNER_GROUP 37
9087c478bd9Sstevel@tonic-gate #define	FATTR4_QUOTA_AVAIL_HARD 38
9097c478bd9Sstevel@tonic-gate #define	FATTR4_QUOTA_AVAIL_SOFT 39
9107c478bd9Sstevel@tonic-gate #define	FATTR4_QUOTA_USED 40
9117c478bd9Sstevel@tonic-gate #define	FATTR4_RAWDEV 41
9127c478bd9Sstevel@tonic-gate #define	FATTR4_SPACE_AVAIL 42
9137c478bd9Sstevel@tonic-gate #define	FATTR4_SPACE_FREE 43
9147c478bd9Sstevel@tonic-gate #define	FATTR4_SPACE_TOTAL 44
9157c478bd9Sstevel@tonic-gate #define	FATTR4_SPACE_USED 45
9167c478bd9Sstevel@tonic-gate #define	FATTR4_SYSTEM 46
9177c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_ACCESS 47
9187c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_ACCESS_SET 48
9197c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_BACKUP 49
9207c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_CREATE 50
9217c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_DELTA 51
9227c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_METADATA 52
9237c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_MODIFY 53
9247c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_MODIFY_SET 54
9257c478bd9Sstevel@tonic-gate #define	FATTR4_MOUNTED_ON_FILEID 55
9267c478bd9Sstevel@tonic-gate 
927*f44e1126SVitaliy Gusev /* new to NFSV4.1 */
928*f44e1126SVitaliy Gusev #define	FATTR4_DIR_NOTIF_DELAY 56
929*f44e1126SVitaliy Gusev #define	FATTR4_DIRENT_NOTIF_DELAY 57
930*f44e1126SVitaliy Gusev #define	FATTR4_DACL 58
931*f44e1126SVitaliy Gusev #define	FATTR4_SACL 59
932*f44e1126SVitaliy Gusev #define	FATTR4_CHANGE_POLICY 60
933*f44e1126SVitaliy Gusev #define	FATTR4_FS_STATUS 61
934*f44e1126SVitaliy Gusev #define	FATTR4_FS_LAYOUT_TYPES 62
935*f44e1126SVitaliy Gusev #define	FATTR4_LAYOUT_HINT 63
936*f44e1126SVitaliy Gusev #define	FATTR4_LAYOUT_TYPES 64
937*f44e1126SVitaliy Gusev #define	FATTR4_LAYOUT_BLKSIZE 65
938*f44e1126SVitaliy Gusev #define	FATTR4_LAYOUT_ALIGNMENT 66
939*f44e1126SVitaliy Gusev #define	FATTR4_FS_LOCATIONS_INFO 67
940*f44e1126SVitaliy Gusev #define	FATTR4_MDSTHRESHOLD 68
941*f44e1126SVitaliy Gusev #define	FATTR4_RETENTION_GET 69
942*f44e1126SVitaliy Gusev #define	FATTR4_RETENTION_SET 70
943*f44e1126SVitaliy Gusev #define	FATTR4_RETENTEVT_GET 71
944*f44e1126SVitaliy Gusev #define	FATTR4_RETENTEVT_SET 72
945*f44e1126SVitaliy Gusev #define	FATTR4_RETENTION_HOLD 73
946*f44e1126SVitaliy Gusev #define	FATTR4_MODE_SET_MASKED 74
947*f44e1126SVitaliy Gusev #define	FATTR4_SUPPATTR_EXCLCREAT 75
948*f44e1126SVitaliy Gusev #define	FATTR4_FS_CHARSET_CAP 76
949*f44e1126SVitaliy Gusev 
950*f44e1126SVitaliy Gusev /* new to NFSv4.2 */
951*f44e1126SVitaliy Gusev #define	FATTR4_SEC_LABEL 80
952*f44e1126SVitaliy Gusev 
9537c478bd9Sstevel@tonic-gate struct fattr4 {
9547c478bd9Sstevel@tonic-gate 	bitmap4 attrmask;
9557c478bd9Sstevel@tonic-gate 	char *attrlist4;
9567c478bd9Sstevel@tonic-gate 	uint_t attrlist4_len;
9577c478bd9Sstevel@tonic-gate };
9587c478bd9Sstevel@tonic-gate typedef struct fattr4 fattr4;
9597c478bd9Sstevel@tonic-gate 
9607c478bd9Sstevel@tonic-gate struct change_info4 {
9617c478bd9Sstevel@tonic-gate 	bool_t atomic;
9627c478bd9Sstevel@tonic-gate 	changeid4 before;
9637c478bd9Sstevel@tonic-gate 	changeid4 after;
9647c478bd9Sstevel@tonic-gate };
9657c478bd9Sstevel@tonic-gate typedef struct change_info4 change_info4;
9667c478bd9Sstevel@tonic-gate 
9677c478bd9Sstevel@tonic-gate struct clientaddr4 {
9687c478bd9Sstevel@tonic-gate 	char *r_netid;
9697c478bd9Sstevel@tonic-gate 	char *r_addr;
9707c478bd9Sstevel@tonic-gate };
9717c478bd9Sstevel@tonic-gate typedef struct clientaddr4 clientaddr4;
9727c478bd9Sstevel@tonic-gate 
9737c478bd9Sstevel@tonic-gate struct cb_client4 {
974bbe876c0SMarcel Telka 	uint_t cb_program;
9757c478bd9Sstevel@tonic-gate 	clientaddr4 cb_location;
9767c478bd9Sstevel@tonic-gate };
9777c478bd9Sstevel@tonic-gate typedef struct cb_client4 cb_client4;
9787c478bd9Sstevel@tonic-gate 
9797c478bd9Sstevel@tonic-gate struct nfs_client_id4 {
9807c478bd9Sstevel@tonic-gate 	verifier4 verifier;
9817c478bd9Sstevel@tonic-gate 	uint_t id_len;
9827c478bd9Sstevel@tonic-gate 	char *id_val;
9832f172c55SRobert Thurlow 	struct sockaddr *cl_addr;
9847c478bd9Sstevel@tonic-gate };
9857c478bd9Sstevel@tonic-gate typedef struct nfs_client_id4 nfs_client_id4;
9867c478bd9Sstevel@tonic-gate 
987*f44e1126SVitaliy Gusev struct client_owner4 {
988*f44e1126SVitaliy Gusev 	verifier4 co_verifier;
989*f44e1126SVitaliy Gusev 	struct {
990*f44e1126SVitaliy Gusev 		uint_t co_ownerid_len;
991*f44e1126SVitaliy Gusev 		char *co_ownerid_val;
992*f44e1126SVitaliy Gusev 	} co_ownerid;
993*f44e1126SVitaliy Gusev };
994*f44e1126SVitaliy Gusev typedef struct client_owner4 client_owner4;
995*f44e1126SVitaliy Gusev 
996*f44e1126SVitaliy Gusev struct server_owner4 {
997*f44e1126SVitaliy Gusev 	uint64_t so_minor_id;
998*f44e1126SVitaliy Gusev 	struct {
999*f44e1126SVitaliy Gusev 		uint_t so_major_id_len;
1000*f44e1126SVitaliy Gusev 		char *so_major_id_val;
1001*f44e1126SVitaliy Gusev 	} so_major_id;
1002*f44e1126SVitaliy Gusev };
1003*f44e1126SVitaliy Gusev typedef struct server_owner4 server_owner4;
1004*f44e1126SVitaliy Gusev 
1005*f44e1126SVitaliy Gusev struct state_owner4 {
1006*f44e1126SVitaliy Gusev 	clientid4 clientid;
1007*f44e1126SVitaliy Gusev 	struct {
1008*f44e1126SVitaliy Gusev 		uint_t owner_len;
1009*f44e1126SVitaliy Gusev 		char *owner_val;
1010*f44e1126SVitaliy Gusev 	} owner;
1011*f44e1126SVitaliy Gusev };
1012*f44e1126SVitaliy Gusev typedef struct state_owner4 state_owner4;
1013*f44e1126SVitaliy Gusev 
10147c478bd9Sstevel@tonic-gate struct open_owner4 {
10157c478bd9Sstevel@tonic-gate 	clientid4 clientid;
10167c478bd9Sstevel@tonic-gate 	uint_t owner_len;
10177c478bd9Sstevel@tonic-gate 	char *owner_val;
10187c478bd9Sstevel@tonic-gate };
10197c478bd9Sstevel@tonic-gate typedef struct open_owner4 open_owner4;
10207c478bd9Sstevel@tonic-gate 
10217c478bd9Sstevel@tonic-gate struct lock_owner4 {
10227c478bd9Sstevel@tonic-gate 	clientid4 clientid;
10237c478bd9Sstevel@tonic-gate 	uint_t owner_len;
10247c478bd9Sstevel@tonic-gate 	char *owner_val;
10257c478bd9Sstevel@tonic-gate };
10267c478bd9Sstevel@tonic-gate typedef struct lock_owner4 lock_owner4;
10277c478bd9Sstevel@tonic-gate 
10287c478bd9Sstevel@tonic-gate enum nfs_lock_type4 {
10297c478bd9Sstevel@tonic-gate 	READ_LT = 1,
10307c478bd9Sstevel@tonic-gate 	WRITE_LT = 2,
10317c478bd9Sstevel@tonic-gate 	READW_LT = 3,
10327c478bd9Sstevel@tonic-gate 	WRITEW_LT = 4
10337c478bd9Sstevel@tonic-gate };
10347c478bd9Sstevel@tonic-gate typedef enum nfs_lock_type4 nfs_lock_type4;
1035*f44e1126SVitaliy Gusev 
1036*f44e1126SVitaliy Gusev /*
1037*f44e1126SVitaliy Gusev  * nfsv4.1
1038*f44e1126SVitaliy Gusev  */
1039*f44e1126SVitaliy Gusev 
1040*f44e1126SVitaliy Gusev /* Input for computing subkeys */
1041*f44e1126SVitaliy Gusev 
1042*f44e1126SVitaliy Gusev enum ssv_subkey4 {
1043*f44e1126SVitaliy Gusev 	SSV4_SUBKEY_MIC_I2T = 1,
1044*f44e1126SVitaliy Gusev 	SSV4_SUBKEY_MIC_T2I = 2,
1045*f44e1126SVitaliy Gusev 	SSV4_SUBKEY_SEAL_I2T = 3,
1046*f44e1126SVitaliy Gusev 	SSV4_SUBKEY_SEAL_T2I = 4
1047*f44e1126SVitaliy Gusev };
1048*f44e1126SVitaliy Gusev typedef enum ssv_subkey4 ssv_subkey4;
1049*f44e1126SVitaliy Gusev 
1050*f44e1126SVitaliy Gusev /* Input for computing smt_hmac */
1051*f44e1126SVitaliy Gusev 
1052*f44e1126SVitaliy Gusev struct ssv_mic_plain_tkn4 {
1053*f44e1126SVitaliy Gusev 	uint32_t smpt_ssv_seq;
1054*f44e1126SVitaliy Gusev 	struct {
1055*f44e1126SVitaliy Gusev 		uint_t smpt_orig_plain_len;
1056*f44e1126SVitaliy Gusev 		char *smpt_orig_plain_val;
1057*f44e1126SVitaliy Gusev 	} smpt_orig_plain;
1058*f44e1126SVitaliy Gusev };
1059*f44e1126SVitaliy Gusev typedef struct ssv_mic_plain_tkn4 ssv_mic_plain_tkn4;
1060*f44e1126SVitaliy Gusev 
1061*f44e1126SVitaliy Gusev /* SSV GSS PerMsgToken token */
1062*f44e1126SVitaliy Gusev 
1063*f44e1126SVitaliy Gusev struct ssv_mic_tkn4 {
1064*f44e1126SVitaliy Gusev 	uint32_t smt_ssv_seq;
1065*f44e1126SVitaliy Gusev 	struct {
1066*f44e1126SVitaliy Gusev 		uint_t smt_hmac_len;
1067*f44e1126SVitaliy Gusev 		char *smt_hmac_val;
1068*f44e1126SVitaliy Gusev 	} smt_hmac;
1069*f44e1126SVitaliy Gusev };
1070*f44e1126SVitaliy Gusev typedef struct ssv_mic_tkn4 ssv_mic_tkn4;
1071*f44e1126SVitaliy Gusev 
1072*f44e1126SVitaliy Gusev /* Input for computing ssct_encr_data and ssct_hmac */
1073*f44e1126SVitaliy Gusev 
1074*f44e1126SVitaliy Gusev struct ssv_seal_plain_tkn4 {
1075*f44e1126SVitaliy Gusev 	struct {
1076*f44e1126SVitaliy Gusev 		uint_t sspt_confounder_len;
1077*f44e1126SVitaliy Gusev 		char *sspt_confounder_val;
1078*f44e1126SVitaliy Gusev 	} sspt_confounder;
1079*f44e1126SVitaliy Gusev 	uint32_t sspt_ssv_seq;
1080*f44e1126SVitaliy Gusev 	struct {
1081*f44e1126SVitaliy Gusev 		uint_t sspt_orig_plain_len;
1082*f44e1126SVitaliy Gusev 		char *sspt_orig_plain_val;
1083*f44e1126SVitaliy Gusev 	} sspt_orig_plain;
1084*f44e1126SVitaliy Gusev 	struct {
1085*f44e1126SVitaliy Gusev 		uint_t sspt_pad_len;
1086*f44e1126SVitaliy Gusev 		char *sspt_pad_val;
1087*f44e1126SVitaliy Gusev 	} sspt_pad;
1088*f44e1126SVitaliy Gusev };
1089*f44e1126SVitaliy Gusev typedef struct ssv_seal_plain_tkn4 ssv_seal_plain_tkn4;
1090*f44e1126SVitaliy Gusev 
1091*f44e1126SVitaliy Gusev /* SSV GSS SealedMessage token */
1092*f44e1126SVitaliy Gusev 
1093*f44e1126SVitaliy Gusev struct ssv_seal_cipher_tkn4 {
1094*f44e1126SVitaliy Gusev 	uint32_t ssct_ssv_seq;
1095*f44e1126SVitaliy Gusev 	struct {
1096*f44e1126SVitaliy Gusev 		uint_t ssct_iv_len;
1097*f44e1126SVitaliy Gusev 		char *ssct_iv_val;
1098*f44e1126SVitaliy Gusev 	} ssct_iv;
1099*f44e1126SVitaliy Gusev 	struct {
1100*f44e1126SVitaliy Gusev 		uint_t ssct_encr_data_len;
1101*f44e1126SVitaliy Gusev 		char *ssct_encr_data_val;
1102*f44e1126SVitaliy Gusev 	} ssct_encr_data;
1103*f44e1126SVitaliy Gusev 	struct {
1104*f44e1126SVitaliy Gusev 		uint_t ssct_hmac_len;
1105*f44e1126SVitaliy Gusev 		char *ssct_hmac_val;
1106*f44e1126SVitaliy Gusev 	} ssct_hmac;
1107*f44e1126SVitaliy Gusev };
1108*f44e1126SVitaliy Gusev typedef struct ssv_seal_cipher_tkn4 ssv_seal_cipher_tkn4;
1109*f44e1126SVitaliy Gusev 
1110*f44e1126SVitaliy Gusev struct fs_locations_server4 {
1111*f44e1126SVitaliy Gusev 	int32_t fls_currency;
1112*f44e1126SVitaliy Gusev 	struct {
1113*f44e1126SVitaliy Gusev 		uint_t fls_info_len;
1114*f44e1126SVitaliy Gusev 		char *fls_info_val;
1115*f44e1126SVitaliy Gusev 	} fls_info;
1116*f44e1126SVitaliy Gusev 	utf8str_cis fls_server;
1117*f44e1126SVitaliy Gusev };
1118*f44e1126SVitaliy Gusev typedef struct fs_locations_server4 fs_locations_server4;
1119*f44e1126SVitaliy Gusev #define	FSLI4BX_GFLAGS 0
1120*f44e1126SVitaliy Gusev #define	FSLI4BX_TFLAGS 1
1121*f44e1126SVitaliy Gusev #define	FSLI4BX_CLSIMUL 2
1122*f44e1126SVitaliy Gusev #define	FSLI4BX_CLHANDLE 3
1123*f44e1126SVitaliy Gusev #define	FSLI4BX_CLFILEID 4
1124*f44e1126SVitaliy Gusev #define	FSLI4BX_CLWRITEVER 5
1125*f44e1126SVitaliy Gusev #define	FSLI4BX_CLCHANGE 6
1126*f44e1126SVitaliy Gusev #define	FSLI4BX_CLREADDIR 7
1127*f44e1126SVitaliy Gusev #define	FSLI4BX_READRANK 8
1128*f44e1126SVitaliy Gusev #define	FSLI4BX_WRITERANK 9
1129*f44e1126SVitaliy Gusev #define	FSLI4BX_READORDER 10
1130*f44e1126SVitaliy Gusev #define	FSLI4BX_WRITEORDER 11
1131*f44e1126SVitaliy Gusev #define	FSLI4GF_WRITABLE 0x01
1132*f44e1126SVitaliy Gusev #define	FSLI4GF_CUR_REQ 0x02
1133*f44e1126SVitaliy Gusev #define	FSLI4GF_ABSENT 0x04
1134*f44e1126SVitaliy Gusev #define	FSLI4GF_GOING 0x08
1135*f44e1126SVitaliy Gusev #define	FSLI4GF_SPLIT 0x10
1136*f44e1126SVitaliy Gusev #define	FSLI4TF_RDMA 0x01
1137*f44e1126SVitaliy Gusev 
1138*f44e1126SVitaliy Gusev struct fs_locations_item4 {
1139*f44e1126SVitaliy Gusev 	struct {
1140*f44e1126SVitaliy Gusev 		uint_t fli_entries_len;
1141*f44e1126SVitaliy Gusev 		fs_locations_server4 *fli_entries_val;
1142*f44e1126SVitaliy Gusev 	} fli_entries;
1143*f44e1126SVitaliy Gusev 	pathname4 fli_rootpath;
1144*f44e1126SVitaliy Gusev };
1145*f44e1126SVitaliy Gusev typedef struct fs_locations_item4 fs_locations_item4;
1146*f44e1126SVitaliy Gusev 
1147*f44e1126SVitaliy Gusev struct fs_locations_info4 {
1148*f44e1126SVitaliy Gusev 	uint32_t fli_flags;
1149*f44e1126SVitaliy Gusev 	int32_t fli_valid_for;
1150*f44e1126SVitaliy Gusev 	pathname4 fli_fs_root;
1151*f44e1126SVitaliy Gusev 	struct {
1152*f44e1126SVitaliy Gusev 		uint_t fli_items_len;
1153*f44e1126SVitaliy Gusev 		fs_locations_item4 *fli_items_val;
1154*f44e1126SVitaliy Gusev 	} fli_items;
1155*f44e1126SVitaliy Gusev };
1156*f44e1126SVitaliy Gusev typedef struct fs_locations_info4 fs_locations_info4;
1157*f44e1126SVitaliy Gusev #define	FSLI4IF_VAR_SUB 0x00000001
1158*f44e1126SVitaliy Gusev 
1159*f44e1126SVitaliy Gusev typedef fs_locations_info4 fattr4_fs_locations_info;
1160*f44e1126SVitaliy Gusev #define	NFL4_UFLG_MASK			0x0000003F
1161*f44e1126SVitaliy Gusev #define	NFL4_UFLG_DENSE			0x00000001
1162*f44e1126SVitaliy Gusev #define	NFL4_UFLG_COMMIT_THRU_MDS	0x00000002
1163*f44e1126SVitaliy Gusev #define	NFL4_UFLG_STRIPE_UNIT_SIZE_MASK	0xFFFFFFC0
1164*f44e1126SVitaliy Gusev 
1165*f44e1126SVitaliy Gusev typedef uint32_t nfl_util4;
1166*f44e1126SVitaliy Gusev 
1167*f44e1126SVitaliy Gusev enum filelayout_hint_care4 {
1168*f44e1126SVitaliy Gusev 	NFLH4_CARE_DENSE = NFL4_UFLG_DENSE,
1169*f44e1126SVitaliy Gusev 	NFLH4_CARE_COMMIT_THRU_MDS = NFL4_UFLG_COMMIT_THRU_MDS,
1170*f44e1126SVitaliy Gusev 	NFLH4_CARE_STRIPE_UNIT_SIZE = 0x00000040,
1171*f44e1126SVitaliy Gusev 	NFLH4_CARE_STRIPE_COUNT = 0x00000080
1172*f44e1126SVitaliy Gusev };
1173*f44e1126SVitaliy Gusev typedef enum filelayout_hint_care4 filelayout_hint_care4;
1174*f44e1126SVitaliy Gusev 
1175*f44e1126SVitaliy Gusev /* Encoded in the loh_body field of data type layouthint4: */
1176*f44e1126SVitaliy Gusev 
1177*f44e1126SVitaliy Gusev struct nfsv4_1_file_layouthint4 {
1178*f44e1126SVitaliy Gusev 	uint32_t nflh_care;
1179*f44e1126SVitaliy Gusev 	nfl_util4 nflh_util;
1180*f44e1126SVitaliy Gusev 	count4 nflh_stripe_count;
1181*f44e1126SVitaliy Gusev };
1182*f44e1126SVitaliy Gusev typedef struct nfsv4_1_file_layouthint4 nfsv4_1_file_layouthint4;
1183*f44e1126SVitaliy Gusev 
1184*f44e1126SVitaliy Gusev typedef struct {
1185*f44e1126SVitaliy Gusev 	uint_t multipath_list4_len;
1186*f44e1126SVitaliy Gusev 	netaddr4 *multipath_list4_val;
1187*f44e1126SVitaliy Gusev } multipath_list4;
1188*f44e1126SVitaliy Gusev 
1189*f44e1126SVitaliy Gusev /*
1190*f44e1126SVitaliy Gusev  * Encoded in the da_addr_body field of
1191*f44e1126SVitaliy Gusev  * data type device_addr4:
1192*f44e1126SVitaliy Gusev  */
1193*f44e1126SVitaliy Gusev 
1194*f44e1126SVitaliy Gusev struct nfsv4_1_file_layout_ds_addr4 {
1195*f44e1126SVitaliy Gusev 	struct {
1196*f44e1126SVitaliy Gusev 		uint_t nflda_stripe_indices_len;
1197*f44e1126SVitaliy Gusev 		uint32_t *nflda_stripe_indices_val;
1198*f44e1126SVitaliy Gusev 	} nflda_stripe_indices;
1199*f44e1126SVitaliy Gusev 	struct {
1200*f44e1126SVitaliy Gusev 		uint_t nflda_multipath_ds_list_len;
1201*f44e1126SVitaliy Gusev 		multipath_list4 *nflda_multipath_ds_list_val;
1202*f44e1126SVitaliy Gusev 	} nflda_multipath_ds_list;
1203*f44e1126SVitaliy Gusev };
1204*f44e1126SVitaliy Gusev typedef struct nfsv4_1_file_layout_ds_addr4 nfsv4_1_file_layout_ds_addr4;
1205*f44e1126SVitaliy Gusev 
1206*f44e1126SVitaliy Gusev /*
1207*f44e1126SVitaliy Gusev  * Encoded in the loc_body field of
1208*f44e1126SVitaliy Gusev  * data type layout_content4:
1209*f44e1126SVitaliy Gusev  */
1210*f44e1126SVitaliy Gusev 
1211*f44e1126SVitaliy Gusev struct nfsv4_1_file_layout4 {
1212*f44e1126SVitaliy Gusev 	deviceid4 nfl_deviceid;
1213*f44e1126SVitaliy Gusev 	nfl_util4 nfl_util;
1214*f44e1126SVitaliy Gusev 	uint32_t nfl_first_stripe_index;
1215*f44e1126SVitaliy Gusev 	offset4 nfl_pattern_offset;
1216*f44e1126SVitaliy Gusev 	struct {
1217*f44e1126SVitaliy Gusev 		uint_t nfl_fh_list_len;
1218*f44e1126SVitaliy Gusev 		nfs_fh4 *nfl_fh_list_val;
1219*f44e1126SVitaliy Gusev 	} nfl_fh_list;
1220*f44e1126SVitaliy Gusev };
1221*f44e1126SVitaliy Gusev typedef struct nfsv4_1_file_layout4 nfsv4_1_file_layout4;
1222*f44e1126SVitaliy Gusev 
1223*f44e1126SVitaliy Gusev /*
1224*f44e1126SVitaliy Gusev  * Encoded in the lou_body field of data type layoutupdate4:
1225*f44e1126SVitaliy Gusev  *      Nothing. lou_body is a zero length array of bytes.
1226*f44e1126SVitaliy Gusev  */
1227*f44e1126SVitaliy Gusev 
1228*f44e1126SVitaliy Gusev /*
1229*f44e1126SVitaliy Gusev  * Encoded in the lrf_body field of
1230*f44e1126SVitaliy Gusev  * data type layoutreturn_file4:
1231*f44e1126SVitaliy Gusev  *      Nothing. lrf_body is a zero length array of bytes.
1232*f44e1126SVitaliy Gusev  */
1233*f44e1126SVitaliy Gusev 
1234*f44e1126SVitaliy Gusev /* nfsv4.1 end */
1235*f44e1126SVitaliy Gusev 
12367c478bd9Sstevel@tonic-gate #define	ACCESS4_READ 0x00000001
12377c478bd9Sstevel@tonic-gate #define	ACCESS4_LOOKUP 0x00000002
12387c478bd9Sstevel@tonic-gate #define	ACCESS4_MODIFY 0x00000004
12397c478bd9Sstevel@tonic-gate #define	ACCESS4_EXTEND 0x00000008
12407c478bd9Sstevel@tonic-gate #define	ACCESS4_DELETE 0x00000010
12417c478bd9Sstevel@tonic-gate #define	ACCESS4_EXECUTE 0x00000020
12427c478bd9Sstevel@tonic-gate 
12437c478bd9Sstevel@tonic-gate struct ACCESS4args {
12447c478bd9Sstevel@tonic-gate 	uint32_t access;
12457c478bd9Sstevel@tonic-gate };
12467c478bd9Sstevel@tonic-gate typedef struct ACCESS4args ACCESS4args;
12477c478bd9Sstevel@tonic-gate 
12487c478bd9Sstevel@tonic-gate struct ACCESS4res {
12497c478bd9Sstevel@tonic-gate 	nfsstat4 status;
12507c478bd9Sstevel@tonic-gate 	uint32_t supported;
12517c478bd9Sstevel@tonic-gate 	uint32_t access;
12527c478bd9Sstevel@tonic-gate };
12537c478bd9Sstevel@tonic-gate typedef struct ACCESS4res ACCESS4res;
12547c478bd9Sstevel@tonic-gate 
12557c478bd9Sstevel@tonic-gate struct CLOSE4args {
12567c478bd9Sstevel@tonic-gate 	seqid4 seqid;
12577c478bd9Sstevel@tonic-gate 	stateid4 open_stateid;
12587c478bd9Sstevel@tonic-gate };
12597c478bd9Sstevel@tonic-gate typedef struct CLOSE4args CLOSE4args;
12607c478bd9Sstevel@tonic-gate 
12617c478bd9Sstevel@tonic-gate struct CLOSE4res {
12627c478bd9Sstevel@tonic-gate 	nfsstat4 status;
12637c478bd9Sstevel@tonic-gate 	stateid4 open_stateid;
12647c478bd9Sstevel@tonic-gate };
12657c478bd9Sstevel@tonic-gate typedef struct CLOSE4res CLOSE4res;
12667c478bd9Sstevel@tonic-gate 
12677c478bd9Sstevel@tonic-gate struct COMMIT4args {
12687c478bd9Sstevel@tonic-gate 	offset4 offset;
12697c478bd9Sstevel@tonic-gate 	count4 count;
12707c478bd9Sstevel@tonic-gate };
12717c478bd9Sstevel@tonic-gate typedef struct COMMIT4args COMMIT4args;
12727c478bd9Sstevel@tonic-gate 
12737c478bd9Sstevel@tonic-gate struct COMMIT4res {
12747c478bd9Sstevel@tonic-gate 	nfsstat4 status;
12757c478bd9Sstevel@tonic-gate 	verifier4 writeverf;
12767c478bd9Sstevel@tonic-gate };
12777c478bd9Sstevel@tonic-gate typedef struct COMMIT4res COMMIT4res;
12787c478bd9Sstevel@tonic-gate 
12797c478bd9Sstevel@tonic-gate struct CREATE4args {
12807c478bd9Sstevel@tonic-gate 	nfs_ftype4 type;
12817c478bd9Sstevel@tonic-gate 	union {
12827c478bd9Sstevel@tonic-gate 		linktext4 linkdata;
12837c478bd9Sstevel@tonic-gate 		specdata4 devdata;
12847c478bd9Sstevel@tonic-gate 	} ftype4_u;
12857c478bd9Sstevel@tonic-gate 	component4 objname;
12867c478bd9Sstevel@tonic-gate 	fattr4 createattrs;
12877c478bd9Sstevel@tonic-gate };
12887c478bd9Sstevel@tonic-gate typedef struct CREATE4args CREATE4args;
12897c478bd9Sstevel@tonic-gate 
12907c478bd9Sstevel@tonic-gate struct CREATE4cargs {
12917c478bd9Sstevel@tonic-gate 	nfs_ftype4 type;
12927c478bd9Sstevel@tonic-gate 	union {
12937c478bd9Sstevel@tonic-gate 		char *clinkdata;
12947c478bd9Sstevel@tonic-gate 		specdata4 devdata;
12957c478bd9Sstevel@tonic-gate 	} ftype4_u;
12967c478bd9Sstevel@tonic-gate 	char *cname;
12977c478bd9Sstevel@tonic-gate 	fattr4 createattrs;
12987c478bd9Sstevel@tonic-gate };
12997c478bd9Sstevel@tonic-gate typedef struct CREATE4cargs CREATE4cargs;
13007c478bd9Sstevel@tonic-gate 
13017c478bd9Sstevel@tonic-gate struct CREATE4res {
13027c478bd9Sstevel@tonic-gate 	nfsstat4 status;
13037c478bd9Sstevel@tonic-gate 	change_info4 cinfo;
13047c478bd9Sstevel@tonic-gate 	bitmap4 attrset;
13057c478bd9Sstevel@tonic-gate };
13067c478bd9Sstevel@tonic-gate typedef struct CREATE4res CREATE4res;
13077c478bd9Sstevel@tonic-gate 
13087c478bd9Sstevel@tonic-gate struct DELEGPURGE4args {
13097c478bd9Sstevel@tonic-gate 	clientid4 clientid;
13107c478bd9Sstevel@tonic-gate };
13117c478bd9Sstevel@tonic-gate typedef struct DELEGPURGE4args DELEGPURGE4args;
13127c478bd9Sstevel@tonic-gate 
13137c478bd9Sstevel@tonic-gate struct DELEGPURGE4res {
13147c478bd9Sstevel@tonic-gate 	nfsstat4 status;
13157c478bd9Sstevel@tonic-gate };
13167c478bd9Sstevel@tonic-gate typedef struct DELEGPURGE4res DELEGPURGE4res;
13177c478bd9Sstevel@tonic-gate 
13187c478bd9Sstevel@tonic-gate struct DELEGRETURN4args {
13197c478bd9Sstevel@tonic-gate 	stateid4 deleg_stateid;
13207c478bd9Sstevel@tonic-gate };
13217c478bd9Sstevel@tonic-gate typedef struct DELEGRETURN4args DELEGRETURN4args;
13227c478bd9Sstevel@tonic-gate 
13237c478bd9Sstevel@tonic-gate struct DELEGRETURN4res {
13247c478bd9Sstevel@tonic-gate 	nfsstat4 status;
13257c478bd9Sstevel@tonic-gate };
13267c478bd9Sstevel@tonic-gate typedef struct DELEGRETURN4res DELEGRETURN4res;
13277c478bd9Sstevel@tonic-gate 
13287c478bd9Sstevel@tonic-gate struct mntinfo4;
13297c478bd9Sstevel@tonic-gate 
13307c478bd9Sstevel@tonic-gate struct GETATTR4args {
13317c478bd9Sstevel@tonic-gate 	bitmap4 attr_request;
13327c478bd9Sstevel@tonic-gate 	struct mntinfo4 *mi;
13337c478bd9Sstevel@tonic-gate };
13347c478bd9Sstevel@tonic-gate typedef struct GETATTR4args GETATTR4args;
13357c478bd9Sstevel@tonic-gate 
13367c478bd9Sstevel@tonic-gate struct nfs4_ga_ext_res;
13377c478bd9Sstevel@tonic-gate 
13387c478bd9Sstevel@tonic-gate struct nfs4_ga_res {
13397c478bd9Sstevel@tonic-gate 	vattr_t				n4g_va;
13407c478bd9Sstevel@tonic-gate 	unsigned			n4g_change_valid:1;
13417c478bd9Sstevel@tonic-gate 	unsigned			n4g_mon_fid_valid:1;
13427c478bd9Sstevel@tonic-gate 	unsigned			n4g_fsid_valid:1;
13437c478bd9Sstevel@tonic-gate 	uint_t				n4g_attrerr;
13447c478bd9Sstevel@tonic-gate 	uint_t				n4g_attrwhy;
13457c478bd9Sstevel@tonic-gate 	bitmap4				n4g_resbmap;
13467c478bd9Sstevel@tonic-gate 	fattr4_change			n4g_change;
13477c478bd9Sstevel@tonic-gate 	fattr4_fsid			n4g_fsid;
13487c478bd9Sstevel@tonic-gate 	fattr4_mounted_on_fileid	n4g_mon_fid;
13497c478bd9Sstevel@tonic-gate 	struct nfs4_ga_ext_res		*n4g_ext_res;
13507c478bd9Sstevel@tonic-gate 	vsecattr_t			n4g_vsa;
13517c478bd9Sstevel@tonic-gate };
13527c478bd9Sstevel@tonic-gate typedef struct nfs4_ga_res nfs4_ga_res_t;
13537c478bd9Sstevel@tonic-gate 
13547c478bd9Sstevel@tonic-gate struct GETATTR4res {
13557c478bd9Sstevel@tonic-gate 	nfsstat4 status;
13567c478bd9Sstevel@tonic-gate 	fattr4 obj_attributes;
13577c478bd9Sstevel@tonic-gate 	nfsstat4	ga_status;
13587c478bd9Sstevel@tonic-gate 	struct nfs4_ga_res ga_res;
13597c478bd9Sstevel@tonic-gate };
13607c478bd9Sstevel@tonic-gate typedef struct GETATTR4res GETATTR4res;
13617c478bd9Sstevel@tonic-gate 
13627c478bd9Sstevel@tonic-gate struct GETFH4res {
13637c478bd9Sstevel@tonic-gate 	nfsstat4 status;
13647c478bd9Sstevel@tonic-gate 	nfs_fh4 object;
13657c478bd9Sstevel@tonic-gate };
13667c478bd9Sstevel@tonic-gate typedef struct GETFH4res GETFH4res;
13677c478bd9Sstevel@tonic-gate 
13687c478bd9Sstevel@tonic-gate struct LINK4args {
13697c478bd9Sstevel@tonic-gate 	component4 newname;
13707c478bd9Sstevel@tonic-gate };
13717c478bd9Sstevel@tonic-gate typedef struct LINK4args LINK4args;
13727c478bd9Sstevel@tonic-gate 
13737c478bd9Sstevel@tonic-gate struct LINK4cargs {
13747c478bd9Sstevel@tonic-gate 	char *cnewname;
13757c478bd9Sstevel@tonic-gate };
13767c478bd9Sstevel@tonic-gate typedef struct LINK4cargs LINK4cargs;
13777c478bd9Sstevel@tonic-gate 
13787c478bd9Sstevel@tonic-gate struct LINK4res {
13797c478bd9Sstevel@tonic-gate 	nfsstat4 status;
13807c478bd9Sstevel@tonic-gate 	change_info4 cinfo;
13817c478bd9Sstevel@tonic-gate };
13827c478bd9Sstevel@tonic-gate typedef struct LINK4res LINK4res;
13837c478bd9Sstevel@tonic-gate 
13847c478bd9Sstevel@tonic-gate struct open_to_lock_owner4 {
13857c478bd9Sstevel@tonic-gate 	seqid4 open_seqid;
13867c478bd9Sstevel@tonic-gate 	stateid4 open_stateid;
13877c478bd9Sstevel@tonic-gate 	seqid4 lock_seqid;
13887c478bd9Sstevel@tonic-gate 	lock_owner4 lock_owner;
13897c478bd9Sstevel@tonic-gate };
13907c478bd9Sstevel@tonic-gate typedef struct open_to_lock_owner4 open_to_lock_owner4;
13917c478bd9Sstevel@tonic-gate 
13927c478bd9Sstevel@tonic-gate struct exist_lock_owner4 {
13937c478bd9Sstevel@tonic-gate 	stateid4 lock_stateid;
13947c478bd9Sstevel@tonic-gate 	seqid4 lock_seqid;
13957c478bd9Sstevel@tonic-gate };
13967c478bd9Sstevel@tonic-gate typedef struct exist_lock_owner4 exist_lock_owner4;
13977c478bd9Sstevel@tonic-gate 
13987c478bd9Sstevel@tonic-gate struct locker4 {
13997c478bd9Sstevel@tonic-gate 	bool_t new_lock_owner;
14007c478bd9Sstevel@tonic-gate 	union {
14017c478bd9Sstevel@tonic-gate 		open_to_lock_owner4 open_owner;
14027c478bd9Sstevel@tonic-gate 		exist_lock_owner4 lock_owner;
14037c478bd9Sstevel@tonic-gate 	} locker4_u;
14047c478bd9Sstevel@tonic-gate };
14057c478bd9Sstevel@tonic-gate typedef struct locker4 locker4;
14067c478bd9Sstevel@tonic-gate 
14077c478bd9Sstevel@tonic-gate struct LOCK4args {
14087c478bd9Sstevel@tonic-gate 	nfs_lock_type4 locktype;
14097c478bd9Sstevel@tonic-gate 	bool_t reclaim;
14107c478bd9Sstevel@tonic-gate 	offset4 offset;
14117c478bd9Sstevel@tonic-gate 	length4 length;
14127c478bd9Sstevel@tonic-gate 	locker4 locker;
14137c478bd9Sstevel@tonic-gate };
14147c478bd9Sstevel@tonic-gate typedef struct LOCK4args LOCK4args;
14157c478bd9Sstevel@tonic-gate 
14167c478bd9Sstevel@tonic-gate struct LOCK4denied {
14177c478bd9Sstevel@tonic-gate 	offset4 offset;
14187c478bd9Sstevel@tonic-gate 	length4 length;
14197c478bd9Sstevel@tonic-gate 	nfs_lock_type4 locktype;
14207c478bd9Sstevel@tonic-gate 	lock_owner4 owner;
14217c478bd9Sstevel@tonic-gate };
14227c478bd9Sstevel@tonic-gate typedef struct LOCK4denied LOCK4denied;
14237c478bd9Sstevel@tonic-gate 
14247c478bd9Sstevel@tonic-gate struct LOCK4res {
14257c478bd9Sstevel@tonic-gate 	nfsstat4 status;
14267c478bd9Sstevel@tonic-gate 	union {
14277c478bd9Sstevel@tonic-gate 		stateid4 lock_stateid;
14287c478bd9Sstevel@tonic-gate 		LOCK4denied denied;
14297c478bd9Sstevel@tonic-gate 	} LOCK4res_u;
14307c478bd9Sstevel@tonic-gate };
14317c478bd9Sstevel@tonic-gate typedef struct LOCK4res LOCK4res;
14327c478bd9Sstevel@tonic-gate 
14337c478bd9Sstevel@tonic-gate struct LOCKT4args {
14347c478bd9Sstevel@tonic-gate 	nfs_lock_type4 locktype;
14357c478bd9Sstevel@tonic-gate 	offset4 offset;
14367c478bd9Sstevel@tonic-gate 	length4 length;
14377c478bd9Sstevel@tonic-gate 	lock_owner4 owner;
14387c478bd9Sstevel@tonic-gate };
14397c478bd9Sstevel@tonic-gate typedef struct LOCKT4args LOCKT4args;
14407c478bd9Sstevel@tonic-gate 
14417c478bd9Sstevel@tonic-gate struct LOCKT4res {
14427c478bd9Sstevel@tonic-gate 	nfsstat4 status;
14437c478bd9Sstevel@tonic-gate 	LOCK4denied denied;
14447c478bd9Sstevel@tonic-gate };
14457c478bd9Sstevel@tonic-gate typedef struct LOCKT4res LOCKT4res;
14467c478bd9Sstevel@tonic-gate 
14477c478bd9Sstevel@tonic-gate struct LOCKU4args {
14487c478bd9Sstevel@tonic-gate 	nfs_lock_type4 locktype;
14497c478bd9Sstevel@tonic-gate 	seqid4 seqid;
14507c478bd9Sstevel@tonic-gate 	stateid4 lock_stateid;
14517c478bd9Sstevel@tonic-gate 	offset4 offset;
14527c478bd9Sstevel@tonic-gate 	length4 length;
14537c478bd9Sstevel@tonic-gate };
14547c478bd9Sstevel@tonic-gate typedef struct LOCKU4args LOCKU4args;
14557c478bd9Sstevel@tonic-gate 
14567c478bd9Sstevel@tonic-gate struct LOCKU4res {
14577c478bd9Sstevel@tonic-gate 	nfsstat4 status;
14587c478bd9Sstevel@tonic-gate 	stateid4 lock_stateid;
14597c478bd9Sstevel@tonic-gate };
14607c478bd9Sstevel@tonic-gate typedef struct LOCKU4res LOCKU4res;
14617c478bd9Sstevel@tonic-gate 
14627c478bd9Sstevel@tonic-gate struct LOOKUP4args {
14637c478bd9Sstevel@tonic-gate 	component4 objname;
14647c478bd9Sstevel@tonic-gate };
14657c478bd9Sstevel@tonic-gate typedef struct LOOKUP4args LOOKUP4args;
14667c478bd9Sstevel@tonic-gate 
14677c478bd9Sstevel@tonic-gate struct LOOKUP4cargs {
14687c478bd9Sstevel@tonic-gate 	char *cname;
14697c478bd9Sstevel@tonic-gate };
14707c478bd9Sstevel@tonic-gate typedef struct LOOKUP4cargs LOOKUP4cargs;
14717c478bd9Sstevel@tonic-gate 
14727c478bd9Sstevel@tonic-gate struct LOOKUP4res {
14737c478bd9Sstevel@tonic-gate 	nfsstat4 status;
14747c478bd9Sstevel@tonic-gate };
14757c478bd9Sstevel@tonic-gate typedef struct LOOKUP4res LOOKUP4res;
14767c478bd9Sstevel@tonic-gate 
14777c478bd9Sstevel@tonic-gate struct LOOKUPP4res {
14787c478bd9Sstevel@tonic-gate 	nfsstat4 status;
14797c478bd9Sstevel@tonic-gate };
14807c478bd9Sstevel@tonic-gate typedef struct LOOKUPP4res LOOKUPP4res;
14817c478bd9Sstevel@tonic-gate 
14827c478bd9Sstevel@tonic-gate struct NVERIFY4args {
14837c478bd9Sstevel@tonic-gate 	fattr4 obj_attributes;
14847c478bd9Sstevel@tonic-gate };
14857c478bd9Sstevel@tonic-gate typedef struct NVERIFY4args NVERIFY4args;
14867c478bd9Sstevel@tonic-gate 
14877c478bd9Sstevel@tonic-gate struct NVERIFY4res {
14887c478bd9Sstevel@tonic-gate 	nfsstat4 status;
14897c478bd9Sstevel@tonic-gate };
14907c478bd9Sstevel@tonic-gate typedef struct NVERIFY4res NVERIFY4res;
14917c478bd9Sstevel@tonic-gate 
14927c478bd9Sstevel@tonic-gate enum createmode4 {
14937c478bd9Sstevel@tonic-gate 	UNCHECKED4 = 0,
14947c478bd9Sstevel@tonic-gate 	GUARDED4 = 1,
1495*f44e1126SVitaliy Gusev 	EXCLUSIVE4 = 2,
1496*f44e1126SVitaliy Gusev 	EXCLUSIVE4_1 = 3
14977c478bd9Sstevel@tonic-gate };
14987c478bd9Sstevel@tonic-gate typedef enum createmode4 createmode4;
14997c478bd9Sstevel@tonic-gate 
1500*f44e1126SVitaliy Gusev struct creatverfattr {
1501*f44e1126SVitaliy Gusev 	verifier4 cva_verf;
1502*f44e1126SVitaliy Gusev 	fattr4 cva_attrs;
1503*f44e1126SVitaliy Gusev };
1504*f44e1126SVitaliy Gusev typedef struct creatverfattr creatverfattr;
1505*f44e1126SVitaliy Gusev 
1506*f44e1126SVitaliy Gusev struct createhow4 {
1507*f44e1126SVitaliy Gusev 	createmode4 mode;
1508*f44e1126SVitaliy Gusev 	union {
1509*f44e1126SVitaliy Gusev 		fattr4 createattrs;
1510*f44e1126SVitaliy Gusev 		verifier4 createverf;
1511*f44e1126SVitaliy Gusev 		creatverfattr ch_createboth;
1512*f44e1126SVitaliy Gusev 	} createhow4_u;
1513*f44e1126SVitaliy Gusev };
1514*f44e1126SVitaliy Gusev typedef struct createhow4 createhow4;
1515*f44e1126SVitaliy Gusev 
15167c478bd9Sstevel@tonic-gate enum opentype4 {
15177c478bd9Sstevel@tonic-gate 	OPEN4_NOCREATE = 0,
15187c478bd9Sstevel@tonic-gate 	OPEN4_CREATE = 1
15197c478bd9Sstevel@tonic-gate };
15207c478bd9Sstevel@tonic-gate typedef enum opentype4 opentype4;
15217c478bd9Sstevel@tonic-gate 
1522*f44e1126SVitaliy Gusev struct openflag4 {
1523*f44e1126SVitaliy Gusev 	opentype4 opentype;
1524*f44e1126SVitaliy Gusev 	union {
1525*f44e1126SVitaliy Gusev 		createhow4 how;
1526*f44e1126SVitaliy Gusev 	} openflag4_u;
1527*f44e1126SVitaliy Gusev };
1528*f44e1126SVitaliy Gusev typedef struct openflag4 openflag4;
1529*f44e1126SVitaliy Gusev 
15307c478bd9Sstevel@tonic-gate enum limit_by4 {
15317c478bd9Sstevel@tonic-gate 	NFS_LIMIT_SIZE = 1,
15327c478bd9Sstevel@tonic-gate 	NFS_LIMIT_BLOCKS = 2
15337c478bd9Sstevel@tonic-gate };
15347c478bd9Sstevel@tonic-gate typedef enum limit_by4 limit_by4;
15357c478bd9Sstevel@tonic-gate 
15367c478bd9Sstevel@tonic-gate struct nfs_modified_limit4 {
15377c478bd9Sstevel@tonic-gate 	uint32_t num_blocks;
15387c478bd9Sstevel@tonic-gate 	uint32_t bytes_per_block;
15397c478bd9Sstevel@tonic-gate };
15407c478bd9Sstevel@tonic-gate typedef struct nfs_modified_limit4 nfs_modified_limit4;
15417c478bd9Sstevel@tonic-gate 
15427c478bd9Sstevel@tonic-gate struct nfs_space_limit4 {
15437c478bd9Sstevel@tonic-gate 	limit_by4 limitby;
15447c478bd9Sstevel@tonic-gate 	union {
15457c478bd9Sstevel@tonic-gate 		uint64_t filesize;
15467c478bd9Sstevel@tonic-gate 		nfs_modified_limit4 mod_blocks;
15477c478bd9Sstevel@tonic-gate 	} nfs_space_limit4_u;
15487c478bd9Sstevel@tonic-gate };
15497c478bd9Sstevel@tonic-gate typedef struct nfs_space_limit4 nfs_space_limit4;
1550*f44e1126SVitaliy Gusev 
1551*f44e1126SVitaliy Gusev #define	OPEN4_SHARE_ACCESS_MASK 0x00FF
15527c478bd9Sstevel@tonic-gate #define	OPEN4_SHARE_ACCESS_READ 0x00000001
15537c478bd9Sstevel@tonic-gate #define	OPEN4_SHARE_ACCESS_WRITE 0x00000002
15547c478bd9Sstevel@tonic-gate #define	OPEN4_SHARE_ACCESS_BOTH 0x00000003
15557c478bd9Sstevel@tonic-gate #define	OPEN4_SHARE_DENY_NONE 0x00000000
15567c478bd9Sstevel@tonic-gate #define	OPEN4_SHARE_DENY_READ 0x00000001
15577c478bd9Sstevel@tonic-gate #define	OPEN4_SHARE_DENY_WRITE 0x00000002
15587c478bd9Sstevel@tonic-gate #define	OPEN4_SHARE_DENY_BOTH 0x00000003
1559*f44e1126SVitaliy Gusev /* nfsv4.1 */
1560*f44e1126SVitaliy Gusev #define	OPEN4_SHARE_WANT_MASK		0xFF00
1561*f44e1126SVitaliy Gusev #define	OPEN4_SHARE_WANT_NO_PREFERENCE	0x0000
1562*f44e1126SVitaliy Gusev #define	OPEN4_SHARE_WANT_READ_DELEG	0x0100
1563*f44e1126SVitaliy Gusev #define	OPEN4_SHARE_WANT_WRITE_DELEG	0x0200
1564*f44e1126SVitaliy Gusev #define	OPEN4_SHARE_WANT_ANY_DELEG	0x0300
1565*f44e1126SVitaliy Gusev #define	OPEN4_SHARE_WANT_NO_DELEG	0x0400
1566*f44e1126SVitaliy Gusev #define	OPEN4_SHARE_WANT_CANCEL		0x0500
1567*f44e1126SVitaliy Gusev 
1568*f44e1126SVitaliy Gusev #define	OPEN4_SHARE_WHEN_MASK			  0xF0000
1569*f44e1126SVitaliy Gusev #define	OPEN4_SHARE_SIGNAL_DELEG_WHEN_RESRC_AVAIL 0x10000
1570*f44e1126SVitaliy Gusev #define	OPEN4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED   0x20000
15717c478bd9Sstevel@tonic-gate 
15727c478bd9Sstevel@tonic-gate enum open_delegation_type4 {
15737c478bd9Sstevel@tonic-gate 	OPEN_DELEGATE_NONE = 0,
15747c478bd9Sstevel@tonic-gate 	OPEN_DELEGATE_READ = 1,
1575*f44e1126SVitaliy Gusev 	OPEN_DELEGATE_WRITE = 2,
1576*f44e1126SVitaliy Gusev 	OPEN_DELEGATE_NONE_EXT = 3
15777c478bd9Sstevel@tonic-gate };
15787c478bd9Sstevel@tonic-gate typedef enum open_delegation_type4 open_delegation_type4;
15797c478bd9Sstevel@tonic-gate 
15807c478bd9Sstevel@tonic-gate enum open_claim_type4 {
15817c478bd9Sstevel@tonic-gate 	CLAIM_NULL = 0,
15827c478bd9Sstevel@tonic-gate 	CLAIM_PREVIOUS = 1,
15837c478bd9Sstevel@tonic-gate 	CLAIM_DELEGATE_CUR = 2,
1584*f44e1126SVitaliy Gusev 	CLAIM_DELEGATE_PREV = 3,
1585*f44e1126SVitaliy Gusev 	CLAIM_FH = 4,
1586*f44e1126SVitaliy Gusev 	CLAIM_DELEG_CUR_FH = 5,
1587*f44e1126SVitaliy Gusev 	CLAIM_DELEG_PREV_FH = 6
15887c478bd9Sstevel@tonic-gate };
15897c478bd9Sstevel@tonic-gate typedef enum open_claim_type4 open_claim_type4;
15907c478bd9Sstevel@tonic-gate 
15917c478bd9Sstevel@tonic-gate struct open_claim_delegate_cur4 {
15927c478bd9Sstevel@tonic-gate 	stateid4 delegate_stateid;
15937c478bd9Sstevel@tonic-gate 	component4 file;
15947c478bd9Sstevel@tonic-gate };
15957c478bd9Sstevel@tonic-gate typedef struct open_claim_delegate_cur4 open_claim_delegate_cur4;
15967c478bd9Sstevel@tonic-gate 
15977c478bd9Sstevel@tonic-gate struct copen_claim_delegate_cur4 {
15987c478bd9Sstevel@tonic-gate 	stateid4 delegate_stateid;
15997c478bd9Sstevel@tonic-gate 	char *cfile;
16007c478bd9Sstevel@tonic-gate };
16017c478bd9Sstevel@tonic-gate typedef struct copen_claim_delegate_cur4 copen_claim_delegate_cur4;
16027c478bd9Sstevel@tonic-gate 
1603*f44e1126SVitaliy Gusev struct open_claim4 {
1604*f44e1126SVitaliy Gusev 	open_claim_type4 claim;
1605*f44e1126SVitaliy Gusev 	union {
1606*f44e1126SVitaliy Gusev 		component4 file;
1607*f44e1126SVitaliy Gusev 		open_delegation_type4 delegate_type;
1608*f44e1126SVitaliy Gusev 		open_claim_delegate_cur4 delegate_cur_info;
1609*f44e1126SVitaliy Gusev 		component4 file_delegate_prev;
1610*f44e1126SVitaliy Gusev 		stateid4 oc_delegate_stateid;
1611*f44e1126SVitaliy Gusev 	} open_claim4_u;
1612*f44e1126SVitaliy Gusev };
1613*f44e1126SVitaliy Gusev typedef struct open_claim4 open_claim4;
1614*f44e1126SVitaliy Gusev 
16157c478bd9Sstevel@tonic-gate struct OPEN4args {
16167c478bd9Sstevel@tonic-gate 	seqid4 seqid;
16177c478bd9Sstevel@tonic-gate 	uint32_t share_access;
1618*f44e1126SVitaliy Gusev 	uint32_t deleg_want;	/* nfsv4.1 */
16197c478bd9Sstevel@tonic-gate 	uint32_t share_deny;
16207c478bd9Sstevel@tonic-gate 	open_owner4 owner;
16217c478bd9Sstevel@tonic-gate 	opentype4 opentype;
16227c478bd9Sstevel@tonic-gate 	createmode4 mode;
16237c478bd9Sstevel@tonic-gate 	union {
16247c478bd9Sstevel@tonic-gate 		fattr4 createattrs;
16257c478bd9Sstevel@tonic-gate 		verifier4 createverf;
1626*f44e1126SVitaliy Gusev 		creatverfattr ch_createboth; /* for nfsv4.1 */
16277c478bd9Sstevel@tonic-gate 	} createhow4_u;
1628*f44e1126SVitaliy Gusev 	open_claim4 claim;
16297c478bd9Sstevel@tonic-gate };
16307c478bd9Sstevel@tonic-gate typedef struct OPEN4args OPEN4args;
16317c478bd9Sstevel@tonic-gate 
16327c478bd9Sstevel@tonic-gate struct OPEN4cargs {
16337c478bd9Sstevel@tonic-gate 	seqid4 seqid;
16347c478bd9Sstevel@tonic-gate 	uint32_t share_access;
16357c478bd9Sstevel@tonic-gate 	uint32_t share_deny;
16367c478bd9Sstevel@tonic-gate 	open_owner4 owner;
16377c478bd9Sstevel@tonic-gate 	opentype4 opentype;
16387c478bd9Sstevel@tonic-gate 	createmode4 mode;
16397c478bd9Sstevel@tonic-gate 	union {
16407c478bd9Sstevel@tonic-gate 		fattr4 createattrs;
16417c478bd9Sstevel@tonic-gate 		verifier4 createverf;
16427c478bd9Sstevel@tonic-gate 	} createhow4_u;
16437c478bd9Sstevel@tonic-gate 	open_claim_type4 claim;
16447c478bd9Sstevel@tonic-gate 	union {
16457c478bd9Sstevel@tonic-gate 		char *cfile;
16467c478bd9Sstevel@tonic-gate 		open_delegation_type4 delegate_type;
16477c478bd9Sstevel@tonic-gate 		copen_claim_delegate_cur4 delegate_cur_info;
16487c478bd9Sstevel@tonic-gate 		char *cfile_delegate_prev;
16497c478bd9Sstevel@tonic-gate 	} open_claim4_u;
16507c478bd9Sstevel@tonic-gate };
16517c478bd9Sstevel@tonic-gate typedef struct OPEN4cargs OPEN4cargs;
16527c478bd9Sstevel@tonic-gate 
16537c478bd9Sstevel@tonic-gate struct open_read_delegation4 {
16547c478bd9Sstevel@tonic-gate 	stateid4 stateid;
16557c478bd9Sstevel@tonic-gate 	bool_t recall;
16567c478bd9Sstevel@tonic-gate 	nfsace4 permissions;
16577c478bd9Sstevel@tonic-gate };
16587c478bd9Sstevel@tonic-gate typedef struct open_read_delegation4 open_read_delegation4;
16597c478bd9Sstevel@tonic-gate 
16607c478bd9Sstevel@tonic-gate struct open_write_delegation4 {
16617c478bd9Sstevel@tonic-gate 	stateid4 stateid;
16627c478bd9Sstevel@tonic-gate 	bool_t recall;
16637c478bd9Sstevel@tonic-gate 	nfs_space_limit4 space_limit;
16647c478bd9Sstevel@tonic-gate 	nfsace4 permissions;
16657c478bd9Sstevel@tonic-gate };
16667c478bd9Sstevel@tonic-gate typedef struct open_write_delegation4 open_write_delegation4;
16677c478bd9Sstevel@tonic-gate 
1668*f44e1126SVitaliy Gusev /* nfsv4.1 */
1669*f44e1126SVitaliy Gusev enum why_no_delegation4 {
1670*f44e1126SVitaliy Gusev 	WND4_NOT_WANTED = 0,
1671*f44e1126SVitaliy Gusev 	WND4_CONTENTION = 1,
1672*f44e1126SVitaliy Gusev 	WND4_RESOURCE = 2,
1673*f44e1126SVitaliy Gusev 	WND4_NOT_SUPP_FTYPE = 3,
1674*f44e1126SVitaliy Gusev 	WND4_WRITE_DELEG_NOT_SUPP_FTYPE = 4,
1675*f44e1126SVitaliy Gusev 	WND4_NOT_SUPP_UPGRADE = 5,
1676*f44e1126SVitaliy Gusev 	WND4_NOT_SUPP_DOWNGRADE = 6,
1677*f44e1126SVitaliy Gusev 	WND4_CANCELLED = 7,
1678*f44e1126SVitaliy Gusev 	WND4_IS_DIR = 8
1679*f44e1126SVitaliy Gusev };
1680*f44e1126SVitaliy Gusev typedef enum why_no_delegation4 why_no_delegation4;
1681*f44e1126SVitaliy Gusev 
1682*f44e1126SVitaliy Gusev struct open_none_delegation4 {
1683*f44e1126SVitaliy Gusev 	why_no_delegation4 ond_why;
1684*f44e1126SVitaliy Gusev 	union {
1685*f44e1126SVitaliy Gusev 		bool_t ond_server_will_push_deleg;
1686*f44e1126SVitaliy Gusev 		bool_t ond_server_will_signal_avail;
1687*f44e1126SVitaliy Gusev 	} open_none_delegation4_u;
1688*f44e1126SVitaliy Gusev };
1689*f44e1126SVitaliy Gusev typedef struct open_none_delegation4 open_none_delegation4;
1690*f44e1126SVitaliy Gusev 
1691*f44e1126SVitaliy Gusev /* nfsv4.1 end */
1692*f44e1126SVitaliy Gusev 
16937c478bd9Sstevel@tonic-gate struct open_delegation4 {
16947c478bd9Sstevel@tonic-gate 	open_delegation_type4 delegation_type;
16957c478bd9Sstevel@tonic-gate 	union {
16967c478bd9Sstevel@tonic-gate 		open_read_delegation4 read;
16977c478bd9Sstevel@tonic-gate 		open_write_delegation4 write;
1698*f44e1126SVitaliy Gusev 		open_none_delegation4 od_whynone; /* nfsv4.1 */
16997c478bd9Sstevel@tonic-gate 	} open_delegation4_u;
17007c478bd9Sstevel@tonic-gate };
17017c478bd9Sstevel@tonic-gate typedef struct open_delegation4 open_delegation4;
17027c478bd9Sstevel@tonic-gate #define	OPEN4_RESULT_CONFIRM 0x00000002
17037c478bd9Sstevel@tonic-gate #define	OPEN4_RESULT_LOCKTYPE_POSIX 0x00000004
1704*f44e1126SVitaliy Gusev #define	OPEN4_RESULT_PRESERVE_UNLINKED 0x00000008 /* nfsv4.1 */
1705*f44e1126SVitaliy Gusev #define	OPEN4_RESULT_MAY_NOTIFY_LOCK 0x00000020	  /* nfsv4.1 */
17067c478bd9Sstevel@tonic-gate 
17077c478bd9Sstevel@tonic-gate struct OPEN4res {
17087c478bd9Sstevel@tonic-gate 	nfsstat4 status;
17097c478bd9Sstevel@tonic-gate 	stateid4 stateid;
17107c478bd9Sstevel@tonic-gate 	change_info4 cinfo;
17117c478bd9Sstevel@tonic-gate 	uint32_t rflags;
17127c478bd9Sstevel@tonic-gate 	bitmap4 attrset;
17137c478bd9Sstevel@tonic-gate 	open_delegation4 delegation;
17147c478bd9Sstevel@tonic-gate };
17157c478bd9Sstevel@tonic-gate typedef struct OPEN4res OPEN4res;
17167c478bd9Sstevel@tonic-gate 
17177c478bd9Sstevel@tonic-gate struct OPENATTR4args {
17187c478bd9Sstevel@tonic-gate 	bool_t createdir;
17197c478bd9Sstevel@tonic-gate };
17207c478bd9Sstevel@tonic-gate typedef struct OPENATTR4args OPENATTR4args;
17217c478bd9Sstevel@tonic-gate 
17227c478bd9Sstevel@tonic-gate struct OPENATTR4res {
17237c478bd9Sstevel@tonic-gate 	nfsstat4 status;
17247c478bd9Sstevel@tonic-gate };
17257c478bd9Sstevel@tonic-gate typedef struct OPENATTR4res OPENATTR4res;
17267c478bd9Sstevel@tonic-gate 
17277c478bd9Sstevel@tonic-gate struct OPEN_CONFIRM4args {
17287c478bd9Sstevel@tonic-gate 	stateid4 open_stateid;
17297c478bd9Sstevel@tonic-gate 	seqid4 seqid;
17307c478bd9Sstevel@tonic-gate };
17317c478bd9Sstevel@tonic-gate typedef struct OPEN_CONFIRM4args OPEN_CONFIRM4args;
17327c478bd9Sstevel@tonic-gate 
17337c478bd9Sstevel@tonic-gate struct OPEN_CONFIRM4res {
17347c478bd9Sstevel@tonic-gate 	nfsstat4 status;
17357c478bd9Sstevel@tonic-gate 	stateid4 open_stateid;
17367c478bd9Sstevel@tonic-gate };
17377c478bd9Sstevel@tonic-gate typedef struct OPEN_CONFIRM4res OPEN_CONFIRM4res;
17387c478bd9Sstevel@tonic-gate 
17397c478bd9Sstevel@tonic-gate struct OPEN_DOWNGRADE4args {
17407c478bd9Sstevel@tonic-gate 	stateid4 open_stateid;
17417c478bd9Sstevel@tonic-gate 	seqid4 seqid;
17427c478bd9Sstevel@tonic-gate 	uint32_t share_access;
1743*f44e1126SVitaliy Gusev 	uint32_t deleg_want;	/* nfsv4.1 */
17447c478bd9Sstevel@tonic-gate 	uint32_t share_deny;
17457c478bd9Sstevel@tonic-gate };
17467c478bd9Sstevel@tonic-gate typedef struct OPEN_DOWNGRADE4args OPEN_DOWNGRADE4args;
17477c478bd9Sstevel@tonic-gate 
17487c478bd9Sstevel@tonic-gate struct OPEN_DOWNGRADE4res {
17497c478bd9Sstevel@tonic-gate 	nfsstat4 status;
17507c478bd9Sstevel@tonic-gate 	stateid4 open_stateid;
17517c478bd9Sstevel@tonic-gate };
17527c478bd9Sstevel@tonic-gate typedef struct OPEN_DOWNGRADE4res OPEN_DOWNGRADE4res;
17537c478bd9Sstevel@tonic-gate 
17547c478bd9Sstevel@tonic-gate struct PUTFH4args {
17557c478bd9Sstevel@tonic-gate 	nfs_fh4 object;
17567c478bd9Sstevel@tonic-gate };
17577c478bd9Sstevel@tonic-gate typedef struct PUTFH4args PUTFH4args;
17587c478bd9Sstevel@tonic-gate 
17597c478bd9Sstevel@tonic-gate /*
17607c478bd9Sstevel@tonic-gate  * Client only side PUTFH arguments
17617c478bd9Sstevel@tonic-gate  * This is really a nfs4_sharedfh_t * but the forward declaration
17627c478bd9Sstevel@tonic-gate  * is problematic;
17637c478bd9Sstevel@tonic-gate  */
17647c478bd9Sstevel@tonic-gate struct PUTFH4cargs {
17657c478bd9Sstevel@tonic-gate 	void *sfh;
17667c478bd9Sstevel@tonic-gate };
17677c478bd9Sstevel@tonic-gate typedef struct PUTFH4cargs PUTFH4cargs;
17687c478bd9Sstevel@tonic-gate 
17697c478bd9Sstevel@tonic-gate struct PUTFH4res {
17707c478bd9Sstevel@tonic-gate 	nfsstat4 status;
17717c478bd9Sstevel@tonic-gate };
17727c478bd9Sstevel@tonic-gate typedef struct PUTFH4res PUTFH4res;
17737c478bd9Sstevel@tonic-gate 
17747c478bd9Sstevel@tonic-gate struct PUTPUBFH4res {
17757c478bd9Sstevel@tonic-gate 	nfsstat4 status;
17767c478bd9Sstevel@tonic-gate };
17777c478bd9Sstevel@tonic-gate typedef struct PUTPUBFH4res PUTPUBFH4res;
17787c478bd9Sstevel@tonic-gate 
17797c478bd9Sstevel@tonic-gate struct PUTROOTFH4res {
17807c478bd9Sstevel@tonic-gate 	nfsstat4 status;
17817c478bd9Sstevel@tonic-gate };
17827c478bd9Sstevel@tonic-gate typedef struct PUTROOTFH4res PUTROOTFH4res;
17837c478bd9Sstevel@tonic-gate 
17847c478bd9Sstevel@tonic-gate struct READ4args {
17857c478bd9Sstevel@tonic-gate 	stateid4 stateid;
17867c478bd9Sstevel@tonic-gate 	offset4 offset;
17877c478bd9Sstevel@tonic-gate 	count4 count;
17887c478bd9Sstevel@tonic-gate 	/* The following are used for the XDR decode path */
17897c478bd9Sstevel@tonic-gate 	char *res_data_val_alt;
17907c478bd9Sstevel@tonic-gate 	mblk_t *res_mblk;
17917c478bd9Sstevel@tonic-gate 	struct uio *res_uiop;
17927c478bd9Sstevel@tonic-gate 	uint_t res_maxsize;
17930a701b1eSRobert Gordon #ifdef _KERNEL
17940a701b1eSRobert Gordon 	struct clist *wlist;
17950a701b1eSRobert Gordon 	CONN *conn;
17960a701b1eSRobert Gordon #endif
17977c478bd9Sstevel@tonic-gate };
17987c478bd9Sstevel@tonic-gate typedef struct READ4args READ4args;
17997c478bd9Sstevel@tonic-gate 
18007c478bd9Sstevel@tonic-gate struct READ4res {
18017c478bd9Sstevel@tonic-gate 	nfsstat4 status;
18027c478bd9Sstevel@tonic-gate 	bool_t eof;
18037c478bd9Sstevel@tonic-gate 	uint_t data_len;
18047c478bd9Sstevel@tonic-gate 	char *data_val;
18057c478bd9Sstevel@tonic-gate 	mblk_t *mblk;
18060a701b1eSRobert Gordon #ifdef _KERNEL
18070a701b1eSRobert Gordon 	struct clist *wlist;
18080a701b1eSRobert Gordon 	uint_t wlist_len;
18090a701b1eSRobert Gordon #endif
18107c478bd9Sstevel@tonic-gate };
18117c478bd9Sstevel@tonic-gate typedef struct READ4res READ4res;
18127c478bd9Sstevel@tonic-gate 
18137c478bd9Sstevel@tonic-gate struct rddir4_cache;
18147c478bd9Sstevel@tonic-gate 
18157c478bd9Sstevel@tonic-gate struct READDIR4args {
18167c478bd9Sstevel@tonic-gate 	nfs_cookie4 cookie;
18177c478bd9Sstevel@tonic-gate 	verifier4 cookieverf;
18187c478bd9Sstevel@tonic-gate 	count4 dircount;
18197c478bd9Sstevel@tonic-gate 	count4 maxcount;
18207c478bd9Sstevel@tonic-gate 	bitmap4 attr_request;
18217c478bd9Sstevel@tonic-gate 	vnode_t *dvp;
18227c478bd9Sstevel@tonic-gate 	struct mntinfo4 *mi;
18237c478bd9Sstevel@tonic-gate 	cred_t *cr;
18247c478bd9Sstevel@tonic-gate 	struct rddir4_cache *rdc;
18257c478bd9Sstevel@tonic-gate 	hrtime_t t;
18267c478bd9Sstevel@tonic-gate };
18277c478bd9Sstevel@tonic-gate typedef struct READDIR4args READDIR4args;
18287c478bd9Sstevel@tonic-gate 
18297c478bd9Sstevel@tonic-gate struct READDIR4res_clnt {
18307c478bd9Sstevel@tonic-gate 	nfsstat4 status;
18317c478bd9Sstevel@tonic-gate 	verifier4 cookieverf;
18327c478bd9Sstevel@tonic-gate 	bool_t eof;
18337c478bd9Sstevel@tonic-gate 	struct dirent64 *dotp, *dotdotp;
18347c478bd9Sstevel@tonic-gate 	struct rddir4_cache *rdc;
18357c478bd9Sstevel@tonic-gate };
18367c478bd9Sstevel@tonic-gate typedef struct READDIR4res_clnt READDIR4res_clnt;
18377c478bd9Sstevel@tonic-gate 
18387c478bd9Sstevel@tonic-gate struct READDIR4res {
18397c478bd9Sstevel@tonic-gate 	nfsstat4 status;
18407c478bd9Sstevel@tonic-gate 	verifier4 cookieverf;
18417c478bd9Sstevel@tonic-gate 	mblk_t *mblk;
18427c478bd9Sstevel@tonic-gate 	uint_t data_len;
18437c478bd9Sstevel@tonic-gate };
18447c478bd9Sstevel@tonic-gate typedef struct READDIR4res READDIR4res;
18457c478bd9Sstevel@tonic-gate 
18467c478bd9Sstevel@tonic-gate struct READLINK4res {
18477c478bd9Sstevel@tonic-gate 	nfsstat4 status;
18487c478bd9Sstevel@tonic-gate 	linktext4 link;
18497c478bd9Sstevel@tonic-gate };
18507c478bd9Sstevel@tonic-gate typedef struct READLINK4res READLINK4res;
18517c478bd9Sstevel@tonic-gate 
18527c478bd9Sstevel@tonic-gate struct REMOVE4args {
18537c478bd9Sstevel@tonic-gate 	component4 target;
18547c478bd9Sstevel@tonic-gate };
18557c478bd9Sstevel@tonic-gate typedef struct REMOVE4args REMOVE4args;
18567c478bd9Sstevel@tonic-gate 
18577c478bd9Sstevel@tonic-gate struct REMOVE4cargs {
18587c478bd9Sstevel@tonic-gate 	char *ctarget;
18597c478bd9Sstevel@tonic-gate };
18607c478bd9Sstevel@tonic-gate typedef struct REMOVE4cargs REMOVE4cargs;
18617c478bd9Sstevel@tonic-gate 
18627c478bd9Sstevel@tonic-gate struct REMOVE4res {
18637c478bd9Sstevel@tonic-gate 	nfsstat4 status;
18647c478bd9Sstevel@tonic-gate 	change_info4 cinfo;
18657c478bd9Sstevel@tonic-gate };
18667c478bd9Sstevel@tonic-gate typedef struct REMOVE4res REMOVE4res;
18677c478bd9Sstevel@tonic-gate 
18687c478bd9Sstevel@tonic-gate struct RENAME4args {
18697c478bd9Sstevel@tonic-gate 	component4 oldname;
18707c478bd9Sstevel@tonic-gate 	component4 newname;
18717c478bd9Sstevel@tonic-gate };
18727c478bd9Sstevel@tonic-gate typedef struct RENAME4args RENAME4args;
18737c478bd9Sstevel@tonic-gate 
18747c478bd9Sstevel@tonic-gate struct RENAME4cargs {
18757c478bd9Sstevel@tonic-gate 	char *coldname;
18767c478bd9Sstevel@tonic-gate 	char *cnewname;
18777c478bd9Sstevel@tonic-gate };
18787c478bd9Sstevel@tonic-gate typedef struct RENAME4cargs RENAME4cargs;
18797c478bd9Sstevel@tonic-gate 
18807c478bd9Sstevel@tonic-gate struct RENAME4res {
18817c478bd9Sstevel@tonic-gate 	nfsstat4 status;
18827c478bd9Sstevel@tonic-gate 	change_info4 source_cinfo;
18837c478bd9Sstevel@tonic-gate 	change_info4 target_cinfo;
18847c478bd9Sstevel@tonic-gate };
18857c478bd9Sstevel@tonic-gate typedef struct RENAME4res RENAME4res;
18867c478bd9Sstevel@tonic-gate 
18877c478bd9Sstevel@tonic-gate struct RENEW4args {
18887c478bd9Sstevel@tonic-gate 	clientid4 clientid;
18897c478bd9Sstevel@tonic-gate };
18907c478bd9Sstevel@tonic-gate typedef struct RENEW4args RENEW4args;
18917c478bd9Sstevel@tonic-gate 
18927c478bd9Sstevel@tonic-gate struct RENEW4res {
18937c478bd9Sstevel@tonic-gate 	nfsstat4 status;
18947c478bd9Sstevel@tonic-gate };
18957c478bd9Sstevel@tonic-gate typedef struct RENEW4res RENEW4res;
18967c478bd9Sstevel@tonic-gate 
18977c478bd9Sstevel@tonic-gate struct RESTOREFH4res {
18987c478bd9Sstevel@tonic-gate 	nfsstat4 status;
18997c478bd9Sstevel@tonic-gate };
19007c478bd9Sstevel@tonic-gate typedef struct RESTOREFH4res RESTOREFH4res;
19017c478bd9Sstevel@tonic-gate 
19027c478bd9Sstevel@tonic-gate struct SAVEFH4res {
19037c478bd9Sstevel@tonic-gate 	nfsstat4 status;
19047c478bd9Sstevel@tonic-gate };
19057c478bd9Sstevel@tonic-gate typedef struct SAVEFH4res SAVEFH4res;
19067c478bd9Sstevel@tonic-gate 
19077c478bd9Sstevel@tonic-gate struct SECINFO4args {
19087c478bd9Sstevel@tonic-gate 	component4 name;
19097c478bd9Sstevel@tonic-gate };
19107c478bd9Sstevel@tonic-gate typedef struct SECINFO4args SECINFO4args;
19117c478bd9Sstevel@tonic-gate 
19127c478bd9Sstevel@tonic-gate struct SECINFO4cargs {
19137c478bd9Sstevel@tonic-gate 	char *cname;
19147c478bd9Sstevel@tonic-gate };
19157c478bd9Sstevel@tonic-gate typedef struct SECINFO4cargs SECINFO4cargs;
19167c478bd9Sstevel@tonic-gate 
19177c478bd9Sstevel@tonic-gate enum rpc_gss_svc_t {
19187c478bd9Sstevel@tonic-gate 	RPC_GSS_SVC_NONE = 1,
19197c478bd9Sstevel@tonic-gate 	RPC_GSS_SVC_INTEGRITY = 2,
19207c478bd9Sstevel@tonic-gate 	RPC_GSS_SVC_PRIVACY = 3
19217c478bd9Sstevel@tonic-gate };
19227c478bd9Sstevel@tonic-gate typedef enum rpc_gss_svc_t rpc_gss_svc_t;
19237c478bd9Sstevel@tonic-gate 
19247c478bd9Sstevel@tonic-gate struct rpcsec_gss_info {
19257c478bd9Sstevel@tonic-gate 	sec_oid4 oid;
19267c478bd9Sstevel@tonic-gate 	qop4 qop;
19277c478bd9Sstevel@tonic-gate 	rpc_gss_svc_t service;
19287c478bd9Sstevel@tonic-gate };
19297c478bd9Sstevel@tonic-gate typedef struct rpcsec_gss_info rpcsec_gss_info;
19307c478bd9Sstevel@tonic-gate 
19317c478bd9Sstevel@tonic-gate struct secinfo4 {
19327c478bd9Sstevel@tonic-gate 	uint32_t flavor;
19337c478bd9Sstevel@tonic-gate 	rpcsec_gss_info flavor_info;
19347c478bd9Sstevel@tonic-gate };
19357c478bd9Sstevel@tonic-gate typedef struct secinfo4 secinfo4;
19367c478bd9Sstevel@tonic-gate 
19377c478bd9Sstevel@tonic-gate struct SECINFO4res {
19387c478bd9Sstevel@tonic-gate 	nfsstat4 status;
19397c478bd9Sstevel@tonic-gate 	uint_t SECINFO4resok_len;
19407c478bd9Sstevel@tonic-gate 	secinfo4 *SECINFO4resok_val;
19417c478bd9Sstevel@tonic-gate };
19427c478bd9Sstevel@tonic-gate typedef struct SECINFO4res SECINFO4res;
19437c478bd9Sstevel@tonic-gate 
19447c478bd9Sstevel@tonic-gate struct SETATTR4args {
19457c478bd9Sstevel@tonic-gate 	stateid4 stateid;
19467c478bd9Sstevel@tonic-gate 	fattr4 obj_attributes;
19477c478bd9Sstevel@tonic-gate };
19487c478bd9Sstevel@tonic-gate typedef struct SETATTR4args SETATTR4args;
19497c478bd9Sstevel@tonic-gate 
19507c478bd9Sstevel@tonic-gate struct SETATTR4res {
19517c478bd9Sstevel@tonic-gate 	nfsstat4 status;
19527c478bd9Sstevel@tonic-gate 	bitmap4 attrsset;
19537c478bd9Sstevel@tonic-gate };
19547c478bd9Sstevel@tonic-gate typedef struct SETATTR4res SETATTR4res;
19557c478bd9Sstevel@tonic-gate 
19567c478bd9Sstevel@tonic-gate struct SETCLIENTID4args {
19577c478bd9Sstevel@tonic-gate 	nfs_client_id4 client;
19587c478bd9Sstevel@tonic-gate 	cb_client4 callback;
19597c478bd9Sstevel@tonic-gate 	uint32_t callback_ident;
19607c478bd9Sstevel@tonic-gate };
19617c478bd9Sstevel@tonic-gate typedef struct SETCLIENTID4args SETCLIENTID4args;
19627c478bd9Sstevel@tonic-gate 
19637c478bd9Sstevel@tonic-gate struct SETCLIENTID4resok {
19647c478bd9Sstevel@tonic-gate 	clientid4 clientid;
19657c478bd9Sstevel@tonic-gate 	verifier4 setclientid_confirm;
19667c478bd9Sstevel@tonic-gate };
19677c478bd9Sstevel@tonic-gate typedef struct SETCLIENTID4resok SETCLIENTID4resok;
19687c478bd9Sstevel@tonic-gate 
19697c478bd9Sstevel@tonic-gate struct SETCLIENTID4res {
19707c478bd9Sstevel@tonic-gate 	nfsstat4 status;
19717c478bd9Sstevel@tonic-gate 	union {
19727c478bd9Sstevel@tonic-gate 		SETCLIENTID4resok resok4;
19737c478bd9Sstevel@tonic-gate 		clientaddr4 client_using;
19747c478bd9Sstevel@tonic-gate 	} SETCLIENTID4res_u;
19757c478bd9Sstevel@tonic-gate };
19767c478bd9Sstevel@tonic-gate typedef struct SETCLIENTID4res SETCLIENTID4res;
19777c478bd9Sstevel@tonic-gate 
19787c478bd9Sstevel@tonic-gate struct SETCLIENTID_CONFIRM4args {
19797c478bd9Sstevel@tonic-gate 	clientid4 clientid;
19807c478bd9Sstevel@tonic-gate 	verifier4 setclientid_confirm;
19817c478bd9Sstevel@tonic-gate };
19827c478bd9Sstevel@tonic-gate typedef struct SETCLIENTID_CONFIRM4args SETCLIENTID_CONFIRM4args;
19837c478bd9Sstevel@tonic-gate 
19847c478bd9Sstevel@tonic-gate struct SETCLIENTID_CONFIRM4res {
19857c478bd9Sstevel@tonic-gate 	nfsstat4 status;
19867c478bd9Sstevel@tonic-gate };
19877c478bd9Sstevel@tonic-gate typedef struct SETCLIENTID_CONFIRM4res SETCLIENTID_CONFIRM4res;
19887c478bd9Sstevel@tonic-gate 
19897c478bd9Sstevel@tonic-gate struct VERIFY4args {
19907c478bd9Sstevel@tonic-gate 	fattr4 obj_attributes;
19917c478bd9Sstevel@tonic-gate };
19927c478bd9Sstevel@tonic-gate typedef struct VERIFY4args VERIFY4args;
19937c478bd9Sstevel@tonic-gate 
19947c478bd9Sstevel@tonic-gate struct VERIFY4res {
19957c478bd9Sstevel@tonic-gate 	nfsstat4 status;
19967c478bd9Sstevel@tonic-gate };
19977c478bd9Sstevel@tonic-gate typedef struct VERIFY4res VERIFY4res;
19987c478bd9Sstevel@tonic-gate 
19997c478bd9Sstevel@tonic-gate enum stable_how4 {
20007c478bd9Sstevel@tonic-gate 	UNSTABLE4 = 0,
20017c478bd9Sstevel@tonic-gate 	DATA_SYNC4 = 1,
20027c478bd9Sstevel@tonic-gate 	FILE_SYNC4 = 2
20037c478bd9Sstevel@tonic-gate };
20047c478bd9Sstevel@tonic-gate typedef enum stable_how4 stable_how4;
20057c478bd9Sstevel@tonic-gate 
20067c478bd9Sstevel@tonic-gate /*
20077c478bd9Sstevel@tonic-gate  * mblk doesn't go over the wire.  If non-NULL, it points to an mblk chain
20087c478bd9Sstevel@tonic-gate  * for the write data.
20097c478bd9Sstevel@tonic-gate  */
20107c478bd9Sstevel@tonic-gate 
20117c478bd9Sstevel@tonic-gate struct WRITE4args {
20127c478bd9Sstevel@tonic-gate 	stateid4 stateid;
20137c478bd9Sstevel@tonic-gate 	offset4 offset;
20147c478bd9Sstevel@tonic-gate 	stable_how4 stable;
20157c478bd9Sstevel@tonic-gate 	uint_t data_len;
20167c478bd9Sstevel@tonic-gate 	char *data_val;
20177c478bd9Sstevel@tonic-gate 	mblk_t *mblk;
20180a701b1eSRobert Gordon #ifdef _KERNEL
20190a701b1eSRobert Gordon 	struct clist *rlist;
20200a701b1eSRobert Gordon 	CONN *conn;
20210a701b1eSRobert Gordon #endif
20227c478bd9Sstevel@tonic-gate };
20237c478bd9Sstevel@tonic-gate typedef struct WRITE4args WRITE4args;
20247c478bd9Sstevel@tonic-gate 
20257c478bd9Sstevel@tonic-gate struct WRITE4res {
20267c478bd9Sstevel@tonic-gate 	nfsstat4 status;
20277c478bd9Sstevel@tonic-gate 	count4 count;
20287c478bd9Sstevel@tonic-gate 	stable_how4 committed;
20297c478bd9Sstevel@tonic-gate 	verifier4 writeverf;
20307c478bd9Sstevel@tonic-gate };
20317c478bd9Sstevel@tonic-gate typedef struct WRITE4res WRITE4res;
20327c478bd9Sstevel@tonic-gate 
20337c478bd9Sstevel@tonic-gate struct RELEASE_LOCKOWNER4args {
20347c478bd9Sstevel@tonic-gate 	lock_owner4 lock_owner;
20357c478bd9Sstevel@tonic-gate };
20367c478bd9Sstevel@tonic-gate typedef struct RELEASE_LOCKOWNER4args RELEASE_LOCKOWNER4args;
20377c478bd9Sstevel@tonic-gate 
20387c478bd9Sstevel@tonic-gate struct RELEASE_LOCKOWNER4res {
20397c478bd9Sstevel@tonic-gate 	nfsstat4 status;
20407c478bd9Sstevel@tonic-gate };
20417c478bd9Sstevel@tonic-gate typedef struct RELEASE_LOCKOWNER4res RELEASE_LOCKOWNER4res;
20427c478bd9Sstevel@tonic-gate 
20437c478bd9Sstevel@tonic-gate struct ILLEGAL4res {
20447c478bd9Sstevel@tonic-gate 	nfsstat4 status;
20457c478bd9Sstevel@tonic-gate };
20467c478bd9Sstevel@tonic-gate typedef struct ILLEGAL4res ILLEGAL4res;
20477c478bd9Sstevel@tonic-gate 
2048*f44e1126SVitaliy Gusev /*
2049*f44e1126SVitaliy Gusev  * New operations for nfsv4.1
2050*f44e1126SVitaliy Gusev  */
2051*f44e1126SVitaliy Gusev typedef struct {
2052*f44e1126SVitaliy Gusev 	uint_t gsshandle4_t_len;
2053*f44e1126SVitaliy Gusev 	char *gsshandle4_t_val;
2054*f44e1126SVitaliy Gusev } gsshandle4_t;
2055*f44e1126SVitaliy Gusev 
2056*f44e1126SVitaliy Gusev struct gss_cb_handles4 {
2057*f44e1126SVitaliy Gusev 	rpc_gss_svc_t gcbp_service;
2058*f44e1126SVitaliy Gusev 	gsshandle4_t gcbp_handle_from_server;
2059*f44e1126SVitaliy Gusev 	gsshandle4_t gcbp_handle_from_client;
2060*f44e1126SVitaliy Gusev };
2061*f44e1126SVitaliy Gusev typedef struct gss_cb_handles4 gss_cb_handles4;
2062*f44e1126SVitaliy Gusev 
2063*f44e1126SVitaliy Gusev struct callback_sec_parms4 {
2064*f44e1126SVitaliy Gusev 	uint32_t cb_secflavor;
2065*f44e1126SVitaliy Gusev 	union {
2066*f44e1126SVitaliy Gusev 		authsys_parms cbsp_sys_cred;
2067*f44e1126SVitaliy Gusev 		gss_cb_handles4 cbsp_gss_handles;
2068*f44e1126SVitaliy Gusev 	} callback_sec_parms4_u;
2069*f44e1126SVitaliy Gusev };
2070*f44e1126SVitaliy Gusev typedef struct callback_sec_parms4 callback_sec_parms4;
2071*f44e1126SVitaliy Gusev 
2072*f44e1126SVitaliy Gusev struct BACKCHANNEL_CTL4args {
2073*f44e1126SVitaliy Gusev 	uint32_t bca_cb_program;
2074*f44e1126SVitaliy Gusev 	struct {
2075*f44e1126SVitaliy Gusev 		uint_t bca_sec_parms_len;
2076*f44e1126SVitaliy Gusev 		callback_sec_parms4 *bca_sec_parms_val;
2077*f44e1126SVitaliy Gusev 	} bca_sec_parms;
2078*f44e1126SVitaliy Gusev };
2079*f44e1126SVitaliy Gusev typedef struct BACKCHANNEL_CTL4args BACKCHANNEL_CTL4args;
2080*f44e1126SVitaliy Gusev 
2081*f44e1126SVitaliy Gusev struct BACKCHANNEL_CTL4res {
2082*f44e1126SVitaliy Gusev 	nfsstat4 bcr_status;
2083*f44e1126SVitaliy Gusev };
2084*f44e1126SVitaliy Gusev typedef struct BACKCHANNEL_CTL4res BACKCHANNEL_CTL4res;
2085*f44e1126SVitaliy Gusev 
2086*f44e1126SVitaliy Gusev enum channel_dir_from_client4 {
2087*f44e1126SVitaliy Gusev 	CDFC4_FORE = 0x1,
2088*f44e1126SVitaliy Gusev 	CDFC4_BACK = 0x2,
2089*f44e1126SVitaliy Gusev 	CDFC4_FORE_OR_BOTH = 0x3,
2090*f44e1126SVitaliy Gusev 	CDFC4_BACK_OR_BOTH = 0x7
2091*f44e1126SVitaliy Gusev };
2092*f44e1126SVitaliy Gusev typedef enum channel_dir_from_client4 channel_dir_from_client4;
2093*f44e1126SVitaliy Gusev 
2094*f44e1126SVitaliy Gusev struct BIND_CONN_TO_SESSION4args {
2095*f44e1126SVitaliy Gusev 	sessionid4 bctsa_sessid;
2096*f44e1126SVitaliy Gusev 	channel_dir_from_client4 bctsa_dir;
2097*f44e1126SVitaliy Gusev 	bool_t bctsa_use_conn_in_rdma_mode;
2098*f44e1126SVitaliy Gusev };
2099*f44e1126SVitaliy Gusev typedef struct BIND_CONN_TO_SESSION4args BIND_CONN_TO_SESSION4args;
2100*f44e1126SVitaliy Gusev 
2101*f44e1126SVitaliy Gusev enum channel_dir_from_server4 {
2102*f44e1126SVitaliy Gusev 	CDFS4_FORE = 0x1,
2103*f44e1126SVitaliy Gusev 	CDFS4_BACK = 0x2,
2104*f44e1126SVitaliy Gusev 	CDFS4_BOTH = 0x3
2105*f44e1126SVitaliy Gusev };
2106*f44e1126SVitaliy Gusev typedef enum channel_dir_from_server4 channel_dir_from_server4;
2107*f44e1126SVitaliy Gusev 
2108*f44e1126SVitaliy Gusev struct BIND_CONN_TO_SESSION4resok {
2109*f44e1126SVitaliy Gusev 	sessionid4 bctsr_sessid;
2110*f44e1126SVitaliy Gusev 	channel_dir_from_server4 bctsr_dir;
2111*f44e1126SVitaliy Gusev 	bool_t bctsr_use_conn_in_rdma_mode;
2112*f44e1126SVitaliy Gusev };
2113*f44e1126SVitaliy Gusev typedef struct BIND_CONN_TO_SESSION4resok BIND_CONN_TO_SESSION4resok;
2114*f44e1126SVitaliy Gusev 
2115*f44e1126SVitaliy Gusev struct BIND_CONN_TO_SESSION4res {
2116*f44e1126SVitaliy Gusev 	nfsstat4 bctsr_status;
2117*f44e1126SVitaliy Gusev 	union {
2118*f44e1126SVitaliy Gusev 		BIND_CONN_TO_SESSION4resok bctsr_resok4;
2119*f44e1126SVitaliy Gusev 	} BIND_CONN_TO_SESSION4res_u;
2120*f44e1126SVitaliy Gusev };
2121*f44e1126SVitaliy Gusev typedef struct BIND_CONN_TO_SESSION4res BIND_CONN_TO_SESSION4res;
2122*f44e1126SVitaliy Gusev 
2123*f44e1126SVitaliy Gusev #define	EXCHGID4_FLAG_SUPP_MOVED_REFER	  0x00000001
2124*f44e1126SVitaliy Gusev #define	EXCHGID4_FLAG_SUPP_MOVED_MIGR	  0x00000002
2125*f44e1126SVitaliy Gusev #define	EXCHGID4_FLAG_BIND_PRINC_STATEID  0x00000100
2126*f44e1126SVitaliy Gusev 
2127*f44e1126SVitaliy Gusev #define	EXCHGID4_FLAG_USE_NON_PNFS	  0x00010000
2128*f44e1126SVitaliy Gusev #define	EXCHGID4_FLAG_USE_PNFS_MDS	  0x00020000
2129*f44e1126SVitaliy Gusev #define	EXCHGID4_FLAG_USE_PNFS_DS	  0x00040000
2130*f44e1126SVitaliy Gusev #define	EXCHGID4_FLAG_MASK_PNFS		  0x00070000
2131*f44e1126SVitaliy Gusev 
2132*f44e1126SVitaliy Gusev #define	EXCHGID4_FLAG_UPD_CONFIRMED_REC_A 0x40000000
2133*f44e1126SVitaliy Gusev #define	EXCHGID4_FLAG_CONFIRMED_R	  0x80000000
2134*f44e1126SVitaliy Gusev 
2135*f44e1126SVitaliy Gusev #define	EXID4_FLAG_MASK		0x40070103
2136*f44e1126SVitaliy Gusev 
2137*f44e1126SVitaliy Gusev struct state_protect_ops4 {
2138*f44e1126SVitaliy Gusev 	bitmap4 spo_must_enforce;
2139*f44e1126SVitaliy Gusev 	bitmap4 spo_must_allow;
2140*f44e1126SVitaliy Gusev };
2141*f44e1126SVitaliy Gusev typedef struct state_protect_ops4 state_protect_ops4;
2142*f44e1126SVitaliy Gusev 
2143*f44e1126SVitaliy Gusev struct ssv_sp_parms4 {
2144*f44e1126SVitaliy Gusev 	state_protect_ops4 ssp_ops;
2145*f44e1126SVitaliy Gusev 	struct {
2146*f44e1126SVitaliy Gusev 		uint_t ssp_hash_algs_len;
2147*f44e1126SVitaliy Gusev 		sec_oid4 *ssp_hash_algs_val;
2148*f44e1126SVitaliy Gusev 	} ssp_hash_algs;
2149*f44e1126SVitaliy Gusev 	struct {
2150*f44e1126SVitaliy Gusev 		uint_t ssp_encr_algs_len;
2151*f44e1126SVitaliy Gusev 		sec_oid4 *ssp_encr_algs_val;
2152*f44e1126SVitaliy Gusev 	} ssp_encr_algs;
2153*f44e1126SVitaliy Gusev 	uint32_t ssp_window;
2154*f44e1126SVitaliy Gusev 	uint32_t ssp_num_gss_handles;
2155*f44e1126SVitaliy Gusev };
2156*f44e1126SVitaliy Gusev typedef struct ssv_sp_parms4 ssv_sp_parms4;
2157*f44e1126SVitaliy Gusev 
2158*f44e1126SVitaliy Gusev enum state_protect_how4 {
2159*f44e1126SVitaliy Gusev 	SP4_NONE = 0,
2160*f44e1126SVitaliy Gusev 	SP4_MACH_CRED = 1,
2161*f44e1126SVitaliy Gusev 	SP4_SSV = 2
2162*f44e1126SVitaliy Gusev };
2163*f44e1126SVitaliy Gusev typedef enum state_protect_how4 state_protect_how4;
2164*f44e1126SVitaliy Gusev 
2165*f44e1126SVitaliy Gusev struct state_protect4_a {
2166*f44e1126SVitaliy Gusev 	state_protect_how4 spa_how;
2167*f44e1126SVitaliy Gusev 	union {
2168*f44e1126SVitaliy Gusev 		state_protect_ops4 spa_mach_ops;
2169*f44e1126SVitaliy Gusev 		ssv_sp_parms4 spa_ssv_parms;
2170*f44e1126SVitaliy Gusev 	} state_protect4_a_u;
2171*f44e1126SVitaliy Gusev };
2172*f44e1126SVitaliy Gusev typedef struct state_protect4_a state_protect4_a;
2173*f44e1126SVitaliy Gusev 
2174*f44e1126SVitaliy Gusev struct EXCHANGE_ID4args {
2175*f44e1126SVitaliy Gusev 	client_owner4 eia_clientowner;
2176*f44e1126SVitaliy Gusev 	uint32_t eia_flags;
2177*f44e1126SVitaliy Gusev 	state_protect4_a eia_state_protect;
2178*f44e1126SVitaliy Gusev 	struct {
2179*f44e1126SVitaliy Gusev 		uint_t eia_client_impl_id_len;
2180*f44e1126SVitaliy Gusev 		nfs_impl_id4 *eia_client_impl_id_val;
2181*f44e1126SVitaliy Gusev 	} eia_client_impl_id;
2182*f44e1126SVitaliy Gusev };
2183*f44e1126SVitaliy Gusev typedef struct EXCHANGE_ID4args EXCHANGE_ID4args;
2184*f44e1126SVitaliy Gusev 
2185*f44e1126SVitaliy Gusev struct ssv_prot_info4 {
2186*f44e1126SVitaliy Gusev 	state_protect_ops4 spi_ops;
2187*f44e1126SVitaliy Gusev 	uint32_t spi_hash_alg;
2188*f44e1126SVitaliy Gusev 	uint32_t spi_encr_alg;
2189*f44e1126SVitaliy Gusev 	uint32_t spi_ssv_len;
2190*f44e1126SVitaliy Gusev 	uint32_t spi_window;
2191*f44e1126SVitaliy Gusev 	struct {
2192*f44e1126SVitaliy Gusev 		uint_t spi_handles_len;
2193*f44e1126SVitaliy Gusev 		gsshandle4_t *spi_handles_val;
2194*f44e1126SVitaliy Gusev 	} spi_handles;
2195*f44e1126SVitaliy Gusev };
2196*f44e1126SVitaliy Gusev typedef struct ssv_prot_info4 ssv_prot_info4;
2197*f44e1126SVitaliy Gusev 
2198*f44e1126SVitaliy Gusev struct state_protect4_r {
2199*f44e1126SVitaliy Gusev 	state_protect_how4 spr_how;
2200*f44e1126SVitaliy Gusev 	union {
2201*f44e1126SVitaliy Gusev 		state_protect_ops4 spr_mach_ops;
2202*f44e1126SVitaliy Gusev 		ssv_prot_info4 spr_ssv_info;
2203*f44e1126SVitaliy Gusev 	} state_protect4_r_u;
2204*f44e1126SVitaliy Gusev };
2205*f44e1126SVitaliy Gusev typedef struct state_protect4_r state_protect4_r;
2206*f44e1126SVitaliy Gusev 
2207*f44e1126SVitaliy Gusev struct EXCHANGE_ID4resok {
2208*f44e1126SVitaliy Gusev 	clientid4 eir_clientid;
2209*f44e1126SVitaliy Gusev 	sequenceid4 eir_sequenceid;
2210*f44e1126SVitaliy Gusev 	uint32_t eir_flags;
2211*f44e1126SVitaliy Gusev 	state_protect4_r eir_state_protect;
2212*f44e1126SVitaliy Gusev 	server_owner4 eir_server_owner;
2213*f44e1126SVitaliy Gusev 	struct eir_server_scope {
2214*f44e1126SVitaliy Gusev 		uint_t eir_server_scope_len;
2215*f44e1126SVitaliy Gusev 		char *eir_server_scope_val;
2216*f44e1126SVitaliy Gusev 	} eir_server_scope;
2217*f44e1126SVitaliy Gusev 	struct {
2218*f44e1126SVitaliy Gusev 		uint_t eir_server_impl_id_len;
2219*f44e1126SVitaliy Gusev 		nfs_impl_id4 *eir_server_impl_id_val;
2220*f44e1126SVitaliy Gusev 	} eir_server_impl_id;
2221*f44e1126SVitaliy Gusev };
2222*f44e1126SVitaliy Gusev typedef struct EXCHANGE_ID4resok EXCHANGE_ID4resok;
2223*f44e1126SVitaliy Gusev 
2224*f44e1126SVitaliy Gusev struct EXCHANGE_ID4res {
2225*f44e1126SVitaliy Gusev 	nfsstat4 eir_status;
2226*f44e1126SVitaliy Gusev 	union {
2227*f44e1126SVitaliy Gusev 		EXCHANGE_ID4resok eir_resok4;
2228*f44e1126SVitaliy Gusev 	} EXCHANGE_ID4res_u;
2229*f44e1126SVitaliy Gusev };
2230*f44e1126SVitaliy Gusev typedef struct EXCHANGE_ID4res EXCHANGE_ID4res;
2231*f44e1126SVitaliy Gusev 
2232*f44e1126SVitaliy Gusev struct channel_attrs4 {
2233*f44e1126SVitaliy Gusev 	count4 ca_headerpadsize;
2234*f44e1126SVitaliy Gusev 	count4 ca_maxrequestsize;
2235*f44e1126SVitaliy Gusev 	count4 ca_maxresponsesize;
2236*f44e1126SVitaliy Gusev 	count4 ca_maxresponsesize_cached;
2237*f44e1126SVitaliy Gusev 	count4 ca_maxoperations;
2238*f44e1126SVitaliy Gusev 	count4 ca_maxrequests;
2239*f44e1126SVitaliy Gusev 	struct {
2240*f44e1126SVitaliy Gusev 		uint_t ca_rdma_ird_len;
2241*f44e1126SVitaliy Gusev 		uint32_t *ca_rdma_ird_val;
2242*f44e1126SVitaliy Gusev 	} ca_rdma_ird;
2243*f44e1126SVitaliy Gusev };
2244*f44e1126SVitaliy Gusev typedef struct channel_attrs4 channel_attrs4;
2245*f44e1126SVitaliy Gusev 
2246*f44e1126SVitaliy Gusev #define	CREATE_SESSION4_FLAG_PERSIST 0x00000001
2247*f44e1126SVitaliy Gusev #define	CREATE_SESSION4_FLAG_CONN_BACK_CHAN 0x00000002
2248*f44e1126SVitaliy Gusev #define	CREATE_SESSION4_FLAG_CONN_RDMA 0x00000004
2249*f44e1126SVitaliy Gusev 
2250*f44e1126SVitaliy Gusev #define	CREATE_SESSION4_FLAG_MASK 0x07
2251*f44e1126SVitaliy Gusev 
2252*f44e1126SVitaliy Gusev struct CREATE_SESSION4args {
2253*f44e1126SVitaliy Gusev 	clientid4 csa_clientid;
2254*f44e1126SVitaliy Gusev 	sequenceid4 csa_sequence;
2255*f44e1126SVitaliy Gusev 	uint32_t csa_flags;
2256*f44e1126SVitaliy Gusev 	channel_attrs4 csa_fore_chan_attrs;
2257*f44e1126SVitaliy Gusev 	channel_attrs4 csa_back_chan_attrs;
2258*f44e1126SVitaliy Gusev 	uint32_t csa_cb_program;
2259*f44e1126SVitaliy Gusev 	struct {
2260*f44e1126SVitaliy Gusev 		uint_t csa_sec_parms_len;
2261*f44e1126SVitaliy Gusev 		callback_sec_parms4 *csa_sec_parms_val;
2262*f44e1126SVitaliy Gusev 	} csa_sec_parms;
2263*f44e1126SVitaliy Gusev };
2264*f44e1126SVitaliy Gusev typedef struct CREATE_SESSION4args CREATE_SESSION4args;
2265*f44e1126SVitaliy Gusev 
2266*f44e1126SVitaliy Gusev struct CREATE_SESSION4resok {
2267*f44e1126SVitaliy Gusev 	sessionid4 csr_sessionid;
2268*f44e1126SVitaliy Gusev 	sequenceid4 csr_sequence;
2269*f44e1126SVitaliy Gusev 	uint32_t csr_flags;
2270*f44e1126SVitaliy Gusev 	channel_attrs4 csr_fore_chan_attrs;
2271*f44e1126SVitaliy Gusev 	channel_attrs4 csr_back_chan_attrs;
2272*f44e1126SVitaliy Gusev };
2273*f44e1126SVitaliy Gusev typedef struct CREATE_SESSION4resok CREATE_SESSION4resok;
2274*f44e1126SVitaliy Gusev 
2275*f44e1126SVitaliy Gusev struct CREATE_SESSION4res {
2276*f44e1126SVitaliy Gusev 	nfsstat4 csr_status;
2277*f44e1126SVitaliy Gusev 	union {
2278*f44e1126SVitaliy Gusev 		CREATE_SESSION4resok csr_resok4;
2279*f44e1126SVitaliy Gusev 	} CREATE_SESSION4res_u;
2280*f44e1126SVitaliy Gusev };
2281*f44e1126SVitaliy Gusev typedef struct CREATE_SESSION4res CREATE_SESSION4res;
2282*f44e1126SVitaliy Gusev 
2283*f44e1126SVitaliy Gusev struct DESTROY_SESSION4args {
2284*f44e1126SVitaliy Gusev 	sessionid4 dsa_sessionid;
2285*f44e1126SVitaliy Gusev };
2286*f44e1126SVitaliy Gusev typedef struct DESTROY_SESSION4args DESTROY_SESSION4args;
2287*f44e1126SVitaliy Gusev 
2288*f44e1126SVitaliy Gusev struct DESTROY_SESSION4res {
2289*f44e1126SVitaliy Gusev 	nfsstat4 dsr_status;
2290*f44e1126SVitaliy Gusev };
2291*f44e1126SVitaliy Gusev typedef struct DESTROY_SESSION4res DESTROY_SESSION4res;
2292*f44e1126SVitaliy Gusev 
2293*f44e1126SVitaliy Gusev struct FREE_STATEID4args {
2294*f44e1126SVitaliy Gusev 	stateid4 fsa_stateid;
2295*f44e1126SVitaliy Gusev };
2296*f44e1126SVitaliy Gusev typedef struct FREE_STATEID4args FREE_STATEID4args;
2297*f44e1126SVitaliy Gusev 
2298*f44e1126SVitaliy Gusev struct FREE_STATEID4res {
2299*f44e1126SVitaliy Gusev 	nfsstat4 fsr_status;
2300*f44e1126SVitaliy Gusev };
2301*f44e1126SVitaliy Gusev typedef struct FREE_STATEID4res FREE_STATEID4res;
2302*f44e1126SVitaliy Gusev 
2303*f44e1126SVitaliy Gusev typedef nfstime4 attr_notice4;
2304*f44e1126SVitaliy Gusev 
2305*f44e1126SVitaliy Gusev struct GET_DIR_DELEGATION4args {
2306*f44e1126SVitaliy Gusev 	bool_t gdda_signal_deleg_avail;
2307*f44e1126SVitaliy Gusev 	bitmap4 gdda_notification_types;
2308*f44e1126SVitaliy Gusev 	attr_notice4 gdda_child_attr_delay;
2309*f44e1126SVitaliy Gusev 	attr_notice4 gdda_dir_attr_delay;
2310*f44e1126SVitaliy Gusev 	bitmap4 gdda_child_attributes;
2311*f44e1126SVitaliy Gusev 	bitmap4 gdda_dir_attributes;
2312*f44e1126SVitaliy Gusev };
2313*f44e1126SVitaliy Gusev typedef struct GET_DIR_DELEGATION4args GET_DIR_DELEGATION4args;
2314*f44e1126SVitaliy Gusev 
2315*f44e1126SVitaliy Gusev struct GET_DIR_DELEGATION4resok {
2316*f44e1126SVitaliy Gusev 	verifier4 gddr_cookieverf;
2317*f44e1126SVitaliy Gusev 	stateid4 gddr_stateid;
2318*f44e1126SVitaliy Gusev 	bitmap4 gddr_notification;
2319*f44e1126SVitaliy Gusev 	bitmap4 gddr_child_attributes;
2320*f44e1126SVitaliy Gusev 	bitmap4 gddr_dir_attributes;
2321*f44e1126SVitaliy Gusev };
2322*f44e1126SVitaliy Gusev typedef struct GET_DIR_DELEGATION4resok GET_DIR_DELEGATION4resok;
2323*f44e1126SVitaliy Gusev 
2324*f44e1126SVitaliy Gusev enum gddrnf4_status {
2325*f44e1126SVitaliy Gusev 	GDD4_OK = 0,
2326*f44e1126SVitaliy Gusev 	GDD4_UNAVAIL = 1
2327*f44e1126SVitaliy Gusev };
2328*f44e1126SVitaliy Gusev typedef enum gddrnf4_status gddrnf4_status;
2329*f44e1126SVitaliy Gusev 
2330*f44e1126SVitaliy Gusev struct GET_DIR_DELEGATION4res_non_fatal {
2331*f44e1126SVitaliy Gusev 	gddrnf4_status gddrnf_status;
2332*f44e1126SVitaliy Gusev 	union {
2333*f44e1126SVitaliy Gusev 		GET_DIR_DELEGATION4resok gddrnf_resok4;
2334*f44e1126SVitaliy Gusev 		bool_t gddrnf_will_signal_deleg_avail;
2335*f44e1126SVitaliy Gusev 	} GET_DIR_DELEGATION4res_non_fatal_u;
2336*f44e1126SVitaliy Gusev };
2337*f44e1126SVitaliy Gusev typedef struct GET_DIR_DELEGATION4res_non_fatal
2338*f44e1126SVitaliy Gusev     GET_DIR_DELEGATION4res_non_fatal;
2339*f44e1126SVitaliy Gusev 
2340*f44e1126SVitaliy Gusev struct GET_DIR_DELEGATION4res {
2341*f44e1126SVitaliy Gusev 	nfsstat4 gddr_status;
2342*f44e1126SVitaliy Gusev 	union {
2343*f44e1126SVitaliy Gusev 		GET_DIR_DELEGATION4res_non_fatal gddr_res_non_fatal4;
2344*f44e1126SVitaliy Gusev 	} GET_DIR_DELEGATION4res_u;
2345*f44e1126SVitaliy Gusev };
2346*f44e1126SVitaliy Gusev typedef struct GET_DIR_DELEGATION4res GET_DIR_DELEGATION4res;
2347*f44e1126SVitaliy Gusev 
2348*f44e1126SVitaliy Gusev struct GETDEVICEINFO4args {
2349*f44e1126SVitaliy Gusev 	deviceid4 gdia_device_id;
2350*f44e1126SVitaliy Gusev 	layouttype4 gdia_layout_type;
2351*f44e1126SVitaliy Gusev 	count4 gdia_maxcount;
2352*f44e1126SVitaliy Gusev 	bitmap4 gdia_notify_types;
2353*f44e1126SVitaliy Gusev };
2354*f44e1126SVitaliy Gusev typedef struct GETDEVICEINFO4args GETDEVICEINFO4args;
2355*f44e1126SVitaliy Gusev 
2356*f44e1126SVitaliy Gusev struct GETDEVICEINFO4resok {
2357*f44e1126SVitaliy Gusev 	device_addr4 gdir_device_addr;
2358*f44e1126SVitaliy Gusev 	bitmap4 gdir_notification;
2359*f44e1126SVitaliy Gusev };
2360*f44e1126SVitaliy Gusev typedef struct GETDEVICEINFO4resok GETDEVICEINFO4resok;
2361*f44e1126SVitaliy Gusev 
2362*f44e1126SVitaliy Gusev struct GETDEVICEINFO4res {
2363*f44e1126SVitaliy Gusev 	nfsstat4 gdir_status;
2364*f44e1126SVitaliy Gusev 	union {
2365*f44e1126SVitaliy Gusev 		GETDEVICEINFO4resok gdir_resok4;
2366*f44e1126SVitaliy Gusev 		count4 gdir_mincount;
2367*f44e1126SVitaliy Gusev 	} GETDEVICEINFO4res_u;
2368*f44e1126SVitaliy Gusev };
2369*f44e1126SVitaliy Gusev typedef struct GETDEVICEINFO4res GETDEVICEINFO4res;
2370*f44e1126SVitaliy Gusev 
2371*f44e1126SVitaliy Gusev struct GETDEVICELIST4args {
2372*f44e1126SVitaliy Gusev 	layouttype4 gdla_layout_type;
2373*f44e1126SVitaliy Gusev 	count4 gdla_maxdevices;
2374*f44e1126SVitaliy Gusev 	nfs_cookie4 gdla_cookie;
2375*f44e1126SVitaliy Gusev 	verifier4 gdla_cookieverf;
2376*f44e1126SVitaliy Gusev };
2377*f44e1126SVitaliy Gusev typedef struct GETDEVICELIST4args GETDEVICELIST4args;
2378*f44e1126SVitaliy Gusev 
2379*f44e1126SVitaliy Gusev struct GETDEVICELIST4resok {
2380*f44e1126SVitaliy Gusev 	nfs_cookie4 gdlr_cookie;
2381*f44e1126SVitaliy Gusev 	verifier4 gdlr_cookieverf;
2382*f44e1126SVitaliy Gusev 	struct {
2383*f44e1126SVitaliy Gusev 		uint_t gdlr_deviceid_list_len;
2384*f44e1126SVitaliy Gusev 		deviceid4 *gdlr_deviceid_list_val;
2385*f44e1126SVitaliy Gusev 	} gdlr_deviceid_list;
2386*f44e1126SVitaliy Gusev 	bool_t gdlr_eof;
2387*f44e1126SVitaliy Gusev };
2388*f44e1126SVitaliy Gusev typedef struct GETDEVICELIST4resok GETDEVICELIST4resok;
2389*f44e1126SVitaliy Gusev 
2390*f44e1126SVitaliy Gusev struct GETDEVICELIST4res {
2391*f44e1126SVitaliy Gusev 	nfsstat4 gdlr_status;
2392*f44e1126SVitaliy Gusev 	union {
2393*f44e1126SVitaliy Gusev 		GETDEVICELIST4resok gdlr_resok4;
2394*f44e1126SVitaliy Gusev 	} GETDEVICELIST4res_u;
2395*f44e1126SVitaliy Gusev };
2396*f44e1126SVitaliy Gusev typedef struct GETDEVICELIST4res GETDEVICELIST4res;
2397*f44e1126SVitaliy Gusev 
2398*f44e1126SVitaliy Gusev struct newtime4 {
2399*f44e1126SVitaliy Gusev 	bool_t nt_timechanged;
2400*f44e1126SVitaliy Gusev 	union {
2401*f44e1126SVitaliy Gusev 		nfstime4 nt_time;
2402*f44e1126SVitaliy Gusev 	} newtime4_u;
2403*f44e1126SVitaliy Gusev };
2404*f44e1126SVitaliy Gusev typedef struct newtime4 newtime4;
2405*f44e1126SVitaliy Gusev 
2406*f44e1126SVitaliy Gusev struct newoffset4 {
2407*f44e1126SVitaliy Gusev 	bool_t no_newoffset;
2408*f44e1126SVitaliy Gusev 	union {
2409*f44e1126SVitaliy Gusev 		offset4 no_offset;
2410*f44e1126SVitaliy Gusev 	} newoffset4_u;
2411*f44e1126SVitaliy Gusev };
2412*f44e1126SVitaliy Gusev typedef struct newoffset4 newoffset4;
2413*f44e1126SVitaliy Gusev 
2414*f44e1126SVitaliy Gusev struct LAYOUTCOMMIT4args {
2415*f44e1126SVitaliy Gusev 	offset4 loca_offset;
2416*f44e1126SVitaliy Gusev 	length4 loca_length;
2417*f44e1126SVitaliy Gusev 	bool_t loca_reclaim;
2418*f44e1126SVitaliy Gusev 	stateid4 loca_stateid;
2419*f44e1126SVitaliy Gusev 	newoffset4 loca_last_write_offset;
2420*f44e1126SVitaliy Gusev 	newtime4 loca_time_modify;
2421*f44e1126SVitaliy Gusev 	layoutupdate4 loca_layoutupdate;
2422*f44e1126SVitaliy Gusev };
2423*f44e1126SVitaliy Gusev typedef struct LAYOUTCOMMIT4args LAYOUTCOMMIT4args;
2424*f44e1126SVitaliy Gusev 
2425*f44e1126SVitaliy Gusev struct newsize4 {
2426*f44e1126SVitaliy Gusev 	bool_t ns_sizechanged;
2427*f44e1126SVitaliy Gusev 	union {
2428*f44e1126SVitaliy Gusev 		length4 ns_size;
2429*f44e1126SVitaliy Gusev 	} newsize4_u;
2430*f44e1126SVitaliy Gusev };
2431*f44e1126SVitaliy Gusev typedef struct newsize4 newsize4;
2432*f44e1126SVitaliy Gusev 
2433*f44e1126SVitaliy Gusev struct LAYOUTCOMMIT4resok {
2434*f44e1126SVitaliy Gusev 	newsize4 locr_newsize;
2435*f44e1126SVitaliy Gusev };
2436*f44e1126SVitaliy Gusev typedef struct LAYOUTCOMMIT4resok LAYOUTCOMMIT4resok;
2437*f44e1126SVitaliy Gusev 
2438*f44e1126SVitaliy Gusev struct LAYOUTCOMMIT4res {
2439*f44e1126SVitaliy Gusev 	nfsstat4 locr_status;
2440*f44e1126SVitaliy Gusev 	union {
2441*f44e1126SVitaliy Gusev 		LAYOUTCOMMIT4resok locr_resok4;
2442*f44e1126SVitaliy Gusev 	} LAYOUTCOMMIT4res_u;
2443*f44e1126SVitaliy Gusev };
2444*f44e1126SVitaliy Gusev typedef struct LAYOUTCOMMIT4res LAYOUTCOMMIT4res;
2445*f44e1126SVitaliy Gusev 
2446*f44e1126SVitaliy Gusev struct LAYOUTGET4args {
2447*f44e1126SVitaliy Gusev 	bool_t loga_signal_layout_avail;
2448*f44e1126SVitaliy Gusev 	layouttype4 loga_layout_type;
2449*f44e1126SVitaliy Gusev 	layoutiomode4 loga_iomode;
2450*f44e1126SVitaliy Gusev 	offset4 loga_offset;
2451*f44e1126SVitaliy Gusev 	length4 loga_length;
2452*f44e1126SVitaliy Gusev 	length4 loga_minlength;
2453*f44e1126SVitaliy Gusev 	stateid4 loga_stateid;
2454*f44e1126SVitaliy Gusev 	count4 loga_maxcount;
2455*f44e1126SVitaliy Gusev };
2456*f44e1126SVitaliy Gusev typedef struct LAYOUTGET4args LAYOUTGET4args;
2457*f44e1126SVitaliy Gusev 
2458*f44e1126SVitaliy Gusev struct LAYOUTGET4resok {
2459*f44e1126SVitaliy Gusev 	bool_t logr_return_on_close;
2460*f44e1126SVitaliy Gusev 	stateid4 logr_stateid;
2461*f44e1126SVitaliy Gusev 	struct {
2462*f44e1126SVitaliy Gusev 		uint_t logr_layout_len;
2463*f44e1126SVitaliy Gusev 		layout4 *logr_layout_val;
2464*f44e1126SVitaliy Gusev 	} logr_layout;
2465*f44e1126SVitaliy Gusev };
2466*f44e1126SVitaliy Gusev typedef struct LAYOUTGET4resok LAYOUTGET4resok;
2467*f44e1126SVitaliy Gusev 
2468*f44e1126SVitaliy Gusev struct LAYOUTGET4res {
2469*f44e1126SVitaliy Gusev 	nfsstat4 logr_status;
2470*f44e1126SVitaliy Gusev 	union {
2471*f44e1126SVitaliy Gusev 		LAYOUTGET4resok logr_resok4;
2472*f44e1126SVitaliy Gusev 		bool_t logr_will_signal_layout_avail;
2473*f44e1126SVitaliy Gusev 	} LAYOUTGET4res_u;
2474*f44e1126SVitaliy Gusev };
2475*f44e1126SVitaliy Gusev typedef struct LAYOUTGET4res LAYOUTGET4res;
2476*f44e1126SVitaliy Gusev 
2477*f44e1126SVitaliy Gusev struct LAYOUTRETURN4args {
2478*f44e1126SVitaliy Gusev 	bool_t lora_reclaim;
2479*f44e1126SVitaliy Gusev 	layouttype4 lora_layout_type;
2480*f44e1126SVitaliy Gusev 	layoutiomode4 lora_iomode;
2481*f44e1126SVitaliy Gusev 	layoutreturn4 lora_layoutreturn;
2482*f44e1126SVitaliy Gusev };
2483*f44e1126SVitaliy Gusev typedef struct LAYOUTRETURN4args LAYOUTRETURN4args;
2484*f44e1126SVitaliy Gusev 
2485*f44e1126SVitaliy Gusev struct layoutreturn_stateid {
2486*f44e1126SVitaliy Gusev 	bool_t lrs_present;
2487*f44e1126SVitaliy Gusev 	union {
2488*f44e1126SVitaliy Gusev 		stateid4 lrs_stateid;
2489*f44e1126SVitaliy Gusev 	} layoutreturn_stateid_u;
2490*f44e1126SVitaliy Gusev };
2491*f44e1126SVitaliy Gusev typedef struct layoutreturn_stateid layoutreturn_stateid;
2492*f44e1126SVitaliy Gusev 
2493*f44e1126SVitaliy Gusev struct LAYOUTRETURN4res {
2494*f44e1126SVitaliy Gusev 	nfsstat4 lorr_status;
2495*f44e1126SVitaliy Gusev 	union {
2496*f44e1126SVitaliy Gusev 		layoutreturn_stateid lorr_stateid;
2497*f44e1126SVitaliy Gusev 	} LAYOUTRETURN4res_u;
2498*f44e1126SVitaliy Gusev };
2499*f44e1126SVitaliy Gusev typedef struct LAYOUTRETURN4res LAYOUTRETURN4res;
2500*f44e1126SVitaliy Gusev 
2501*f44e1126SVitaliy Gusev enum secinfo_style4 {
2502*f44e1126SVitaliy Gusev 	SECINFO_STYLE4_CURRENT_FH = 0,
2503*f44e1126SVitaliy Gusev 	SECINFO_STYLE4_PARENT = 1
2504*f44e1126SVitaliy Gusev };
2505*f44e1126SVitaliy Gusev typedef enum secinfo_style4 secinfo_style4;
2506*f44e1126SVitaliy Gusev 
2507*f44e1126SVitaliy Gusev typedef secinfo_style4 SECINFO_NO_NAME4args;
2508*f44e1126SVitaliy Gusev 
2509*f44e1126SVitaliy Gusev typedef SECINFO4res SECINFO_NO_NAME4res;
2510*f44e1126SVitaliy Gusev 
2511*f44e1126SVitaliy Gusev struct SEQUENCE4args {
2512*f44e1126SVitaliy Gusev 	sessionid4 sa_sessionid;
2513*f44e1126SVitaliy Gusev 	sequenceid4 sa_sequenceid;
2514*f44e1126SVitaliy Gusev 	slotid4 sa_slotid;
2515*f44e1126SVitaliy Gusev 	slotid4 sa_highest_slotid;
2516*f44e1126SVitaliy Gusev 	bool_t sa_cachethis;
2517*f44e1126SVitaliy Gusev };
2518*f44e1126SVitaliy Gusev typedef struct SEQUENCE4args SEQUENCE4args;
2519*f44e1126SVitaliy Gusev #define	SEQ4_STATUS_CB_PATH_DOWN 0x00000001
2520*f44e1126SVitaliy Gusev #define	SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRING 0x00000002
2521*f44e1126SVitaliy Gusev #define	SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRED 0x00000004
2522*f44e1126SVitaliy Gusev #define	SEQ4_STATUS_EXPIRED_ALL_STATE_REVOKED 0x00000008
2523*f44e1126SVitaliy Gusev #define	SEQ4_STATUS_EXPIRED_SOME_STATE_REVOKED 0x00000010
2524*f44e1126SVitaliy Gusev #define	SEQ4_STATUS_ADMIN_STATE_REVOKED 0x00000020
2525*f44e1126SVitaliy Gusev #define	SEQ4_STATUS_RECALLABLE_STATE_REVOKED 0x00000040
2526*f44e1126SVitaliy Gusev #define	SEQ4_STATUS_LEASE_MOVED 0x00000080
2527*f44e1126SVitaliy Gusev #define	SEQ4_STATUS_RESTART_RECLAIM_NEEDED 0x00000100
2528*f44e1126SVitaliy Gusev #define	SEQ4_STATUS_CB_PATH_DOWN_SESSION 0x00000200
2529*f44e1126SVitaliy Gusev #define	SEQ4_STATUS_BACKCHANNEL_FAULT 0x00000400
2530*f44e1126SVitaliy Gusev #define	SEQ4_STATUS_DEVID_CHANGED 0x00000800
2531*f44e1126SVitaliy Gusev #define	SEQ4_STATUS_DEVID_DELETED 0x00001000
2532*f44e1126SVitaliy Gusev #define	SEQ4_HIGH_BIT SEQ4_STATUS_DEVID_DELETED /* highest defined flag */
2533*f44e1126SVitaliy Gusev 
2534*f44e1126SVitaliy Gusev struct SEQUENCE4resok {
2535*f44e1126SVitaliy Gusev 	sessionid4 sr_sessionid;
2536*f44e1126SVitaliy Gusev 	sequenceid4 sr_sequenceid;
2537*f44e1126SVitaliy Gusev 	slotid4 sr_slotid;
2538*f44e1126SVitaliy Gusev 	slotid4 sr_highest_slotid;
2539*f44e1126SVitaliy Gusev 	slotid4 sr_target_highest_slotid;
2540*f44e1126SVitaliy Gusev 	uint32_t sr_status_flags;
2541*f44e1126SVitaliy Gusev };
2542*f44e1126SVitaliy Gusev typedef struct SEQUENCE4resok SEQUENCE4resok;
2543*f44e1126SVitaliy Gusev 
2544*f44e1126SVitaliy Gusev struct SEQUENCE4res {
2545*f44e1126SVitaliy Gusev 	nfsstat4 sr_status;
2546*f44e1126SVitaliy Gusev 	union {
2547*f44e1126SVitaliy Gusev 		SEQUENCE4resok sr_resok4;
2548*f44e1126SVitaliy Gusev 	} SEQUENCE4res_u;
2549*f44e1126SVitaliy Gusev };
2550*f44e1126SVitaliy Gusev typedef struct SEQUENCE4res SEQUENCE4res;
2551*f44e1126SVitaliy Gusev 
2552*f44e1126SVitaliy Gusev struct ssa_digest_input4 {
2553*f44e1126SVitaliy Gusev 	SEQUENCE4args sdi_seqargs;
2554*f44e1126SVitaliy Gusev };
2555*f44e1126SVitaliy Gusev typedef struct ssa_digest_input4 ssa_digest_input4;
2556*f44e1126SVitaliy Gusev 
2557*f44e1126SVitaliy Gusev struct SET_SSV4args {
2558*f44e1126SVitaliy Gusev 	struct {
2559*f44e1126SVitaliy Gusev 		uint_t ssa_ssv_len;
2560*f44e1126SVitaliy Gusev 		char *ssa_ssv_val;
2561*f44e1126SVitaliy Gusev 	} ssa_ssv;
2562*f44e1126SVitaliy Gusev 	struct {
2563*f44e1126SVitaliy Gusev 		uint_t ssa_digest_len;
2564*f44e1126SVitaliy Gusev 		char *ssa_digest_val;
2565*f44e1126SVitaliy Gusev 	} ssa_digest;
2566*f44e1126SVitaliy Gusev };
2567*f44e1126SVitaliy Gusev typedef struct SET_SSV4args SET_SSV4args;
2568*f44e1126SVitaliy Gusev 
2569*f44e1126SVitaliy Gusev struct ssr_digest_input4 {
2570*f44e1126SVitaliy Gusev 	SEQUENCE4res sdi_seqres;
2571*f44e1126SVitaliy Gusev };
2572*f44e1126SVitaliy Gusev typedef struct ssr_digest_input4 ssr_digest_input4;
2573*f44e1126SVitaliy Gusev 
2574*f44e1126SVitaliy Gusev struct SET_SSV4resok {
2575*f44e1126SVitaliy Gusev 	struct {
2576*f44e1126SVitaliy Gusev 		uint_t ssr_digest_len;
2577*f44e1126SVitaliy Gusev 		char *ssr_digest_val;
2578*f44e1126SVitaliy Gusev 	} ssr_digest;
2579*f44e1126SVitaliy Gusev };
2580*f44e1126SVitaliy Gusev typedef struct SET_SSV4resok SET_SSV4resok;
2581*f44e1126SVitaliy Gusev 
2582*f44e1126SVitaliy Gusev struct SET_SSV4res {
2583*f44e1126SVitaliy Gusev 	nfsstat4 ssr_status;
2584*f44e1126SVitaliy Gusev 	union {
2585*f44e1126SVitaliy Gusev 		SET_SSV4resok ssr_resok4;
2586*f44e1126SVitaliy Gusev 	} SET_SSV4res_u;
2587*f44e1126SVitaliy Gusev };
2588*f44e1126SVitaliy Gusev typedef struct SET_SSV4res SET_SSV4res;
2589*f44e1126SVitaliy Gusev 
2590*f44e1126SVitaliy Gusev struct TEST_STATEID4args {
2591*f44e1126SVitaliy Gusev 	struct {
2592*f44e1126SVitaliy Gusev 		uint_t ts_stateids_len;
2593*f44e1126SVitaliy Gusev 		stateid4 *ts_stateids_val;
2594*f44e1126SVitaliy Gusev 	} ts_stateids;
2595*f44e1126SVitaliy Gusev };
2596*f44e1126SVitaliy Gusev typedef struct TEST_STATEID4args TEST_STATEID4args;
2597*f44e1126SVitaliy Gusev 
2598*f44e1126SVitaliy Gusev struct TEST_STATEID4resok {
2599*f44e1126SVitaliy Gusev 	struct {
2600*f44e1126SVitaliy Gusev 		uint_t tsr_status_codes_len;
2601*f44e1126SVitaliy Gusev 		nfsstat4 *tsr_status_codes_val;
2602*f44e1126SVitaliy Gusev 	} tsr_status_codes;
2603*f44e1126SVitaliy Gusev };
2604*f44e1126SVitaliy Gusev typedef struct TEST_STATEID4resok TEST_STATEID4resok;
2605*f44e1126SVitaliy Gusev 
2606*f44e1126SVitaliy Gusev struct TEST_STATEID4res {
2607*f44e1126SVitaliy Gusev 	nfsstat4 tsr_status;
2608*f44e1126SVitaliy Gusev 	union {
2609*f44e1126SVitaliy Gusev 		TEST_STATEID4resok tsr_resok4;
2610*f44e1126SVitaliy Gusev 	} TEST_STATEID4res_u;
2611*f44e1126SVitaliy Gusev };
2612*f44e1126SVitaliy Gusev typedef struct TEST_STATEID4res TEST_STATEID4res;
2613*f44e1126SVitaliy Gusev 
2614*f44e1126SVitaliy Gusev struct deleg_claim4 {
2615*f44e1126SVitaliy Gusev 	open_claim_type4 dc_claim;
2616*f44e1126SVitaliy Gusev 	union {
2617*f44e1126SVitaliy Gusev 		open_delegation_type4 dc_delegate_type;
2618*f44e1126SVitaliy Gusev 	} deleg_claim4_u;
2619*f44e1126SVitaliy Gusev };
2620*f44e1126SVitaliy Gusev typedef struct deleg_claim4 deleg_claim4;
2621*f44e1126SVitaliy Gusev 
2622*f44e1126SVitaliy Gusev struct WANT_DELEGATION4args {
2623*f44e1126SVitaliy Gusev 	uint32_t wda_want;
2624*f44e1126SVitaliy Gusev 	deleg_claim4 wda_claim;
2625*f44e1126SVitaliy Gusev };
2626*f44e1126SVitaliy Gusev typedef struct WANT_DELEGATION4args WANT_DELEGATION4args;
2627*f44e1126SVitaliy Gusev 
2628*f44e1126SVitaliy Gusev struct WANT_DELEGATION4res {
2629*f44e1126SVitaliy Gusev 	nfsstat4 wdr_status;
2630*f44e1126SVitaliy Gusev 	union {
2631*f44e1126SVitaliy Gusev 		open_delegation4 wdr_resok4;
2632*f44e1126SVitaliy Gusev 	} WANT_DELEGATION4res_u;
2633*f44e1126SVitaliy Gusev };
2634*f44e1126SVitaliy Gusev typedef struct WANT_DELEGATION4res WANT_DELEGATION4res;
2635*f44e1126SVitaliy Gusev 
2636*f44e1126SVitaliy Gusev struct DESTROY_CLIENTID4args {
2637*f44e1126SVitaliy Gusev 	clientid4 dca_clientid;
2638*f44e1126SVitaliy Gusev };
2639*f44e1126SVitaliy Gusev typedef struct DESTROY_CLIENTID4args DESTROY_CLIENTID4args;
2640*f44e1126SVitaliy Gusev 
2641*f44e1126SVitaliy Gusev struct DESTROY_CLIENTID4res {
2642*f44e1126SVitaliy Gusev 	nfsstat4 dcr_status;
2643*f44e1126SVitaliy Gusev };
2644*f44e1126SVitaliy Gusev typedef struct DESTROY_CLIENTID4res DESTROY_CLIENTID4res;
2645*f44e1126SVitaliy Gusev 
2646*f44e1126SVitaliy Gusev struct RECLAIM_COMPLETE4args {
2647*f44e1126SVitaliy Gusev 	bool_t rca_one_fs;
2648*f44e1126SVitaliy Gusev };
2649*f44e1126SVitaliy Gusev typedef struct RECLAIM_COMPLETE4args RECLAIM_COMPLETE4args;
2650*f44e1126SVitaliy Gusev 
2651*f44e1126SVitaliy Gusev struct RECLAIM_COMPLETE4res {
2652*f44e1126SVitaliy Gusev 	nfsstat4 rcr_status;
2653*f44e1126SVitaliy Gusev };
2654*f44e1126SVitaliy Gusev typedef struct RECLAIM_COMPLETE4res RECLAIM_COMPLETE4res;
2655*f44e1126SVitaliy Gusev 
2656*f44e1126SVitaliy Gusev /* new operations for NFSv4.1 end */
2657*f44e1126SVitaliy Gusev 
26587c478bd9Sstevel@tonic-gate enum nfs_opnum4 {
26597c478bd9Sstevel@tonic-gate 	OP_ACCESS = 3,
26607c478bd9Sstevel@tonic-gate 	OP_CLOSE = 4,
26617c478bd9Sstevel@tonic-gate 	OP_COMMIT = 5,
26627c478bd9Sstevel@tonic-gate 	OP_CREATE = 6,
26637c478bd9Sstevel@tonic-gate 	OP_DELEGPURGE = 7,
26647c478bd9Sstevel@tonic-gate 	OP_DELEGRETURN = 8,
26657c478bd9Sstevel@tonic-gate 	OP_GETATTR = 9,
26667c478bd9Sstevel@tonic-gate 	OP_GETFH = 10,
26677c478bd9Sstevel@tonic-gate 	OP_LINK = 11,
26687c478bd9Sstevel@tonic-gate 	OP_LOCK = 12,
26697c478bd9Sstevel@tonic-gate 	OP_LOCKT = 13,
26707c478bd9Sstevel@tonic-gate 	OP_LOCKU = 14,
26717c478bd9Sstevel@tonic-gate 	OP_LOOKUP = 15,
26727c478bd9Sstevel@tonic-gate 	OP_LOOKUPP = 16,
26737c478bd9Sstevel@tonic-gate 	OP_NVERIFY = 17,
26747c478bd9Sstevel@tonic-gate 	OP_OPEN = 18,
26757c478bd9Sstevel@tonic-gate 	OP_OPENATTR = 19,
26767c478bd9Sstevel@tonic-gate 	OP_OPEN_CONFIRM = 20,
26777c478bd9Sstevel@tonic-gate 	OP_OPEN_DOWNGRADE = 21,
26787c478bd9Sstevel@tonic-gate 	OP_PUTFH = 22,
26797c478bd9Sstevel@tonic-gate 	OP_PUTPUBFH = 23,
26807c478bd9Sstevel@tonic-gate 	OP_PUTROOTFH = 24,
26817c478bd9Sstevel@tonic-gate 	OP_READ = 25,
26827c478bd9Sstevel@tonic-gate 	OP_READDIR = 26,
26837c478bd9Sstevel@tonic-gate 	OP_READLINK = 27,
26847c478bd9Sstevel@tonic-gate 	OP_REMOVE = 28,
26857c478bd9Sstevel@tonic-gate 	OP_RENAME = 29,
26867c478bd9Sstevel@tonic-gate 	OP_RENEW = 30,
26877c478bd9Sstevel@tonic-gate 	OP_RESTOREFH = 31,
26887c478bd9Sstevel@tonic-gate 	OP_SAVEFH = 32,
26897c478bd9Sstevel@tonic-gate 	OP_SECINFO = 33,
26907c478bd9Sstevel@tonic-gate 	OP_SETATTR = 34,
26917c478bd9Sstevel@tonic-gate 	OP_SETCLIENTID = 35,
26927c478bd9Sstevel@tonic-gate 	OP_SETCLIENTID_CONFIRM = 36,
26937c478bd9Sstevel@tonic-gate 	OP_VERIFY = 37,
26947c478bd9Sstevel@tonic-gate 	OP_WRITE = 38,
26957c478bd9Sstevel@tonic-gate 	OP_RELEASE_LOCKOWNER = 39,
2696*f44e1126SVitaliy Gusev 
2697*f44e1126SVitaliy Gusev 	/* nfsv4.1 */
2698*f44e1126SVitaliy Gusev 	OP_BACKCHANNEL_CTL = 40,
2699*f44e1126SVitaliy Gusev 	OP_BIND_CONN_TO_SESSION = 41,
2700*f44e1126SVitaliy Gusev 	OP_EXCHANGE_ID = 42,
2701*f44e1126SVitaliy Gusev 	OP_CREATE_SESSION = 43,
2702*f44e1126SVitaliy Gusev 	OP_DESTROY_SESSION = 44,
2703*f44e1126SVitaliy Gusev 	OP_FREE_STATEID = 45,
2704*f44e1126SVitaliy Gusev 	OP_GET_DIR_DELEGATION = 46,
2705*f44e1126SVitaliy Gusev 	OP_GETDEVICEINFO = 47,
2706*f44e1126SVitaliy Gusev 	OP_GETDEVICELIST = 48,
2707*f44e1126SVitaliy Gusev 	OP_LAYOUTCOMMIT = 49,
2708*f44e1126SVitaliy Gusev 	OP_LAYOUTGET = 50,
2709*f44e1126SVitaliy Gusev 	OP_LAYOUTRETURN = 51,
2710*f44e1126SVitaliy Gusev 	OP_SECINFO_NO_NAME = 52,
2711*f44e1126SVitaliy Gusev 	OP_SEQUENCE = 53,
2712*f44e1126SVitaliy Gusev 	OP_SET_SSV = 54,
2713*f44e1126SVitaliy Gusev 	OP_TEST_STATEID = 55,
2714*f44e1126SVitaliy Gusev 	OP_WANT_DELEGATION = 56,
2715*f44e1126SVitaliy Gusev 	OP_DESTROY_CLIENTID = 57,
2716*f44e1126SVitaliy Gusev 	OP_RECLAIM_COMPLETE = 58,
2717*f44e1126SVitaliy Gusev 
27187c478bd9Sstevel@tonic-gate 	OP_ILLEGAL = 10044,
27197c478bd9Sstevel@tonic-gate /*
27207c478bd9Sstevel@tonic-gate  * These are internal client pseudo ops that *MUST* never go over the wire
27217c478bd9Sstevel@tonic-gate  */
27227c478bd9Sstevel@tonic-gate #define	SUNW_PRIVATE_OP	0x10000000
27237c478bd9Sstevel@tonic-gate #define	REAL_OP4(op)	((op) & ~SUNW_PRIVATE_OP)
27247c478bd9Sstevel@tonic-gate 	OP_CCREATE = OP_CREATE | SUNW_PRIVATE_OP,
27257c478bd9Sstevel@tonic-gate 	OP_CLINK = OP_LINK | SUNW_PRIVATE_OP,
27267c478bd9Sstevel@tonic-gate 	OP_CLOOKUP = OP_LOOKUP | SUNW_PRIVATE_OP,
27277c478bd9Sstevel@tonic-gate 	OP_COPEN = OP_OPEN | SUNW_PRIVATE_OP,
27287c478bd9Sstevel@tonic-gate 	OP_CPUTFH = OP_PUTFH | SUNW_PRIVATE_OP,
27297c478bd9Sstevel@tonic-gate 	OP_CREMOVE = OP_REMOVE | SUNW_PRIVATE_OP,
27307c478bd9Sstevel@tonic-gate 	OP_CRENAME = OP_RENAME | SUNW_PRIVATE_OP,
27317c478bd9Sstevel@tonic-gate 	OP_CSECINFO = OP_SECINFO | SUNW_PRIVATE_OP
27327c478bd9Sstevel@tonic-gate };
27337c478bd9Sstevel@tonic-gate typedef enum nfs_opnum4 nfs_opnum4;
27347c478bd9Sstevel@tonic-gate 
27357c478bd9Sstevel@tonic-gate struct nfs_argop4 {
27367c478bd9Sstevel@tonic-gate 	nfs_opnum4 argop;
27377c478bd9Sstevel@tonic-gate 	union {
27387c478bd9Sstevel@tonic-gate 		ACCESS4args opaccess;
27397c478bd9Sstevel@tonic-gate 		CLOSE4args opclose;
27407c478bd9Sstevel@tonic-gate 		COMMIT4args opcommit;
27417c478bd9Sstevel@tonic-gate 		CREATE4args opcreate;
27427c478bd9Sstevel@tonic-gate 		CREATE4cargs opccreate;
27437c478bd9Sstevel@tonic-gate 		DELEGPURGE4args opdelegpurge;
27447c478bd9Sstevel@tonic-gate 		DELEGRETURN4args opdelegreturn;
27457c478bd9Sstevel@tonic-gate 		GETATTR4args opgetattr;
27467c478bd9Sstevel@tonic-gate 		LINK4args oplink;
27477c478bd9Sstevel@tonic-gate 		LINK4cargs opclink;
27487c478bd9Sstevel@tonic-gate 		LOCK4args oplock;
27497c478bd9Sstevel@tonic-gate 		LOCKT4args oplockt;
27507c478bd9Sstevel@tonic-gate 		LOCKU4args oplocku;
27517c478bd9Sstevel@tonic-gate 		LOOKUP4args oplookup;
27527c478bd9Sstevel@tonic-gate 		LOOKUP4cargs opclookup;
27537c478bd9Sstevel@tonic-gate 		NVERIFY4args opnverify;
27547c478bd9Sstevel@tonic-gate 		OPEN4args opopen;
27557c478bd9Sstevel@tonic-gate 		OPEN4cargs opcopen;
27567c478bd9Sstevel@tonic-gate 		OPENATTR4args opopenattr;
27577c478bd9Sstevel@tonic-gate 		OPEN_CONFIRM4args opopen_confirm;
27587c478bd9Sstevel@tonic-gate 		OPEN_DOWNGRADE4args opopen_downgrade;
27597c478bd9Sstevel@tonic-gate 		PUTFH4args opputfh;
27607c478bd9Sstevel@tonic-gate 		PUTFH4cargs opcputfh;
27617c478bd9Sstevel@tonic-gate 		READ4args opread;
27627c478bd9Sstevel@tonic-gate 		READDIR4args opreaddir;
27637c478bd9Sstevel@tonic-gate 		REMOVE4args opremove;
27647c478bd9Sstevel@tonic-gate 		REMOVE4cargs opcremove;
27657c478bd9Sstevel@tonic-gate 		RENAME4args oprename;
27667c478bd9Sstevel@tonic-gate 		RENAME4cargs opcrename;
27677c478bd9Sstevel@tonic-gate 		RENEW4args oprenew;
27687c478bd9Sstevel@tonic-gate 		SECINFO4args opsecinfo;
27697c478bd9Sstevel@tonic-gate 		SECINFO4cargs opcsecinfo;
27707c478bd9Sstevel@tonic-gate 		SETATTR4args opsetattr;
27717c478bd9Sstevel@tonic-gate 		SETCLIENTID4args opsetclientid;
27727c478bd9Sstevel@tonic-gate 		SETCLIENTID_CONFIRM4args opsetclientid_confirm;
27737c478bd9Sstevel@tonic-gate 		VERIFY4args opverify;
27747c478bd9Sstevel@tonic-gate 		WRITE4args opwrite;
27757c478bd9Sstevel@tonic-gate 		RELEASE_LOCKOWNER4args oprelease_lockowner;
2776*f44e1126SVitaliy Gusev 		BACKCHANNEL_CTL4args opbackchannel_ctl;		/* nfsv4.1 */
2777*f44e1126SVitaliy Gusev 		BIND_CONN_TO_SESSION4args opbind_conn_to_session;
2778*f44e1126SVitaliy Gusev 		EXCHANGE_ID4args opexchange_id;
2779*f44e1126SVitaliy Gusev 		CREATE_SESSION4args opcreate_session;
2780*f44e1126SVitaliy Gusev 		DESTROY_SESSION4args opdestroy_session;
2781*f44e1126SVitaliy Gusev 		FREE_STATEID4args opfree_stateid;
2782*f44e1126SVitaliy Gusev 		GET_DIR_DELEGATION4args opget_dir_delegation;
2783*f44e1126SVitaliy Gusev 		GETDEVICEINFO4args opgetdeviceinfo;
2784*f44e1126SVitaliy Gusev 		GETDEVICELIST4args opgetdevicelist;
2785*f44e1126SVitaliy Gusev 		LAYOUTCOMMIT4args oplayoutcommit;
2786*f44e1126SVitaliy Gusev 		LAYOUTGET4args oplayoutget;
2787*f44e1126SVitaliy Gusev 		LAYOUTRETURN4args oplayoutreturn;
2788*f44e1126SVitaliy Gusev 		SECINFO_NO_NAME4args opsecinfo_no_name;
2789*f44e1126SVitaliy Gusev 		SEQUENCE4args opsequence;
2790*f44e1126SVitaliy Gusev 		SET_SSV4args opset_ssv;
2791*f44e1126SVitaliy Gusev 		TEST_STATEID4args optest_stateid;
2792*f44e1126SVitaliy Gusev 		WANT_DELEGATION4args opwant_delegation;
2793*f44e1126SVitaliy Gusev 		DESTROY_CLIENTID4args opdestroy_clientid;
2794*f44e1126SVitaliy Gusev 		RECLAIM_COMPLETE4args opreclaim_complete;
27957c478bd9Sstevel@tonic-gate 	} nfs_argop4_u;
27967c478bd9Sstevel@tonic-gate };
27977c478bd9Sstevel@tonic-gate typedef struct nfs_argop4 nfs_argop4;
27987c478bd9Sstevel@tonic-gate 
27997c478bd9Sstevel@tonic-gate struct nfs_resop4 {
28007c478bd9Sstevel@tonic-gate 	nfs_opnum4 resop;
28017c478bd9Sstevel@tonic-gate 	union {
28027c478bd9Sstevel@tonic-gate 		ACCESS4res opaccess;
28037c478bd9Sstevel@tonic-gate 		CLOSE4res opclose;
28047c478bd9Sstevel@tonic-gate 		COMMIT4res opcommit;
28057c478bd9Sstevel@tonic-gate 		CREATE4res opcreate;
28067c478bd9Sstevel@tonic-gate 		DELEGPURGE4res opdelegpurge;
28077c478bd9Sstevel@tonic-gate 		DELEGRETURN4res opdelegreturn;
28087c478bd9Sstevel@tonic-gate 		GETATTR4res opgetattr;
28097c478bd9Sstevel@tonic-gate 		GETFH4res opgetfh;
28107c478bd9Sstevel@tonic-gate 		LINK4res oplink;
28117c478bd9Sstevel@tonic-gate 		LOCK4res oplock;
28127c478bd9Sstevel@tonic-gate 		LOCKT4res oplockt;
28137c478bd9Sstevel@tonic-gate 		LOCKU4res oplocku;
28147c478bd9Sstevel@tonic-gate 		LOOKUP4res oplookup;
28157c478bd9Sstevel@tonic-gate 		LOOKUPP4res oplookupp;
28167c478bd9Sstevel@tonic-gate 		NVERIFY4res opnverify;
28177c478bd9Sstevel@tonic-gate 		OPEN4res opopen;
28187c478bd9Sstevel@tonic-gate 		OPENATTR4res opopenattr;
28197c478bd9Sstevel@tonic-gate 		OPEN_CONFIRM4res opopen_confirm;
28207c478bd9Sstevel@tonic-gate 		OPEN_DOWNGRADE4res opopen_downgrade;
28217c478bd9Sstevel@tonic-gate 		PUTFH4res opputfh;
28227c478bd9Sstevel@tonic-gate 		PUTPUBFH4res opputpubfh;
28237c478bd9Sstevel@tonic-gate 		PUTROOTFH4res opputrootfh;
28247c478bd9Sstevel@tonic-gate 		READ4res opread;
28257c478bd9Sstevel@tonic-gate 		READDIR4res opreaddir;
28267c478bd9Sstevel@tonic-gate 		READDIR4res_clnt opreaddirclnt;
28277c478bd9Sstevel@tonic-gate 		READLINK4res opreadlink;
28287c478bd9Sstevel@tonic-gate 		REMOVE4res opremove;
28297c478bd9Sstevel@tonic-gate 		RENAME4res oprename;
28307c478bd9Sstevel@tonic-gate 		RENEW4res oprenew;
28317c478bd9Sstevel@tonic-gate 		RESTOREFH4res oprestorefh;
28327c478bd9Sstevel@tonic-gate 		SAVEFH4res opsavefh;
28337c478bd9Sstevel@tonic-gate 		SECINFO4res opsecinfo;
28347c478bd9Sstevel@tonic-gate 		SETATTR4res opsetattr;
28357c478bd9Sstevel@tonic-gate 		SETCLIENTID4res opsetclientid;
28367c478bd9Sstevel@tonic-gate 		SETCLIENTID_CONFIRM4res opsetclientid_confirm;
28377c478bd9Sstevel@tonic-gate 		VERIFY4res opverify;
28387c478bd9Sstevel@tonic-gate 		WRITE4res opwrite;
28397c478bd9Sstevel@tonic-gate 		RELEASE_LOCKOWNER4res oprelease_lockowner;
2840*f44e1126SVitaliy Gusev 		BACKCHANNEL_CTL4res opbackchannel_ctl;		/* nfsv4.1 */
2841*f44e1126SVitaliy Gusev 		BIND_CONN_TO_SESSION4res opbind_conn_to_session;
2842*f44e1126SVitaliy Gusev 		EXCHANGE_ID4res opexchange_id;
2843*f44e1126SVitaliy Gusev 		CREATE_SESSION4res opcreate_session;
2844*f44e1126SVitaliy Gusev 		DESTROY_SESSION4res opdestroy_session;
2845*f44e1126SVitaliy Gusev 		FREE_STATEID4res opfree_stateid;
2846*f44e1126SVitaliy Gusev 		GET_DIR_DELEGATION4res opget_dir_delegation;
2847*f44e1126SVitaliy Gusev 		GETDEVICEINFO4res opgetdeviceinfo;
2848*f44e1126SVitaliy Gusev 		GETDEVICELIST4res opgetdevicelist;
2849*f44e1126SVitaliy Gusev 		LAYOUTCOMMIT4res oplayoutcommit;
2850*f44e1126SVitaliy Gusev 		LAYOUTGET4res oplayoutget;
2851*f44e1126SVitaliy Gusev 		LAYOUTRETURN4res oplayoutreturn;
2852*f44e1126SVitaliy Gusev 		SECINFO_NO_NAME4res opsecinfo_no_name;
2853*f44e1126SVitaliy Gusev 		SEQUENCE4res opsequence;
2854*f44e1126SVitaliy Gusev 		SET_SSV4res opset_ssv;
2855*f44e1126SVitaliy Gusev 		TEST_STATEID4res optest_stateid;
2856*f44e1126SVitaliy Gusev 		WANT_DELEGATION4res opwant_delegation;
2857*f44e1126SVitaliy Gusev 		DESTROY_CLIENTID4res opdestroy_clientid;
2858*f44e1126SVitaliy Gusev 		RECLAIM_COMPLETE4res opreclaim_complete;
28597c478bd9Sstevel@tonic-gate 		ILLEGAL4res opillegal;
28607c478bd9Sstevel@tonic-gate 	} nfs_resop4_u;
28617c478bd9Sstevel@tonic-gate };
28627c478bd9Sstevel@tonic-gate typedef struct nfs_resop4 nfs_resop4;
28637c478bd9Sstevel@tonic-gate 
28647c478bd9Sstevel@tonic-gate /*
28657c478bd9Sstevel@tonic-gate  * Fixed size tag string for easy client encoding
28667c478bd9Sstevel@tonic-gate  */
28677c478bd9Sstevel@tonic-gate struct _ctag {
28687c478bd9Sstevel@tonic-gate 	int ct_type;
28697c478bd9Sstevel@tonic-gate 	char *ct_str;
28707c478bd9Sstevel@tonic-gate 	uint32_t ct_tag[3];
28717c478bd9Sstevel@tonic-gate };
28727c478bd9Sstevel@tonic-gate typedef struct _ctag ctag_t;
28737c478bd9Sstevel@tonic-gate 
28747c478bd9Sstevel@tonic-gate /*
28757c478bd9Sstevel@tonic-gate  * Client-only encode-only version
28767c478bd9Sstevel@tonic-gate  */
28777c478bd9Sstevel@tonic-gate struct COMPOUND4args_clnt {
28787c478bd9Sstevel@tonic-gate 	int ctag;
28797c478bd9Sstevel@tonic-gate 	uint_t array_len;
28807c478bd9Sstevel@tonic-gate 	nfs_argop4 *array;
28817c478bd9Sstevel@tonic-gate };
28827c478bd9Sstevel@tonic-gate typedef struct COMPOUND4args_clnt COMPOUND4args_clnt;
28837c478bd9Sstevel@tonic-gate 
28847c478bd9Sstevel@tonic-gate struct COMPOUND4args {
28857c478bd9Sstevel@tonic-gate 	utf8string tag;
28867c478bd9Sstevel@tonic-gate 	uint32_t minorversion;
28877c478bd9Sstevel@tonic-gate 	uint_t array_len;
28887c478bd9Sstevel@tonic-gate 	nfs_argop4 *array;
28897c478bd9Sstevel@tonic-gate };
28907c478bd9Sstevel@tonic-gate typedef struct COMPOUND4args COMPOUND4args;
28917c478bd9Sstevel@tonic-gate 
28927c478bd9Sstevel@tonic-gate struct COMPOUND4res_clnt {
28937c478bd9Sstevel@tonic-gate 	nfsstat4 status;
28947c478bd9Sstevel@tonic-gate 	uint_t array_len;
28957c478bd9Sstevel@tonic-gate 	uint_t decode_len;
28967c478bd9Sstevel@tonic-gate 	nfs_resop4 *array;
28977c478bd9Sstevel@tonic-gate 	COMPOUND4args_clnt *argsp;
28987c478bd9Sstevel@tonic-gate };
28997c478bd9Sstevel@tonic-gate typedef struct COMPOUND4res_clnt COMPOUND4res_clnt;
29007c478bd9Sstevel@tonic-gate 
29017c478bd9Sstevel@tonic-gate struct COMPOUND4res {
29027c478bd9Sstevel@tonic-gate 	nfsstat4 status;
29037c478bd9Sstevel@tonic-gate 	utf8string tag;
29047c478bd9Sstevel@tonic-gate 	uint_t array_len;
29057c478bd9Sstevel@tonic-gate 	nfs_resop4 *array;
29067c478bd9Sstevel@tonic-gate };
29077c478bd9Sstevel@tonic-gate typedef struct COMPOUND4res COMPOUND4res;
29087c478bd9Sstevel@tonic-gate 
29097c478bd9Sstevel@tonic-gate struct CB_GETATTR4args {
29107c478bd9Sstevel@tonic-gate 	nfs_fh4 fh;
29117c478bd9Sstevel@tonic-gate 	bitmap4 attr_request;
29127c478bd9Sstevel@tonic-gate };
29137c478bd9Sstevel@tonic-gate typedef struct CB_GETATTR4args CB_GETATTR4args;
29147c478bd9Sstevel@tonic-gate 
29157c478bd9Sstevel@tonic-gate struct CB_GETATTR4res {
29167c478bd9Sstevel@tonic-gate 	nfsstat4 status;
29177c478bd9Sstevel@tonic-gate 	fattr4 obj_attributes;
29187c478bd9Sstevel@tonic-gate };
29197c478bd9Sstevel@tonic-gate typedef struct CB_GETATTR4res CB_GETATTR4res;
29207c478bd9Sstevel@tonic-gate 
29217c478bd9Sstevel@tonic-gate struct CB_RECALL4args {
29227c478bd9Sstevel@tonic-gate 	stateid4 stateid;
29237c478bd9Sstevel@tonic-gate 	bool_t truncate;
29247c478bd9Sstevel@tonic-gate 	nfs_fh4 fh;
29257c478bd9Sstevel@tonic-gate };
29267c478bd9Sstevel@tonic-gate typedef struct CB_RECALL4args CB_RECALL4args;
29277c478bd9Sstevel@tonic-gate 
29287c478bd9Sstevel@tonic-gate struct CB_RECALL4res {
29297c478bd9Sstevel@tonic-gate 	nfsstat4 status;
29307c478bd9Sstevel@tonic-gate };
29317c478bd9Sstevel@tonic-gate typedef struct CB_RECALL4res CB_RECALL4res;
29327c478bd9Sstevel@tonic-gate 
29337c478bd9Sstevel@tonic-gate struct CB_ILLEGAL4res {
29347c478bd9Sstevel@tonic-gate 	nfsstat4 status;
29357c478bd9Sstevel@tonic-gate };
29367c478bd9Sstevel@tonic-gate typedef struct CB_ILLEGAL4res CB_ILLEGAL4res;
29377c478bd9Sstevel@tonic-gate 
2938*f44e1126SVitaliy Gusev /*
2939*f44e1126SVitaliy Gusev  * New to nfsv4.1
2940*f44e1126SVitaliy Gusev  */
2941*f44e1126SVitaliy Gusev enum layoutrecall_type4 {
2942*f44e1126SVitaliy Gusev 	LAYOUTRECALL4_FILE = LAYOUT4_RET_REC_FILE,
2943*f44e1126SVitaliy Gusev 	LAYOUTRECALL4_FSID = LAYOUT4_RET_REC_FSID,
2944*f44e1126SVitaliy Gusev 	LAYOUTRECALL4_ALL = LAYOUT4_RET_REC_ALL
2945*f44e1126SVitaliy Gusev };
2946*f44e1126SVitaliy Gusev typedef enum layoutrecall_type4 layoutrecall_type4;
2947*f44e1126SVitaliy Gusev 
2948*f44e1126SVitaliy Gusev struct layoutrecall_file4 {
2949*f44e1126SVitaliy Gusev 	nfs_fh4 lor_fh;
2950*f44e1126SVitaliy Gusev 	offset4 lor_offset;
2951*f44e1126SVitaliy Gusev 	length4 lor_length;
2952*f44e1126SVitaliy Gusev 	stateid4 lor_stateid;
2953*f44e1126SVitaliy Gusev };
2954*f44e1126SVitaliy Gusev typedef struct layoutrecall_file4 layoutrecall_file4;
2955*f44e1126SVitaliy Gusev 
2956*f44e1126SVitaliy Gusev struct layoutrecall4 {
2957*f44e1126SVitaliy Gusev 	layoutrecall_type4 lor_recalltype;
2958*f44e1126SVitaliy Gusev 	union {
2959*f44e1126SVitaliy Gusev 		layoutrecall_file4 lor_layout;
2960*f44e1126SVitaliy Gusev 		fsid4 lor_fsid;
2961*f44e1126SVitaliy Gusev 	} layoutrecall4_u;
2962*f44e1126SVitaliy Gusev };
2963*f44e1126SVitaliy Gusev typedef struct layoutrecall4 layoutrecall4;
2964*f44e1126SVitaliy Gusev 
2965*f44e1126SVitaliy Gusev struct CB_LAYOUTRECALL4args {
2966*f44e1126SVitaliy Gusev 	layouttype4 clora_type;
2967*f44e1126SVitaliy Gusev 	layoutiomode4 clora_iomode;
2968*f44e1126SVitaliy Gusev 	bool_t clora_changed;
2969*f44e1126SVitaliy Gusev 	layoutrecall4 clora_recall;
2970*f44e1126SVitaliy Gusev };
2971*f44e1126SVitaliy Gusev typedef struct CB_LAYOUTRECALL4args CB_LAYOUTRECALL4args;
2972*f44e1126SVitaliy Gusev 
2973*f44e1126SVitaliy Gusev struct CB_LAYOUTRECALL4res {
2974*f44e1126SVitaliy Gusev 	nfsstat4 clorr_status;
2975*f44e1126SVitaliy Gusev };
2976*f44e1126SVitaliy Gusev typedef struct CB_LAYOUTRECALL4res CB_LAYOUTRECALL4res;
2977*f44e1126SVitaliy Gusev 
2978*f44e1126SVitaliy Gusev enum notify_type4 {
2979*f44e1126SVitaliy Gusev 	NOTIFY4_CHANGE_CHILD_ATTRS = 0,
2980*f44e1126SVitaliy Gusev 	NOTIFY4_CHANGE_DIR_ATTRS = 1,
2981*f44e1126SVitaliy Gusev 	NOTIFY4_REMOVE_ENTRY = 2,
2982*f44e1126SVitaliy Gusev 	NOTIFY4_ADD_ENTRY = 3,
2983*f44e1126SVitaliy Gusev 	NOTIFY4_RENAME_ENTRY = 4,
2984*f44e1126SVitaliy Gusev 	NOTIFY4_CHANGE_COOKIE_VERIFIER = 5
2985*f44e1126SVitaliy Gusev };
2986*f44e1126SVitaliy Gusev typedef enum notify_type4 notify_type4;
2987*f44e1126SVitaliy Gusev 
2988*f44e1126SVitaliy Gusev struct notify_entry4 {
2989*f44e1126SVitaliy Gusev 	component4 ne_file;
2990*f44e1126SVitaliy Gusev 	fattr4 ne_attrs;
2991*f44e1126SVitaliy Gusev };
2992*f44e1126SVitaliy Gusev typedef struct notify_entry4 notify_entry4;
2993*f44e1126SVitaliy Gusev 
2994*f44e1126SVitaliy Gusev struct prev_entry4 {
2995*f44e1126SVitaliy Gusev 	notify_entry4 pe_prev_entry;
2996*f44e1126SVitaliy Gusev 	nfs_cookie4 pe_prev_entry_cookie;
2997*f44e1126SVitaliy Gusev };
2998*f44e1126SVitaliy Gusev typedef struct prev_entry4 prev_entry4;
2999*f44e1126SVitaliy Gusev 
3000*f44e1126SVitaliy Gusev struct notify_remove4 {
3001*f44e1126SVitaliy Gusev 	notify_entry4 nrm_old_entry;
3002*f44e1126SVitaliy Gusev 	nfs_cookie4 nrm_old_entry_cookie;
3003*f44e1126SVitaliy Gusev };
3004*f44e1126SVitaliy Gusev typedef struct notify_remove4 notify_remove4;
3005*f44e1126SVitaliy Gusev 
3006*f44e1126SVitaliy Gusev struct notify_add4 {
3007*f44e1126SVitaliy Gusev 	struct {
3008*f44e1126SVitaliy Gusev 		uint_t nad_old_entry_len;
3009*f44e1126SVitaliy Gusev 		notify_remove4 *nad_old_entry_val;
3010*f44e1126SVitaliy Gusev 	} nad_old_entry;
3011*f44e1126SVitaliy Gusev 	notify_entry4 nad_new_entry;
3012*f44e1126SVitaliy Gusev 	struct {
3013*f44e1126SVitaliy Gusev 		uint_t nad_new_entry_cookie_len;
3014*f44e1126SVitaliy Gusev 		nfs_cookie4 *nad_new_entry_cookie_val;
3015*f44e1126SVitaliy Gusev } nad_new_entry_cookie;
3016*f44e1126SVitaliy Gusev 	struct {
3017*f44e1126SVitaliy Gusev 		uint_t nad_prev_entry_len;
3018*f44e1126SVitaliy Gusev 		prev_entry4 *nad_prev_entry_val;
3019*f44e1126SVitaliy Gusev 	} nad_prev_entry;
3020*f44e1126SVitaliy Gusev 	bool_t nad_last_entry;
3021*f44e1126SVitaliy Gusev };
3022*f44e1126SVitaliy Gusev typedef struct notify_add4 notify_add4;
3023*f44e1126SVitaliy Gusev 
3024*f44e1126SVitaliy Gusev struct notify_attr4 {
3025*f44e1126SVitaliy Gusev 	notify_entry4 na_changed_entry;
3026*f44e1126SVitaliy Gusev };
3027*f44e1126SVitaliy Gusev typedef struct notify_attr4 notify_attr4;
3028*f44e1126SVitaliy Gusev 
3029*f44e1126SVitaliy Gusev struct notify_rename4 {
3030*f44e1126SVitaliy Gusev 	notify_remove4 nrn_old_entry;
3031*f44e1126SVitaliy Gusev 	notify_add4 nrn_new_entry;
3032*f44e1126SVitaliy Gusev };
3033*f44e1126SVitaliy Gusev typedef struct notify_rename4 notify_rename4;
3034*f44e1126SVitaliy Gusev 
3035*f44e1126SVitaliy Gusev struct notify_verifier4 {
3036*f44e1126SVitaliy Gusev 	verifier4 nv_old_cookieverf;
3037*f44e1126SVitaliy Gusev 	verifier4 nv_new_cookieverf;
3038*f44e1126SVitaliy Gusev };
3039*f44e1126SVitaliy Gusev typedef struct notify_verifier4 notify_verifier4;
3040*f44e1126SVitaliy Gusev 
3041*f44e1126SVitaliy Gusev typedef struct {
3042*f44e1126SVitaliy Gusev 	uint_t notifylist4_len;
3043*f44e1126SVitaliy Gusev 	char *notifylist4_val;
3044*f44e1126SVitaliy Gusev } notifylist4;
3045*f44e1126SVitaliy Gusev 
3046*f44e1126SVitaliy Gusev struct notify4 {
3047*f44e1126SVitaliy Gusev 	bitmap4 notify_mask;
3048*f44e1126SVitaliy Gusev 	notifylist4 notify_vals;
3049*f44e1126SVitaliy Gusev };
3050*f44e1126SVitaliy Gusev typedef struct notify4 notify4;
3051*f44e1126SVitaliy Gusev 
3052*f44e1126SVitaliy Gusev struct CB_NOTIFY4args {
3053*f44e1126SVitaliy Gusev 	stateid4 cna_stateid;
3054*f44e1126SVitaliy Gusev 	nfs_fh4 cna_fh;
3055*f44e1126SVitaliy Gusev 	struct {
3056*f44e1126SVitaliy Gusev 		uint_t cna_changes_len;
3057*f44e1126SVitaliy Gusev 		notify4 *cna_changes_val;
3058*f44e1126SVitaliy Gusev 	} cna_changes;
3059*f44e1126SVitaliy Gusev };
3060*f44e1126SVitaliy Gusev typedef struct CB_NOTIFY4args CB_NOTIFY4args;
3061*f44e1126SVitaliy Gusev 
3062*f44e1126SVitaliy Gusev struct CB_NOTIFY4res {
3063*f44e1126SVitaliy Gusev 	nfsstat4 cnr_status;
3064*f44e1126SVitaliy Gusev };
3065*f44e1126SVitaliy Gusev typedef struct CB_NOTIFY4res CB_NOTIFY4res;
3066*f44e1126SVitaliy Gusev 
3067*f44e1126SVitaliy Gusev struct CB_PUSH_DELEG4args {
3068*f44e1126SVitaliy Gusev 	nfs_fh4 cpda_fh;
3069*f44e1126SVitaliy Gusev 	open_delegation4 cpda_delegation;
3070*f44e1126SVitaliy Gusev };
3071*f44e1126SVitaliy Gusev typedef struct CB_PUSH_DELEG4args CB_PUSH_DELEG4args;
3072*f44e1126SVitaliy Gusev 
3073*f44e1126SVitaliy Gusev struct CB_PUSH_DELEG4res {
3074*f44e1126SVitaliy Gusev 	nfsstat4 cpdr_status;
3075*f44e1126SVitaliy Gusev };
3076*f44e1126SVitaliy Gusev typedef struct CB_PUSH_DELEG4res CB_PUSH_DELEG4res;
3077*f44e1126SVitaliy Gusev #define	RCA4_TYPE_MASK_RDATA_DLG 0
3078*f44e1126SVitaliy Gusev #define	RCA4_TYPE_MASK_WDATA_DLG 1
3079*f44e1126SVitaliy Gusev #define	RCA4_TYPE_MASK_DIR_DLG 2
3080*f44e1126SVitaliy Gusev #define	RCA4_TYPE_MASK_FILE_LAYOUT 3
3081*f44e1126SVitaliy Gusev #define	RCA4_TYPE_MASK_BLK_LAYOUT 4
3082*f44e1126SVitaliy Gusev #define	RCA4_TYPE_MASK_OBJ_LAYOUT_MIN 8
3083*f44e1126SVitaliy Gusev #define	RCA4_TYPE_MASK_OBJ_LAYOUT_MAX 9
3084*f44e1126SVitaliy Gusev #define	RCA4_TYPE_MASK_OTHER_LAYOUT_MIN 12
3085*f44e1126SVitaliy Gusev #define	RCA4_TYPE_MASK_OTHER_LAYOUT_MAX 15
3086*f44e1126SVitaliy Gusev 
3087*f44e1126SVitaliy Gusev struct CB_RECALL_ANY4args {
3088*f44e1126SVitaliy Gusev 	uint32_t craa_objects_to_keep;
3089*f44e1126SVitaliy Gusev 	bitmap4 craa_type_mask;
3090*f44e1126SVitaliy Gusev };
3091*f44e1126SVitaliy Gusev typedef struct CB_RECALL_ANY4args CB_RECALL_ANY4args;
3092*f44e1126SVitaliy Gusev 
3093*f44e1126SVitaliy Gusev struct CB_RECALL_ANY4res {
3094*f44e1126SVitaliy Gusev 	nfsstat4 crar_status;
3095*f44e1126SVitaliy Gusev };
3096*f44e1126SVitaliy Gusev typedef struct CB_RECALL_ANY4res CB_RECALL_ANY4res;
3097*f44e1126SVitaliy Gusev 
3098*f44e1126SVitaliy Gusev typedef CB_RECALL_ANY4args CB_RECALLABLE_OBJ_AVAIL4args;
3099*f44e1126SVitaliy Gusev 
3100*f44e1126SVitaliy Gusev struct CB_RECALLABLE_OBJ_AVAIL4res {
3101*f44e1126SVitaliy Gusev 	nfsstat4 croa_status;
3102*f44e1126SVitaliy Gusev };
3103*f44e1126SVitaliy Gusev typedef struct CB_RECALLABLE_OBJ_AVAIL4res CB_RECALLABLE_OBJ_AVAIL4res;
3104*f44e1126SVitaliy Gusev 
3105*f44e1126SVitaliy Gusev struct CB_RECALL_SLOT4args {
3106*f44e1126SVitaliy Gusev 	slotid4 rsa_target_highest_slotid;
3107*f44e1126SVitaliy Gusev };
3108*f44e1126SVitaliy Gusev typedef struct CB_RECALL_SLOT4args CB_RECALL_SLOT4args;
3109*f44e1126SVitaliy Gusev 
3110*f44e1126SVitaliy Gusev struct CB_RECALL_SLOT4res {
3111*f44e1126SVitaliy Gusev 	nfsstat4 rsr_status;
3112*f44e1126SVitaliy Gusev };
3113*f44e1126SVitaliy Gusev typedef struct CB_RECALL_SLOT4res CB_RECALL_SLOT4res;
3114*f44e1126SVitaliy Gusev 
3115*f44e1126SVitaliy Gusev struct referring_call4 {
3116*f44e1126SVitaliy Gusev 	sequenceid4 rc_sequenceid;
3117*f44e1126SVitaliy Gusev 	slotid4 rc_slotid;
3118*f44e1126SVitaliy Gusev };
3119*f44e1126SVitaliy Gusev typedef struct referring_call4 referring_call4;
3120*f44e1126SVitaliy Gusev 
3121*f44e1126SVitaliy Gusev struct referring_call_list4 {
3122*f44e1126SVitaliy Gusev 	sessionid4 rcl_sessionid;
3123*f44e1126SVitaliy Gusev 	struct {
3124*f44e1126SVitaliy Gusev 		uint_t rcl_referring_calls_len;
3125*f44e1126SVitaliy Gusev 		referring_call4 *rcl_referring_calls_val;
3126*f44e1126SVitaliy Gusev 	} rcl_referring_calls;
3127*f44e1126SVitaliy Gusev };
3128*f44e1126SVitaliy Gusev typedef struct referring_call_list4 referring_call_list4;
3129*f44e1126SVitaliy Gusev 
3130*f44e1126SVitaliy Gusev struct CB_SEQUENCE4args {
3131*f44e1126SVitaliy Gusev 	sessionid4 csa_sessionid;
3132*f44e1126SVitaliy Gusev 	sequenceid4 csa_sequenceid;
3133*f44e1126SVitaliy Gusev 	slotid4 csa_slotid;
3134*f44e1126SVitaliy Gusev 	slotid4 csa_highest_slotid;
3135*f44e1126SVitaliy Gusev 	bool_t csa_cachethis;
3136*f44e1126SVitaliy Gusev 	struct {
3137*f44e1126SVitaliy Gusev 		uint_t csa_referring_call_lists_len;
3138*f44e1126SVitaliy Gusev 		referring_call_list4 *csa_referring_call_lists_val;
3139*f44e1126SVitaliy Gusev 	} csa_referring_call_lists;
3140*f44e1126SVitaliy Gusev };
3141*f44e1126SVitaliy Gusev typedef struct CB_SEQUENCE4args CB_SEQUENCE4args;
3142*f44e1126SVitaliy Gusev 
3143*f44e1126SVitaliy Gusev struct CB_SEQUENCE4resok {
3144*f44e1126SVitaliy Gusev 	sessionid4 csr_sessionid;
3145*f44e1126SVitaliy Gusev 	sequenceid4 csr_sequenceid;
3146*f44e1126SVitaliy Gusev 	slotid4 csr_slotid;
3147*f44e1126SVitaliy Gusev 	slotid4 csr_highest_slotid;
3148*f44e1126SVitaliy Gusev 	slotid4 csr_target_highest_slotid;
3149*f44e1126SVitaliy Gusev };
3150*f44e1126SVitaliy Gusev typedef struct CB_SEQUENCE4resok CB_SEQUENCE4resok;
3151*f44e1126SVitaliy Gusev 
3152*f44e1126SVitaliy Gusev struct CB_SEQUENCE4res {
3153*f44e1126SVitaliy Gusev 	nfsstat4 csr_status;
3154*f44e1126SVitaliy Gusev 	union {
3155*f44e1126SVitaliy Gusev 		CB_SEQUENCE4resok csr_resok4;
3156*f44e1126SVitaliy Gusev 	} CB_SEQUENCE4res_u;
3157*f44e1126SVitaliy Gusev };
3158*f44e1126SVitaliy Gusev typedef struct CB_SEQUENCE4res CB_SEQUENCE4res;
3159*f44e1126SVitaliy Gusev 
3160*f44e1126SVitaliy Gusev struct CB_WANTS_CANCELLED4args {
3161*f44e1126SVitaliy Gusev 	bool_t cwca_contended_wants_cancelled;
3162*f44e1126SVitaliy Gusev 	bool_t cwca_resourced_wants_cancelled;
3163*f44e1126SVitaliy Gusev };
3164*f44e1126SVitaliy Gusev typedef struct CB_WANTS_CANCELLED4args CB_WANTS_CANCELLED4args;
3165*f44e1126SVitaliy Gusev 
3166*f44e1126SVitaliy Gusev struct CB_WANTS_CANCELLED4res {
3167*f44e1126SVitaliy Gusev 	nfsstat4 cwcr_status;
3168*f44e1126SVitaliy Gusev };
3169*f44e1126SVitaliy Gusev typedef struct CB_WANTS_CANCELLED4res CB_WANTS_CANCELLED4res;
3170*f44e1126SVitaliy Gusev 
3171*f44e1126SVitaliy Gusev struct CB_NOTIFY_LOCK4args {
3172*f44e1126SVitaliy Gusev 	nfs_fh4 cnla_fh;
3173*f44e1126SVitaliy Gusev 	lock_owner4 cnla_lock_owner;
3174*f44e1126SVitaliy Gusev };
3175*f44e1126SVitaliy Gusev typedef struct CB_NOTIFY_LOCK4args CB_NOTIFY_LOCK4args;
3176*f44e1126SVitaliy Gusev 
3177*f44e1126SVitaliy Gusev struct CB_NOTIFY_LOCK4res {
3178*f44e1126SVitaliy Gusev 	nfsstat4 cnlr_status;
3179*f44e1126SVitaliy Gusev };
3180*f44e1126SVitaliy Gusev typedef struct CB_NOTIFY_LOCK4res CB_NOTIFY_LOCK4res;
3181*f44e1126SVitaliy Gusev 
3182*f44e1126SVitaliy Gusev enum notify_deviceid_type4 {
3183*f44e1126SVitaliy Gusev 	NOTIFY_DEVICEID4_CHANGE = 1,
3184*f44e1126SVitaliy Gusev 	NOTIFY_DEVICEID4_DELETE = 2
3185*f44e1126SVitaliy Gusev };
3186*f44e1126SVitaliy Gusev typedef enum notify_deviceid_type4 notify_deviceid_type4;
3187*f44e1126SVitaliy Gusev 
3188*f44e1126SVitaliy Gusev struct notify_deviceid_delete4 {
3189*f44e1126SVitaliy Gusev 	layouttype4 ndd_layouttype;
3190*f44e1126SVitaliy Gusev 	deviceid4 ndd_deviceid;
3191*f44e1126SVitaliy Gusev };
3192*f44e1126SVitaliy Gusev typedef struct notify_deviceid_delete4 notify_deviceid_delete4;
3193*f44e1126SVitaliy Gusev 
3194*f44e1126SVitaliy Gusev struct notify_deviceid_change4 {
3195*f44e1126SVitaliy Gusev 	layouttype4 ndc_layouttype;
3196*f44e1126SVitaliy Gusev 	deviceid4 ndc_deviceid;
3197*f44e1126SVitaliy Gusev 	bool_t ndc_immediate;
3198*f44e1126SVitaliy Gusev };
3199*f44e1126SVitaliy Gusev typedef struct notify_deviceid_change4 notify_deviceid_change4;
3200*f44e1126SVitaliy Gusev 
3201*f44e1126SVitaliy Gusev struct CB_NOTIFY_DEVICEID4args {
3202*f44e1126SVitaliy Gusev 	struct {
3203*f44e1126SVitaliy Gusev 		uint_t cnda_changes_len;
3204*f44e1126SVitaliy Gusev 		notify4 *cnda_changes_val;
3205*f44e1126SVitaliy Gusev 	} cnda_changes;
3206*f44e1126SVitaliy Gusev };
3207*f44e1126SVitaliy Gusev typedef struct CB_NOTIFY_DEVICEID4args CB_NOTIFY_DEVICEID4args;
3208*f44e1126SVitaliy Gusev 
3209*f44e1126SVitaliy Gusev struct CB_NOTIFY_DEVICEID4res {
3210*f44e1126SVitaliy Gusev 	nfsstat4 cndr_status;
3211*f44e1126SVitaliy Gusev };
3212*f44e1126SVitaliy Gusev typedef struct CB_NOTIFY_DEVICEID4res CB_NOTIFY_DEVICEID4res;
3213*f44e1126SVitaliy Gusev 
3214*f44e1126SVitaliy Gusev /* Callback operations new to NFSv4.1 */
3215*f44e1126SVitaliy Gusev 
32167c478bd9Sstevel@tonic-gate enum nfs_cb_opnum4 {
32177c478bd9Sstevel@tonic-gate 	OP_CB_GETATTR = 3,
32187c478bd9Sstevel@tonic-gate 	OP_CB_RECALL = 4,
3219*f44e1126SVitaliy Gusev 	OP_CB_LAYOUTRECALL = 5,
3220*f44e1126SVitaliy Gusev 	OP_CB_NOTIFY = 6,
3221*f44e1126SVitaliy Gusev 	OP_CB_PUSH_DELEG = 7,
3222*f44e1126SVitaliy Gusev 	OP_CB_RECALL_ANY = 8,
3223*f44e1126SVitaliy Gusev 	OP_CB_RECALLABLE_OBJ_AVAIL = 9,
3224*f44e1126SVitaliy Gusev 	OP_CB_RECALL_SLOT = 10,
3225*f44e1126SVitaliy Gusev 	OP_CB_SEQUENCE = 11,
3226*f44e1126SVitaliy Gusev 	OP_CB_WANTS_CANCELLED = 12,
3227*f44e1126SVitaliy Gusev 	OP_CB_NOTIFY_LOCK = 13,
3228*f44e1126SVitaliy Gusev 	OP_CB_NOTIFY_DEVICEID = 14,
32297c478bd9Sstevel@tonic-gate 	OP_CB_ILLEGAL = 10044
32307c478bd9Sstevel@tonic-gate };
32317c478bd9Sstevel@tonic-gate typedef enum nfs_cb_opnum4 nfs_cb_opnum4;
32327c478bd9Sstevel@tonic-gate 
32337c478bd9Sstevel@tonic-gate struct nfs_cb_argop4 {
32347c478bd9Sstevel@tonic-gate 	uint_t argop;
32357c478bd9Sstevel@tonic-gate 	union {
32367c478bd9Sstevel@tonic-gate 		CB_GETATTR4args opcbgetattr;
32377c478bd9Sstevel@tonic-gate 		CB_RECALL4args opcbrecall;
3238*f44e1126SVitaliy Gusev 		CB_LAYOUTRECALL4args opcblayoutrecall;
3239*f44e1126SVitaliy Gusev 		CB_NOTIFY4args opcbnotify;
3240*f44e1126SVitaliy Gusev 		CB_PUSH_DELEG4args opcbpush_deleg;
3241*f44e1126SVitaliy Gusev 		CB_RECALL_ANY4args opcbrecall_any;
3242*f44e1126SVitaliy Gusev 		CB_RECALLABLE_OBJ_AVAIL4args opcbrecallable_obj_avail;
3243*f44e1126SVitaliy Gusev 		CB_RECALL_SLOT4args opcbrecall_slot;
3244*f44e1126SVitaliy Gusev 		CB_SEQUENCE4args opcbsequence;
3245*f44e1126SVitaliy Gusev 		CB_WANTS_CANCELLED4args opcbwants_cancelled;
3246*f44e1126SVitaliy Gusev 		CB_NOTIFY_LOCK4args opcbnotify_lock;
3247*f44e1126SVitaliy Gusev 		CB_NOTIFY_DEVICEID4args opcbnotify_deviceid;
32487c478bd9Sstevel@tonic-gate 	} nfs_cb_argop4_u;
32497c478bd9Sstevel@tonic-gate };
32507c478bd9Sstevel@tonic-gate typedef struct nfs_cb_argop4 nfs_cb_argop4;
32517c478bd9Sstevel@tonic-gate 
32527c478bd9Sstevel@tonic-gate struct nfs_cb_resop4 {
32537c478bd9Sstevel@tonic-gate 	uint_t resop;
32547c478bd9Sstevel@tonic-gate 	union {
32557c478bd9Sstevel@tonic-gate 		CB_GETATTR4res opcbgetattr;
32567c478bd9Sstevel@tonic-gate 		CB_RECALL4res opcbrecall;
3257*f44e1126SVitaliy Gusev 		CB_LAYOUTRECALL4res opcblayoutrecall;
3258*f44e1126SVitaliy Gusev 		CB_NOTIFY4res opcbnotify;
3259*f44e1126SVitaliy Gusev 		CB_PUSH_DELEG4res opcbpush_deleg;
3260*f44e1126SVitaliy Gusev 		CB_RECALL_ANY4res opcbrecall_any;
3261*f44e1126SVitaliy Gusev 		CB_RECALLABLE_OBJ_AVAIL4res opcbrecallable_obj_avail;
3262*f44e1126SVitaliy Gusev 		CB_RECALL_SLOT4res opcbrecall_slot;
3263*f44e1126SVitaliy Gusev 		CB_SEQUENCE4res opcbsequence;
3264*f44e1126SVitaliy Gusev 		CB_WANTS_CANCELLED4res opcbwants_cancelled;
3265*f44e1126SVitaliy Gusev 		CB_NOTIFY_LOCK4res opcbnotify_lock;
3266*f44e1126SVitaliy Gusev 		CB_NOTIFY_DEVICEID4res opcbnotify_deviceid;
32677c478bd9Sstevel@tonic-gate 		CB_ILLEGAL4res opcbillegal;
32687c478bd9Sstevel@tonic-gate 	} nfs_cb_resop4_u;
32697c478bd9Sstevel@tonic-gate };
32707c478bd9Sstevel@tonic-gate typedef struct nfs_cb_resop4 nfs_cb_resop4;
32717c478bd9Sstevel@tonic-gate 
32727c478bd9Sstevel@tonic-gate struct CB_COMPOUND4args {
32737c478bd9Sstevel@tonic-gate 	utf8string tag;
32747c478bd9Sstevel@tonic-gate 	uint32_t minorversion;
32757c478bd9Sstevel@tonic-gate 	uint32_t callback_ident;
32767c478bd9Sstevel@tonic-gate 	uint_t array_len;
32777c478bd9Sstevel@tonic-gate 	nfs_cb_argop4 *array;
32787c478bd9Sstevel@tonic-gate };
32797c478bd9Sstevel@tonic-gate typedef struct CB_COMPOUND4args CB_COMPOUND4args;
32807c478bd9Sstevel@tonic-gate 
32817c478bd9Sstevel@tonic-gate struct CB_COMPOUND4res {
32827c478bd9Sstevel@tonic-gate 	nfsstat4 status;
32837c478bd9Sstevel@tonic-gate 	utf8string tag;
32847c478bd9Sstevel@tonic-gate 	uint_t array_len;
32857c478bd9Sstevel@tonic-gate 	nfs_cb_resop4 *array;
32867c478bd9Sstevel@tonic-gate };
32877c478bd9Sstevel@tonic-gate typedef struct CB_COMPOUND4res CB_COMPOUND4res;
32887c478bd9Sstevel@tonic-gate 
32897c478bd9Sstevel@tonic-gate #define	NFS4_PROGRAM		100003
32907c478bd9Sstevel@tonic-gate #define	NFS_V4			4
32917c478bd9Sstevel@tonic-gate #define	NFSPROC4_NULL		0
32927c478bd9Sstevel@tonic-gate #define	NFSPROC4_COMPOUND	1
32937c478bd9Sstevel@tonic-gate 
32947c478bd9Sstevel@tonic-gate #define	NFS4_CALLBACK		0x40000000
32957c478bd9Sstevel@tonic-gate #define	NFS_CB			1
32967c478bd9Sstevel@tonic-gate #define	CB_NULL			0
32977c478bd9Sstevel@tonic-gate #define	CB_COMPOUND		1
32987c478bd9Sstevel@tonic-gate 
32997c478bd9Sstevel@tonic-gate extern  bool_t xdr_bitmap4(XDR *, bitmap4 *);
33007c478bd9Sstevel@tonic-gate extern  bool_t xdr_utf8string(XDR *, utf8string *);
33017c478bd9Sstevel@tonic-gate extern  bool_t xdr_nfs_fh4(XDR *, nfs_fh4 *);
33027c478bd9Sstevel@tonic-gate extern  bool_t xdr_fattr4_fsid(XDR *, fattr4_fsid *);
33037c478bd9Sstevel@tonic-gate extern  bool_t xdr_fattr4_acl(XDR *, fattr4_acl *);
33047c478bd9Sstevel@tonic-gate extern  bool_t xdr_fattr4_fs_locations(XDR *, fattr4_fs_locations *);
33057c478bd9Sstevel@tonic-gate extern  bool_t xdr_fattr4_rawdev(XDR *, fattr4_rawdev *);
33067c478bd9Sstevel@tonic-gate extern  bool_t xdr_nfstime4(XDR *, nfstime4 *);
33077c478bd9Sstevel@tonic-gate extern  bool_t xdr_settime4(XDR *, settime4 *);
33087c478bd9Sstevel@tonic-gate extern  bool_t xdr_COMPOUND4args_clnt(XDR *, COMPOUND4args_clnt *);
33097c46fb7fSek extern  bool_t xdr_COMPOUND4args_srv(XDR *, COMPOUND4args *);
33107c478bd9Sstevel@tonic-gate extern  bool_t xdr_COMPOUND4res_clnt(XDR *, COMPOUND4res_clnt *);
33117c46fb7fSek extern  bool_t xdr_COMPOUND4res_srv(XDR *, COMPOUND4res *);
3312eac3aab7Srobinson extern  bool_t xdr_CB_COMPOUND4args_clnt(XDR *, CB_COMPOUND4args *);
3313eac3aab7Srobinson extern  bool_t xdr_CB_COMPOUND4args_srv(XDR *, CB_COMPOUND4args *);
33147c478bd9Sstevel@tonic-gate extern  bool_t xdr_CB_COMPOUND4res(XDR *, CB_COMPOUND4res *);
33157c478bd9Sstevel@tonic-gate 
3316*f44e1126SVitaliy Gusev /* New XDR to nfsv4.1 */
3317*f44e1126SVitaliy Gusev extern  bool_t xdr_nfs_ftype4(XDR *, nfs_ftype4*);
3318*f44e1126SVitaliy Gusev extern  bool_t xdr_nfsstat4(XDR *, nfsstat4*);
3319*f44e1126SVitaliy Gusev extern  bool_t xdr_attrlist4(XDR *, attrlist4*);
3320*f44e1126SVitaliy Gusev extern  bool_t xdr_bitmap4(XDR *, bitmap4*);
3321*f44e1126SVitaliy Gusev extern  bool_t xdr_changeid4(XDR *, changeid4*);
3322*f44e1126SVitaliy Gusev extern  bool_t xdr_clientid4(XDR *, clientid4*);
3323*f44e1126SVitaliy Gusev extern  bool_t xdr_count4(XDR *, count4*);
3324*f44e1126SVitaliy Gusev extern  bool_t xdr_length4(XDR *, length4*);
3325*f44e1126SVitaliy Gusev extern  bool_t xdr_mode4(XDR *, mode4*);
3326*f44e1126SVitaliy Gusev extern  bool_t xdr_nfs_cookie4(XDR *, nfs_cookie4*);
3327*f44e1126SVitaliy Gusev extern  bool_t xdr_nfs_fh4(XDR *, nfs_fh4*);
3328*f44e1126SVitaliy Gusev extern  bool_t xdr_offset4(XDR *, offset4*);
3329*f44e1126SVitaliy Gusev extern  bool_t xdr_qop4(XDR *, qop4*);
3330*f44e1126SVitaliy Gusev extern  bool_t xdr_sec_oid4(XDR *, sec_oid4*);
3331*f44e1126SVitaliy Gusev extern  bool_t xdr_sequenceid4(XDR *, sequenceid4*);
3332*f44e1126SVitaliy Gusev extern  bool_t xdr_seqid4(XDR *, seqid4*);
3333*f44e1126SVitaliy Gusev extern  bool_t xdr_sessionid4(XDR *, sessionid4);
3334*f44e1126SVitaliy Gusev extern  bool_t xdr_slotid4(XDR *, slotid4*);
3335*f44e1126SVitaliy Gusev extern  bool_t xdr_utf8string(XDR *, utf8string*);
3336*f44e1126SVitaliy Gusev extern  bool_t xdr_utf8str_cis(XDR *, utf8str_cis*);
3337*f44e1126SVitaliy Gusev extern  bool_t xdr_utf8str_cs(XDR *, utf8str_cs*);
3338*f44e1126SVitaliy Gusev extern  bool_t xdr_utf8str_mixed(XDR *, utf8str_mixed*);
3339*f44e1126SVitaliy Gusev extern  bool_t xdr_component4(XDR *, component4*);
3340*f44e1126SVitaliy Gusev extern  bool_t xdr_linktext4(XDR *, linktext4*);
3341*f44e1126SVitaliy Gusev extern  bool_t xdr_pathname4(XDR *, pathname4*);
3342*f44e1126SVitaliy Gusev extern  bool_t xdr_verifier4(XDR *, verifier4*);
3343*f44e1126SVitaliy Gusev extern  bool_t xdr_nfstime4(XDR *, nfstime4*);
3344*f44e1126SVitaliy Gusev extern  bool_t xdr_time_how4(XDR *, time_how4*);
3345*f44e1126SVitaliy Gusev extern  bool_t xdr_settime4(XDR *, settime4*);
3346*f44e1126SVitaliy Gusev extern  bool_t xdr_nfs_lease4(XDR *, nfs_lease4*);
3347*f44e1126SVitaliy Gusev extern  bool_t xdr_fsid4(XDR *, fsid4*);
3348*f44e1126SVitaliy Gusev extern  bool_t xdr_change_policy4(XDR *, change_policy4*);
3349*f44e1126SVitaliy Gusev extern  bool_t xdr_fs_locations4(XDR *, fs_locations4*);
3350*f44e1126SVitaliy Gusev extern  bool_t xdr_acetype4(XDR *, acetype4*);
3351*f44e1126SVitaliy Gusev extern  bool_t xdr_aceflag4(XDR *, aceflag4*);
3352*f44e1126SVitaliy Gusev extern  bool_t xdr_acemask4(XDR *, acemask4*);
3353*f44e1126SVitaliy Gusev extern  bool_t xdr_nfsace4(XDR *, nfsace4*);
3354*f44e1126SVitaliy Gusev extern  bool_t xdr_aclflag4(XDR *, aclflag4*);
3355*f44e1126SVitaliy Gusev extern  bool_t xdr_nfsacl41(XDR *, nfsacl41*);
3356*f44e1126SVitaliy Gusev extern  bool_t xdr_mode_masked4(XDR *, mode_masked4*);
3357*f44e1126SVitaliy Gusev extern  bool_t xdr_specdata4(XDR *, specdata4*);
3358*f44e1126SVitaliy Gusev extern  bool_t xdr_netaddr4(XDR *, netaddr4*);
3359*f44e1126SVitaliy Gusev extern  bool_t xdr_nfs_impl_id4(XDR *, nfs_impl_id4*);
3360*f44e1126SVitaliy Gusev extern  bool_t xdr_stateid4(XDR *, stateid4*);
3361*f44e1126SVitaliy Gusev extern  bool_t xdr_layouttype4(XDR *, layouttype4*);
3362*f44e1126SVitaliy Gusev extern  bool_t xdr_layout_content4(XDR *, layout_content4*);
3363*f44e1126SVitaliy Gusev extern  bool_t xdr_layouthint4(XDR *, layouthint4*);
3364*f44e1126SVitaliy Gusev extern  bool_t xdr_layoutiomode4(XDR *, layoutiomode4*);
3365*f44e1126SVitaliy Gusev extern  bool_t xdr_layout4(XDR *, layout4*);
3366*f44e1126SVitaliy Gusev extern  bool_t xdr_deviceid4(XDR *, deviceid4);
3367*f44e1126SVitaliy Gusev extern  bool_t xdr_device_addr4(XDR *, device_addr4*);
3368*f44e1126SVitaliy Gusev extern  bool_t xdr_layoutupdate4(XDR *, layoutupdate4*);
3369*f44e1126SVitaliy Gusev extern  bool_t xdr_layoutreturn_type4(XDR *, layoutreturn_type4*);
3370*f44e1126SVitaliy Gusev extern  bool_t xdr_layoutreturn_file4(XDR *, layoutreturn_file4*);
3371*f44e1126SVitaliy Gusev extern  bool_t xdr_layoutreturn4(XDR *, layoutreturn4*);
3372*f44e1126SVitaliy Gusev extern  bool_t xdr_fs4_status_type(XDR *, fs4_status_type*);
3373*f44e1126SVitaliy Gusev extern  bool_t xdr_fs4_status(XDR *, fs4_status*);
3374*f44e1126SVitaliy Gusev extern  bool_t xdr_threshold4_read_size(XDR *, threshold4_read_size*);
3375*f44e1126SVitaliy Gusev extern  bool_t xdr_threshold4_write_size(XDR *, threshold4_write_size*);
3376*f44e1126SVitaliy Gusev extern  bool_t xdr_threshold4_read_iosize(XDR *, threshold4_read_iosize*);
3377*f44e1126SVitaliy Gusev extern  bool_t xdr_threshold4_write_iosize(XDR *, threshold4_write_iosize*);
3378*f44e1126SVitaliy Gusev extern  bool_t xdr_threshold_item4(XDR *, threshold_item4*);
3379*f44e1126SVitaliy Gusev extern  bool_t xdr_mdsthreshold4(XDR *, mdsthreshold4*);
3380*f44e1126SVitaliy Gusev extern  bool_t xdr_retention_get4(XDR *, retention_get4*);
3381*f44e1126SVitaliy Gusev extern  bool_t xdr_retention_set4(XDR *, retention_set4*);
3382*f44e1126SVitaliy Gusev extern  bool_t xdr_fs_charset_cap4(XDR *, fs_charset_cap4*);
3383*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_supported_attrs(XDR *, fattr4_supported_attrs*);
3384*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_type(XDR *, fattr4_type*);
3385*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_fh_expire_type(XDR *, fattr4_fh_expire_type*);
3386*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_change(XDR *, fattr4_change*);
3387*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_size(XDR *, fattr4_size*);
3388*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_link_support(XDR *, fattr4_link_support*);
3389*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_symlink_support(XDR *, fattr4_symlink_support*);
3390*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_named_attr(XDR *, fattr4_named_attr*);
3391*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_fsid(XDR *, fattr4_fsid*);
3392*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_unique_handles(XDR *, fattr4_unique_handles*);
3393*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_lease_time(XDR *, fattr4_lease_time*);
3394*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_rdattr_error(XDR *, fattr4_rdattr_error*);
3395*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_acl(XDR *, fattr4_acl*);
3396*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_aclsupport(XDR *, fattr4_aclsupport*);
3397*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_archive(XDR *, fattr4_archive*);
3398*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_cansettime(XDR *, fattr4_cansettime*);
3399*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_case_insensitive(XDR *, fattr4_case_insensitive*);
3400*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_case_preserving(XDR *, fattr4_case_preserving*);
3401*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_chown_restricted(XDR *, fattr4_chown_restricted*);
3402*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_fileid(XDR *, fattr4_fileid*);
3403*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_files_avail(XDR *, fattr4_files_avail*);
3404*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_filehandle(XDR *, fattr4_filehandle*);
3405*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_files_free(XDR *, fattr4_files_free*);
3406*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_files_total(XDR *, fattr4_files_total*);
3407*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_fs_locations(XDR *, fattr4_fs_locations*);
3408*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_hidden(XDR *, fattr4_hidden*);
3409*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_homogeneous(XDR *, fattr4_homogeneous*);
3410*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_maxfilesize(XDR *, fattr4_maxfilesize*);
3411*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_maxlink(XDR *, fattr4_maxlink*);
3412*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_maxname(XDR *, fattr4_maxname*);
3413*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_maxread(XDR *, fattr4_maxread*);
3414*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_maxwrite(XDR *, fattr4_maxwrite*);
3415*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_mimetype(XDR *, fattr4_mimetype*);
3416*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_mode(XDR *, fattr4_mode*);
3417*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_mode_set_masked(XDR *, fattr4_mode_set_masked*);
3418*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_mounted_on_fileid(XDR *, fattr4_mounted_on_fileid*);
3419*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_no_trunc(XDR *, fattr4_no_trunc*);
3420*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_numlinks(XDR *, fattr4_numlinks*);
3421*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_owner(XDR *, fattr4_owner*);
3422*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_owner_group(XDR *, fattr4_owner_group*);
3423*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_quota_avail_hard(XDR *, fattr4_quota_avail_hard*);
3424*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_quota_avail_soft(XDR *, fattr4_quota_avail_soft*);
3425*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_quota_used(XDR *, fattr4_quota_used*);
3426*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_rawdev(XDR *, fattr4_rawdev*);
3427*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_space_avail(XDR *, fattr4_space_avail*);
3428*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_space_free(XDR *, fattr4_space_free*);
3429*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_space_total(XDR *, fattr4_space_total*);
3430*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_space_used(XDR *, fattr4_space_used*);
3431*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_system(XDR *, fattr4_system*);
3432*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_time_access(XDR *, fattr4_time_access*);
3433*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_time_access_set(XDR *, fattr4_time_access_set*);
3434*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_time_backup(XDR *, fattr4_time_backup*);
3435*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_time_create(XDR *, fattr4_time_create*);
3436*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_time_delta(XDR *, fattr4_time_delta*);
3437*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_time_metadata(XDR *, fattr4_time_metadata*);
3438*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_time_modify(XDR *, fattr4_time_modify*);
3439*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_time_modify_set(XDR *, fattr4_time_modify_set*);
3440*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_suppattr_exclcreat(XDR *, fattr4_suppattr_exclcreat*);
3441*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_dir_notif_delay(XDR *, fattr4_dir_notif_delay*);
3442*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_dirent_notif_delay(XDR *, fattr4_dirent_notif_delay*);
3443*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_fs_layout_types(XDR *, fattr4_fs_layout_types*);
3444*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_fs_status(XDR *, fattr4_fs_status*);
3445*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_fs_charset_cap(XDR *, fattr4_fs_charset_cap*);
3446*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_layout_alignment(XDR *, fattr4_layout_alignment*);
3447*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_layout_blksize(XDR *, fattr4_layout_blksize*);
3448*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_layout_hint(XDR *, fattr4_layout_hint*);
3449*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_layout_types(XDR *, fattr4_layout_types*);
3450*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_mdsthreshold(XDR *, fattr4_mdsthreshold*);
3451*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_retention_get(XDR *, fattr4_retention_get*);
3452*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_retention_set(XDR *, fattr4_retention_set*);
3453*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_retentevt_get(XDR *, fattr4_retentevt_get*);
3454*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_retentevt_set(XDR *, fattr4_retentevt_set*);
3455*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_retention_hold(XDR *, fattr4_retention_hold*);
3456*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_dacl(XDR *, fattr4_dacl*);
3457*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_sacl(XDR *, fattr4_sacl*);
3458*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_change_policy(XDR *, fattr4_change_policy*);
3459*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4(XDR *, fattr4*);
3460*f44e1126SVitaliy Gusev extern  bool_t xdr_change_info4(XDR *, change_info4*);
3461*f44e1126SVitaliy Gusev extern  bool_t xdr_clientaddr4(XDR *, clientaddr4*);
3462*f44e1126SVitaliy Gusev extern  bool_t xdr_cb_client4(XDR *, cb_client4*);
3463*f44e1126SVitaliy Gusev extern  bool_t xdr_nfs_client_id4(XDR *, nfs_client_id4*);
3464*f44e1126SVitaliy Gusev extern  bool_t xdr_client_owner4(XDR *, client_owner4*);
3465*f44e1126SVitaliy Gusev extern  bool_t xdr_server_owner4(XDR *, server_owner4*);
3466*f44e1126SVitaliy Gusev extern  bool_t xdr_state_owner4(XDR *, state_owner4*);
3467*f44e1126SVitaliy Gusev extern  bool_t xdr_open_owner4(XDR *, open_owner4*);
3468*f44e1126SVitaliy Gusev extern  bool_t xdr_lock_owner4(XDR *, lock_owner4*);
3469*f44e1126SVitaliy Gusev extern  bool_t xdr_nfs_lock_type4(XDR *, nfs_lock_type4*);
3470*f44e1126SVitaliy Gusev extern  bool_t xdr_ssv_subkey4(XDR *, ssv_subkey4*);
3471*f44e1126SVitaliy Gusev extern  bool_t xdr_ssv_mic_plain_tkn4(XDR *, ssv_mic_plain_tkn4*);
3472*f44e1126SVitaliy Gusev extern  bool_t xdr_ssv_mic_tkn4(XDR *, ssv_mic_tkn4*);
3473*f44e1126SVitaliy Gusev extern  bool_t xdr_ssv_seal_plain_tkn4(XDR *, ssv_seal_plain_tkn4*);
3474*f44e1126SVitaliy Gusev extern  bool_t xdr_ssv_seal_cipher_tkn4(XDR *, ssv_seal_cipher_tkn4*);
3475*f44e1126SVitaliy Gusev extern  bool_t xdr_fs_locations_server4(XDR *, fs_locations_server4*);
3476*f44e1126SVitaliy Gusev extern  bool_t xdr_fs_locations_item4(XDR *, fs_locations_item4*);
3477*f44e1126SVitaliy Gusev extern  bool_t xdr_fs_locations_info4(XDR *, fs_locations_info4*);
3478*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_fs_locations_info(XDR *, fattr4_fs_locations_info*);
3479*f44e1126SVitaliy Gusev extern  bool_t xdr_nfl_util4(XDR *, nfl_util4*);
3480*f44e1126SVitaliy Gusev extern  bool_t xdr_filelayout_hint_care4(XDR *, filelayout_hint_care4*);
3481*f44e1126SVitaliy Gusev extern  bool_t xdr_nfsv4_1_file_layouthint4(XDR *, nfsv4_1_file_layouthint4*);
3482*f44e1126SVitaliy Gusev extern  bool_t xdr_multipath_list4(XDR *, multipath_list4*);
3483*f44e1126SVitaliy Gusev extern  bool_t xdr_nfsv4_1_file_layout_ds_addr4(XDR *,
3484*f44e1126SVitaliy Gusev 	nfsv4_1_file_layout_ds_addr4*);
3485*f44e1126SVitaliy Gusev extern  bool_t xdr_nfsv4_1_file_layout4(XDR *, nfsv4_1_file_layout4*);
3486*f44e1126SVitaliy Gusev extern  bool_t xdr_ACCESS4args(XDR *, ACCESS4args*);
3487*f44e1126SVitaliy Gusev extern  bool_t xdr_COMMIT4args(XDR *, COMMIT4args*);
3488*f44e1126SVitaliy Gusev extern  bool_t xdr_COMMIT4res(XDR *, COMMIT4res*);
3489*f44e1126SVitaliy Gusev extern  bool_t xdr_DELEGPURGE4args(XDR *, DELEGPURGE4args*);
3490*f44e1126SVitaliy Gusev extern  bool_t xdr_DELEGPURGE4res(XDR *, DELEGPURGE4res*);
3491*f44e1126SVitaliy Gusev extern  bool_t xdr_DELEGRETURN4args(XDR *, DELEGRETURN4args*);
3492*f44e1126SVitaliy Gusev extern  bool_t xdr_DELEGRETURN4res(XDR *, DELEGRETURN4res*);
3493*f44e1126SVitaliy Gusev extern  bool_t xdr_GETATTR4args(XDR *, GETATTR4args*);
3494*f44e1126SVitaliy Gusev extern  bool_t xdr_GETATTR4res(XDR *, GETATTR4res*);
3495*f44e1126SVitaliy Gusev extern  bool_t xdr_GETFH4res(XDR *, GETFH4res*);
3496*f44e1126SVitaliy Gusev extern  bool_t xdr_open_to_lock_owner4(XDR *, open_to_lock_owner4*);
3497*f44e1126SVitaliy Gusev extern  bool_t xdr_exist_lock_owner4(XDR *, exist_lock_owner4*);
3498*f44e1126SVitaliy Gusev extern  bool_t xdr_locker4(XDR *, locker4*);
3499*f44e1126SVitaliy Gusev extern  bool_t xdr_LOCK4denied(XDR *, LOCK4denied*);
3500*f44e1126SVitaliy Gusev extern  bool_t xdr_LOOKUP4args(XDR *, LOOKUP4args*);
3501*f44e1126SVitaliy Gusev extern  bool_t xdr_LOOKUP4res(XDR *, LOOKUP4res*);
3502*f44e1126SVitaliy Gusev extern  bool_t xdr_LOOKUPP4res(XDR *, LOOKUPP4res*);
3503*f44e1126SVitaliy Gusev extern  bool_t xdr_NVERIFY4args(XDR *, NVERIFY4args*);
3504*f44e1126SVitaliy Gusev extern  bool_t xdr_NVERIFY4res(XDR *, NVERIFY4res*);
3505*f44e1126SVitaliy Gusev extern  bool_t xdr_createmode4(XDR *, createmode4*);
3506*f44e1126SVitaliy Gusev extern  bool_t xdr_creatverfattr(XDR *, creatverfattr*);
3507*f44e1126SVitaliy Gusev extern  bool_t xdr_createhow4(XDR *, createhow4*);
3508*f44e1126SVitaliy Gusev extern  bool_t xdr_opentype4(XDR *, opentype4*);
3509*f44e1126SVitaliy Gusev extern  bool_t xdr_openflag4(XDR *, openflag4*);
3510*f44e1126SVitaliy Gusev extern  bool_t xdr_limit_by4(XDR *, limit_by4*);
3511*f44e1126SVitaliy Gusev extern  bool_t xdr_nfs_modified_limit4(XDR *, nfs_modified_limit4*);
3512*f44e1126SVitaliy Gusev extern  bool_t xdr_nfs_space_limit4(XDR *, nfs_space_limit4*);
3513*f44e1126SVitaliy Gusev extern  bool_t xdr_open_delegation_type4(XDR *, open_delegation_type4*);
3514*f44e1126SVitaliy Gusev extern  bool_t xdr_open_claim_type4(XDR *, open_claim_type4*);
3515*f44e1126SVitaliy Gusev extern  bool_t xdr_open_claim_delegate_cur4(XDR *, open_claim_delegate_cur4*);
3516*f44e1126SVitaliy Gusev extern  bool_t xdr_open_claim4(XDR *, open_claim4*);
3517*f44e1126SVitaliy Gusev extern  bool_t xdr_open_read_delegation4(XDR *, open_read_delegation4*);
3518*f44e1126SVitaliy Gusev extern  bool_t xdr_open_write_delegation4(XDR *, open_write_delegation4*);
3519*f44e1126SVitaliy Gusev extern  bool_t xdr_why_no_delegation4(XDR *, why_no_delegation4*);
3520*f44e1126SVitaliy Gusev extern  bool_t xdr_open_none_delegation4(XDR *, open_none_delegation4*);
3521*f44e1126SVitaliy Gusev extern  bool_t xdr_open_delegation4(XDR *, open_delegation4*);
3522*f44e1126SVitaliy Gusev extern  bool_t xdr_PUTFH4args(XDR *, PUTFH4args*);
3523*f44e1126SVitaliy Gusev extern  bool_t xdr_PUTFH4res(XDR *, PUTFH4res*);
3524*f44e1126SVitaliy Gusev extern  bool_t xdr_PUTPUBFH4res(XDR *, PUTPUBFH4res*);
3525*f44e1126SVitaliy Gusev extern  bool_t xdr_PUTROOTFH4res(XDR *, PUTROOTFH4res*);
3526*f44e1126SVitaliy Gusev extern  bool_t xdr_RENEW4args(XDR *, RENEW4args*);
3527*f44e1126SVitaliy Gusev extern  bool_t xdr_RENEW4res(XDR *, RENEW4res*);
3528*f44e1126SVitaliy Gusev extern  bool_t xdr_RESTOREFH4res(XDR *, RESTOREFH4res*);
3529*f44e1126SVitaliy Gusev extern  bool_t xdr_SAVEFH4res(XDR *, SAVEFH4res*);
3530*f44e1126SVitaliy Gusev extern  bool_t xdr_SECINFO4args(XDR *, SECINFO4args*);
3531*f44e1126SVitaliy Gusev extern  bool_t xdr_rpc_gss_svc_t(XDR *, rpc_gss_svc_t *);
3532*f44e1126SVitaliy Gusev extern  bool_t xdr_rpcsec_gss_info(XDR *, rpcsec_gss_info*);
3533*f44e1126SVitaliy Gusev extern  bool_t xdr_SECINFO4res(XDR *, SECINFO4res*);
3534*f44e1126SVitaliy Gusev extern  bool_t xdr_SETATTR4args(XDR *, SETATTR4args*);
3535*f44e1126SVitaliy Gusev extern  bool_t xdr_SETATTR4res(XDR *, SETATTR4res*);
3536*f44e1126SVitaliy Gusev extern  bool_t xdr_SETCLIENTID_CONFIRM4args(XDR *, SETCLIENTID_CONFIRM4args*);
3537*f44e1126SVitaliy Gusev extern  bool_t xdr_SETCLIENTID_CONFIRM4res(XDR *, SETCLIENTID_CONFIRM4res*);
3538*f44e1126SVitaliy Gusev extern  bool_t xdr_VERIFY4args(XDR *, VERIFY4args*);
3539*f44e1126SVitaliy Gusev extern  bool_t xdr_VERIFY4res(XDR *, VERIFY4res*);
3540*f44e1126SVitaliy Gusev extern  bool_t xdr_stable_how4(XDR *, stable_how4*);
3541*f44e1126SVitaliy Gusev extern  bool_t xdr_RELEASE_LOCKOWNER4args(XDR *, RELEASE_LOCKOWNER4args*);
3542*f44e1126SVitaliy Gusev extern  bool_t xdr_RELEASE_LOCKOWNER4res(XDR *, RELEASE_LOCKOWNER4res*);
3543*f44e1126SVitaliy Gusev extern  bool_t xdr_ILLEGAL4res(XDR *, ILLEGAL4res*);
3544*f44e1126SVitaliy Gusev extern  bool_t xdr_gsshandle4_t(XDR *, gsshandle4_t *);
3545*f44e1126SVitaliy Gusev extern  bool_t xdr_gss_cb_handles4(XDR *, gss_cb_handles4*);
3546*f44e1126SVitaliy Gusev extern  bool_t xdr_callback_sec_parms4(XDR *, callback_sec_parms4*);
3547*f44e1126SVitaliy Gusev extern  bool_t xdr_BACKCHANNEL_CTL4args(XDR *, BACKCHANNEL_CTL4args*);
3548*f44e1126SVitaliy Gusev extern  bool_t xdr_BACKCHANNEL_CTL4res(XDR *, BACKCHANNEL_CTL4res*);
3549*f44e1126SVitaliy Gusev extern  bool_t xdr_channel_dir_from_client4(XDR *, channel_dir_from_client4*);
3550*f44e1126SVitaliy Gusev extern  bool_t xdr_BIND_CONN_TO_SESSION4args(XDR *, BIND_CONN_TO_SESSION4args*);
3551*f44e1126SVitaliy Gusev extern  bool_t xdr_channel_dir_from_server4(XDR *, channel_dir_from_server4*);
3552*f44e1126SVitaliy Gusev extern  bool_t xdr_BIND_CONN_TO_SESSION4resok(XDR *,
3553*f44e1126SVitaliy Gusev 	BIND_CONN_TO_SESSION4resok*);
3554*f44e1126SVitaliy Gusev extern  bool_t xdr_BIND_CONN_TO_SESSION4res(XDR *, BIND_CONN_TO_SESSION4res*);
3555*f44e1126SVitaliy Gusev extern  bool_t xdr_state_protect_ops4(XDR *, state_protect_ops4*);
3556*f44e1126SVitaliy Gusev extern  bool_t xdr_ssv_sp_parms4(XDR *, ssv_sp_parms4*);
3557*f44e1126SVitaliy Gusev extern  bool_t xdr_state_protect_how4(XDR *, state_protect_how4*);
3558*f44e1126SVitaliy Gusev extern  bool_t xdr_state_protect4_a(XDR *, state_protect4_a*);
3559*f44e1126SVitaliy Gusev extern  bool_t xdr_EXCHANGE_ID4args(XDR *, EXCHANGE_ID4args*);
3560*f44e1126SVitaliy Gusev extern  bool_t xdr_ssv_prot_info4(XDR *, ssv_prot_info4*);
3561*f44e1126SVitaliy Gusev extern  bool_t xdr_state_protect4_r(XDR *, state_protect4_r*);
3562*f44e1126SVitaliy Gusev extern  bool_t xdr_EXCHANGE_ID4resok(XDR *, EXCHANGE_ID4resok*);
3563*f44e1126SVitaliy Gusev extern  bool_t xdr_EXCHANGE_ID4res(XDR *, EXCHANGE_ID4res*);
3564*f44e1126SVitaliy Gusev extern  bool_t xdr_channel_attrs4(XDR *, channel_attrs4*);
3565*f44e1126SVitaliy Gusev extern  bool_t xdr_CREATE_SESSION4args(XDR *, CREATE_SESSION4args*);
3566*f44e1126SVitaliy Gusev extern  bool_t xdr_CREATE_SESSION4resok(XDR *, CREATE_SESSION4resok*);
3567*f44e1126SVitaliy Gusev extern  bool_t xdr_CREATE_SESSION4res(XDR *, CREATE_SESSION4res*);
3568*f44e1126SVitaliy Gusev extern  bool_t xdr_DESTROY_SESSION4args(XDR *, DESTROY_SESSION4args*);
3569*f44e1126SVitaliy Gusev extern  bool_t xdr_DESTROY_SESSION4res(XDR *, DESTROY_SESSION4res*);
3570*f44e1126SVitaliy Gusev extern  bool_t xdr_FREE_STATEID4args(XDR *, FREE_STATEID4args*);
3571*f44e1126SVitaliy Gusev extern  bool_t xdr_FREE_STATEID4res(XDR *, FREE_STATEID4res*);
3572*f44e1126SVitaliy Gusev extern  bool_t xdr_attr_notice4(XDR *, attr_notice4*);
3573*f44e1126SVitaliy Gusev extern  bool_t xdr_GET_DIR_DELEGATION4args(XDR *, GET_DIR_DELEGATION4args*);
3574*f44e1126SVitaliy Gusev extern  bool_t xdr_GET_DIR_DELEGATION4resok(XDR *, GET_DIR_DELEGATION4resok*);
3575*f44e1126SVitaliy Gusev extern  bool_t xdr_gddrnf4_status(XDR *, gddrnf4_status*);
3576*f44e1126SVitaliy Gusev extern  bool_t xdr_GET_DIR_DELEGATION4res_non_fatal(XDR *,
3577*f44e1126SVitaliy Gusev 	GET_DIR_DELEGATION4res_non_fatal*);
3578*f44e1126SVitaliy Gusev extern  bool_t xdr_GET_DIR_DELEGATION4res(XDR *, GET_DIR_DELEGATION4res*);
3579*f44e1126SVitaliy Gusev extern  bool_t xdr_GETDEVICEINFO4args(XDR *, GETDEVICEINFO4args*);
3580*f44e1126SVitaliy Gusev extern  bool_t xdr_GETDEVICEINFO4resok(XDR *, GETDEVICEINFO4resok*);
3581*f44e1126SVitaliy Gusev extern  bool_t xdr_GETDEVICEINFO4res(XDR *, GETDEVICEINFO4res*);
3582*f44e1126SVitaliy Gusev extern  bool_t xdr_GETDEVICELIST4args(XDR *, GETDEVICELIST4args*);
3583*f44e1126SVitaliy Gusev extern  bool_t xdr_GETDEVICELIST4resok(XDR *, GETDEVICELIST4resok*);
3584*f44e1126SVitaliy Gusev extern  bool_t xdr_GETDEVICELIST4res(XDR *, GETDEVICELIST4res*);
3585*f44e1126SVitaliy Gusev extern  bool_t xdr_newtime4(XDR *, newtime4*);
3586*f44e1126SVitaliy Gusev extern  bool_t xdr_newoffset4(XDR *, newoffset4*);
3587*f44e1126SVitaliy Gusev extern  bool_t xdr_LAYOUTCOMMIT4args(XDR *, LAYOUTCOMMIT4args*);
3588*f44e1126SVitaliy Gusev extern  bool_t xdr_newsize4(XDR *, newsize4*);
3589*f44e1126SVitaliy Gusev extern  bool_t xdr_LAYOUTCOMMIT4resok(XDR *, LAYOUTCOMMIT4resok*);
3590*f44e1126SVitaliy Gusev extern  bool_t xdr_LAYOUTCOMMIT4res(XDR *, LAYOUTCOMMIT4res*);
3591*f44e1126SVitaliy Gusev extern  bool_t xdr_LAYOUTGET4args(XDR *, LAYOUTGET4args*);
3592*f44e1126SVitaliy Gusev extern  bool_t xdr_LAYOUTGET4resok(XDR *, LAYOUTGET4resok*);
3593*f44e1126SVitaliy Gusev extern  bool_t xdr_LAYOUTGET4res(XDR *, LAYOUTGET4res*);
3594*f44e1126SVitaliy Gusev extern  bool_t xdr_LAYOUTRETURN4args(XDR *, LAYOUTRETURN4args*);
3595*f44e1126SVitaliy Gusev extern  bool_t xdr_layoutreturn_stateid(XDR *, layoutreturn_stateid*);
3596*f44e1126SVitaliy Gusev extern  bool_t xdr_LAYOUTRETURN4res(XDR *, LAYOUTRETURN4res*);
3597*f44e1126SVitaliy Gusev extern  bool_t xdr_secinfo_style4(XDR *, secinfo_style4*);
3598*f44e1126SVitaliy Gusev extern  bool_t xdr_SECINFO_NO_NAME4args(XDR *, SECINFO_NO_NAME4args*);
3599*f44e1126SVitaliy Gusev extern  bool_t xdr_SECINFO_NO_NAME4res(XDR *, SECINFO_NO_NAME4res*);
3600*f44e1126SVitaliy Gusev extern  bool_t xdr_SEQUENCE4args(XDR *, SEQUENCE4args*);
3601*f44e1126SVitaliy Gusev extern  bool_t xdr_SEQUENCE4resok(XDR *, SEQUENCE4resok*);
3602*f44e1126SVitaliy Gusev extern  bool_t xdr_SEQUENCE4res(XDR *, SEQUENCE4res*);
3603*f44e1126SVitaliy Gusev extern  bool_t xdr_ssa_digest_input4(XDR *, ssa_digest_input4*);
3604*f44e1126SVitaliy Gusev extern  bool_t xdr_SET_SSV4args(XDR *, SET_SSV4args*);
3605*f44e1126SVitaliy Gusev extern  bool_t xdr_ssr_digest_input4(XDR *, ssr_digest_input4*);
3606*f44e1126SVitaliy Gusev extern  bool_t xdr_SET_SSV4resok(XDR *, SET_SSV4resok*);
3607*f44e1126SVitaliy Gusev extern  bool_t xdr_SET_SSV4res(XDR *, SET_SSV4res*);
3608*f44e1126SVitaliy Gusev extern  bool_t xdr_TEST_STATEID4args(XDR *, TEST_STATEID4args*);
3609*f44e1126SVitaliy Gusev extern  bool_t xdr_TEST_STATEID4resok(XDR *, TEST_STATEID4resok*);
3610*f44e1126SVitaliy Gusev extern  bool_t xdr_TEST_STATEID4res(XDR *, TEST_STATEID4res*);
3611*f44e1126SVitaliy Gusev extern  bool_t xdr_deleg_claim4(XDR *, deleg_claim4*);
3612*f44e1126SVitaliy Gusev extern  bool_t xdr_WANT_DELEGATION4args(XDR *, WANT_DELEGATION4args*);
3613*f44e1126SVitaliy Gusev extern  bool_t xdr_WANT_DELEGATION4res(XDR *, WANT_DELEGATION4res*);
3614*f44e1126SVitaliy Gusev extern  bool_t xdr_DESTROY_CLIENTID4args(XDR *, DESTROY_CLIENTID4args*);
3615*f44e1126SVitaliy Gusev extern  bool_t xdr_DESTROY_CLIENTID4res(XDR *, DESTROY_CLIENTID4res*);
3616*f44e1126SVitaliy Gusev extern  bool_t xdr_RECLAIM_COMPLETE4args(XDR *, RECLAIM_COMPLETE4args*);
3617*f44e1126SVitaliy Gusev extern  bool_t xdr_RECLAIM_COMPLETE4res(XDR *, RECLAIM_COMPLETE4res*);
3618*f44e1126SVitaliy Gusev extern  bool_t xdr_nfs_opnum4(XDR *, nfs_opnum4*);
3619*f44e1126SVitaliy Gusev extern  bool_t xdr_COMPOUND4args(XDR *, COMPOUND4args*);
3620*f44e1126SVitaliy Gusev extern  bool_t xdr_COMPOUND4res(XDR *, COMPOUND4res*);
3621*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_GETATTR4args(XDR *, CB_GETATTR4args*);
3622*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_GETATTR4res(XDR *, CB_GETATTR4res*);
3623*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_RECALL4args(XDR *, CB_RECALL4args*);
3624*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_RECALL4res(XDR *, CB_RECALL4res*);
3625*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_ILLEGAL4res(XDR *, CB_ILLEGAL4res*);
3626*f44e1126SVitaliy Gusev extern  bool_t xdr_layoutrecall_type4(XDR *, layoutrecall_type4*);
3627*f44e1126SVitaliy Gusev extern  bool_t xdr_layoutrecall_file4(XDR *, layoutrecall_file4*);
3628*f44e1126SVitaliy Gusev extern  bool_t xdr_layoutrecall4(XDR *, layoutrecall4*);
3629*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_LAYOUTRECALL4args(XDR *, CB_LAYOUTRECALL4args*);
3630*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_LAYOUTRECALL4res(XDR *, CB_LAYOUTRECALL4res*);
3631*f44e1126SVitaliy Gusev extern  bool_t xdr_notify_type4(XDR *, notify_type4*);
3632*f44e1126SVitaliy Gusev extern  bool_t xdr_notify_entry4(XDR *, notify_entry4*);
3633*f44e1126SVitaliy Gusev extern  bool_t xdr_prev_entry4(XDR *, prev_entry4*);
3634*f44e1126SVitaliy Gusev extern  bool_t xdr_notify_remove4(XDR *, notify_remove4*);
3635*f44e1126SVitaliy Gusev extern  bool_t xdr_notify_add4(XDR *, notify_add4*);
3636*f44e1126SVitaliy Gusev extern  bool_t xdr_notify_attr4(XDR *, notify_attr4*);
3637*f44e1126SVitaliy Gusev extern  bool_t xdr_notify_rename4(XDR *, notify_rename4*);
3638*f44e1126SVitaliy Gusev extern  bool_t xdr_notify_verifier4(XDR *, notify_verifier4*);
3639*f44e1126SVitaliy Gusev extern  bool_t xdr_notifylist4(XDR *, notifylist4*);
3640*f44e1126SVitaliy Gusev extern  bool_t xdr_notify4(XDR *, notify4*);
3641*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_NOTIFY4args(XDR *, CB_NOTIFY4args*);
3642*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_NOTIFY4res(XDR *, CB_NOTIFY4res*);
3643*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_PUSH_DELEG4args(XDR *, CB_PUSH_DELEG4args*);
3644*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_PUSH_DELEG4res(XDR *, CB_PUSH_DELEG4res*);
3645*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_RECALL_ANY4args(XDR *, CB_RECALL_ANY4args*);
3646*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_RECALL_ANY4res(XDR *, CB_RECALL_ANY4res*);
3647*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_RECALLABLE_OBJ_AVAIL4args(XDR *,
3648*f44e1126SVitaliy Gusev 	CB_RECALLABLE_OBJ_AVAIL4args*);
3649*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_RECALLABLE_OBJ_AVAIL4res(XDR *,
3650*f44e1126SVitaliy Gusev 	CB_RECALLABLE_OBJ_AVAIL4res*);
3651*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_RECALL_SLOT4args(XDR *, CB_RECALL_SLOT4args*);
3652*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_RECALL_SLOT4res(XDR *, CB_RECALL_SLOT4res*);
3653*f44e1126SVitaliy Gusev extern  bool_t xdr_referring_call4(XDR *, referring_call4*);
3654*f44e1126SVitaliy Gusev extern  bool_t xdr_referring_call_list4(XDR *, referring_call_list4*);
3655*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_SEQUENCE4args(XDR *, CB_SEQUENCE4args*);
3656*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_SEQUENCE4resok(XDR *, CB_SEQUENCE4resok*);
3657*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_SEQUENCE4res(XDR *, CB_SEQUENCE4res*);
3658*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_WANTS_CANCELLED4args(XDR *, CB_WANTS_CANCELLED4args*);
3659*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_WANTS_CANCELLED4res(XDR *, CB_WANTS_CANCELLED4res*);
3660*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_NOTIFY_LOCK4args(XDR *, CB_NOTIFY_LOCK4args*);
3661*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_NOTIFY_LOCK4res(XDR *, CB_NOTIFY_LOCK4res*);
3662*f44e1126SVitaliy Gusev extern  bool_t xdr_notify_deviceid_type4(XDR *, notify_deviceid_type4*);
3663*f44e1126SVitaliy Gusev extern  bool_t xdr_notify_deviceid_delete4(XDR *, notify_deviceid_delete4*);
3664*f44e1126SVitaliy Gusev extern  bool_t xdr_notify_deviceid_change4(XDR *, notify_deviceid_change4*);
3665*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_NOTIFY_DEVICEID4args(XDR *, CB_NOTIFY_DEVICEID4args*);
3666*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_NOTIFY_DEVICEID4res(XDR *, CB_NOTIFY_DEVICEID4res*);
3667*f44e1126SVitaliy Gusev extern  bool_t xdr_nfs_cb_opnum4(XDR *, nfs_cb_opnum4*);
3668*f44e1126SVitaliy Gusev extern  bool_t xdr_nfs_cb_argop4(XDR *, nfs_cb_argop4*);
3669*f44e1126SVitaliy Gusev extern  bool_t xdr_nfs_cb_resop4(XDR *, nfs_cb_resop4*);
3670*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_COMPOUND4args(XDR *, CB_COMPOUND4args*);
3671*f44e1126SVitaliy Gusev extern  bool_t xdr_CB_COMPOUND4res(XDR *, CB_COMPOUND4res*);
3672*f44e1126SVitaliy Gusev /*  nfsv4.1 end */
3673*f44e1126SVitaliy Gusev 
3674*f44e1126SVitaliy Gusev /* nfsv4.2 */
3675*f44e1126SVitaliy Gusev struct sec_label4 {
3676*f44e1126SVitaliy Gusev 	uint_t slai_len;
3677*f44e1126SVitaliy Gusev 	char  *slai_val;
3678*f44e1126SVitaliy Gusev };
3679*f44e1126SVitaliy Gusev 
3680*f44e1126SVitaliy Gusev typedef struct sec_label4 sec_label4;
3681*f44e1126SVitaliy Gusev typedef sec_label4 fattr4_sec_label;
3682*f44e1126SVitaliy Gusev 
3683*f44e1126SVitaliy Gusev extern  bool_t xdr_fattr4_sec_label(XDR *xdrs, fattr4_sec_label *objp);
3684*f44e1126SVitaliy Gusev /* nfsv4.2 end */
3685*f44e1126SVitaliy Gusev 
3686*f44e1126SVitaliy Gusev /* NFSv4.x xdr */
3687*f44e1126SVitaliy Gusev extern bool_t xdr_nfs4x_argop4(XDR *xdrs, nfs_argop4 *objp);
3688*f44e1126SVitaliy Gusev extern bool_t xdr_nfs4x_resop4(XDR *xdrs, nfs_resop4 *objp);
3689*f44e1126SVitaliy Gusev 
36902f172c55SRobert Thurlow /*
36912f172c55SRobert Thurlow  * xdr for referrrals upcall
36922f172c55SRobert Thurlow  */
36932f172c55SRobert Thurlow extern	bool_t xdr_knetconfig(XDR *, struct knetconfig *);
36942f172c55SRobert Thurlow extern	bool_t xdr_nfs_fsl_info(XDR *, struct nfs_fsl_info *);
36952f172c55SRobert Thurlow 
36967c478bd9Sstevel@tonic-gate 
36977c478bd9Sstevel@tonic-gate #ifdef __cplusplus
36987c478bd9Sstevel@tonic-gate }
36997c478bd9Sstevel@tonic-gate #endif
37007c478bd9Sstevel@tonic-gate 
37017c478bd9Sstevel@tonic-gate #endif /* _NFS4_KPROT_H */
3702