1191783Srmacklem/*- 2191783Srmacklem * Copyright (c) 1989, 1993 3191783Srmacklem * The Regents of the University of California. All rights reserved. 4191783Srmacklem * 5191783Srmacklem * This code is derived from software contributed to Berkeley by 6191783Srmacklem * Rick Macklem at The University of Guelph. 7191783Srmacklem * 8191783Srmacklem * Redistribution and use in source and binary forms, with or without 9191783Srmacklem * modification, are permitted provided that the following conditions 10191783Srmacklem * are met: 11191783Srmacklem * 1. Redistributions of source code must retain the above copyright 12191783Srmacklem * notice, this list of conditions and the following disclaimer. 13191783Srmacklem * 2. Redistributions in binary form must reproduce the above copyright 14191783Srmacklem * notice, this list of conditions and the following disclaimer in the 15191783Srmacklem * documentation and/or other materials provided with the distribution. 16191783Srmacklem * 4. Neither the name of the University nor the names of its contributors 17191783Srmacklem * may be used to endorse or promote products derived from this software 18191783Srmacklem * without specific prior written permission. 19191783Srmacklem * 20191783Srmacklem * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21191783Srmacklem * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22191783Srmacklem * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23191783Srmacklem * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24191783Srmacklem * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25191783Srmacklem * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26191783Srmacklem * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27191783Srmacklem * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28191783Srmacklem * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29191783Srmacklem * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30191783Srmacklem * SUCH DAMAGE. 31191783Srmacklem * 32191783Srmacklem * $FreeBSD: stable/11/sys/fs/nfs/nfsproto.h 347045 2019-05-03 03:05:22Z rmacklem $ 33191783Srmacklem */ 34191783Srmacklem 35191783Srmacklem#ifndef _NFS_NFSPROTO_H_ 36191783Srmacklem#define _NFS_NFSPROTO_H_ 37191783Srmacklem 38191783Srmacklem/* 39191783Srmacklem * nfs definitions as per the Version 2, 3 and 4 specs 40191783Srmacklem */ 41191783Srmacklem 42191783Srmacklem/* 43191783Srmacklem * Constants as defined in the NFS Version 2, 3 and 4 specs. 44191783Srmacklem * "NFS: Network File System Protocol Specification" RFC1094 45191783Srmacklem * and in the "NFS: Network File System Version 3 Protocol 46191783Srmacklem * Specification" 47191783Srmacklem */ 48191783Srmacklem 49191783Srmacklem#define NFS_PORT 2049 50191783Srmacklem#define NFS_PROG 100003 51191783Srmacklem#define NFS_CALLBCKPROG 0x40000000 /* V4 only */ 52191783Srmacklem#define NFS_VER2 2 53191783Srmacklem#define NFS_VER3 3 54191783Srmacklem#define NFS_VER4 4 55191783Srmacklem#define NFS_V2MAXDATA 8192 56191783Srmacklem#define NFS_MAXDGRAMDATA 16384 57191783Srmacklem#define NFS_MAXPATHLEN 1024 58191783Srmacklem#define NFS_MAXNAMLEN 255 59320615Srmacklem/* 60320615Srmacklem * Calculating the maximum XDR overhead for an NFS RPC isn't easy. 61320615Srmacklem * NFS_MAXPKTHDR is antiquated and assumes AUTH_SYS over UDP. 62320615Srmacklem * NFS_MAXXDR should be sufficient for all NFS versions over TCP. 63320615Srmacklem * It includes: 64320615Srmacklem * - Maximum RPC message header. It can include 2 400byte authenticators plus 65320615Srmacklem * a machine name of unlimited length, although it is usually relatively 66320615Srmacklem * small. 67320615Srmacklem * - XDR overheads for the NFSv4 compound. This can include Owner and 68320615Srmacklem * Owner_group strings, which are usually fairly small, but are allowed 69320615Srmacklem * to be up to 1024 bytes each. 70320615Srmacklem * 4096 is overkill, but should always be sufficient. 71320615Srmacklem */ 72191783Srmacklem#define NFS_MAXPKTHDR 404 73320615Srmacklem#define NFS_MAXXDR 4096 74320615Srmacklem#define NFS_MAXPACKET (NFS_SRVMAXIO + NFS_MAXXDR) 75191783Srmacklem#define NFS_MINPACKET 20 76191783Srmacklem#define NFS_FABLKSIZE 512 /* Size in bytes of a block wrt fa_blocks */ 77191783Srmacklem#define NFSV4_MINORVERSION 0 /* V4 Minor version */ 78244042Srmacklem#define NFSV41_MINORVERSION 1 /* V4 Minor version */ 79191783Srmacklem#define NFSV4_CBVERS 1 /* V4 CB Version */ 80244042Srmacklem#define NFSV41_CBVERS 4 /* V4.1 CB Version */ 81191783Srmacklem#define NFSV4_SMALLSTR 50 /* Strings small enough for stack */ 82191783Srmacklem 83281628Srmacklem/* 84281628Srmacklem * This value isn't a fixed value in the RFCs. 85281628Srmacklem * It is the maximum data size supported by NFSv3 or NFSv4 over TCP for 86281628Srmacklem * the server. It should be set to the I/O size preferred by ZFS or 87281628Srmacklem * MAXBSIZE, whichever is greater. 88281628Srmacklem * ZFS currently prefers 128K. 89281628Srmacklem * It used to be called NFS_MAXDATA, but has been renamed to clarify that 90281628Srmacklem * it refers to server side only and doesn't conflict with the NFS_MAXDATA 91281628Srmacklem * defined in rpcsvc/nfs_prot.h for userland. 92281628Srmacklem */ 93281628Srmacklem#define NFS_SRVMAXIO (128 * 1024) 94281628Srmacklem 95191783Srmacklem/* Stat numbers for rpc returns (version 2, 3 and 4) */ 96221462Srmacklem/* 97221462Srmacklem * These numbers are hard-wired in the RFCs, so they can't be changed. 98221462Srmacklem * The code currently assumes that the ones < 10000 are the same as 99221462Srmacklem * sys/errno.h and that sys/errno.h will never go as high as 10000. 100221462Srmacklem * If the value in sys/errno.h of any entry listed below is changed, 101221462Srmacklem * the NFS code must be modified to do the mapping between them. 102221462Srmacklem * (You can ignore NFSERR_WFLUSH, since it is never actually used.) 103221462Srmacklem */ 104191783Srmacklem#define NFSERR_OK 0 105191783Srmacklem#define NFSERR_PERM 1 106191783Srmacklem#define NFSERR_NOENT 2 107191783Srmacklem#define NFSERR_IO 5 108191783Srmacklem#define NFSERR_NXIO 6 109191783Srmacklem#define NFSERR_ACCES 13 110191783Srmacklem#define NFSERR_EXIST 17 111191783Srmacklem#define NFSERR_XDEV 18 /* Version 3, 4 only */ 112191783Srmacklem#define NFSERR_NODEV 19 113191783Srmacklem#define NFSERR_NOTDIR 20 114191783Srmacklem#define NFSERR_ISDIR 21 115191783Srmacklem#define NFSERR_INVAL 22 /* Version 3, 4 only */ 116191783Srmacklem#define NFSERR_FBIG 27 117191783Srmacklem#define NFSERR_NOSPC 28 118191783Srmacklem#define NFSERR_ROFS 30 119191783Srmacklem#define NFSERR_MLINK 31 /* Version 3, 4 only */ 120191783Srmacklem#define NFSERR_NAMETOL 63 121191783Srmacklem#define NFSERR_NOTEMPTY 66 122191783Srmacklem#define NFSERR_DQUOT 69 123191783Srmacklem#define NFSERR_STALE 70 124191783Srmacklem#define NFSERR_REMOTE 71 /* Version 3 only */ 125191783Srmacklem#define NFSERR_WFLUSH 99 /* Version 2 only */ 126191783Srmacklem#define NFSERR_BADHANDLE 10001 /* These are Version 3, 4 only */ 127191783Srmacklem#define NFSERR_NOT_SYNC 10002 /* Version 3 Only */ 128191783Srmacklem#define NFSERR_BAD_COOKIE 10003 129191783Srmacklem#define NFSERR_NOTSUPP 10004 130191783Srmacklem#define NFSERR_TOOSMALL 10005 131191783Srmacklem#define NFSERR_SERVERFAULT 10006 132191783Srmacklem#define NFSERR_BADTYPE 10007 133191783Srmacklem#define NFSERR_DELAY 10008 /* Called NFSERR_JUKEBOX for V3 */ 134191783Srmacklem#define NFSERR_SAME 10009 /* These are Version 4 only */ 135191783Srmacklem#define NFSERR_DENIED 10010 136191783Srmacklem#define NFSERR_EXPIRED 10011 137191783Srmacklem#define NFSERR_LOCKED 10012 138191783Srmacklem#define NFSERR_GRACE 10013 139191783Srmacklem#define NFSERR_FHEXPIRED 10014 140191783Srmacklem#define NFSERR_SHAREDENIED 10015 141191783Srmacklem#define NFSERR_WRONGSEC 10016 142191783Srmacklem#define NFSERR_CLIDINUSE 10017 143191783Srmacklem#define NFSERR_RESOURCE 10018 144191783Srmacklem#define NFSERR_MOVED 10019 145191783Srmacklem#define NFSERR_NOFILEHANDLE 10020 146191783Srmacklem#define NFSERR_MINORVERMISMATCH 10021 147191783Srmacklem#define NFSERR_STALECLIENTID 10022 148191783Srmacklem#define NFSERR_STALESTATEID 10023 149191783Srmacklem#define NFSERR_OLDSTATEID 10024 150191783Srmacklem#define NFSERR_BADSTATEID 10025 151191783Srmacklem#define NFSERR_BADSEQID 10026 152191783Srmacklem#define NFSERR_NOTSAME 10027 153191783Srmacklem#define NFSERR_LOCKRANGE 10028 154191783Srmacklem#define NFSERR_SYMLINK 10029 155191783Srmacklem#define NFSERR_RESTOREFH 10030 156191783Srmacklem#define NFSERR_LEASEMOVED 10031 157191783Srmacklem#define NFSERR_ATTRNOTSUPP 10032 158191783Srmacklem#define NFSERR_NOGRACE 10033 159191783Srmacklem#define NFSERR_RECLAIMBAD 10034 160191783Srmacklem#define NFSERR_RECLAIMCONFLICT 10035 161191783Srmacklem#define NFSERR_BADXDR 10036 162191783Srmacklem#define NFSERR_LOCKSHELD 10037 163191783Srmacklem#define NFSERR_OPENMODE 10038 164191783Srmacklem#define NFSERR_BADOWNER 10039 165191783Srmacklem#define NFSERR_BADCHAR 10040 166191783Srmacklem#define NFSERR_BADNAME 10041 167191783Srmacklem#define NFSERR_BADRANGE 10042 168191783Srmacklem#define NFSERR_LOCKNOTSUPP 10043 169191783Srmacklem#define NFSERR_OPILLEGAL 10044 170191783Srmacklem#define NFSERR_DEADLOCK 10045 171191783Srmacklem#define NFSERR_FILEOPEN 10046 172191783Srmacklem#define NFSERR_ADMINREVOKED 10047 173191783Srmacklem#define NFSERR_CBPATHDOWN 10048 174191783Srmacklem 175244042Srmacklem/* NFSv4.1 specific errors. */ 176244042Srmacklem#define NFSERR_BADIOMODE 10049 177244042Srmacklem#define NFSERR_BADLAYOUT 10050 178244042Srmacklem#define NFSERR_BADSESSIONDIGEST 10051 179244042Srmacklem#define NFSERR_BADSESSION 10052 180244042Srmacklem#define NFSERR_BADSLOT 10053 181244042Srmacklem#define NFSERR_COMPLETEALREADY 10054 182244042Srmacklem#define NFSERR_NOTBNDTOSESS 10055 183244042Srmacklem#define NFSERR_DELEGALREADYWANT 10056 184244042Srmacklem#define NFSERR_BACKCHANBUSY 10057 185244042Srmacklem#define NFSERR_LAYOUTTRYLATER 10058 186244042Srmacklem#define NFSERR_LAYOUTUNAVAIL 10059 187244042Srmacklem#define NFSERR_NOMATCHLAYOUT 10060 188244042Srmacklem#define NFSERR_RECALLCONFLICT 10061 189244042Srmacklem#define NFSERR_UNKNLAYOUTTYPE 10062 190244042Srmacklem#define NFSERR_SEQMISORDERED 10063 191244042Srmacklem#define NFSERR_SEQUENCEPOS 10064 192244042Srmacklem#define NFSERR_REQTOOBIG 10065 193244042Srmacklem#define NFSERR_REPTOOBIG 10066 194244042Srmacklem#define NFSERR_REPTOOBIGTOCACHE 10067 195244042Srmacklem#define NFSERR_RETRYUNCACHEDREP 10068 196244042Srmacklem#define NFSERR_UNSAFECOMPOUND 10069 197244042Srmacklem#define NFSERR_TOOMANYOPS 10070 198244042Srmacklem#define NFSERR_OPNOTINSESS 10071 199244042Srmacklem#define NFSERR_HASHALGUNSUPP 10072 200244042Srmacklem#define NFSERR_CLIENTIDBUSY 10074 201244042Srmacklem#define NFSERR_PNFSIOHOLE 10075 202244042Srmacklem#define NFSERR_SEQFALSERETRY 10076 203244042Srmacklem#define NFSERR_BADHIGHSLOT 10077 204244042Srmacklem#define NFSERR_DEADSESSION 10078 205244042Srmacklem#define NFSERR_ENCRALGUNSUPP 10079 206244042Srmacklem#define NFSERR_PNFSNOLAYOUT 10080 207244042Srmacklem#define NFSERR_NOTONLYOP 10081 208244042Srmacklem#define NFSERR_WRONGCRED 10082 209244042Srmacklem#define NFSERR_WRONGTYPE 10083 210244042Srmacklem#define NFSERR_DIRDELEGUNAVAIL 10084 211244042Srmacklem#define NFSERR_REJECTDELEG 10085 212244042Srmacklem#define NFSERR_RETURNCONFLICT 10086 213244042Srmacklem#define NFSERR_DELEGREVOKED 10087 214244042Srmacklem 215191783Srmacklem#define NFSERR_STALEWRITEVERF 30001 /* Fake return for nfs_commit() */ 216191783Srmacklem#define NFSERR_DONTREPLY 30003 /* Don't process request */ 217191783Srmacklem#define NFSERR_RETVOID 30004 /* Return void, not error */ 218191783Srmacklem#define NFSERR_REPLYFROMCACHE 30005 /* Reply from recent request cache */ 219191783Srmacklem#define NFSERR_STALEDONTRECOVER 30006 /* Don't initiate recovery */ 220191783Srmacklem 221191783Srmacklem#define NFSERR_RPCERR 0x40000000 /* Mark an RPC layer error */ 222191783Srmacklem#define NFSERR_AUTHERR 0x80000000 /* Mark an authentication error */ 223191783Srmacklem 224191783Srmacklem#define NFSERR_RPCMISMATCH (NFSERR_RPCERR | RPC_MISMATCH) 225191783Srmacklem#define NFSERR_PROGUNAVAIL (NFSERR_RPCERR | RPC_PROGUNAVAIL) 226191783Srmacklem#define NFSERR_PROGMISMATCH (NFSERR_RPCERR | RPC_PROGMISMATCH) 227191783Srmacklem#define NFSERR_PROGNOTV4 (NFSERR_RPCERR | 0xffff) 228191783Srmacklem#define NFSERR_PROCUNAVAIL (NFSERR_RPCERR | RPC_PROCUNAVAIL) 229191783Srmacklem#define NFSERR_GARBAGE (NFSERR_RPCERR | RPC_GARBAGE) 230191783Srmacklem 231191783Srmacklem/* Sizes in bytes of various nfs rpc components */ 232191783Srmacklem#define NFSX_UNSIGNED 4 233191783Srmacklem#define NFSX_HYPER (2 * NFSX_UNSIGNED) 234191783Srmacklem 235191783Srmacklem/* specific to NFS Version 2 */ 236191783Srmacklem#define NFSX_V2FH 32 237191783Srmacklem#define NFSX_V2FATTR 68 238191783Srmacklem#define NFSX_V2SATTR 32 239191783Srmacklem#define NFSX_V2COOKIE 4 240191783Srmacklem#define NFSX_V2STATFS 20 241191783Srmacklem 242191783Srmacklem/* specific to NFS Version 3 */ 243191783Srmacklem#define NFSX_V3FHMAX 64 /* max. allowed by protocol */ 244191783Srmacklem#define NFSX_V3FATTR 84 245191783Srmacklem#define NFSX_V3SATTR 60 /* max. all fields filled in */ 246191783Srmacklem#define NFSX_V3SRVSATTR (sizeof (struct nfsv3_sattr)) 247191783Srmacklem#define NFSX_V3POSTOPATTR (NFSX_V3FATTR + NFSX_UNSIGNED) 248191783Srmacklem#define NFSX_V3WCCDATA (NFSX_V3POSTOPATTR + 8 * NFSX_UNSIGNED) 249191783Srmacklem#define NFSX_V3STATFS 52 250191783Srmacklem#define NFSX_V3FSINFO 48 251191783Srmacklem#define NFSX_V3PATHCONF 24 252191783Srmacklem 253191783Srmacklem/* specific to NFS Version 4 */ 254191783Srmacklem#define NFSX_V4FHMAX 128 255191783Srmacklem#define NFSX_V4FSID (2 * NFSX_HYPER) 256191783Srmacklem#define NFSX_V4SPECDATA (2 * NFSX_UNSIGNED) 257191783Srmacklem#define NFSX_V4TIME (NFSX_HYPER + NFSX_UNSIGNED) 258191783Srmacklem#define NFSX_V4SETTIME (NFSX_UNSIGNED + NFSX_V4TIME) 259244042Srmacklem#define NFSX_V4SESSIONID 16 260244042Srmacklem#define NFSX_V4DEVICEID 16 261191783Srmacklem 262191783Srmacklem/* sizes common to multiple NFS versions */ 263191783Srmacklem#define NFSX_FHMAX (NFSX_V4FHMAX) 264191783Srmacklem#define NFSX_MYFH (sizeof (fhandle_t)) /* size this server uses */ 265191783Srmacklem#define NFSX_VERF 8 266191783Srmacklem#define NFSX_STATEIDOTHER 12 267191783Srmacklem#define NFSX_STATEID (NFSX_UNSIGNED + NFSX_STATEIDOTHER) 268191783Srmacklem#define NFSX_GSSH 12 269191783Srmacklem 270191783Srmacklem/* variants for multiple versions */ 271191783Srmacklem#define NFSX_STATFS(v3) ((v3) ? NFSX_V3STATFS : NFSX_V2STATFS) 272191783Srmacklem 273191783Srmacklem/* nfs rpc procedure numbers (before version mapping) */ 274191783Srmacklem#define NFSPROC_NULL 0 275191783Srmacklem#define NFSPROC_GETATTR 1 276191783Srmacklem#define NFSPROC_SETATTR 2 277191783Srmacklem#define NFSPROC_LOOKUP 3 278191783Srmacklem#define NFSPROC_ACCESS 4 279191783Srmacklem#define NFSPROC_READLINK 5 280191783Srmacklem#define NFSPROC_READ 6 281191783Srmacklem#define NFSPROC_WRITE 7 282191783Srmacklem#define NFSPROC_CREATE 8 283191783Srmacklem#define NFSPROC_MKDIR 9 284191783Srmacklem#define NFSPROC_SYMLINK 10 285191783Srmacklem#define NFSPROC_MKNOD 11 286191783Srmacklem#define NFSPROC_REMOVE 12 287191783Srmacklem#define NFSPROC_RMDIR 13 288191783Srmacklem#define NFSPROC_RENAME 14 289191783Srmacklem#define NFSPROC_LINK 15 290191783Srmacklem#define NFSPROC_READDIR 16 291191783Srmacklem#define NFSPROC_READDIRPLUS 17 292191783Srmacklem#define NFSPROC_FSSTAT 18 293191783Srmacklem#define NFSPROC_FSINFO 19 294191783Srmacklem#define NFSPROC_PATHCONF 20 295191783Srmacklem#define NFSPROC_COMMIT 21 296191783Srmacklem 297191783Srmacklem/* 298223280Srmacklem * The lower numbers -> 21 are used by NFSv2 and v3. These define higher 299223280Srmacklem * numbers used by NFSv4. 300223280Srmacklem * NFS_V3NPROCS is one greater than the last V3 op and NFS_NPROCS is 301223280Srmacklem * one greater than the last number. 302223280Srmacklem */ 303223280Srmacklem#ifndef NFS_V3NPROCS 304223280Srmacklem#define NFS_V3NPROCS 22 305223280Srmacklem 306223280Srmacklem#define NFSPROC_LOOKUPP 22 307223280Srmacklem#define NFSPROC_SETCLIENTID 23 308223280Srmacklem#define NFSPROC_SETCLIENTIDCFRM 24 309223280Srmacklem#define NFSPROC_LOCK 25 310223280Srmacklem#define NFSPROC_LOCKU 26 311223280Srmacklem#define NFSPROC_OPEN 27 312223280Srmacklem#define NFSPROC_CLOSE 28 313223280Srmacklem#define NFSPROC_OPENCONFIRM 29 314223280Srmacklem#define NFSPROC_LOCKT 30 315223280Srmacklem#define NFSPROC_OPENDOWNGRADE 31 316223280Srmacklem#define NFSPROC_RENEW 32 317223280Srmacklem#define NFSPROC_PUTROOTFH 33 318223280Srmacklem#define NFSPROC_RELEASELCKOWN 34 319223280Srmacklem#define NFSPROC_DELEGRETURN 35 320223280Srmacklem#define NFSPROC_RETDELEGREMOVE 36 321223280Srmacklem#define NFSPROC_RETDELEGRENAME1 37 322223280Srmacklem#define NFSPROC_RETDELEGRENAME2 38 323223280Srmacklem#define NFSPROC_GETACL 39 324223280Srmacklem#define NFSPROC_SETACL 40 325223280Srmacklem 326223280Srmacklem/* 327223280Srmacklem * Must be defined as one higher than the last Proc# above. 328223280Srmacklem */ 329223280Srmacklem#define NFSV4_NPROCS 41 330244042Srmacklem 331244042Srmacklem/* Additional procedures for NFSv4.1. */ 332244042Srmacklem#define NFSPROC_EXCHANGEID 41 333244042Srmacklem#define NFSPROC_CREATESESSION 42 334244042Srmacklem#define NFSPROC_DESTROYSESSION 43 335244042Srmacklem#define NFSPROC_DESTROYCLIENT 44 336244042Srmacklem#define NFSPROC_FREESTATEID 45 337244042Srmacklem#define NFSPROC_LAYOUTGET 46 338244042Srmacklem#define NFSPROC_GETDEVICEINFO 47 339244042Srmacklem#define NFSPROC_LAYOUTCOMMIT 48 340244042Srmacklem#define NFSPROC_LAYOUTRETURN 49 341244042Srmacklem#define NFSPROC_RECLAIMCOMPL 50 342244042Srmacklem#define NFSPROC_WRITEDS 51 343244042Srmacklem#define NFSPROC_READDS 52 344244042Srmacklem#define NFSPROC_COMMITDS 53 345320998Srmacklem#define NFSPROC_OPENLAYGET 54 346320998Srmacklem#define NFSPROC_CREATELAYGET 55 347244042Srmacklem 348244042Srmacklem/* 349244042Srmacklem * Must be defined as one higher than the last NFSv4.1 Proc# above. 350244042Srmacklem */ 351320998Srmacklem#define NFSV41_NPROCS 56 352244042Srmacklem 353223280Srmacklem#endif /* NFS_V3NPROCS */ 354223280Srmacklem 355223280Srmacklem/* 356223280Srmacklem * Define NFS_NPROCS as NFSV4_NPROCS for the experimental kernel code. 357223280Srmacklem */ 358223280Srmacklem#ifndef NFS_NPROCS 359223280Srmacklem#define NFS_NPROCS NFSV4_NPROCS 360223280Srmacklem#endif 361223280Srmacklem 362223280Srmacklem/* 363191783Srmacklem * NFSPROC_NOOP is a fake op# that can't be the same as any V2/3/4 Procedure 364306609Srmacklem * or Operation#. Since the NFS V4 Op #s go higher, use NFSV42_NOPS, which 365191783Srmacklem * is one greater than the highest Op#. 366191783Srmacklem */ 367306609Srmacklem#define NFSPROC_NOOP NFSV42_NOPS 368191783Srmacklem 369191783Srmacklem/* Actual Version 2 procedure numbers */ 370191783Srmacklem#define NFSV2PROC_NULL 0 371191783Srmacklem#define NFSV2PROC_GETATTR 1 372191783Srmacklem#define NFSV2PROC_SETATTR 2 373191783Srmacklem#define NFSV2PROC_NOOP 3 374191783Srmacklem#define NFSV2PROC_ROOT NFSV2PROC_NOOP /* Obsolete */ 375191783Srmacklem#define NFSV2PROC_LOOKUP 4 376191783Srmacklem#define NFSV2PROC_READLINK 5 377191783Srmacklem#define NFSV2PROC_READ 6 378191783Srmacklem#define NFSV2PROC_WRITECACHE NFSV2PROC_NOOP /* Obsolete */ 379191783Srmacklem#define NFSV2PROC_WRITE 8 380191783Srmacklem#define NFSV2PROC_CREATE 9 381191783Srmacklem#define NFSV2PROC_REMOVE 10 382191783Srmacklem#define NFSV2PROC_RENAME 11 383191783Srmacklem#define NFSV2PROC_LINK 12 384191783Srmacklem#define NFSV2PROC_SYMLINK 13 385191783Srmacklem#define NFSV2PROC_MKDIR 14 386191783Srmacklem#define NFSV2PROC_RMDIR 15 387191783Srmacklem#define NFSV2PROC_READDIR 16 388191783Srmacklem#define NFSV2PROC_STATFS 17 389191783Srmacklem 390191783Srmacklem/* 391192152Srmacklem * V4 Procedure numbers 392191783Srmacklem */ 393191783Srmacklem#define NFSV4PROC_COMPOUND 1 394191783Srmacklem#define NFSV4PROC_CBNULL 0 395191783Srmacklem#define NFSV4PROC_CBCOMPOUND 1 396191783Srmacklem 397191783Srmacklem/* 398191783Srmacklem * Constants used by the Version 3 and 4 protocols for various RPCs 399191783Srmacklem */ 400191783Srmacklem#define NFSV3SATTRTIME_DONTCHANGE 0 401191783Srmacklem#define NFSV3SATTRTIME_TOSERVER 1 402191783Srmacklem#define NFSV3SATTRTIME_TOCLIENT 2 403191783Srmacklem 404191783Srmacklem#define NFSV4SATTRTIME_TOSERVER 0 405191783Srmacklem#define NFSV4SATTRTIME_TOCLIENT 1 406191783Srmacklem 407191783Srmacklem#define NFSV4LOCKT_READ 1 408191783Srmacklem#define NFSV4LOCKT_WRITE 2 409191783Srmacklem#define NFSV4LOCKT_READW 3 410191783Srmacklem#define NFSV4LOCKT_WRITEW 4 411191783Srmacklem#define NFSV4LOCKT_RELEASE 5 412191783Srmacklem 413191783Srmacklem#define NFSV4OPEN_NOCREATE 0 414191783Srmacklem#define NFSV4OPEN_CREATE 1 415191783Srmacklem#define NFSV4OPEN_CLAIMNULL 0 416191783Srmacklem#define NFSV4OPEN_CLAIMPREVIOUS 1 417191783Srmacklem#define NFSV4OPEN_CLAIMDELEGATECUR 2 418191783Srmacklem#define NFSV4OPEN_CLAIMDELEGATEPREV 3 419268115Srmacklem#define NFSV4OPEN_CLAIMFH 4 420268115Srmacklem#define NFSV4OPEN_CLAIMDELEGATECURFH 5 421268115Srmacklem#define NFSV4OPEN_CLAIMDELEGATEPREVFH 6 422191783Srmacklem#define NFSV4OPEN_DELEGATENONE 0 423191783Srmacklem#define NFSV4OPEN_DELEGATEREAD 1 424191783Srmacklem#define NFSV4OPEN_DELEGATEWRITE 2 425268115Srmacklem#define NFSV4OPEN_DELEGATENONEEXT 3 426191783Srmacklem#define NFSV4OPEN_LIMITSIZE 1 427191783Srmacklem#define NFSV4OPEN_LIMITBLOCKS 2 428191783Srmacklem 429191783Srmacklem/* 430191783Srmacklem * Nfs V4 ACE stuff 431191783Srmacklem */ 432191783Srmacklem#define NFSV4ACE_ALLOWEDTYPE 0x00000000 433191783Srmacklem#define NFSV4ACE_DENIEDTYPE 0x00000001 434191783Srmacklem#define NFSV4ACE_AUDITTYPE 0x00000002 435191783Srmacklem#define NFSV4ACE_ALARMTYPE 0x00000003 436191783Srmacklem 437191783Srmacklem#define NFSV4ACE_SUPALLOWED 0x00000001 438191783Srmacklem#define NFSV4ACE_SUPDENIED 0x00000002 439191783Srmacklem#define NFSV4ACE_SUPAUDIT 0x00000004 440191783Srmacklem#define NFSV4ACE_SUPALARM 0x00000008 441191783Srmacklem 442191783Srmacklem#define NFSV4ACE_SUPTYPES (NFSV4ACE_SUPALLOWED | NFSV4ACE_SUPDENIED) 443191783Srmacklem 444191783Srmacklem#define NFSV4ACE_FILEINHERIT 0x00000001 445191783Srmacklem#define NFSV4ACE_DIRECTORYINHERIT 0x00000002 446191783Srmacklem#define NFSV4ACE_NOPROPAGATEINHERIT 0x00000004 447191783Srmacklem#define NFSV4ACE_INHERITONLY 0x00000008 448191783Srmacklem#define NFSV4ACE_SUCCESSFULACCESS 0x00000010 449191783Srmacklem#define NFSV4ACE_FAILEDACCESS 0x00000020 450191783Srmacklem#define NFSV4ACE_IDENTIFIERGROUP 0x00000040 451191783Srmacklem 452191783Srmacklem#define NFSV4ACE_READDATA 0x00000001 453191783Srmacklem#define NFSV4ACE_LISTDIRECTORY 0x00000001 454191783Srmacklem#define NFSV4ACE_WRITEDATA 0x00000002 455191783Srmacklem#define NFSV4ACE_ADDFILE 0x00000002 456191783Srmacklem#define NFSV4ACE_APPENDDATA 0x00000004 457191783Srmacklem#define NFSV4ACE_ADDSUBDIRECTORY 0x00000004 458191783Srmacklem#define NFSV4ACE_READNAMEDATTR 0x00000008 459191783Srmacklem#define NFSV4ACE_WRITENAMEDATTR 0x00000010 460191783Srmacklem#define NFSV4ACE_EXECUTE 0x00000020 461191783Srmacklem#define NFSV4ACE_SEARCH 0x00000020 462191783Srmacklem#define NFSV4ACE_DELETECHILD 0x00000040 463191783Srmacklem#define NFSV4ACE_READATTRIBUTES 0x00000080 464191783Srmacklem#define NFSV4ACE_WRITEATTRIBUTES 0x00000100 465191783Srmacklem#define NFSV4ACE_DELETE 0x00010000 466191783Srmacklem#define NFSV4ACE_READACL 0x00020000 467191783Srmacklem#define NFSV4ACE_WRITEACL 0x00040000 468191783Srmacklem#define NFSV4ACE_WRITEOWNER 0x00080000 469191783Srmacklem#define NFSV4ACE_SYNCHRONIZE 0x00100000 470191783Srmacklem 471191783Srmacklem/* 472191783Srmacklem * Here are the mappings between mode bits and acl mask bits for 473191783Srmacklem * directories and other files. 474191783Srmacklem * (Named attributes have not been included, since named attributes are 475191783Srmacklem * not yet supported.) 476191783Srmacklem * The mailing list seems to indicate that NFSV4ACE_EXECUTE refers to 477191783Srmacklem * searching a directory, although I can't find a statement of that in 478191783Srmacklem * the RFC. 479191783Srmacklem */ 480191783Srmacklem#define NFSV4ACE_ALLFILESMASK (NFSV4ACE_READATTRIBUTES | NFSV4ACE_READACL) 481191783Srmacklem#define NFSV4ACE_OWNERMASK (NFSV4ACE_WRITEATTRIBUTES | NFSV4ACE_WRITEACL) 482191783Srmacklem#define NFSV4ACE_DIRREADMASK NFSV4ACE_LISTDIRECTORY 483191783Srmacklem#define NFSV4ACE_DIREXECUTEMASK NFSV4ACE_EXECUTE 484191783Srmacklem#define NFSV4ACE_DIRWRITEMASK (NFSV4ACE_ADDFILE | \ 485191783Srmacklem NFSV4ACE_ADDSUBDIRECTORY | NFSV4ACE_DELETECHILD) 486191783Srmacklem#define NFSV4ACE_READMASK NFSV4ACE_READDATA 487191783Srmacklem#define NFSV4ACE_WRITEMASK (NFSV4ACE_WRITEDATA | NFSV4ACE_APPENDDATA) 488191783Srmacklem#define NFSV4ACE_EXECUTEMASK NFSV4ACE_EXECUTE 489191783Srmacklem#define NFSV4ACE_ALLFILEBITS (NFSV4ACE_READMASK | NFSV4ACE_WRITEMASK | \ 490191783Srmacklem NFSV4ACE_EXECUTEMASK | NFSV4ACE_SYNCHRONIZE) 491191783Srmacklem#define NFSV4ACE_ALLDIRBITS (NFSV4ACE_DIRREADMASK | \ 492191783Srmacklem NFSV4ACE_DIRWRITEMASK | NFSV4ACE_DIREXECUTEMASK) 493191783Srmacklem#define NFSV4ACE_AUDITMASK 0x0 494191783Srmacklem 495191783Srmacklem/* 496191783Srmacklem * These GENERIC masks are not used and are no longer believed to be useful. 497191783Srmacklem */ 498191783Srmacklem#define NFSV4ACE_GENERICREAD 0x00120081 499191783Srmacklem#define NFSV4ACE_GENERICWRITE 0x00160106 500191783Srmacklem#define NFSV4ACE_GENERICEXECUTE 0x001200a0 501191783Srmacklem 502191783Srmacklem#define NFSSTATEID_PUTALLZERO 0 503191783Srmacklem#define NFSSTATEID_PUTALLONE 1 504191783Srmacklem#define NFSSTATEID_PUTSTATEID 2 505244042Srmacklem#define NFSSTATEID_PUTSEQIDZERO 3 506191783Srmacklem 507191783Srmacklem/* 508191783Srmacklem * Bits for share access and deny. 509191783Srmacklem */ 510191783Srmacklem#define NFSV4OPEN_ACCESSREAD 0x00000001 511191783Srmacklem#define NFSV4OPEN_ACCESSWRITE 0x00000002 512191783Srmacklem#define NFSV4OPEN_ACCESSBOTH 0x00000003 513268115Srmacklem#define NFSV4OPEN_WANTDELEGMASK 0x0000ff00 514268115Srmacklem#define NFSV4OPEN_WANTREADDELEG 0x00000100 515268115Srmacklem#define NFSV4OPEN_WANTWRITEDELEG 0x00000200 516268115Srmacklem#define NFSV4OPEN_WANTANYDELEG 0x00000300 517268115Srmacklem#define NFSV4OPEN_WANTNODELEG 0x00000400 518268115Srmacklem#define NFSV4OPEN_WANTCANCEL 0x00000500 519268115Srmacklem#define NFSV4OPEN_WANTSIGNALDELEG 0x00010000 520268115Srmacklem#define NFSV4OPEN_WANTPUSHDELEG 0x00020000 521191783Srmacklem 522191783Srmacklem#define NFSV4OPEN_DENYNONE 0x00000000 523191783Srmacklem#define NFSV4OPEN_DENYREAD 0x00000001 524191783Srmacklem#define NFSV4OPEN_DENYWRITE 0x00000002 525191783Srmacklem#define NFSV4OPEN_DENYBOTH 0x00000003 526191783Srmacklem 527191783Srmacklem/* 528268115Srmacklem * Delegate_none_ext reply values. 529268115Srmacklem */ 530268115Srmacklem#define NFSV4OPEN_NOTWANTED 0 531268115Srmacklem#define NFSV4OPEN_CONTENTION 1 532268115Srmacklem#define NFSV4OPEN_RESOURCE 2 533268115Srmacklem#define NFSV4OPEN_NOTSUPPFTYPE 3 534268115Srmacklem#define NFSV4OPEN_NOTSUPPWRITEFTYPE 4 535268115Srmacklem#define NFSV4OPEN_NOTSUPPUPGRADE 5 536268115Srmacklem#define NFSV4OPEN_NOTSUPPDOWNGRADE 6 537268115Srmacklem#define NFSV4OPEN_CANCELLED 7 538268115Srmacklem#define NFSV4OPEN_ISDIR 8 539268115Srmacklem 540268115Srmacklem/* 541191783Srmacklem * Open result flags 542268115Srmacklem * (The first four are in the spec. The rest are used internally.) 543191783Srmacklem */ 544191783Srmacklem#define NFSV4OPEN_RESULTCONFIRM 0x00000002 545191783Srmacklem#define NFSV4OPEN_LOCKTYPEPOSIX 0x00000004 546268115Srmacklem#define NFSV4OPEN_PRESERVEUNLINKED 0x00000008 547268115Srmacklem#define NFSV4OPEN_MAYNOTIFYLOCK 0x00000020 548191783Srmacklem#define NFSV4OPEN_RFLAGS \ 549268115Srmacklem (NFSV4OPEN_RESULTCONFIRM | NFSV4OPEN_LOCKTYPEPOSIX | \ 550268115Srmacklem NFSV4OPEN_PRESERVEUNLINKED | NFSV4OPEN_MAYNOTIFYLOCK) 551191783Srmacklem#define NFSV4OPEN_RECALL 0x00010000 552191783Srmacklem#define NFSV4OPEN_READDELEGATE 0x00020000 553191783Srmacklem#define NFSV4OPEN_WRITEDELEGATE 0x00040000 554268115Srmacklem#define NFSV4OPEN_WDRESOURCE 0x00080000 555268115Srmacklem#define NFSV4OPEN_WDCONTENTION 0x00100000 556268115Srmacklem#define NFSV4OPEN_WDNOTWANTED 0x00200000 557337064Srmacklem#define NFSV4OPEN_WDSUPPFTYPE 0x00400000 558191783Srmacklem 559191783Srmacklem/* 560191783Srmacklem * NFS V4 File Handle types 561191783Srmacklem */ 562191783Srmacklem#define NFSV4FHTYPE_PERSISTENT 0x0 563191783Srmacklem#define NFSV4FHTYPE_NOEXPIREWITHOPEN 0x1 564191783Srmacklem#define NFSV4FHTYPE_VOLATILEANY 0x2 565191783Srmacklem#define NFSV4FHTYPE_VOLATILEMIGRATE 0x4 566191783Srmacklem#define NFSV4FHTYPE_VOLATILERENAME 0x8 567191783Srmacklem 568191783Srmacklem/* 569191783Srmacklem * Maximum size of V4 opaque strings. 570191783Srmacklem */ 571191783Srmacklem#define NFSV4_OPAQUELIMIT 1024 572191783Srmacklem 573191783Srmacklem/* 574191783Srmacklem * These are the same for V3 and V4. 575191783Srmacklem */ 576191783Srmacklem#define NFSACCESS_READ 0x01 577191783Srmacklem#define NFSACCESS_LOOKUP 0x02 578191783Srmacklem#define NFSACCESS_MODIFY 0x04 579191783Srmacklem#define NFSACCESS_EXTEND 0x08 580191783Srmacklem#define NFSACCESS_DELETE 0x10 581191783Srmacklem#define NFSACCESS_EXECUTE 0x20 582191783Srmacklem 583191783Srmacklem#define NFSWRITE_UNSTABLE 0 584191783Srmacklem#define NFSWRITE_DATASYNC 1 585191783Srmacklem#define NFSWRITE_FILESYNC 2 586191783Srmacklem 587191783Srmacklem#define NFSCREATE_UNCHECKED 0 588191783Srmacklem#define NFSCREATE_GUARDED 1 589191783Srmacklem#define NFSCREATE_EXCLUSIVE 2 590244042Srmacklem#define NFSCREATE_EXCLUSIVE41 3 591191783Srmacklem 592191783Srmacklem#define NFSV3FSINFO_LINK 0x01 593191783Srmacklem#define NFSV3FSINFO_SYMLINK 0x02 594191783Srmacklem#define NFSV3FSINFO_HOMOGENEOUS 0x08 595191783Srmacklem#define NFSV3FSINFO_CANSETTIME 0x10 596191783Srmacklem 597244042Srmacklem/* Flags for Exchange ID */ 598244042Srmacklem#define NFSV4EXCH_SUPPMOVEDREFER 0x00000001 599244042Srmacklem#define NFSV4EXCH_SUPPMOVEDMIGR 0x00000002 600244042Srmacklem#define NFSV4EXCH_BINDPRINCSTATEID 0x00000100 601244042Srmacklem#define NFSV4EXCH_USENONPNFS 0x00010000 602244042Srmacklem#define NFSV4EXCH_USEPNFSMDS 0x00020000 603244042Srmacklem#define NFSV4EXCH_USEPNFSDS 0x00040000 604244042Srmacklem#define NFSV4EXCH_MASKPNFS 0x00070000 605244042Srmacklem#define NFSV4EXCH_UPDCONFIRMEDRECA 0x40000000 606244042Srmacklem#define NFSV4EXCH_CONFIRMEDR 0x80000000 607244042Srmacklem 608244042Srmacklem/* State Protects */ 609244042Srmacklem#define NFSV4EXCH_SP4NONE 0 610244042Srmacklem#define NFSV4EXCH_SP4MACHCRED 1 611244042Srmacklem#define NFSV4EXCH_SP4SSV 2 612244042Srmacklem 613244042Srmacklem/* Flags for Create Session */ 614244042Srmacklem#define NFSV4CRSESS_PERSIST 0x00000001 615244042Srmacklem#define NFSV4CRSESS_CONNBACKCHAN 0x00000002 616244042Srmacklem#define NFSV4CRSESS_CONNRDMA 0x00000004 617244042Srmacklem 618244042Srmacklem/* Flags for Sequence */ 619244042Srmacklem#define NFSV4SEQ_CBPATHDOWN 0x00000001 620244042Srmacklem#define NFSV4SEQ_CBGSSCONTEXPIRING 0x00000002 621244042Srmacklem#define NFSV4SEQ_CBGSSCONTEXPIRED 0x00000004 622244042Srmacklem#define NFSV4SEQ_EXPIREDALLSTATEREVOKED 0x00000008 623244042Srmacklem#define NFSV4SEQ_EXPIREDSOMESTATEREVOKED 0x00000010 624244042Srmacklem#define NFSV4SEQ_ADMINSTATEREVOKED 0x00000020 625244042Srmacklem#define NFSV4SEQ_RECALLABLESTATEREVOKED 0x00000040 626244042Srmacklem#define NFSV4SEQ_LEASEMOVED 0x00000080 627244042Srmacklem#define NFSV4SEQ_RESTARTRECLAIMNEEDED 0x00000100 628244042Srmacklem#define NFSV4SEQ_CBPATHDOWNSESSION 0x00000200 629244042Srmacklem#define NFSV4SEQ_BACKCHANNELFAULT 0x00000400 630244042Srmacklem#define NFSV4SEQ_DEVIDCHANGED 0x00000800 631244042Srmacklem#define NFSV4SEQ_DEVIDDELETED 0x00001000 632244042Srmacklem 633244042Srmacklem/* Flags for Layout. */ 634244042Srmacklem#define NFSLAYOUTRETURN_FILE 1 635244042Srmacklem#define NFSLAYOUTRETURN_FSID 2 636244042Srmacklem#define NFSLAYOUTRETURN_ALL 3 637244042Srmacklem 638244042Srmacklem#define NFSLAYOUT_NFSV4_1_FILES 0x1 639244042Srmacklem#define NFSLAYOUT_OSD2_OBJECTS 0x2 640244042Srmacklem#define NFSLAYOUT_BLOCK_VOLUME 0x3 641244042Srmacklem 642244042Srmacklem#define NFSLAYOUTIOMODE_READ 1 643244042Srmacklem#define NFSLAYOUTIOMODE_RW 2 644244042Srmacklem#define NFSLAYOUTIOMODE_ANY 3 645244042Srmacklem 646244042Srmacklem/* Flags for Get Device Info. */ 647244042Srmacklem#define NFSDEVICEIDNOTIFY_CHANGEBIT 0x1 648244042Srmacklem#define NFSDEVICEIDNOTIFY_DELETEBIT 0x2 649244042Srmacklem 650244042Srmacklem/* Flags for File Layout. */ 651244042Srmacklem#define NFSFLAYUTIL_DENSE 0x1 652244042Srmacklem#define NFSFLAYUTIL_COMMIT_THRU_MDS 0x2 653244042Srmacklem 654336842Srmacklem/* Enum values for Bind Connection to Session. */ 655336842Srmacklem#define NFSCDFC4_FORE 0x1 656336842Srmacklem#define NFSCDFC4_BACK 0x2 657336842Srmacklem#define NFSCDFC4_FORE_OR_BOTH 0x3 658336842Srmacklem#define NFSCDFC4_BACK_OR_BOTH 0x7 659336842Srmacklem#define NFSCDFS4_FORE 0x1 660336842Srmacklem#define NFSCDFS4_BACK 0x2 661336842Srmacklem#define NFSCDFS4_BOTH 0x3 662336842Srmacklem 663191783Srmacklem/* Conversion macros */ 664191783Srmacklem#define vtonfsv2_mode(t,m) \ 665191783Srmacklem txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : \ 666191783Srmacklem MAKEIMODE((t), (m))) 667191783Srmacklem#define vtonfsv34_mode(m) txdr_unsigned((m) & 07777) 668191783Srmacklem#define nfstov_mode(a) (fxdr_unsigned(u_int16_t, (a))&07777) 669191783Srmacklem#define vtonfsv2_type(a) (((u_int32_t)(a)) >= 9 ? txdr_unsigned(NFNON) : \ 670191783Srmacklem txdr_unsigned(newnfsv2_type[((u_int32_t)(a))])) 671191783Srmacklem#define vtonfsv34_type(a) (((u_int32_t)(a)) >= 9 ? txdr_unsigned(NFNON) : \ 672191783Srmacklem txdr_unsigned(nfsv34_type[((u_int32_t)(a))])) 673191783Srmacklem#define nfsv2tov_type(a) newnv2tov_type[fxdr_unsigned(u_int32_t,(a))&0x7] 674191783Srmacklem#define nfsv34tov_type(a) nv34tov_type[fxdr_unsigned(u_int32_t,(a))&0x7] 675191783Srmacklem#define vtonfs_dtype(a) (((u_int32_t)(a)) >= 9 ? IFTODT(VTTOIF(VNON)) : \ 676191783Srmacklem IFTODT(VTTOIF(a))) 677191783Srmacklem 678191783Srmacklem/* File types */ 679191783Srmacklemtypedef enum { NFNON=0, NFREG=1, NFDIR=2, NFBLK=3, NFCHR=4, NFLNK=5, 680191783Srmacklem NFSOCK=6, NFFIFO=7, NFATTRDIR=8, NFNAMEDATTR=9 } nfstype; 681191783Srmacklem 682191783Srmacklem/* Structs for common parts of the rpc's */ 683191783Srmacklem 684191783Srmacklemstruct nfsv2_time { 685191783Srmacklem u_int32_t nfsv2_sec; 686191783Srmacklem u_int32_t nfsv2_usec; 687191783Srmacklem}; 688191783Srmacklemtypedef struct nfsv2_time nfstime2; 689191783Srmacklem 690191783Srmacklemstruct nfsv3_time { 691191783Srmacklem u_int32_t nfsv3_sec; 692191783Srmacklem u_int32_t nfsv3_nsec; 693191783Srmacklem}; 694191783Srmacklemtypedef struct nfsv3_time nfstime3; 695191783Srmacklem 696191783Srmacklemstruct nfsv4_time { 697191783Srmacklem u_int32_t nfsv4_highsec; 698191783Srmacklem u_int32_t nfsv4_sec; 699191783Srmacklem u_int32_t nfsv4_nsec; 700191783Srmacklem}; 701191783Srmacklemtypedef struct nfsv4_time nfstime4; 702191783Srmacklem 703191783Srmacklem/* 704191783Srmacklem * Quads are defined as arrays of 2 longs to ensure dense packing for the 705191783Srmacklem * protocol and to facilitate xdr conversion. 706191783Srmacklem */ 707191783Srmacklemstruct nfs_uquad { 708191783Srmacklem u_int32_t nfsuquad[2]; 709191783Srmacklem}; 710191783Srmacklemtypedef struct nfs_uquad nfsuint64; 711191783Srmacklem 712191783Srmacklem/* 713191783Srmacklem * Used to convert between two u_longs and a u_quad_t. 714191783Srmacklem */ 715191783Srmacklemunion nfs_quadconvert { 716191783Srmacklem u_int32_t lval[2]; 717191783Srmacklem u_quad_t qval; 718191783Srmacklem}; 719191783Srmacklemtypedef union nfs_quadconvert nfsquad_t; 720191783Srmacklem 721191783Srmacklem/* 722191783Srmacklem * NFS Version 3 special file number. 723191783Srmacklem */ 724191783Srmacklemstruct nfsv3_spec { 725191783Srmacklem u_int32_t specdata1; 726191783Srmacklem u_int32_t specdata2; 727191783Srmacklem}; 728191783Srmacklemtypedef struct nfsv3_spec nfsv3spec; 729191783Srmacklem 730191783Srmacklem/* 731191783Srmacklem * File attributes and setable attributes. These structures cover both 732191783Srmacklem * NFS version 2 and the version 3 protocol. Note that the union is only 733191783Srmacklem * used so that one pointer can refer to both variants. These structures 734191783Srmacklem * go out on the wire and must be densely packed, so no quad data types 735191783Srmacklem * are used. (all fields are longs or u_longs or structures of same) 736191783Srmacklem * NB: You can't do sizeof(struct nfs_fattr), you must use the 737191783Srmacklem * NFSX_FATTR(v3) macro. 738191783Srmacklem */ 739191783Srmacklemstruct nfs_fattr { 740191783Srmacklem u_int32_t fa_type; 741191783Srmacklem u_int32_t fa_mode; 742191783Srmacklem u_int32_t fa_nlink; 743191783Srmacklem u_int32_t fa_uid; 744191783Srmacklem u_int32_t fa_gid; 745191783Srmacklem union { 746191783Srmacklem struct { 747191783Srmacklem u_int32_t nfsv2fa_size; 748191783Srmacklem u_int32_t nfsv2fa_blocksize; 749191783Srmacklem u_int32_t nfsv2fa_rdev; 750191783Srmacklem u_int32_t nfsv2fa_blocks; 751191783Srmacklem u_int32_t nfsv2fa_fsid; 752191783Srmacklem u_int32_t nfsv2fa_fileid; 753191783Srmacklem nfstime2 nfsv2fa_atime; 754191783Srmacklem nfstime2 nfsv2fa_mtime; 755191783Srmacklem nfstime2 nfsv2fa_ctime; 756191783Srmacklem } fa_nfsv2; 757191783Srmacklem struct { 758191783Srmacklem nfsuint64 nfsv3fa_size; 759191783Srmacklem nfsuint64 nfsv3fa_used; 760191783Srmacklem nfsv3spec nfsv3fa_rdev; 761191783Srmacklem nfsuint64 nfsv3fa_fsid; 762191783Srmacklem nfsuint64 nfsv3fa_fileid; 763191783Srmacklem nfstime3 nfsv3fa_atime; 764191783Srmacklem nfstime3 nfsv3fa_mtime; 765191783Srmacklem nfstime3 nfsv3fa_ctime; 766191783Srmacklem } fa_nfsv3; 767191783Srmacklem } fa_un; 768191783Srmacklem}; 769191783Srmacklem 770191783Srmacklem/* and some ugly defines for accessing union components */ 771191783Srmacklem#define fa2_size fa_un.fa_nfsv2.nfsv2fa_size 772191783Srmacklem#define fa2_blocksize fa_un.fa_nfsv2.nfsv2fa_blocksize 773191783Srmacklem#define fa2_rdev fa_un.fa_nfsv2.nfsv2fa_rdev 774191783Srmacklem#define fa2_blocks fa_un.fa_nfsv2.nfsv2fa_blocks 775191783Srmacklem#define fa2_fsid fa_un.fa_nfsv2.nfsv2fa_fsid 776191783Srmacklem#define fa2_fileid fa_un.fa_nfsv2.nfsv2fa_fileid 777191783Srmacklem#define fa2_atime fa_un.fa_nfsv2.nfsv2fa_atime 778191783Srmacklem#define fa2_mtime fa_un.fa_nfsv2.nfsv2fa_mtime 779191783Srmacklem#define fa2_ctime fa_un.fa_nfsv2.nfsv2fa_ctime 780191783Srmacklem#define fa3_size fa_un.fa_nfsv3.nfsv3fa_size 781191783Srmacklem#define fa3_used fa_un.fa_nfsv3.nfsv3fa_used 782191783Srmacklem#define fa3_rdev fa_un.fa_nfsv3.nfsv3fa_rdev 783191783Srmacklem#define fa3_fsid fa_un.fa_nfsv3.nfsv3fa_fsid 784191783Srmacklem#define fa3_fileid fa_un.fa_nfsv3.nfsv3fa_fileid 785191783Srmacklem#define fa3_atime fa_un.fa_nfsv3.nfsv3fa_atime 786191783Srmacklem#define fa3_mtime fa_un.fa_nfsv3.nfsv3fa_mtime 787191783Srmacklem#define fa3_ctime fa_un.fa_nfsv3.nfsv3fa_ctime 788191783Srmacklem 789191783Srmacklemstruct nfsv2_sattr { 790191783Srmacklem u_int32_t sa_mode; 791191783Srmacklem u_int32_t sa_uid; 792191783Srmacklem u_int32_t sa_gid; 793191783Srmacklem u_int32_t sa_size; 794191783Srmacklem nfstime2 sa_atime; 795191783Srmacklem nfstime2 sa_mtime; 796191783Srmacklem}; 797191783Srmacklem 798191783Srmacklem/* 799191783Srmacklem * NFS Version 3 sattr structure for the new node creation case. 800191783Srmacklem */ 801191783Srmacklemstruct nfsv3_sattr { 802191783Srmacklem u_int32_t sa_modetrue; 803191783Srmacklem u_int32_t sa_mode; 804191783Srmacklem u_int32_t sa_uidfalse; 805191783Srmacklem u_int32_t sa_gidfalse; 806191783Srmacklem u_int32_t sa_sizefalse; 807191783Srmacklem u_int32_t sa_atimetype; 808191783Srmacklem nfstime3 sa_atime; 809191783Srmacklem u_int32_t sa_mtimetype; 810191783Srmacklem nfstime3 sa_mtime; 811191783Srmacklem}; 812191783Srmacklem 813191783Srmacklem/* 814191783Srmacklem * The attribute bits used for V4. 815191783Srmacklem * NFSATTRBIT_xxx defines the attribute# (and its bit position) 816191783Srmacklem * NFSATTRBM_xxx is a 32bit mask with the correct bit set within the 817191783Srmacklem * appropriate 32bit word. 818191783Srmacklem * NFSATTRBIT_MAX is one greater than the largest NFSATTRBIT_xxx 819191783Srmacklem */ 820191783Srmacklem#define NFSATTRBIT_SUPPORTEDATTRS 0 821191783Srmacklem#define NFSATTRBIT_TYPE 1 822191783Srmacklem#define NFSATTRBIT_FHEXPIRETYPE 2 823191783Srmacklem#define NFSATTRBIT_CHANGE 3 824191783Srmacklem#define NFSATTRBIT_SIZE 4 825191783Srmacklem#define NFSATTRBIT_LINKSUPPORT 5 826191783Srmacklem#define NFSATTRBIT_SYMLINKSUPPORT 6 827191783Srmacklem#define NFSATTRBIT_NAMEDATTR 7 828191783Srmacklem#define NFSATTRBIT_FSID 8 829191783Srmacklem#define NFSATTRBIT_UNIQUEHANDLES 9 830191783Srmacklem#define NFSATTRBIT_LEASETIME 10 831191783Srmacklem#define NFSATTRBIT_RDATTRERROR 11 832191783Srmacklem#define NFSATTRBIT_ACL 12 833191783Srmacklem#define NFSATTRBIT_ACLSUPPORT 13 834191783Srmacklem#define NFSATTRBIT_ARCHIVE 14 835191783Srmacklem#define NFSATTRBIT_CANSETTIME 15 836191783Srmacklem#define NFSATTRBIT_CASEINSENSITIVE 16 837191783Srmacklem#define NFSATTRBIT_CASEPRESERVING 17 838191783Srmacklem#define NFSATTRBIT_CHOWNRESTRICTED 18 839191783Srmacklem#define NFSATTRBIT_FILEHANDLE 19 840191783Srmacklem#define NFSATTRBIT_FILEID 20 841191783Srmacklem#define NFSATTRBIT_FILESAVAIL 21 842191783Srmacklem#define NFSATTRBIT_FILESFREE 22 843191783Srmacklem#define NFSATTRBIT_FILESTOTAL 23 844191783Srmacklem#define NFSATTRBIT_FSLOCATIONS 24 845191783Srmacklem#define NFSATTRBIT_HIDDEN 25 846191783Srmacklem#define NFSATTRBIT_HOMOGENEOUS 26 847191783Srmacklem#define NFSATTRBIT_MAXFILESIZE 27 848191783Srmacklem#define NFSATTRBIT_MAXLINK 28 849191783Srmacklem#define NFSATTRBIT_MAXNAME 29 850191783Srmacklem#define NFSATTRBIT_MAXREAD 30 851191783Srmacklem#define NFSATTRBIT_MAXWRITE 31 852191783Srmacklem#define NFSATTRBIT_MIMETYPE 32 853191783Srmacklem#define NFSATTRBIT_MODE 33 854191783Srmacklem#define NFSATTRBIT_NOTRUNC 34 855191783Srmacklem#define NFSATTRBIT_NUMLINKS 35 856191783Srmacklem#define NFSATTRBIT_OWNER 36 857191783Srmacklem#define NFSATTRBIT_OWNERGROUP 37 858191783Srmacklem#define NFSATTRBIT_QUOTAHARD 38 859191783Srmacklem#define NFSATTRBIT_QUOTASOFT 39 860191783Srmacklem#define NFSATTRBIT_QUOTAUSED 40 861191783Srmacklem#define NFSATTRBIT_RAWDEV 41 862191783Srmacklem#define NFSATTRBIT_SPACEAVAIL 42 863191783Srmacklem#define NFSATTRBIT_SPACEFREE 43 864191783Srmacklem#define NFSATTRBIT_SPACETOTAL 44 865191783Srmacklem#define NFSATTRBIT_SPACEUSED 45 866191783Srmacklem#define NFSATTRBIT_SYSTEM 46 867191783Srmacklem#define NFSATTRBIT_TIMEACCESS 47 868191783Srmacklem#define NFSATTRBIT_TIMEACCESSSET 48 869191783Srmacklem#define NFSATTRBIT_TIMEBACKUP 49 870191783Srmacklem#define NFSATTRBIT_TIMECREATE 50 871191783Srmacklem#define NFSATTRBIT_TIMEDELTA 51 872191783Srmacklem#define NFSATTRBIT_TIMEMETADATA 52 873191783Srmacklem#define NFSATTRBIT_TIMEMODIFY 53 874191783Srmacklem#define NFSATTRBIT_TIMEMODIFYSET 54 875191783Srmacklem#define NFSATTRBIT_MOUNTEDONFILEID 55 876268115Srmacklem#define NFSATTRBIT_DIRNOTIFDELAY 56 877268115Srmacklem#define NFSATTRBIT_DIRENTNOTIFDELAY 57 878268115Srmacklem#define NFSATTRBIT_DACL 58 879268115Srmacklem#define NFSATTRBIT_SACL 59 880268115Srmacklem#define NFSATTRBIT_CHANGEPOLICY 60 881268115Srmacklem#define NFSATTRBIT_FSSTATUS 61 882268115Srmacklem#define NFSATTRBIT_FSLAYOUTTYPE 62 883268115Srmacklem#define NFSATTRBIT_LAYOUTHINT 63 884268115Srmacklem#define NFSATTRBIT_LAYOUTTYPE 64 885268115Srmacklem#define NFSATTRBIT_LAYOUTBLKSIZE 65 886268115Srmacklem#define NFSATTRBIT_LAYOUTALIGNMENT 66 887268115Srmacklem#define NFSATTRBIT_FSLOCATIONSINFO 67 888268115Srmacklem#define NFSATTRBIT_MDSTHRESHOLD 68 889268115Srmacklem#define NFSATTRBIT_RETENTIONGET 69 890268115Srmacklem#define NFSATTRBIT_RETENTIONSET 70 891268115Srmacklem#define NFSATTRBIT_RETENTEVTGET 71 892268115Srmacklem#define NFSATTRBIT_RETENTEVTSET 72 893268115Srmacklem#define NFSATTRBIT_RETENTIONHOLD 73 894268115Srmacklem#define NFSATTRBIT_MODESETMASKED 74 895268115Srmacklem#define NFSATTRBIT_SUPPATTREXCLCREAT 75 896268115Srmacklem#define NFSATTRBIT_FSCHARSETCAP 76 897191783Srmacklem 898191783Srmacklem#define NFSATTRBM_SUPPORTEDATTRS 0x00000001 899191783Srmacklem#define NFSATTRBM_TYPE 0x00000002 900191783Srmacklem#define NFSATTRBM_FHEXPIRETYPE 0x00000004 901191783Srmacklem#define NFSATTRBM_CHANGE 0x00000008 902191783Srmacklem#define NFSATTRBM_SIZE 0x00000010 903191783Srmacklem#define NFSATTRBM_LINKSUPPORT 0x00000020 904191783Srmacklem#define NFSATTRBM_SYMLINKSUPPORT 0x00000040 905191783Srmacklem#define NFSATTRBM_NAMEDATTR 0x00000080 906191783Srmacklem#define NFSATTRBM_FSID 0x00000100 907191783Srmacklem#define NFSATTRBM_UNIQUEHANDLES 0x00000200 908191783Srmacklem#define NFSATTRBM_LEASETIME 0x00000400 909191783Srmacklem#define NFSATTRBM_RDATTRERROR 0x00000800 910191783Srmacklem#define NFSATTRBM_ACL 0x00001000 911191783Srmacklem#define NFSATTRBM_ACLSUPPORT 0x00002000 912191783Srmacklem#define NFSATTRBM_ARCHIVE 0x00004000 913191783Srmacklem#define NFSATTRBM_CANSETTIME 0x00008000 914191783Srmacklem#define NFSATTRBM_CASEINSENSITIVE 0x00010000 915191783Srmacklem#define NFSATTRBM_CASEPRESERVING 0x00020000 916191783Srmacklem#define NFSATTRBM_CHOWNRESTRICTED 0x00040000 917191783Srmacklem#define NFSATTRBM_FILEHANDLE 0x00080000 918191783Srmacklem#define NFSATTRBM_FILEID 0x00100000 919191783Srmacklem#define NFSATTRBM_FILESAVAIL 0x00200000 920191783Srmacklem#define NFSATTRBM_FILESFREE 0x00400000 921191783Srmacklem#define NFSATTRBM_FILESTOTAL 0x00800000 922191783Srmacklem#define NFSATTRBM_FSLOCATIONS 0x01000000 923191783Srmacklem#define NFSATTRBM_HIDDEN 0x02000000 924191783Srmacklem#define NFSATTRBM_HOMOGENEOUS 0x04000000 925191783Srmacklem#define NFSATTRBM_MAXFILESIZE 0x08000000 926191783Srmacklem#define NFSATTRBM_MAXLINK 0x10000000 927191783Srmacklem#define NFSATTRBM_MAXNAME 0x20000000 928191783Srmacklem#define NFSATTRBM_MAXREAD 0x40000000 929191783Srmacklem#define NFSATTRBM_MAXWRITE 0x80000000 930191783Srmacklem#define NFSATTRBM_MIMETYPE 0x00000001 931191783Srmacklem#define NFSATTRBM_MODE 0x00000002 932191783Srmacklem#define NFSATTRBM_NOTRUNC 0x00000004 933191783Srmacklem#define NFSATTRBM_NUMLINKS 0x00000008 934191783Srmacklem#define NFSATTRBM_OWNER 0x00000010 935191783Srmacklem#define NFSATTRBM_OWNERGROUP 0x00000020 936191783Srmacklem#define NFSATTRBM_QUOTAHARD 0x00000040 937191783Srmacklem#define NFSATTRBM_QUOTASOFT 0x00000080 938191783Srmacklem#define NFSATTRBM_QUOTAUSED 0x00000100 939191783Srmacklem#define NFSATTRBM_RAWDEV 0x00000200 940191783Srmacklem#define NFSATTRBM_SPACEAVAIL 0x00000400 941191783Srmacklem#define NFSATTRBM_SPACEFREE 0x00000800 942191783Srmacklem#define NFSATTRBM_SPACETOTAL 0x00001000 943191783Srmacklem#define NFSATTRBM_SPACEUSED 0x00002000 944191783Srmacklem#define NFSATTRBM_SYSTEM 0x00004000 945191783Srmacklem#define NFSATTRBM_TIMEACCESS 0x00008000 946191783Srmacklem#define NFSATTRBM_TIMEACCESSSET 0x00010000 947191783Srmacklem#define NFSATTRBM_TIMEBACKUP 0x00020000 948191783Srmacklem#define NFSATTRBM_TIMECREATE 0x00040000 949191783Srmacklem#define NFSATTRBM_TIMEDELTA 0x00080000 950191783Srmacklem#define NFSATTRBM_TIMEMETADATA 0x00100000 951191783Srmacklem#define NFSATTRBM_TIMEMODIFY 0x00200000 952191783Srmacklem#define NFSATTRBM_TIMEMODIFYSET 0x00400000 953191783Srmacklem#define NFSATTRBM_MOUNTEDONFILEID 0x00800000 954268115Srmacklem#define NFSATTRBM_DIRNOTIFDELAY 0x01000000 955268115Srmacklem#define NFSATTRBM_DIRENTNOTIFDELAY 0x02000000 956268115Srmacklem#define NFSATTRBM_DACL 0x04000000 957268115Srmacklem#define NFSATTRBM_SACL 0x08000000 958268115Srmacklem#define NFSATTRBM_CHANGEPOLICY 0x10000000 959268115Srmacklem#define NFSATTRBM_FSSTATUS 0x20000000 960268115Srmacklem#define NFSATTRBM_FSLAYOUTTYPE 0x40000000 961268115Srmacklem#define NFSATTRBM_LAYOUTHINT 0x80000000 962268115Srmacklem#define NFSATTRBM_LAYOUTTYPE 0x00000001 963268115Srmacklem#define NFSATTRBM_LAYOUTBLKSIZE 0x00000002 964268115Srmacklem#define NFSATTRBM_LAYOUTALIGNMENT 0x00000004 965268115Srmacklem#define NFSATTRBM_FSLOCATIONSINFO 0x00000008 966268115Srmacklem#define NFSATTRBM_MDSTHRESHOLD 0x00000010 967268115Srmacklem#define NFSATTRBM_RETENTIONGET 0x00000020 968268115Srmacklem#define NFSATTRBM_RETENTIONSET 0x00000040 969268115Srmacklem#define NFSATTRBM_RETENTEVTGET 0x00000080 970268115Srmacklem#define NFSATTRBM_RETENTEVTSET 0x00000100 971268115Srmacklem#define NFSATTRBM_RETENTIONHOLD 0x00000200 972268115Srmacklem#define NFSATTRBM_MODESETMASKED 0x00000400 973268115Srmacklem#define NFSATTRBM_SUPPATTREXCLCREAT 0x00000800 974268115Srmacklem#define NFSATTRBM_FSCHARSETCAP 0x00001000 975191783Srmacklem 976268115Srmacklem#define NFSATTRBIT_MAX 77 977191783Srmacklem 978191783Srmacklem/* 979191783Srmacklem * Sets of attributes that are supported, by words in the bitmap. 980191783Srmacklem */ 981191783Srmacklem/* 982191783Srmacklem * NFSATTRBIT_SUPPORTED - SUPP0 - bits 0<->31 983191783Srmacklem * SUPP1 - bits 32<->63 984268115Srmacklem * SUPP2 - bits 64<->95 985191783Srmacklem */ 986191783Srmacklem#define NFSATTRBIT_SUPP0 \ 987191783Srmacklem (NFSATTRBM_SUPPORTEDATTRS | \ 988191783Srmacklem NFSATTRBM_TYPE | \ 989191783Srmacklem NFSATTRBM_FHEXPIRETYPE | \ 990191783Srmacklem NFSATTRBM_CHANGE | \ 991191783Srmacklem NFSATTRBM_SIZE | \ 992191783Srmacklem NFSATTRBM_LINKSUPPORT | \ 993191783Srmacklem NFSATTRBM_SYMLINKSUPPORT | \ 994191783Srmacklem NFSATTRBM_NAMEDATTR | \ 995191783Srmacklem NFSATTRBM_FSID | \ 996191783Srmacklem NFSATTRBM_UNIQUEHANDLES | \ 997191783Srmacklem NFSATTRBM_LEASETIME | \ 998191783Srmacklem NFSATTRBM_RDATTRERROR | \ 999191783Srmacklem NFSATTRBM_ACL | \ 1000191783Srmacklem NFSATTRBM_ACLSUPPORT | \ 1001191783Srmacklem NFSATTRBM_CANSETTIME | \ 1002191783Srmacklem NFSATTRBM_CASEINSENSITIVE | \ 1003191783Srmacklem NFSATTRBM_CASEPRESERVING | \ 1004191783Srmacklem NFSATTRBM_CHOWNRESTRICTED | \ 1005191783Srmacklem NFSATTRBM_FILEHANDLE | \ 1006191783Srmacklem NFSATTRBM_FILEID | \ 1007191783Srmacklem NFSATTRBM_FILESAVAIL | \ 1008191783Srmacklem NFSATTRBM_FILESFREE | \ 1009191783Srmacklem NFSATTRBM_FILESTOTAL | \ 1010191783Srmacklem NFSATTRBM_FSLOCATIONS | \ 1011191783Srmacklem NFSATTRBM_HOMOGENEOUS | \ 1012191783Srmacklem NFSATTRBM_MAXFILESIZE | \ 1013191783Srmacklem NFSATTRBM_MAXLINK | \ 1014191783Srmacklem NFSATTRBM_MAXNAME | \ 1015191783Srmacklem NFSATTRBM_MAXREAD | \ 1016191783Srmacklem NFSATTRBM_MAXWRITE) 1017191783Srmacklem 1018191783Srmacklem/* 1019191783Srmacklem * NFSATTRBIT_S1 - subset of SUPP1 - OR of the following bits: 1020191783Srmacklem */ 1021191783Srmacklem#define NFSATTRBIT_S1 \ 1022191783Srmacklem (NFSATTRBM_MODE | \ 1023191783Srmacklem NFSATTRBM_NOTRUNC | \ 1024191783Srmacklem NFSATTRBM_NUMLINKS | \ 1025191783Srmacklem NFSATTRBM_OWNER | \ 1026191783Srmacklem NFSATTRBM_OWNERGROUP | \ 1027191783Srmacklem NFSATTRBM_RAWDEV | \ 1028191783Srmacklem NFSATTRBM_SPACEAVAIL | \ 1029191783Srmacklem NFSATTRBM_SPACEFREE | \ 1030191783Srmacklem NFSATTRBM_SPACETOTAL | \ 1031191783Srmacklem NFSATTRBM_SPACEUSED | \ 1032191783Srmacklem NFSATTRBM_TIMEACCESS | \ 1033191783Srmacklem NFSATTRBM_TIMEDELTA | \ 1034191783Srmacklem NFSATTRBM_TIMEMETADATA | \ 1035191783Srmacklem NFSATTRBM_TIMEMODIFY | \ 1036272467Saraujo NFSATTRBM_MOUNTEDONFILEID | \ 1037272467Saraujo NFSATTRBM_QUOTAHARD | \ 1038272467Saraujo NFSATTRBM_QUOTASOFT | \ 1039272467Saraujo NFSATTRBM_QUOTAUSED) 1040191783Srmacklem 1041272467Saraujo 1042191783Srmacklem#ifdef QUOTA 1043191783Srmacklem/* 1044191783Srmacklem * If QUOTA OR in NFSATTRBIT_QUOTAHARD, NFSATTRBIT_QUOTASOFT and 1045191783Srmacklem * NFSATTRBIT_QUOTAUSED. 1046191783Srmacklem */ 1047191783Srmacklem#define NFSATTRBIT_SUPP1 (NFSATTRBIT_S1 | \ 1048191783Srmacklem NFSATTRBM_QUOTAHARD | \ 1049191783Srmacklem NFSATTRBM_QUOTASOFT | \ 1050191783Srmacklem NFSATTRBM_QUOTAUSED) 1051191783Srmacklem#else 1052191783Srmacklem#define NFSATTRBIT_SUPP1 NFSATTRBIT_S1 1053191783Srmacklem#endif 1054191783Srmacklem 1055268115Srmacklem#define NFSATTRBIT_SUPP2 NFSATTRBM_SUPPATTREXCLCREAT 1056268115Srmacklem 1057191783Srmacklem/* 1058347039Srmacklem * These are the set only attributes. 1059191783Srmacklem */ 1060347039Srmacklem#define NFSATTRBIT_SUPPSETONLY1 (NFSATTRBM_TIMEACCESSSET | \ 1061191783Srmacklem NFSATTRBM_TIMEMODIFYSET) 1062347045Srmacklem#define NFSATTRBIT_SUPPSETONLY2 (NFSATTRBM_MODESETMASKED) 1063191783Srmacklem 1064191783Srmacklem/* 1065191783Srmacklem * NFSATTRBIT_SETABLE - SETABLE0 - bits 0<->31 1066191783Srmacklem * SETABLE1 - bits 32<->63 1067268115Srmacklem * SETABLE2 - bits 64<->95 1068191783Srmacklem */ 1069191783Srmacklem#define NFSATTRBIT_SETABLE0 \ 1070191783Srmacklem (NFSATTRBM_SIZE | \ 1071191783Srmacklem NFSATTRBM_ACL) 1072191783Srmacklem#define NFSATTRBIT_SETABLE1 \ 1073191783Srmacklem (NFSATTRBM_MODE | \ 1074191783Srmacklem NFSATTRBM_OWNER | \ 1075191783Srmacklem NFSATTRBM_OWNERGROUP | \ 1076191783Srmacklem NFSATTRBM_TIMEACCESSSET | \ 1077191783Srmacklem NFSATTRBM_TIMEMODIFYSET) 1078347045Srmacklem#define NFSATTRBIT_SETABLE2 \ 1079347045Srmacklem (NFSATTRBM_MODESETMASKED) 1080191783Srmacklem 1081191783Srmacklem/* 1082347039Srmacklem * NFSATTRBIT_NFSV41 - Attributes only supported by NFSv4.1. 1083347039Srmacklem */ 1084347039Srmacklem#define NFSATTRBIT_NFSV41_1 \ 1085347039Srmacklem (NFSATTRBM_FSLAYOUTTYPE) 1086347039Srmacklem#define NFSATTRBIT_NFSV41_2 \ 1087347039Srmacklem (NFSATTRBM_LAYOUTTYPE | \ 1088347039Srmacklem NFSATTRBM_LAYOUTBLKSIZE | \ 1089347039Srmacklem NFSATTRBM_LAYOUTALIGNMENT | \ 1090347039Srmacklem NFSATTRBM_MODESETMASKED | \ 1091347039Srmacklem NFSATTRBM_SUPPATTREXCLCREAT) 1092347039Srmacklem 1093347039Srmacklem/* 1094191783Srmacklem * Set of attributes that the getattr vnode op needs. 1095191783Srmacklem * OR of the following bits. 1096191783Srmacklem * NFSATTRBIT_GETATTR0 - bits 0<->31 1097191783Srmacklem */ 1098191783Srmacklem#define NFSATTRBIT_GETATTR0 \ 1099191783Srmacklem (NFSATTRBM_SUPPORTEDATTRS | \ 1100191783Srmacklem NFSATTRBM_TYPE | \ 1101191783Srmacklem NFSATTRBM_CHANGE | \ 1102191783Srmacklem NFSATTRBM_SIZE | \ 1103191783Srmacklem NFSATTRBM_FSID | \ 1104191783Srmacklem NFSATTRBM_FILEID | \ 1105191783Srmacklem NFSATTRBM_MAXREAD) 1106191783Srmacklem 1107191783Srmacklem/* 1108191783Srmacklem * NFSATTRBIT_GETATTR1 - bits 32<->63 1109191783Srmacklem */ 1110191783Srmacklem#define NFSATTRBIT_GETATTR1 \ 1111191783Srmacklem (NFSATTRBM_MODE | \ 1112191783Srmacklem NFSATTRBM_NUMLINKS | \ 1113191783Srmacklem NFSATTRBM_OWNER | \ 1114191783Srmacklem NFSATTRBM_OWNERGROUP | \ 1115191783Srmacklem NFSATTRBM_RAWDEV | \ 1116191783Srmacklem NFSATTRBM_SPACEUSED | \ 1117191783Srmacklem NFSATTRBM_TIMEACCESS | \ 1118191783Srmacklem NFSATTRBM_TIMEMETADATA | \ 1119191783Srmacklem NFSATTRBM_TIMEMODIFY) 1120191783Srmacklem 1121191783Srmacklem/* 1122268115Srmacklem * NFSATTRBIT_GETATTR2 - bits 64<->95 1123268115Srmacklem */ 1124268115Srmacklem#define NFSATTRBIT_GETATTR2 0 1125268115Srmacklem 1126268115Srmacklem/* 1127191783Srmacklem * Subset of the above that the Write RPC gets. 1128191783Srmacklem * OR of the following bits. 1129191783Srmacklem * NFSATTRBIT_WRITEGETATTR0 - bits 0<->31 1130191783Srmacklem */ 1131191783Srmacklem#define NFSATTRBIT_WRITEGETATTR0 \ 1132223657Srmacklem (NFSATTRBM_SUPPORTEDATTRS | \ 1133223657Srmacklem NFSATTRBM_TYPE | \ 1134223657Srmacklem NFSATTRBM_CHANGE | \ 1135191783Srmacklem NFSATTRBM_SIZE | \ 1136223657Srmacklem NFSATTRBM_FSID | \ 1137223657Srmacklem NFSATTRBM_FILEID | \ 1138223657Srmacklem NFSATTRBM_MAXREAD) 1139191783Srmacklem 1140191783Srmacklem/* 1141191783Srmacklem * NFSATTRBIT_WRITEGETATTR1 - bits 32<->63 1142191783Srmacklem */ 1143191783Srmacklem#define NFSATTRBIT_WRITEGETATTR1 \ 1144223657Srmacklem (NFSATTRBM_MODE | \ 1145223657Srmacklem NFSATTRBM_NUMLINKS | \ 1146223657Srmacklem NFSATTRBM_RAWDEV | \ 1147223657Srmacklem NFSATTRBM_SPACEUSED | \ 1148223657Srmacklem NFSATTRBM_TIMEACCESS | \ 1149223657Srmacklem NFSATTRBM_TIMEMETADATA | \ 1150191783Srmacklem NFSATTRBM_TIMEMODIFY) 1151191783Srmacklem 1152191783Srmacklem/* 1153268115Srmacklem * NFSATTRBIT_WRITEGETATTR2 - bits 64<->95 1154268115Srmacklem */ 1155268115Srmacklem#define NFSATTRBIT_WRITEGETATTR2 0 1156268115Srmacklem 1157268115Srmacklem/* 1158191783Srmacklem * Set of attributes that the wccattr operation op needs. 1159191783Srmacklem * OR of the following bits. 1160191783Srmacklem * NFSATTRBIT_WCCATTR0 - bits 0<->31 1161191783Srmacklem */ 1162191783Srmacklem#define NFSATTRBIT_WCCATTR0 0 1163191783Srmacklem 1164191783Srmacklem/* 1165191783Srmacklem * NFSATTRBIT_WCCATTR1 - bits 32<->63 1166191783Srmacklem */ 1167191783Srmacklem#define NFSATTRBIT_WCCATTR1 \ 1168191783Srmacklem (NFSATTRBM_TIMEMODIFY) 1169191783Srmacklem 1170191783Srmacklem/* 1171268115Srmacklem * NFSATTRBIT_WCCATTR2 - bits 64<->95 1172268115Srmacklem */ 1173268115Srmacklem#define NFSATTRBIT_WCCATTR2 0 1174268115Srmacklem 1175268115Srmacklem/* 1176191783Srmacklem * NFSATTRBIT_CBGETATTR0 - bits 0<->31 1177191783Srmacklem */ 1178191783Srmacklem#define NFSATTRBIT_CBGETATTR0 (NFSATTRBM_CHANGE | NFSATTRBM_SIZE) 1179191783Srmacklem 1180191783Srmacklem/* 1181191783Srmacklem * NFSATTRBIT_CBGETATTR1 - bits 32<->63 1182191783Srmacklem */ 1183191783Srmacklem#define NFSATTRBIT_CBGETATTR1 0x0 1184191783Srmacklem 1185191783Srmacklem/* 1186268115Srmacklem * NFSATTRBIT_CBGETATTR2 - bits 64<->95 1187268115Srmacklem */ 1188268115Srmacklem#define NFSATTRBIT_CBGETATTR2 0x0 1189268115Srmacklem 1190268115Srmacklem/* 1191191783Srmacklem * Sets of attributes that require a VFS_STATFS() call to get the 1192191783Srmacklem * values of. 1193191783Srmacklem * NFSATTRBIT_STATFS0 - bits 0<->31 1194191783Srmacklem */ 1195191783Srmacklem#define NFSATTRBIT_STATFS0 \ 1196191783Srmacklem (NFSATTRBM_LINKSUPPORT | \ 1197191783Srmacklem NFSATTRBM_SYMLINKSUPPORT | \ 1198191783Srmacklem NFSATTRBM_CANSETTIME | \ 1199191783Srmacklem NFSATTRBM_FILESAVAIL | \ 1200191783Srmacklem NFSATTRBM_FILESFREE | \ 1201191783Srmacklem NFSATTRBM_FILESTOTAL | \ 1202191783Srmacklem NFSATTRBM_HOMOGENEOUS | \ 1203191783Srmacklem NFSATTRBM_MAXFILESIZE | \ 1204191783Srmacklem NFSATTRBM_MAXNAME | \ 1205191783Srmacklem NFSATTRBM_MAXREAD | \ 1206191783Srmacklem NFSATTRBM_MAXWRITE) 1207191783Srmacklem 1208191783Srmacklem/* 1209191783Srmacklem * NFSATTRBIT_STATFS1 - bits 32<->63 1210191783Srmacklem */ 1211191783Srmacklem#define NFSATTRBIT_STATFS1 \ 1212191783Srmacklem (NFSATTRBM_QUOTAHARD | \ 1213191783Srmacklem NFSATTRBM_QUOTASOFT | \ 1214191783Srmacklem NFSATTRBM_QUOTAUSED | \ 1215191783Srmacklem NFSATTRBM_SPACEAVAIL | \ 1216191783Srmacklem NFSATTRBM_SPACEFREE | \ 1217191783Srmacklem NFSATTRBM_SPACETOTAL | \ 1218191783Srmacklem NFSATTRBM_SPACEUSED | \ 1219191783Srmacklem NFSATTRBM_TIMEDELTA) 1220191783Srmacklem 1221191783Srmacklem/* 1222268115Srmacklem * NFSATTRBIT_STATFS2 - bits 64<->95 1223268115Srmacklem */ 1224268115Srmacklem#define NFSATTRBIT_STATFS2 0 1225268115Srmacklem 1226268115Srmacklem/* 1227191783Srmacklem * These are the bits that are needed by the nfs_statfs() call. 1228191783Srmacklem * (The regular getattr bits are or'd in so the vnode gets the correct 1229191783Srmacklem * type, etc.) 1230191783Srmacklem * NFSGETATTRBIT_STATFS0 - bits 0<->31 1231191783Srmacklem */ 1232191783Srmacklem#define NFSGETATTRBIT_STATFS0 (NFSATTRBIT_GETATTR0 | \ 1233191783Srmacklem NFSATTRBM_LINKSUPPORT | \ 1234191783Srmacklem NFSATTRBM_SYMLINKSUPPORT | \ 1235191783Srmacklem NFSATTRBM_CANSETTIME | \ 1236191783Srmacklem NFSATTRBM_FILESFREE | \ 1237191783Srmacklem NFSATTRBM_FILESTOTAL | \ 1238191783Srmacklem NFSATTRBM_HOMOGENEOUS | \ 1239191783Srmacklem NFSATTRBM_MAXFILESIZE | \ 1240191783Srmacklem NFSATTRBM_MAXNAME | \ 1241191783Srmacklem NFSATTRBM_MAXREAD | \ 1242191783Srmacklem NFSATTRBM_MAXWRITE) 1243191783Srmacklem 1244191783Srmacklem/* 1245191783Srmacklem * NFSGETATTRBIT_STATFS1 - bits 32<->63 1246191783Srmacklem */ 1247191783Srmacklem#define NFSGETATTRBIT_STATFS1 (NFSATTRBIT_GETATTR1 | \ 1248191783Srmacklem NFSATTRBM_SPACEAVAIL | \ 1249191783Srmacklem NFSATTRBM_SPACEFREE | \ 1250191783Srmacklem NFSATTRBM_SPACETOTAL | \ 1251191783Srmacklem NFSATTRBM_TIMEDELTA) 1252191783Srmacklem 1253191783Srmacklem/* 1254268115Srmacklem * NFSGETATTRBIT_STATFS2 - bits 64<->95 1255268115Srmacklem */ 1256268115Srmacklem#define NFSGETATTRBIT_STATFS2 0 1257268115Srmacklem 1258268115Srmacklem/* 1259191783Srmacklem * Set of attributes for the equivalent of an nfsv3 pathconf rpc. 1260191783Srmacklem * NFSGETATTRBIT_PATHCONF0 - bits 0<->31 1261191783Srmacklem */ 1262191783Srmacklem#define NFSGETATTRBIT_PATHCONF0 (NFSATTRBIT_GETATTR0 | \ 1263191783Srmacklem NFSATTRBM_CASEINSENSITIVE | \ 1264191783Srmacklem NFSATTRBM_CASEPRESERVING | \ 1265191783Srmacklem NFSATTRBM_CHOWNRESTRICTED | \ 1266191783Srmacklem NFSATTRBM_MAXLINK | \ 1267191783Srmacklem NFSATTRBM_MAXNAME) 1268191783Srmacklem 1269191783Srmacklem/* 1270191783Srmacklem * NFSGETATTRBIT_PATHCONF1 - bits 32<->63 1271191783Srmacklem */ 1272191783Srmacklem#define NFSGETATTRBIT_PATHCONF1 (NFSATTRBIT_GETATTR1 | \ 1273191783Srmacklem NFSATTRBM_NOTRUNC) 1274191783Srmacklem 1275191783Srmacklem/* 1276268115Srmacklem * NFSGETATTRBIT_PATHCONF2 - bits 64<->95 1277268115Srmacklem */ 1278268115Srmacklem#define NFSGETATTRBIT_PATHCONF2 0 1279268115Srmacklem 1280268115Srmacklem/* 1281191783Srmacklem * Sets of attributes required by readdir and readdirplus. 1282191783Srmacklem * NFSATTRBIT_READDIRPLUS0 (NFSATTRBIT_GETATTR0 | NFSATTRBIT_FILEHANDLE | 1283191783Srmacklem * NFSATTRBIT_RDATTRERROR) 1284191783Srmacklem */ 1285191783Srmacklem#define NFSATTRBIT_READDIRPLUS0 (NFSATTRBIT_GETATTR0 | NFSATTRBM_FILEHANDLE | \ 1286191783Srmacklem NFSATTRBM_RDATTRERROR) 1287191783Srmacklem#define NFSATTRBIT_READDIRPLUS1 NFSATTRBIT_GETATTR1 1288268115Srmacklem#define NFSATTRBIT_READDIRPLUS2 0 1289191783Srmacklem 1290191783Srmacklem/* 1291191783Srmacklem * Set of attributes supported by Referral vnodes. 1292191783Srmacklem */ 1293191783Srmacklem#define NFSATTRBIT_REFERRAL0 (NFSATTRBM_TYPE | NFSATTRBM_FSID | \ 1294191783Srmacklem NFSATTRBM_RDATTRERROR | NFSATTRBM_FSLOCATIONS) 1295191783Srmacklem#define NFSATTRBIT_REFERRAL1 NFSATTRBM_MOUNTEDONFILEID 1296268115Srmacklem#define NFSATTRBIT_REFERRAL2 0 1297191783Srmacklem 1298191783Srmacklem/* 1299191783Srmacklem * Structure for data handled by the statfs rpc. Since some fields are 1300191783Srmacklem * u_int64_t, this cannot be used for copying data on/off the wire, due 1301191783Srmacklem * to alignment concerns. 1302191783Srmacklem */ 1303191783Srmacklemstruct nfsstatfs { 1304191783Srmacklem union { 1305191783Srmacklem struct { 1306191783Srmacklem u_int32_t nfsv2sf_tsize; 1307191783Srmacklem u_int32_t nfsv2sf_bsize; 1308191783Srmacklem u_int32_t nfsv2sf_blocks; 1309191783Srmacklem u_int32_t nfsv2sf_bfree; 1310191783Srmacklem u_int32_t nfsv2sf_bavail; 1311191783Srmacklem } sf_nfsv2; 1312191783Srmacklem struct { 1313191783Srmacklem u_int64_t nfsv3sf_tbytes; 1314191783Srmacklem u_int64_t nfsv3sf_fbytes; 1315191783Srmacklem u_int64_t nfsv3sf_abytes; 1316191783Srmacklem u_int64_t nfsv3sf_tfiles; 1317191783Srmacklem u_int64_t nfsv3sf_ffiles; 1318191783Srmacklem u_int64_t nfsv3sf_afiles; 1319191783Srmacklem u_int32_t nfsv3sf_invarsec; 1320191783Srmacklem } sf_nfsv3; 1321191783Srmacklem } sf_un; 1322191783Srmacklem}; 1323191783Srmacklem 1324191783Srmacklem#define sf_tsize sf_un.sf_nfsv2.nfsv2sf_tsize 1325191783Srmacklem#define sf_bsize sf_un.sf_nfsv2.nfsv2sf_bsize 1326191783Srmacklem#define sf_blocks sf_un.sf_nfsv2.nfsv2sf_blocks 1327191783Srmacklem#define sf_bfree sf_un.sf_nfsv2.nfsv2sf_bfree 1328191783Srmacklem#define sf_bavail sf_un.sf_nfsv2.nfsv2sf_bavail 1329191783Srmacklem#define sf_tbytes sf_un.sf_nfsv3.nfsv3sf_tbytes 1330191783Srmacklem#define sf_fbytes sf_un.sf_nfsv3.nfsv3sf_fbytes 1331191783Srmacklem#define sf_abytes sf_un.sf_nfsv3.nfsv3sf_abytes 1332191783Srmacklem#define sf_tfiles sf_un.sf_nfsv3.nfsv3sf_tfiles 1333191783Srmacklem#define sf_ffiles sf_un.sf_nfsv3.nfsv3sf_ffiles 1334191783Srmacklem#define sf_afiles sf_un.sf_nfsv3.nfsv3sf_afiles 1335191783Srmacklem#define sf_invarsec sf_un.sf_nfsv3.nfsv3sf_invarsec 1336191783Srmacklem 1337191783Srmacklem/* 1338191783Srmacklem * Now defined using u_int64_t for the 64 bit field(s). 1339191783Srmacklem * (Cannot be used to move data on/off the wire, due to alignment concerns.) 1340191783Srmacklem */ 1341191783Srmacklemstruct nfsfsinfo { 1342191783Srmacklem u_int32_t fs_rtmax; 1343191783Srmacklem u_int32_t fs_rtpref; 1344191783Srmacklem u_int32_t fs_rtmult; 1345191783Srmacklem u_int32_t fs_wtmax; 1346191783Srmacklem u_int32_t fs_wtpref; 1347191783Srmacklem u_int32_t fs_wtmult; 1348191783Srmacklem u_int32_t fs_dtpref; 1349191783Srmacklem u_int64_t fs_maxfilesize; 1350191783Srmacklem struct timespec fs_timedelta; 1351191783Srmacklem u_int32_t fs_properties; 1352191783Srmacklem}; 1353191783Srmacklem 1354191783Srmacklem/* 1355191783Srmacklem * Bits for fs_properties 1356191783Srmacklem */ 1357191783Srmacklem#define NFSV3_FSFLINK 0x1 1358191783Srmacklem#define NFSV3_FSFSYMLINK 0x2 1359191783Srmacklem#define NFSV3_FSFHOMOGENEOUS 0x4 1360191783Srmacklem#define NFSV3_FSFCANSETTIME 0x8 1361191783Srmacklem 1362191783Srmacklem/* 1363191783Srmacklem * Yikes, overload fs_rtmult as fs_maxname for V4. 1364191783Srmacklem */ 1365191783Srmacklem#define fs_maxname fs_rtmult 1366191783Srmacklem 1367191783Srmacklemstruct nfsv3_pathconf { 1368191783Srmacklem u_int32_t pc_linkmax; 1369191783Srmacklem u_int32_t pc_namemax; 1370191783Srmacklem u_int32_t pc_notrunc; 1371191783Srmacklem u_int32_t pc_chownrestricted; 1372191783Srmacklem u_int32_t pc_caseinsensitive; 1373191783Srmacklem u_int32_t pc_casepreserving; 1374191783Srmacklem}; 1375191783Srmacklem 1376191783Srmacklem/* 1377191783Srmacklem * NFS V4 data structures. 1378191783Srmacklem */ 1379191783Srmacklemstruct nfsv4stateid { 1380191783Srmacklem u_int32_t seqid; 1381191783Srmacklem u_int32_t other[NFSX_STATEIDOTHER / NFSX_UNSIGNED]; 1382191783Srmacklem}; 1383191783Srmacklemtypedef struct nfsv4stateid nfsv4stateid_t; 1384191783Srmacklem 1385191783Srmacklem#endif /* _NFS_NFSPROTO_H_ */ 1386