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