| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | 
|---|
| 2 | /* | 
|---|
| 3 | *  include/linux/nfs4.h | 
|---|
| 4 | * | 
|---|
| 5 | *  NFSv4 protocol definitions. | 
|---|
| 6 | * | 
|---|
| 7 | *  Copyright (c) 2002 The Regents of the University of Michigan. | 
|---|
| 8 | *  All rights reserved. | 
|---|
| 9 | * | 
|---|
| 10 | *  Kendrick Smith <kmsmith@umich.edu> | 
|---|
| 11 | *  Andy Adamson   <andros@umich.edu> | 
|---|
| 12 | */ | 
|---|
| 13 | #ifndef _LINUX_NFS4_H | 
|---|
| 14 | #define _LINUX_NFS4_H | 
|---|
| 15 |  | 
|---|
| 16 | #include <linux/list.h> | 
|---|
| 17 | #include <linux/uidgid.h> | 
|---|
| 18 | #include <uapi/linux/nfs4.h> | 
|---|
| 19 | #include <linux/sunrpc/msg_prot.h> | 
|---|
| 20 | #include <linux/sunrpc/xdrgen/nfs4_1.h> | 
|---|
| 21 |  | 
|---|
| 22 | enum nfs4_acl_whotype { | 
|---|
| 23 | NFS4_ACL_WHO_NAMED = 0, | 
|---|
| 24 | NFS4_ACL_WHO_OWNER, | 
|---|
| 25 | NFS4_ACL_WHO_GROUP, | 
|---|
| 26 | NFS4_ACL_WHO_EVERYONE, | 
|---|
| 27 | }; | 
|---|
| 28 |  | 
|---|
| 29 | struct nfs4_ace { | 
|---|
| 30 | uint32_t	type; | 
|---|
| 31 | uint32_t	flag; | 
|---|
| 32 | uint32_t	access_mask; | 
|---|
| 33 | int		whotype; | 
|---|
| 34 | union { | 
|---|
| 35 | kuid_t	who_uid; | 
|---|
| 36 | kgid_t	who_gid; | 
|---|
| 37 | }; | 
|---|
| 38 | }; | 
|---|
| 39 |  | 
|---|
| 40 | struct nfs4_acl { | 
|---|
| 41 | uint32_t	naces; | 
|---|
| 42 | struct nfs4_ace	aces[]; | 
|---|
| 43 | }; | 
|---|
| 44 |  | 
|---|
| 45 | #define NFS4_MAXLABELLEN	2048 | 
|---|
| 46 |  | 
|---|
| 47 | struct nfs4_label { | 
|---|
| 48 | uint32_t	lfs; | 
|---|
| 49 | uint32_t	pi; | 
|---|
| 50 | u32		lsmid; | 
|---|
| 51 | u32		len; | 
|---|
| 52 | char	*label; | 
|---|
| 53 | }; | 
|---|
| 54 |  | 
|---|
| 55 | typedef struct { char data[NFS4_VERIFIER_SIZE]; } nfs4_verifier; | 
|---|
| 56 |  | 
|---|
| 57 | struct nfs4_stateid_struct { | 
|---|
| 58 | union { | 
|---|
| 59 | char data[NFS4_STATEID_SIZE]; | 
|---|
| 60 | struct { | 
|---|
| 61 | __be32 seqid; | 
|---|
| 62 | char other[NFS4_STATEID_OTHER_SIZE]; | 
|---|
| 63 | } __attribute__ ((packed)); | 
|---|
| 64 | }; | 
|---|
| 65 |  | 
|---|
| 66 | enum { | 
|---|
| 67 | NFS4_INVALID_STATEID_TYPE = 0, | 
|---|
| 68 | NFS4_SPECIAL_STATEID_TYPE, | 
|---|
| 69 | NFS4_OPEN_STATEID_TYPE, | 
|---|
| 70 | NFS4_LOCK_STATEID_TYPE, | 
|---|
| 71 | NFS4_DELEGATION_STATEID_TYPE, | 
|---|
| 72 | NFS4_LAYOUT_STATEID_TYPE, | 
|---|
| 73 | NFS4_PNFS_DS_STATEID_TYPE, | 
|---|
| 74 | NFS4_REVOKED_STATEID_TYPE, | 
|---|
| 75 | NFS4_FREED_STATEID_TYPE, | 
|---|
| 76 | } type; | 
|---|
| 77 | }; | 
|---|
| 78 |  | 
|---|
| 79 | typedef struct nfs4_stateid_struct nfs4_stateid; | 
|---|
| 80 |  | 
|---|
| 81 | enum nfs_opnum4 { | 
|---|
| 82 | OP_ACCESS = 3, | 
|---|
| 83 | OP_CLOSE = 4, | 
|---|
| 84 | OP_COMMIT = 5, | 
|---|
| 85 | OP_CREATE = 6, | 
|---|
| 86 | OP_DELEGPURGE = 7, | 
|---|
| 87 | OP_DELEGRETURN = 8, | 
|---|
| 88 | OP_GETATTR = 9, | 
|---|
| 89 | OP_GETFH = 10, | 
|---|
| 90 | OP_LINK = 11, | 
|---|
| 91 | OP_LOCK = 12, | 
|---|
| 92 | OP_LOCKT = 13, | 
|---|
| 93 | OP_LOCKU = 14, | 
|---|
| 94 | OP_LOOKUP = 15, | 
|---|
| 95 | OP_LOOKUPP = 16, | 
|---|
| 96 | OP_NVERIFY = 17, | 
|---|
| 97 | OP_OPEN = 18, | 
|---|
| 98 | OP_OPENATTR = 19, | 
|---|
| 99 | OP_OPEN_CONFIRM = 20, | 
|---|
| 100 | OP_OPEN_DOWNGRADE = 21, | 
|---|
| 101 | OP_PUTFH = 22, | 
|---|
| 102 | OP_PUTPUBFH = 23, | 
|---|
| 103 | OP_PUTROOTFH = 24, | 
|---|
| 104 | OP_READ = 25, | 
|---|
| 105 | OP_READDIR = 26, | 
|---|
| 106 | OP_READLINK = 27, | 
|---|
| 107 | OP_REMOVE = 28, | 
|---|
| 108 | OP_RENAME = 29, | 
|---|
| 109 | OP_RENEW = 30, | 
|---|
| 110 | OP_RESTOREFH = 31, | 
|---|
| 111 | OP_SAVEFH = 32, | 
|---|
| 112 | OP_SECINFO = 33, | 
|---|
| 113 | OP_SETATTR = 34, | 
|---|
| 114 | OP_SETCLIENTID = 35, | 
|---|
| 115 | OP_SETCLIENTID_CONFIRM = 36, | 
|---|
| 116 | OP_VERIFY = 37, | 
|---|
| 117 | OP_WRITE = 38, | 
|---|
| 118 | OP_RELEASE_LOCKOWNER = 39, | 
|---|
| 119 |  | 
|---|
| 120 | /* nfs41 */ | 
|---|
| 121 | OP_BACKCHANNEL_CTL = 40, | 
|---|
| 122 | OP_BIND_CONN_TO_SESSION = 41, | 
|---|
| 123 | OP_EXCHANGE_ID = 42, | 
|---|
| 124 | OP_CREATE_SESSION = 43, | 
|---|
| 125 | OP_DESTROY_SESSION = 44, | 
|---|
| 126 | OP_FREE_STATEID = 45, | 
|---|
| 127 | OP_GET_DIR_DELEGATION = 46, | 
|---|
| 128 | OP_GETDEVICEINFO = 47, | 
|---|
| 129 | OP_GETDEVICELIST = 48, | 
|---|
| 130 | OP_LAYOUTCOMMIT = 49, | 
|---|
| 131 | OP_LAYOUTGET = 50, | 
|---|
| 132 | OP_LAYOUTRETURN = 51, | 
|---|
| 133 | OP_SECINFO_NO_NAME = 52, | 
|---|
| 134 | OP_SEQUENCE = 53, | 
|---|
| 135 | OP_SET_SSV = 54, | 
|---|
| 136 | OP_TEST_STATEID = 55, | 
|---|
| 137 | OP_WANT_DELEGATION = 56, | 
|---|
| 138 | OP_DESTROY_CLIENTID = 57, | 
|---|
| 139 | OP_RECLAIM_COMPLETE = 58, | 
|---|
| 140 |  | 
|---|
| 141 | /* nfs42 */ | 
|---|
| 142 | OP_ALLOCATE = 59, | 
|---|
| 143 | OP_COPY = 60, | 
|---|
| 144 | OP_COPY_NOTIFY = 61, | 
|---|
| 145 | OP_DEALLOCATE = 62, | 
|---|
| 146 | OP_IO_ADVISE = 63, | 
|---|
| 147 | OP_LAYOUTERROR = 64, | 
|---|
| 148 | OP_LAYOUTSTATS = 65, | 
|---|
| 149 | OP_OFFLOAD_CANCEL = 66, | 
|---|
| 150 | OP_OFFLOAD_STATUS = 67, | 
|---|
| 151 | OP_READ_PLUS = 68, | 
|---|
| 152 | OP_SEEK = 69, | 
|---|
| 153 | OP_WRITE_SAME = 70, | 
|---|
| 154 | OP_CLONE = 71, | 
|---|
| 155 |  | 
|---|
| 156 | /* xattr support (RFC8276) */ | 
|---|
| 157 | OP_GETXATTR                = 72, | 
|---|
| 158 | OP_SETXATTR                = 73, | 
|---|
| 159 | OP_LISTXATTRS              = 74, | 
|---|
| 160 | OP_REMOVEXATTR             = 75, | 
|---|
| 161 |  | 
|---|
| 162 | OP_ILLEGAL = 10044, | 
|---|
| 163 | }; | 
|---|
| 164 |  | 
|---|
| 165 | /*Defining first and last NFS4 operations implemented. | 
|---|
| 166 | Needs to be updated if more operations are defined in future.*/ | 
|---|
| 167 |  | 
|---|
| 168 | #define FIRST_NFS4_OP	OP_ACCESS | 
|---|
| 169 | #define LAST_NFS40_OP	OP_RELEASE_LOCKOWNER | 
|---|
| 170 | #define LAST_NFS41_OP	OP_RECLAIM_COMPLETE | 
|---|
| 171 | #define LAST_NFS42_OP	OP_REMOVEXATTR | 
|---|
| 172 | #define LAST_NFS4_OP	LAST_NFS42_OP | 
|---|
| 173 |  | 
|---|
| 174 | enum nfsstat4 { | 
|---|
| 175 | NFS4_OK = 0, | 
|---|
| 176 | NFS4ERR_PERM = 1, | 
|---|
| 177 | NFS4ERR_NOENT = 2, | 
|---|
| 178 | NFS4ERR_IO = 5, | 
|---|
| 179 | NFS4ERR_NXIO = 6, | 
|---|
| 180 | NFS4ERR_ACCESS = 13, | 
|---|
| 181 | NFS4ERR_EXIST = 17, | 
|---|
| 182 | NFS4ERR_XDEV = 18, | 
|---|
| 183 | /* Unused/reserved 19 */ | 
|---|
| 184 | NFS4ERR_NOTDIR = 20, | 
|---|
| 185 | NFS4ERR_ISDIR = 21, | 
|---|
| 186 | NFS4ERR_INVAL = 22, | 
|---|
| 187 | NFS4ERR_FBIG = 27, | 
|---|
| 188 | NFS4ERR_NOSPC = 28, | 
|---|
| 189 | NFS4ERR_ROFS = 30, | 
|---|
| 190 | NFS4ERR_MLINK = 31, | 
|---|
| 191 | NFS4ERR_NAMETOOLONG = 63, | 
|---|
| 192 | NFS4ERR_NOTEMPTY = 66, | 
|---|
| 193 | NFS4ERR_DQUOT = 69, | 
|---|
| 194 | NFS4ERR_STALE = 70, | 
|---|
| 195 | NFS4ERR_BADHANDLE = 10001, | 
|---|
| 196 | NFS4ERR_BAD_COOKIE = 10003, | 
|---|
| 197 | NFS4ERR_NOTSUPP = 10004, | 
|---|
| 198 | NFS4ERR_TOOSMALL = 10005, | 
|---|
| 199 | NFS4ERR_SERVERFAULT = 10006, | 
|---|
| 200 | NFS4ERR_BADTYPE = 10007, | 
|---|
| 201 | NFS4ERR_DELAY = 10008, | 
|---|
| 202 | NFS4ERR_SAME = 10009, | 
|---|
| 203 | NFS4ERR_DENIED = 10010, | 
|---|
| 204 | NFS4ERR_EXPIRED = 10011, | 
|---|
| 205 | NFS4ERR_LOCKED = 10012, | 
|---|
| 206 | NFS4ERR_GRACE = 10013, | 
|---|
| 207 | NFS4ERR_FHEXPIRED = 10014, | 
|---|
| 208 | NFS4ERR_SHARE_DENIED = 10015, | 
|---|
| 209 | NFS4ERR_WRONGSEC = 10016, | 
|---|
| 210 | NFS4ERR_CLID_INUSE = 10017, | 
|---|
| 211 | NFS4ERR_RESOURCE = 10018, | 
|---|
| 212 | NFS4ERR_MOVED = 10019, | 
|---|
| 213 | NFS4ERR_NOFILEHANDLE = 10020, | 
|---|
| 214 | NFS4ERR_MINOR_VERS_MISMATCH = 10021, | 
|---|
| 215 | NFS4ERR_STALE_CLIENTID = 10022, | 
|---|
| 216 | NFS4ERR_STALE_STATEID = 10023, | 
|---|
| 217 | NFS4ERR_OLD_STATEID = 10024, | 
|---|
| 218 | NFS4ERR_BAD_STATEID = 10025, | 
|---|
| 219 | NFS4ERR_BAD_SEQID = 10026, | 
|---|
| 220 | NFS4ERR_NOT_SAME = 10027, | 
|---|
| 221 | NFS4ERR_LOCK_RANGE = 10028, | 
|---|
| 222 | NFS4ERR_SYMLINK = 10029, | 
|---|
| 223 | NFS4ERR_RESTOREFH = 10030, | 
|---|
| 224 | NFS4ERR_LEASE_MOVED = 10031, | 
|---|
| 225 | NFS4ERR_ATTRNOTSUPP = 10032, | 
|---|
| 226 | NFS4ERR_NO_GRACE = 10033, | 
|---|
| 227 | NFS4ERR_RECLAIM_BAD = 10034, | 
|---|
| 228 | NFS4ERR_RECLAIM_CONFLICT = 10035, | 
|---|
| 229 | NFS4ERR_BADXDR = 10036, | 
|---|
| 230 | NFS4ERR_LOCKS_HELD = 10037, | 
|---|
| 231 | NFS4ERR_OPENMODE = 10038, | 
|---|
| 232 | NFS4ERR_BADOWNER = 10039, | 
|---|
| 233 | NFS4ERR_BADCHAR = 10040, | 
|---|
| 234 | NFS4ERR_BADNAME = 10041, | 
|---|
| 235 | NFS4ERR_BAD_RANGE = 10042, | 
|---|
| 236 | NFS4ERR_LOCK_NOTSUPP = 10043, | 
|---|
| 237 | NFS4ERR_OP_ILLEGAL = 10044, | 
|---|
| 238 | NFS4ERR_DEADLOCK = 10045, | 
|---|
| 239 | NFS4ERR_FILE_OPEN = 10046, | 
|---|
| 240 | NFS4ERR_ADMIN_REVOKED = 10047, | 
|---|
| 241 | NFS4ERR_CB_PATH_DOWN = 10048, | 
|---|
| 242 |  | 
|---|
| 243 | /* nfs41 */ | 
|---|
| 244 | NFS4ERR_BADIOMODE	= 10049, | 
|---|
| 245 | NFS4ERR_BADLAYOUT	= 10050, | 
|---|
| 246 | NFS4ERR_BAD_SESSION_DIGEST = 10051, | 
|---|
| 247 | NFS4ERR_BADSESSION	= 10052, | 
|---|
| 248 | NFS4ERR_BADSLOT		= 10053, | 
|---|
| 249 | NFS4ERR_COMPLETE_ALREADY = 10054, | 
|---|
| 250 | NFS4ERR_CONN_NOT_BOUND_TO_SESSION = 10055, | 
|---|
| 251 | NFS4ERR_DELEG_ALREADY_WANTED = 10056, | 
|---|
| 252 | NFS4ERR_BACK_CHAN_BUSY	= 10057,	/* backchan reqs outstanding */ | 
|---|
| 253 | NFS4ERR_LAYOUTTRYLATER	= 10058, | 
|---|
| 254 | NFS4ERR_LAYOUTUNAVAILABLE = 10059, | 
|---|
| 255 | NFS4ERR_NOMATCHING_LAYOUT = 10060, | 
|---|
| 256 | NFS4ERR_RECALLCONFLICT	= 10061, | 
|---|
| 257 | NFS4ERR_UNKNOWN_LAYOUTTYPE = 10062, | 
|---|
| 258 | NFS4ERR_SEQ_MISORDERED = 10063, 	/* unexpected seq.id in req */ | 
|---|
| 259 | NFS4ERR_SEQUENCE_POS	= 10064,	/* [CB_]SEQ. op not 1st op */ | 
|---|
| 260 | NFS4ERR_REQ_TOO_BIG	= 10065,	/* request too big */ | 
|---|
| 261 | NFS4ERR_REP_TOO_BIG	= 10066,	/* reply too big */ | 
|---|
| 262 | NFS4ERR_REP_TOO_BIG_TO_CACHE = 10067,	/* rep. not all cached */ | 
|---|
| 263 | NFS4ERR_RETRY_UNCACHED_REP = 10068,	/* retry & rep. uncached */ | 
|---|
| 264 | NFS4ERR_UNSAFE_COMPOUND = 10069,	/* retry/recovery too hard */ | 
|---|
| 265 | NFS4ERR_TOO_MANY_OPS	= 10070,	/* too many ops in [CB_]COMP */ | 
|---|
| 266 | NFS4ERR_OP_NOT_IN_SESSION = 10071,	/* op needs [CB_]SEQ. op */ | 
|---|
| 267 | NFS4ERR_HASH_ALG_UNSUPP = 10072,	/* hash alg. not supp. */ | 
|---|
| 268 | /* Error 10073 is unused. */ | 
|---|
| 269 | NFS4ERR_CLIENTID_BUSY	= 10074,	/* clientid has state */ | 
|---|
| 270 | NFS4ERR_PNFS_IO_HOLE	= 10075,	/* IO to _SPARSE file hole */ | 
|---|
| 271 | NFS4ERR_SEQ_FALSE_RETRY	= 10076,	/* retry not original */ | 
|---|
| 272 | NFS4ERR_BAD_HIGH_SLOT	= 10077,	/* sequence arg bad */ | 
|---|
| 273 | NFS4ERR_DEADSESSION	= 10078,	/* persistent session dead */ | 
|---|
| 274 | NFS4ERR_ENCR_ALG_UNSUPP = 10079,	/* SSV alg mismatch */ | 
|---|
| 275 | NFS4ERR_PNFS_NO_LAYOUT	= 10080,	/* direct I/O with no layout */ | 
|---|
| 276 | NFS4ERR_NOT_ONLY_OP	= 10081,	/* bad compound */ | 
|---|
| 277 | NFS4ERR_WRONG_CRED	= 10082,	/* permissions:state change */ | 
|---|
| 278 | NFS4ERR_WRONG_TYPE	= 10083,	/* current operation mismatch */ | 
|---|
| 279 | NFS4ERR_DIRDELEG_UNAVAIL = 10084,	/* no directory delegation */ | 
|---|
| 280 | NFS4ERR_REJECT_DELEG	= 10085,	/* on callback */ | 
|---|
| 281 | NFS4ERR_RETURNCONFLICT	= 10086,	/* outstanding layoutreturn */ | 
|---|
| 282 | NFS4ERR_DELEG_REVOKED	= 10087,	/* deleg./layout revoked */ | 
|---|
| 283 |  | 
|---|
| 284 | /* nfs42 */ | 
|---|
| 285 | NFS4ERR_PARTNER_NOTSUPP	= 10088, | 
|---|
| 286 | NFS4ERR_PARTNER_NO_AUTH	= 10089, | 
|---|
| 287 | NFS4ERR_UNION_NOTSUPP	= 10090, | 
|---|
| 288 | NFS4ERR_OFFLOAD_DENIED	= 10091, | 
|---|
| 289 | NFS4ERR_WRONG_LFS	= 10092, | 
|---|
| 290 | NFS4ERR_BADLABEL	= 10093, | 
|---|
| 291 | NFS4ERR_OFFLOAD_NO_REQS	= 10094, | 
|---|
| 292 |  | 
|---|
| 293 | /* xattr (RFC8276) */ | 
|---|
| 294 | NFS4ERR_NOXATTR		= 10095, | 
|---|
| 295 | NFS4ERR_XATTR2BIG	= 10096, | 
|---|
| 296 |  | 
|---|
| 297 | /* can be used for internal errors */ | 
|---|
| 298 | NFS4ERR_FIRST_FREE | 
|---|
| 299 | }; | 
|---|
| 300 |  | 
|---|
| 301 | /* error codes for internal client use */ | 
|---|
| 302 | #define NFS4ERR_RESET_TO_MDS   12001 | 
|---|
| 303 | #define NFS4ERR_RESET_TO_PNFS  12002 | 
|---|
| 304 | #define NFS4ERR_FATAL_IOERROR  12003 | 
|---|
| 305 |  | 
|---|
| 306 | static inline bool seqid_mutating_err(u32 err) | 
|---|
| 307 | { | 
|---|
| 308 | /* See RFC 7530, section 9.1.7 */ | 
|---|
| 309 | switch (err) { | 
|---|
| 310 | case NFS4ERR_STALE_CLIENTID: | 
|---|
| 311 | case NFS4ERR_STALE_STATEID: | 
|---|
| 312 | case NFS4ERR_BAD_STATEID: | 
|---|
| 313 | case NFS4ERR_BAD_SEQID: | 
|---|
| 314 | case NFS4ERR_BADXDR: | 
|---|
| 315 | case NFS4ERR_RESOURCE: | 
|---|
| 316 | case NFS4ERR_NOFILEHANDLE: | 
|---|
| 317 | case NFS4ERR_MOVED: | 
|---|
| 318 | return false; | 
|---|
| 319 | } | 
|---|
| 320 | return true; | 
|---|
| 321 | } | 
|---|
| 322 |  | 
|---|
| 323 | /* | 
|---|
| 324 | * Note: NF4BAD is not actually part of the protocol; it is just used | 
|---|
| 325 | * internally by nfsd. | 
|---|
| 326 | */ | 
|---|
| 327 | enum nfs_ftype4 { | 
|---|
| 328 | NF4BAD		= 0, | 
|---|
| 329 | NF4REG          = 1,    /* Regular File */ | 
|---|
| 330 | NF4DIR          = 2,    /* Directory */ | 
|---|
| 331 | NF4BLK          = 3,    /* Special File - block device */ | 
|---|
| 332 | NF4CHR          = 4,    /* Special File - character device */ | 
|---|
| 333 | NF4LNK          = 5,    /* Symbolic Link */ | 
|---|
| 334 | NF4SOCK         = 6,    /* Special File - socket */ | 
|---|
| 335 | NF4FIFO         = 7,    /* Special File - fifo */ | 
|---|
| 336 | NF4ATTRDIR      = 8,    /* Attribute Directory */ | 
|---|
| 337 | NF4NAMEDATTR    = 9     /* Named Attribute */ | 
|---|
| 338 | }; | 
|---|
| 339 |  | 
|---|
| 340 | enum open_claim_type4 { | 
|---|
| 341 | NFS4_OPEN_CLAIM_NULL = 0, | 
|---|
| 342 | NFS4_OPEN_CLAIM_PREVIOUS = 1, | 
|---|
| 343 | NFS4_OPEN_CLAIM_DELEGATE_CUR = 2, | 
|---|
| 344 | NFS4_OPEN_CLAIM_DELEGATE_PREV = 3, | 
|---|
| 345 | NFS4_OPEN_CLAIM_FH = 4, /* 4.1 */ | 
|---|
| 346 | NFS4_OPEN_CLAIM_DELEG_CUR_FH = 5, /* 4.1 */ | 
|---|
| 347 | NFS4_OPEN_CLAIM_DELEG_PREV_FH = 6, /* 4.1 */ | 
|---|
| 348 | }; | 
|---|
| 349 |  | 
|---|
| 350 | enum opentype4 { | 
|---|
| 351 | NFS4_OPEN_NOCREATE = 0, | 
|---|
| 352 | NFS4_OPEN_CREATE = 1 | 
|---|
| 353 | }; | 
|---|
| 354 |  | 
|---|
| 355 | enum createmode4 { | 
|---|
| 356 | NFS4_CREATE_UNCHECKED = 0, | 
|---|
| 357 | NFS4_CREATE_GUARDED = 1, | 
|---|
| 358 | NFS4_CREATE_EXCLUSIVE = 2, | 
|---|
| 359 | /* | 
|---|
| 360 | * New to NFSv4.1. If session is persistent, | 
|---|
| 361 | * GUARDED4 MUST be used. Otherwise, use | 
|---|
| 362 | * EXCLUSIVE4_1 instead of EXCLUSIVE4. | 
|---|
| 363 | */ | 
|---|
| 364 | NFS4_CREATE_EXCLUSIVE4_1 = 3 | 
|---|
| 365 | }; | 
|---|
| 366 |  | 
|---|
| 367 | enum limit_by4 { | 
|---|
| 368 | NFS4_LIMIT_SIZE = 1, | 
|---|
| 369 | NFS4_LIMIT_BLOCKS = 2 | 
|---|
| 370 | }; | 
|---|
| 371 |  | 
|---|
| 372 | enum nfs4_open_delegation_type4 { | 
|---|
| 373 | NFS4_OPEN_DELEGATE_NONE = 0, | 
|---|
| 374 | NFS4_OPEN_DELEGATE_READ = 1, | 
|---|
| 375 | NFS4_OPEN_DELEGATE_WRITE = 2, | 
|---|
| 376 | NFS4_OPEN_DELEGATE_NONE_EXT = 3, /* 4.1 */ | 
|---|
| 377 | NFS4_OPEN_DELEGATE_READ_ATTRS_DELEG = 4, | 
|---|
| 378 | NFS4_OPEN_DELEGATE_WRITE_ATTRS_DELEG = 5, | 
|---|
| 379 | }; | 
|---|
| 380 |  | 
|---|
| 381 | enum why_no_delegation4 { /* new to v4.1 */ | 
|---|
| 382 | WND4_NOT_WANTED = 0, | 
|---|
| 383 | WND4_CONTENTION = 1, | 
|---|
| 384 | WND4_RESOURCE = 2, | 
|---|
| 385 | WND4_NOT_SUPP_FTYPE = 3, | 
|---|
| 386 | WND4_WRITE_DELEG_NOT_SUPP_FTYPE = 4, | 
|---|
| 387 | WND4_NOT_SUPP_UPGRADE = 5, | 
|---|
| 388 | WND4_NOT_SUPP_DOWNGRADE = 6, | 
|---|
| 389 | WND4_CANCELLED = 7, | 
|---|
| 390 | WND4_IS_DIR = 8, | 
|---|
| 391 | }; | 
|---|
| 392 |  | 
|---|
| 393 | enum lock_type4 { | 
|---|
| 394 | NFS4_UNLOCK_LT = 0, | 
|---|
| 395 | NFS4_READ_LT = 1, | 
|---|
| 396 | NFS4_WRITE_LT = 2, | 
|---|
| 397 | NFS4_READW_LT = 3, | 
|---|
| 398 | NFS4_WRITEW_LT = 4 | 
|---|
| 399 | }; | 
|---|
| 400 |  | 
|---|
| 401 | /* | 
|---|
| 402 | * Symbol names and values are from RFC 7531 Section 2. | 
|---|
| 403 | * "XDR Description of NFSv4.0" | 
|---|
| 404 | */ | 
|---|
| 405 | enum { | 
|---|
| 406 | FATTR4_SUPPORTED_ATTRS		= 0, | 
|---|
| 407 | FATTR4_TYPE			= 1, | 
|---|
| 408 | FATTR4_FH_EXPIRE_TYPE		= 2, | 
|---|
| 409 | FATTR4_CHANGE			= 3, | 
|---|
| 410 | FATTR4_SIZE			= 4, | 
|---|
| 411 | FATTR4_LINK_SUPPORT		= 5, | 
|---|
| 412 | FATTR4_SYMLINK_SUPPORT		= 6, | 
|---|
| 413 | FATTR4_NAMED_ATTR		= 7, | 
|---|
| 414 | FATTR4_FSID			= 8, | 
|---|
| 415 | FATTR4_UNIQUE_HANDLES		= 9, | 
|---|
| 416 | FATTR4_LEASE_TIME		= 10, | 
|---|
| 417 | FATTR4_RDATTR_ERROR		= 11, | 
|---|
| 418 | FATTR4_ACL			= 12, | 
|---|
| 419 | FATTR4_ACLSUPPORT		= 13, | 
|---|
| 420 | FATTR4_ARCHIVE			= 14, | 
|---|
| 421 | FATTR4_CANSETTIME		= 15, | 
|---|
| 422 | FATTR4_CASE_INSENSITIVE		= 16, | 
|---|
| 423 | FATTR4_CASE_PRESERVING		= 17, | 
|---|
| 424 | FATTR4_CHOWN_RESTRICTED		= 18, | 
|---|
| 425 | FATTR4_FILEHANDLE		= 19, | 
|---|
| 426 | FATTR4_FILEID			= 20, | 
|---|
| 427 | FATTR4_FILES_AVAIL		= 21, | 
|---|
| 428 | FATTR4_FILES_FREE		= 22, | 
|---|
| 429 | FATTR4_FILES_TOTAL		= 23, | 
|---|
| 430 | FATTR4_FS_LOCATIONS		= 24, | 
|---|
| 431 | FATTR4_HIDDEN			= 25, | 
|---|
| 432 | FATTR4_HOMOGENEOUS		= 26, | 
|---|
| 433 | FATTR4_MAXFILESIZE		= 27, | 
|---|
| 434 | FATTR4_MAXLINK			= 28, | 
|---|
| 435 | FATTR4_MAXNAME			= 29, | 
|---|
| 436 | FATTR4_MAXREAD			= 30, | 
|---|
| 437 | FATTR4_MAXWRITE			= 31, | 
|---|
| 438 | FATTR4_MIMETYPE			= 32, | 
|---|
| 439 | FATTR4_MODE			= 33, | 
|---|
| 440 | FATTR4_NO_TRUNC			= 34, | 
|---|
| 441 | FATTR4_NUMLINKS			= 35, | 
|---|
| 442 | FATTR4_OWNER			= 36, | 
|---|
| 443 | FATTR4_OWNER_GROUP		= 37, | 
|---|
| 444 | FATTR4_QUOTA_AVAIL_HARD		= 38, | 
|---|
| 445 | FATTR4_QUOTA_AVAIL_SOFT		= 39, | 
|---|
| 446 | FATTR4_QUOTA_USED		= 40, | 
|---|
| 447 | FATTR4_RAWDEV			= 41, | 
|---|
| 448 | FATTR4_SPACE_AVAIL		= 42, | 
|---|
| 449 | FATTR4_SPACE_FREE		= 43, | 
|---|
| 450 | FATTR4_SPACE_TOTAL		= 44, | 
|---|
| 451 | FATTR4_SPACE_USED		= 45, | 
|---|
| 452 | FATTR4_SYSTEM			= 46, | 
|---|
| 453 | FATTR4_TIME_ACCESS		= 47, | 
|---|
| 454 | FATTR4_TIME_ACCESS_SET		= 48, | 
|---|
| 455 | FATTR4_TIME_BACKUP		= 49, | 
|---|
| 456 | FATTR4_TIME_CREATE		= 50, | 
|---|
| 457 | FATTR4_TIME_DELTA		= 51, | 
|---|
| 458 | FATTR4_TIME_METADATA		= 52, | 
|---|
| 459 | FATTR4_TIME_MODIFY		= 53, | 
|---|
| 460 | FATTR4_TIME_MODIFY_SET		= 54, | 
|---|
| 461 | FATTR4_MOUNTED_ON_FILEID	= 55, | 
|---|
| 462 | }; | 
|---|
| 463 |  | 
|---|
| 464 | /* | 
|---|
| 465 | * Symbol names and values are from RFC 5662 Section 2. | 
|---|
| 466 | * "XDR Description of NFSv4.1" | 
|---|
| 467 | */ | 
|---|
| 468 | enum { | 
|---|
| 469 | FATTR4_DIR_NOTIF_DELAY		= 56, | 
|---|
| 470 | FATTR4_DIRENT_NOTIF_DELAY	= 57, | 
|---|
| 471 | FATTR4_DACL			= 58, | 
|---|
| 472 | FATTR4_SACL			= 59, | 
|---|
| 473 | FATTR4_CHANGE_POLICY		= 60, | 
|---|
| 474 | FATTR4_FS_STATUS		= 61, | 
|---|
| 475 | FATTR4_FS_LAYOUT_TYPES		= 62, | 
|---|
| 476 | FATTR4_LAYOUT_HINT		= 63, | 
|---|
| 477 | FATTR4_LAYOUT_TYPES		= 64, | 
|---|
| 478 | FATTR4_LAYOUT_BLKSIZE		= 65, | 
|---|
| 479 | FATTR4_LAYOUT_ALIGNMENT		= 66, | 
|---|
| 480 | FATTR4_FS_LOCATIONS_INFO	= 67, | 
|---|
| 481 | FATTR4_MDSTHRESHOLD		= 68, | 
|---|
| 482 | FATTR4_RETENTION_GET		= 69, | 
|---|
| 483 | FATTR4_RETENTION_SET		= 70, | 
|---|
| 484 | FATTR4_RETENTEVT_GET		= 71, | 
|---|
| 485 | FATTR4_RETENTEVT_SET		= 72, | 
|---|
| 486 | FATTR4_RETENTION_HOLD		= 73, | 
|---|
| 487 | FATTR4_MODE_SET_MASKED		= 74, | 
|---|
| 488 | FATTR4_SUPPATTR_EXCLCREAT	= 75, | 
|---|
| 489 | FATTR4_FS_CHARSET_CAP		= 76, | 
|---|
| 490 | }; | 
|---|
| 491 |  | 
|---|
| 492 | /* | 
|---|
| 493 | * Symbol names and values are from RFC 7863 Section 2. | 
|---|
| 494 | * "XDR Description of NFSv4.2" | 
|---|
| 495 | */ | 
|---|
| 496 | enum { | 
|---|
| 497 | FATTR4_CLONE_BLKSIZE		= 77, | 
|---|
| 498 | FATTR4_SPACE_FREED		= 78, | 
|---|
| 499 | FATTR4_CHANGE_ATTR_TYPE		= 79, | 
|---|
| 500 | FATTR4_SEC_LABEL		= 80, | 
|---|
| 501 | }; | 
|---|
| 502 |  | 
|---|
| 503 | /* | 
|---|
| 504 | * Symbol names and values are from RFC 8275 Section 5. | 
|---|
| 505 | * "The mode_umask Attribute" | 
|---|
| 506 | */ | 
|---|
| 507 | enum { | 
|---|
| 508 | FATTR4_MODE_UMASK		= 81, | 
|---|
| 509 | }; | 
|---|
| 510 |  | 
|---|
| 511 | /* | 
|---|
| 512 | * Symbol names and values are from RFC 8276 Section 8.6. | 
|---|
| 513 | * "Numeric Values Assigned to Protocol Extensions" | 
|---|
| 514 | */ | 
|---|
| 515 | enum { | 
|---|
| 516 | FATTR4_XATTR_SUPPORT		= 82, | 
|---|
| 517 | }; | 
|---|
| 518 |  | 
|---|
| 519 | /* | 
|---|
| 520 | * The following internal definitions enable processing the above | 
|---|
| 521 | * attribute bits within 32-bit word boundaries. | 
|---|
| 522 | */ | 
|---|
| 523 |  | 
|---|
| 524 | /* Mandatory Attributes */ | 
|---|
| 525 | #define FATTR4_WORD0_SUPPORTED_ATTRS    BIT(FATTR4_SUPPORTED_ATTRS) | 
|---|
| 526 | #define FATTR4_WORD0_TYPE               BIT(FATTR4_TYPE) | 
|---|
| 527 | #define FATTR4_WORD0_FH_EXPIRE_TYPE     BIT(FATTR4_FH_EXPIRE_TYPE) | 
|---|
| 528 | #define FATTR4_WORD0_CHANGE             BIT(FATTR4_CHANGE) | 
|---|
| 529 | #define FATTR4_WORD0_SIZE               BIT(FATTR4_SIZE) | 
|---|
| 530 | #define FATTR4_WORD0_LINK_SUPPORT       BIT(FATTR4_LINK_SUPPORT) | 
|---|
| 531 | #define FATTR4_WORD0_SYMLINK_SUPPORT    BIT(FATTR4_SYMLINK_SUPPORT) | 
|---|
| 532 | #define FATTR4_WORD0_NAMED_ATTR         BIT(FATTR4_NAMED_ATTR) | 
|---|
| 533 | #define FATTR4_WORD0_FSID               BIT(FATTR4_FSID) | 
|---|
| 534 | #define FATTR4_WORD0_UNIQUE_HANDLES     BIT(FATTR4_UNIQUE_HANDLES) | 
|---|
| 535 | #define FATTR4_WORD0_LEASE_TIME         BIT(FATTR4_LEASE_TIME) | 
|---|
| 536 | #define FATTR4_WORD0_RDATTR_ERROR       BIT(FATTR4_RDATTR_ERROR) | 
|---|
| 537 | /* Mandatory in NFSv4.1 */ | 
|---|
| 538 | #define FATTR4_WORD2_SUPPATTR_EXCLCREAT BIT(FATTR4_SUPPATTR_EXCLCREAT - 64) | 
|---|
| 539 |  | 
|---|
| 540 | /* Recommended Attributes */ | 
|---|
| 541 | #define FATTR4_WORD0_ACL                BIT(FATTR4_ACL) | 
|---|
| 542 | #define FATTR4_WORD0_ACLSUPPORT         BIT(FATTR4_ACLSUPPORT) | 
|---|
| 543 | #define FATTR4_WORD0_ARCHIVE            BIT(FATTR4_ARCHIVE) | 
|---|
| 544 | #define FATTR4_WORD0_CANSETTIME         BIT(FATTR4_CANSETTIME) | 
|---|
| 545 | #define FATTR4_WORD0_CASE_INSENSITIVE   BIT(FATTR4_CASE_INSENSITIVE) | 
|---|
| 546 | #define FATTR4_WORD0_CASE_PRESERVING    BIT(FATTR4_CASE_PRESERVING) | 
|---|
| 547 | #define FATTR4_WORD0_CHOWN_RESTRICTED   BIT(FATTR4_CHOWN_RESTRICTED) | 
|---|
| 548 | #define FATTR4_WORD0_FILEHANDLE         BIT(FATTR4_FILEHANDLE) | 
|---|
| 549 | #define FATTR4_WORD0_FILEID             BIT(FATTR4_FILEID) | 
|---|
| 550 | #define FATTR4_WORD0_FILES_AVAIL        BIT(FATTR4_FILES_AVAIL) | 
|---|
| 551 | #define FATTR4_WORD0_FILES_FREE         BIT(FATTR4_FILES_FREE) | 
|---|
| 552 | #define FATTR4_WORD0_FILES_TOTAL        BIT(FATTR4_FILES_TOTAL) | 
|---|
| 553 | #define FATTR4_WORD0_FS_LOCATIONS       BIT(FATTR4_FS_LOCATIONS) | 
|---|
| 554 | #define FATTR4_WORD0_HIDDEN             BIT(FATTR4_HIDDEN) | 
|---|
| 555 | #define FATTR4_WORD0_HOMOGENEOUS        BIT(FATTR4_HOMOGENEOUS) | 
|---|
| 556 | #define FATTR4_WORD0_MAXFILESIZE        BIT(FATTR4_MAXFILESIZE) | 
|---|
| 557 | #define FATTR4_WORD0_MAXLINK            BIT(FATTR4_MAXLINK) | 
|---|
| 558 | #define FATTR4_WORD0_MAXNAME            BIT(FATTR4_MAXNAME) | 
|---|
| 559 | #define FATTR4_WORD0_MAXREAD            BIT(FATTR4_MAXREAD) | 
|---|
| 560 | #define FATTR4_WORD0_MAXWRITE           BIT(FATTR4_MAXWRITE) | 
|---|
| 561 |  | 
|---|
| 562 | #define FATTR4_WORD1_MIMETYPE           BIT(FATTR4_MIMETYPE - 32) | 
|---|
| 563 | #define FATTR4_WORD1_MODE               BIT(FATTR4_MODE	- 32) | 
|---|
| 564 | #define FATTR4_WORD1_NO_TRUNC           BIT(FATTR4_NO_TRUNC - 32) | 
|---|
| 565 | #define FATTR4_WORD1_NUMLINKS           BIT(FATTR4_NUMLINKS - 32) | 
|---|
| 566 | #define FATTR4_WORD1_OWNER              BIT(FATTR4_OWNER - 32) | 
|---|
| 567 | #define FATTR4_WORD1_OWNER_GROUP        BIT(FATTR4_OWNER_GROUP - 32) | 
|---|
| 568 | #define FATTR4_WORD1_QUOTA_HARD         BIT(FATTR4_QUOTA_AVAIL_HARD - 32) | 
|---|
| 569 | #define FATTR4_WORD1_QUOTA_SOFT         BIT(FATTR4_QUOTA_AVAIL_SOFT - 32) | 
|---|
| 570 | #define FATTR4_WORD1_QUOTA_USED         BIT(FATTR4_QUOTA_USED - 32) | 
|---|
| 571 | #define FATTR4_WORD1_RAWDEV             BIT(FATTR4_RAWDEV - 32) | 
|---|
| 572 | #define FATTR4_WORD1_SPACE_AVAIL        BIT(FATTR4_SPACE_AVAIL - 32) | 
|---|
| 573 | #define FATTR4_WORD1_SPACE_FREE         BIT(FATTR4_SPACE_FREE - 32) | 
|---|
| 574 | #define FATTR4_WORD1_SPACE_TOTAL        BIT(FATTR4_SPACE_TOTAL - 32) | 
|---|
| 575 | #define FATTR4_WORD1_SPACE_USED         BIT(FATTR4_SPACE_USED - 32) | 
|---|
| 576 | #define FATTR4_WORD1_SYSTEM             BIT(FATTR4_SYSTEM - 32) | 
|---|
| 577 | #define FATTR4_WORD1_TIME_ACCESS        BIT(FATTR4_TIME_ACCESS - 32) | 
|---|
| 578 | #define FATTR4_WORD1_TIME_ACCESS_SET    BIT(FATTR4_TIME_ACCESS_SET - 32) | 
|---|
| 579 | #define FATTR4_WORD1_TIME_BACKUP        BIT(FATTR4_TIME_BACKUP - 32) | 
|---|
| 580 | #define FATTR4_WORD1_TIME_CREATE        BIT(FATTR4_TIME_CREATE - 32) | 
|---|
| 581 | #define FATTR4_WORD1_TIME_DELTA         BIT(FATTR4_TIME_DELTA - 32) | 
|---|
| 582 | #define FATTR4_WORD1_TIME_METADATA      BIT(FATTR4_TIME_METADATA - 32) | 
|---|
| 583 | #define FATTR4_WORD1_TIME_MODIFY        BIT(FATTR4_TIME_MODIFY - 32) | 
|---|
| 584 | #define FATTR4_WORD1_TIME_MODIFY_SET    BIT(FATTR4_TIME_MODIFY_SET - 32) | 
|---|
| 585 | #define FATTR4_WORD1_MOUNTED_ON_FILEID  BIT(FATTR4_MOUNTED_ON_FILEID - 32) | 
|---|
| 586 | #define FATTR4_WORD1_DACL               BIT(FATTR4_DACL	- 32) | 
|---|
| 587 | #define FATTR4_WORD1_SACL               BIT(FATTR4_SACL	- 32) | 
|---|
| 588 | #define FATTR4_WORD1_FS_LAYOUT_TYPES    BIT(FATTR4_FS_LAYOUT_TYPES - 32) | 
|---|
| 589 |  | 
|---|
| 590 | #define FATTR4_WORD2_LAYOUT_TYPES       BIT(FATTR4_LAYOUT_TYPES - 64) | 
|---|
| 591 | #define FATTR4_WORD2_LAYOUT_BLKSIZE     BIT(FATTR4_LAYOUT_BLKSIZE - 64) | 
|---|
| 592 | #define FATTR4_WORD2_MDSTHRESHOLD       BIT(FATTR4_MDSTHRESHOLD	- 64) | 
|---|
| 593 | #define FATTR4_WORD2_CLONE_BLKSIZE	BIT(FATTR4_CLONE_BLKSIZE - 64) | 
|---|
| 594 | #define FATTR4_WORD2_CHANGE_ATTR_TYPE	BIT(FATTR4_CHANGE_ATTR_TYPE - 64) | 
|---|
| 595 | #define FATTR4_WORD2_SECURITY_LABEL     BIT(FATTR4_SEC_LABEL - 64) | 
|---|
| 596 | #define FATTR4_WORD2_MODE_UMASK		BIT(FATTR4_MODE_UMASK - 64) | 
|---|
| 597 | #define FATTR4_WORD2_XATTR_SUPPORT	BIT(FATTR4_XATTR_SUPPORT - 64) | 
|---|
| 598 | #define FATTR4_WORD2_TIME_DELEG_ACCESS	BIT(FATTR4_TIME_DELEG_ACCESS - 64) | 
|---|
| 599 | #define FATTR4_WORD2_TIME_DELEG_MODIFY	BIT(FATTR4_TIME_DELEG_MODIFY - 64) | 
|---|
| 600 | #define FATTR4_WORD2_OPEN_ARGUMENTS	BIT(FATTR4_OPEN_ARGUMENTS - 64) | 
|---|
| 601 |  | 
|---|
| 602 | /* MDS threshold bitmap bits */ | 
|---|
| 603 | #define THRESHOLD_RD                    (1UL << 0) | 
|---|
| 604 | #define THRESHOLD_WR                    (1UL << 1) | 
|---|
| 605 | #define THRESHOLD_RD_IO                 (1UL << 2) | 
|---|
| 606 | #define THRESHOLD_WR_IO                 (1UL << 3) | 
|---|
| 607 |  | 
|---|
| 608 | #define NFSPROC4_NULL 0 | 
|---|
| 609 | #define NFSPROC4_COMPOUND 1 | 
|---|
| 610 | #define NFS4_VERSION 4 | 
|---|
| 611 | #define NFS4_MINOR_VERSION 0 | 
|---|
| 612 |  | 
|---|
| 613 | #define NFS4_DEBUG 1 | 
|---|
| 614 |  | 
|---|
| 615 | /* | 
|---|
| 616 | * Index of predefined Linux client operations | 
|---|
| 617 | * | 
|---|
| 618 | * To ensure that /proc/net/rpc/nfs remains correctly ordered, please | 
|---|
| 619 | * append only to this enum when adding new client operations. | 
|---|
| 620 | */ | 
|---|
| 621 |  | 
|---|
| 622 | enum { | 
|---|
| 623 | NFSPROC4_CLNT_NULL = 0,		/* Unused */ | 
|---|
| 624 | NFSPROC4_CLNT_READ, | 
|---|
| 625 | NFSPROC4_CLNT_WRITE, | 
|---|
| 626 | NFSPROC4_CLNT_COMMIT, | 
|---|
| 627 | NFSPROC4_CLNT_OPEN, | 
|---|
| 628 | NFSPROC4_CLNT_OPEN_CONFIRM, | 
|---|
| 629 | NFSPROC4_CLNT_OPEN_NOATTR, | 
|---|
| 630 | NFSPROC4_CLNT_OPEN_DOWNGRADE, | 
|---|
| 631 | NFSPROC4_CLNT_CLOSE, | 
|---|
| 632 | NFSPROC4_CLNT_SETATTR, | 
|---|
| 633 | NFSPROC4_CLNT_FSINFO, | 
|---|
| 634 | NFSPROC4_CLNT_RENEW, | 
|---|
| 635 | NFSPROC4_CLNT_SETCLIENTID, | 
|---|
| 636 | NFSPROC4_CLNT_SETCLIENTID_CONFIRM, | 
|---|
| 637 | NFSPROC4_CLNT_LOCK, | 
|---|
| 638 | NFSPROC4_CLNT_LOCKT, | 
|---|
| 639 | NFSPROC4_CLNT_LOCKU, | 
|---|
| 640 | NFSPROC4_CLNT_ACCESS, | 
|---|
| 641 | NFSPROC4_CLNT_GETATTR, | 
|---|
| 642 | NFSPROC4_CLNT_LOOKUP, | 
|---|
| 643 | NFSPROC4_CLNT_LOOKUP_ROOT, | 
|---|
| 644 | NFSPROC4_CLNT_REMOVE, | 
|---|
| 645 | NFSPROC4_CLNT_RENAME, | 
|---|
| 646 | NFSPROC4_CLNT_LINK, | 
|---|
| 647 | NFSPROC4_CLNT_SYMLINK, | 
|---|
| 648 | NFSPROC4_CLNT_CREATE, | 
|---|
| 649 | NFSPROC4_CLNT_PATHCONF, | 
|---|
| 650 | NFSPROC4_CLNT_STATFS, | 
|---|
| 651 | NFSPROC4_CLNT_READLINK, | 
|---|
| 652 | NFSPROC4_CLNT_READDIR, | 
|---|
| 653 | NFSPROC4_CLNT_SERVER_CAPS, | 
|---|
| 654 | NFSPROC4_CLNT_DELEGRETURN, | 
|---|
| 655 | NFSPROC4_CLNT_GETACL, | 
|---|
| 656 | NFSPROC4_CLNT_SETACL, | 
|---|
| 657 | NFSPROC4_CLNT_FS_LOCATIONS, | 
|---|
| 658 | NFSPROC4_CLNT_RELEASE_LOCKOWNER, | 
|---|
| 659 | NFSPROC4_CLNT_SECINFO, | 
|---|
| 660 | NFSPROC4_CLNT_FSID_PRESENT, | 
|---|
| 661 |  | 
|---|
| 662 | NFSPROC4_CLNT_EXCHANGE_ID, | 
|---|
| 663 | NFSPROC4_CLNT_CREATE_SESSION, | 
|---|
| 664 | NFSPROC4_CLNT_DESTROY_SESSION, | 
|---|
| 665 | NFSPROC4_CLNT_SEQUENCE, | 
|---|
| 666 | NFSPROC4_CLNT_GET_LEASE_TIME, | 
|---|
| 667 | NFSPROC4_CLNT_RECLAIM_COMPLETE, | 
|---|
| 668 | NFSPROC4_CLNT_LAYOUTGET, | 
|---|
| 669 | NFSPROC4_CLNT_GETDEVICEINFO, | 
|---|
| 670 | NFSPROC4_CLNT_LAYOUTCOMMIT, | 
|---|
| 671 | NFSPROC4_CLNT_LAYOUTRETURN, | 
|---|
| 672 | NFSPROC4_CLNT_SECINFO_NO_NAME, | 
|---|
| 673 | NFSPROC4_CLNT_TEST_STATEID, | 
|---|
| 674 | NFSPROC4_CLNT_FREE_STATEID, | 
|---|
| 675 | NFSPROC4_CLNT_GETDEVICELIST, | 
|---|
| 676 | NFSPROC4_CLNT_BIND_CONN_TO_SESSION, | 
|---|
| 677 | NFSPROC4_CLNT_DESTROY_CLIENTID, | 
|---|
| 678 |  | 
|---|
| 679 | NFSPROC4_CLNT_SEEK, | 
|---|
| 680 | NFSPROC4_CLNT_ALLOCATE, | 
|---|
| 681 | NFSPROC4_CLNT_DEALLOCATE, | 
|---|
| 682 | NFSPROC4_CLNT_ZERO_RANGE, | 
|---|
| 683 | NFSPROC4_CLNT_LAYOUTSTATS, | 
|---|
| 684 | NFSPROC4_CLNT_CLONE, | 
|---|
| 685 | NFSPROC4_CLNT_COPY, | 
|---|
| 686 | NFSPROC4_CLNT_OFFLOAD_CANCEL, | 
|---|
| 687 |  | 
|---|
| 688 | NFSPROC4_CLNT_LOOKUPP, | 
|---|
| 689 | NFSPROC4_CLNT_LAYOUTERROR, | 
|---|
| 690 | NFSPROC4_CLNT_COPY_NOTIFY, | 
|---|
| 691 |  | 
|---|
| 692 | NFSPROC4_CLNT_GETXATTR, | 
|---|
| 693 | NFSPROC4_CLNT_SETXATTR, | 
|---|
| 694 | NFSPROC4_CLNT_LISTXATTRS, | 
|---|
| 695 | NFSPROC4_CLNT_REMOVEXATTR, | 
|---|
| 696 | NFSPROC4_CLNT_READ_PLUS, | 
|---|
| 697 | NFSPROC4_CLNT_OFFLOAD_STATUS, | 
|---|
| 698 | }; | 
|---|
| 699 |  | 
|---|
| 700 | /* nfs41 types */ | 
|---|
| 701 | struct nfs4_sessionid { | 
|---|
| 702 | unsigned char data[NFS4_MAX_SESSIONID_LEN]; | 
|---|
| 703 | }; | 
|---|
| 704 |  | 
|---|
| 705 | /* Create Session Flags */ | 
|---|
| 706 | #define SESSION4_PERSIST	0x001 | 
|---|
| 707 | #define SESSION4_BACK_CHAN	0x002 | 
|---|
| 708 | #define SESSION4_RDMA		0x004 | 
|---|
| 709 |  | 
|---|
| 710 | #define SESSION4_FLAG_MASK_A	0x007 | 
|---|
| 711 |  | 
|---|
| 712 | enum state_protect_how4 { | 
|---|
| 713 | SP4_NONE	= 0, | 
|---|
| 714 | SP4_MACH_CRED	= 1, | 
|---|
| 715 | SP4_SSV		= 2 | 
|---|
| 716 | }; | 
|---|
| 717 |  | 
|---|
| 718 | /* GET_DIR_DELEGATION non-fatal status codes */ | 
|---|
| 719 | enum gddrnf4_status { | 
|---|
| 720 | GDD4_OK		= 0, | 
|---|
| 721 | GDD4_UNAVAIL	= 1 | 
|---|
| 722 | }; | 
|---|
| 723 |  | 
|---|
| 724 | enum pnfs_layouttype { | 
|---|
| 725 | LAYOUT_NFSV4_1_FILES  = 1, | 
|---|
| 726 | LAYOUT_OSD2_OBJECTS = 2, | 
|---|
| 727 | LAYOUT_BLOCK_VOLUME = 3, | 
|---|
| 728 | LAYOUT_FLEX_FILES = 4, | 
|---|
| 729 | LAYOUT_SCSI = 5, | 
|---|
| 730 | LAYOUT_TYPE_MAX | 
|---|
| 731 | }; | 
|---|
| 732 |  | 
|---|
| 733 | /* used for both layout return and recall */ | 
|---|
| 734 | enum pnfs_layoutreturn_type { | 
|---|
| 735 | RETURN_FILE = 1, | 
|---|
| 736 | RETURN_FSID = 2, | 
|---|
| 737 | RETURN_ALL  = 3 | 
|---|
| 738 | }; | 
|---|
| 739 |  | 
|---|
| 740 | enum pnfs_iomode { | 
|---|
| 741 | IOMODE_READ = 1, | 
|---|
| 742 | IOMODE_RW = 2, | 
|---|
| 743 | IOMODE_ANY = 3, | 
|---|
| 744 | }; | 
|---|
| 745 |  | 
|---|
| 746 | enum pnfs_notify_deviceid_type4 { | 
|---|
| 747 | NOTIFY_DEVICEID4_CHANGE = 1 << 1, | 
|---|
| 748 | NOTIFY_DEVICEID4_DELETE = 1 << 2, | 
|---|
| 749 | }; | 
|---|
| 750 |  | 
|---|
| 751 | enum pnfs_block_volume_type { | 
|---|
| 752 | PNFS_BLOCK_VOLUME_SIMPLE	= 0, | 
|---|
| 753 | PNFS_BLOCK_VOLUME_SLICE		= 1, | 
|---|
| 754 | PNFS_BLOCK_VOLUME_CONCAT	= 2, | 
|---|
| 755 | PNFS_BLOCK_VOLUME_STRIPE	= 3, | 
|---|
| 756 | PNFS_BLOCK_VOLUME_SCSI		= 4, | 
|---|
| 757 | }; | 
|---|
| 758 |  | 
|---|
| 759 | enum pnfs_block_extent_state { | 
|---|
| 760 | PNFS_BLOCK_READWRITE_DATA	= 0, | 
|---|
| 761 | PNFS_BLOCK_READ_DATA		= 1, | 
|---|
| 762 | PNFS_BLOCK_INVALID_DATA		= 2, | 
|---|
| 763 | PNFS_BLOCK_NONE_DATA		= 3, | 
|---|
| 764 | }; | 
|---|
| 765 |  | 
|---|
| 766 | /* on the wire size of a block layout extent */ | 
|---|
| 767 | #define PNFS_BLOCK_EXTENT_SIZE \ | 
|---|
| 768 | (7 * sizeof(__be32) + NFS4_DEVICEID4_SIZE) | 
|---|
| 769 |  | 
|---|
| 770 | /* on the wire size of a scsi commit range */ | 
|---|
| 771 | #define PNFS_SCSI_RANGE_SIZE \ | 
|---|
| 772 | (4 * sizeof(__be32)) | 
|---|
| 773 |  | 
|---|
| 774 | enum scsi_code_set { | 
|---|
| 775 | PS_CODE_SET_BINARY	= 1, | 
|---|
| 776 | PS_CODE_SET_ASCII	= 2, | 
|---|
| 777 | PS_CODE_SET_UTF8	= 3 | 
|---|
| 778 | }; | 
|---|
| 779 |  | 
|---|
| 780 | enum scsi_designator_type { | 
|---|
| 781 | PS_DESIGNATOR_T10	= 1, | 
|---|
| 782 | PS_DESIGNATOR_EUI64	= 2, | 
|---|
| 783 | PS_DESIGNATOR_NAA	= 3, | 
|---|
| 784 | PS_DESIGNATOR_NAME	= 8 | 
|---|
| 785 | }; | 
|---|
| 786 |  | 
|---|
| 787 | #define NFL4_UFLG_MASK			0x0000003F | 
|---|
| 788 | #define NFL4_UFLG_DENSE			0x00000001 | 
|---|
| 789 | #define NFL4_UFLG_COMMIT_THRU_MDS	0x00000002 | 
|---|
| 790 | #define NFL4_UFLG_STRIPE_UNIT_SIZE_MASK	0xFFFFFFC0 | 
|---|
| 791 |  | 
|---|
| 792 | /* Encoded in the loh_body field of type layouthint4 */ | 
|---|
| 793 | enum filelayout_hint_care4 { | 
|---|
| 794 | NFLH4_CARE_DENSE		= NFL4_UFLG_DENSE, | 
|---|
| 795 | NFLH4_CARE_COMMIT_THRU_MDS	= NFL4_UFLG_COMMIT_THRU_MDS, | 
|---|
| 796 | NFLH4_CARE_STRIPE_UNIT_SIZE	= 0x00000040, | 
|---|
| 797 | NFLH4_CARE_STRIPE_COUNT		= 0x00000080 | 
|---|
| 798 | }; | 
|---|
| 799 |  | 
|---|
| 800 | #define NFS4_DEVICEID4_SIZE 16 | 
|---|
| 801 |  | 
|---|
| 802 | struct nfs4_deviceid { | 
|---|
| 803 | char data[NFS4_DEVICEID4_SIZE]; | 
|---|
| 804 | }; | 
|---|
| 805 |  | 
|---|
| 806 | enum data_content4 { | 
|---|
| 807 | NFS4_CONTENT_DATA		= 0, | 
|---|
| 808 | NFS4_CONTENT_HOLE		= 1, | 
|---|
| 809 | }; | 
|---|
| 810 |  | 
|---|
| 811 | enum pnfs_update_layout_reason { | 
|---|
| 812 | PNFS_UPDATE_LAYOUT_UNKNOWN = 0, | 
|---|
| 813 | PNFS_UPDATE_LAYOUT_NO_PNFS, | 
|---|
| 814 | PNFS_UPDATE_LAYOUT_RD_ZEROLEN, | 
|---|
| 815 | PNFS_UPDATE_LAYOUT_MDSTHRESH, | 
|---|
| 816 | PNFS_UPDATE_LAYOUT_NOMEM, | 
|---|
| 817 | PNFS_UPDATE_LAYOUT_BULK_RECALL, | 
|---|
| 818 | PNFS_UPDATE_LAYOUT_IO_TEST_FAIL, | 
|---|
| 819 | PNFS_UPDATE_LAYOUT_FOUND_CACHED, | 
|---|
| 820 | PNFS_UPDATE_LAYOUT_RETURN, | 
|---|
| 821 | PNFS_UPDATE_LAYOUT_RETRY, | 
|---|
| 822 | PNFS_UPDATE_LAYOUT_BLOCKED, | 
|---|
| 823 | PNFS_UPDATE_LAYOUT_INVALID_OPEN, | 
|---|
| 824 | PNFS_UPDATE_LAYOUT_SEND_LAYOUTGET, | 
|---|
| 825 | PNFS_UPDATE_LAYOUT_EXIT, | 
|---|
| 826 | }; | 
|---|
| 827 |  | 
|---|
| 828 | #define NFS4_OP_MAP_NUM_LONGS					\ | 
|---|
| 829 | DIV_ROUND_UP(LAST_NFS4_OP, 8 * sizeof(unsigned long)) | 
|---|
| 830 | #define NFS4_OP_MAP_NUM_WORDS \ | 
|---|
| 831 | (NFS4_OP_MAP_NUM_LONGS * sizeof(unsigned long) / sizeof(u32)) | 
|---|
| 832 | struct nfs4_op_map { | 
|---|
| 833 | union { | 
|---|
| 834 | unsigned long longs[NFS4_OP_MAP_NUM_LONGS]; | 
|---|
| 835 | u32 words[NFS4_OP_MAP_NUM_WORDS]; | 
|---|
| 836 | } u; | 
|---|
| 837 | }; | 
|---|
| 838 |  | 
|---|
| 839 | struct nfs42_netaddr { | 
|---|
| 840 | char		netid[RPCBIND_MAXNETIDLEN]; | 
|---|
| 841 | char		addr[RPCBIND_MAXUADDRLEN + 1]; | 
|---|
| 842 | u32		netid_len; | 
|---|
| 843 | u32		addr_len; | 
|---|
| 844 | }; | 
|---|
| 845 |  | 
|---|
| 846 | enum netloc_type4 { | 
|---|
| 847 | NL4_NAME		= 1, | 
|---|
| 848 | NL4_URL			= 2, | 
|---|
| 849 | NL4_NETADDR		= 3, | 
|---|
| 850 | }; | 
|---|
| 851 |  | 
|---|
| 852 | struct nl4_server { | 
|---|
| 853 | enum netloc_type4	nl4_type; | 
|---|
| 854 | union { | 
|---|
| 855 | struct { /* NL4_NAME, NL4_URL */ | 
|---|
| 856 | int	nl4_str_sz; | 
|---|
| 857 | char	nl4_str[NFS4_OPAQUE_LIMIT + 1]; | 
|---|
| 858 | }; | 
|---|
| 859 | struct nfs42_netaddr	nl4_addr; /* NL4_NETADDR */ | 
|---|
| 860 | } u; | 
|---|
| 861 | }; | 
|---|
| 862 |  | 
|---|
| 863 | enum nfs4_change_attr_type { | 
|---|
| 864 | NFS4_CHANGE_TYPE_IS_MONOTONIC_INCR = 0, | 
|---|
| 865 | NFS4_CHANGE_TYPE_IS_VERSION_COUNTER = 1, | 
|---|
| 866 | NFS4_CHANGE_TYPE_IS_VERSION_COUNTER_NOPNFS = 2, | 
|---|
| 867 | NFS4_CHANGE_TYPE_IS_TIME_METADATA = 3, | 
|---|
| 868 | NFS4_CHANGE_TYPE_IS_UNDEFINED = 4, | 
|---|
| 869 | }; | 
|---|
| 870 |  | 
|---|
| 871 | /* | 
|---|
| 872 | * Options for setxattr. These match the flags for setxattr(2). | 
|---|
| 873 | */ | 
|---|
| 874 | enum nfs4_setxattr_options { | 
|---|
| 875 | SETXATTR4_EITHER	= 0, | 
|---|
| 876 | SETXATTR4_CREATE	= 1, | 
|---|
| 877 | SETXATTR4_REPLACE	= 2, | 
|---|
| 878 | }; | 
|---|
| 879 |  | 
|---|
| 880 | enum { | 
|---|
| 881 | RCA4_TYPE_MASK_RDATA_DLG	= 0, | 
|---|
| 882 | RCA4_TYPE_MASK_WDATA_DLG	= 1, | 
|---|
| 883 | RCA4_TYPE_MASK_DIR_DLG		= 2, | 
|---|
| 884 | RCA4_TYPE_MASK_FILE_LAYOUT	= 3, | 
|---|
| 885 | RCA4_TYPE_MASK_BLK_LAYOUT	= 4, | 
|---|
| 886 | RCA4_TYPE_MASK_OBJ_LAYOUT_MIN	= 8, | 
|---|
| 887 | RCA4_TYPE_MASK_OBJ_LAYOUT_MAX	= 9, | 
|---|
| 888 | RCA4_TYPE_MASK_OTHER_LAYOUT_MIN	= 12, | 
|---|
| 889 | RCA4_TYPE_MASK_OTHER_LAYOUT_MAX	= 15, | 
|---|
| 890 | }; | 
|---|
| 891 |  | 
|---|
| 892 | enum nfs_cb_opnum4 { | 
|---|
| 893 | OP_CB_GETATTR = 3, | 
|---|
| 894 | OP_CB_RECALL  = 4, | 
|---|
| 895 |  | 
|---|
| 896 | /* Callback operations new to NFSv4.1 */ | 
|---|
| 897 | OP_CB_LAYOUTRECALL  = 5, | 
|---|
| 898 | OP_CB_NOTIFY        = 6, | 
|---|
| 899 | OP_CB_PUSH_DELEG    = 7, | 
|---|
| 900 | OP_CB_RECALL_ANY    = 8, | 
|---|
| 901 | OP_CB_RECALLABLE_OBJ_AVAIL = 9, | 
|---|
| 902 | OP_CB_RECALL_SLOT   = 10, | 
|---|
| 903 | OP_CB_SEQUENCE      = 11, | 
|---|
| 904 | OP_CB_WANTS_CANCELLED = 12, | 
|---|
| 905 | OP_CB_NOTIFY_LOCK   = 13, | 
|---|
| 906 | OP_CB_NOTIFY_DEVICEID = 14, | 
|---|
| 907 |  | 
|---|
| 908 | /* Callback operations new to NFSv4.2 */ | 
|---|
| 909 | OP_CB_OFFLOAD = 15, | 
|---|
| 910 |  | 
|---|
| 911 | OP_CB_ILLEGAL = 10044, | 
|---|
| 912 | }; | 
|---|
| 913 |  | 
|---|
| 914 | #endif | 
|---|
| 915 |  | 
|---|