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$ 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_MAXDATA NFS_MAXBSIZE 58191783Srmacklem#define NFS_MAXPATHLEN 1024 59191783Srmacklem#define NFS_MAXNAMLEN 255 60191783Srmacklem#define NFS_MAXPKTHDR 404 61191783Srmacklem#define NFS_MAXPACKET (NFS_MAXDATA + 2048) 62191783Srmacklem#define NFS_MINPACKET 20 63191783Srmacklem#define NFS_FABLKSIZE 512 /* Size in bytes of a block wrt fa_blocks */ 64191783Srmacklem#define NFSV4_MINORVERSION 0 /* V4 Minor version */ 65244042Srmacklem#define NFSV41_MINORVERSION 1 /* V4 Minor version */ 66191783Srmacklem#define NFSV4_CBVERS 1 /* V4 CB Version */ 67244042Srmacklem#define NFSV41_CBVERS 4 /* V4.1 CB Version */ 68191783Srmacklem#define NFSV4_SMALLSTR 50 /* Strings small enough for stack */ 69191783Srmacklem 70191783Srmacklem/* Stat numbers for rpc returns (version 2, 3 and 4) */ 71221462Srmacklem/* 72221462Srmacklem * These numbers are hard-wired in the RFCs, so they can't be changed. 73221462Srmacklem * The code currently assumes that the ones < 10000 are the same as 74221462Srmacklem * sys/errno.h and that sys/errno.h will never go as high as 10000. 75221462Srmacklem * If the value in sys/errno.h of any entry listed below is changed, 76221462Srmacklem * the NFS code must be modified to do the mapping between them. 77221462Srmacklem * (You can ignore NFSERR_WFLUSH, since it is never actually used.) 78221462Srmacklem */ 79191783Srmacklem#define NFSERR_OK 0 80191783Srmacklem#define NFSERR_PERM 1 81191783Srmacklem#define NFSERR_NOENT 2 82191783Srmacklem#define NFSERR_IO 5 83191783Srmacklem#define NFSERR_NXIO 6 84191783Srmacklem#define NFSERR_ACCES 13 85191783Srmacklem#define NFSERR_EXIST 17 86191783Srmacklem#define NFSERR_XDEV 18 /* Version 3, 4 only */ 87191783Srmacklem#define NFSERR_NODEV 19 88191783Srmacklem#define NFSERR_NOTDIR 20 89191783Srmacklem#define NFSERR_ISDIR 21 90191783Srmacklem#define NFSERR_INVAL 22 /* Version 3, 4 only */ 91191783Srmacklem#define NFSERR_FBIG 27 92191783Srmacklem#define NFSERR_NOSPC 28 93191783Srmacklem#define NFSERR_ROFS 30 94191783Srmacklem#define NFSERR_MLINK 31 /* Version 3, 4 only */ 95191783Srmacklem#define NFSERR_NAMETOL 63 96191783Srmacklem#define NFSERR_NOTEMPTY 66 97191783Srmacklem#define NFSERR_DQUOT 69 98191783Srmacklem#define NFSERR_STALE 70 99191783Srmacklem#define NFSERR_REMOTE 71 /* Version 3 only */ 100191783Srmacklem#define NFSERR_WFLUSH 99 /* Version 2 only */ 101191783Srmacklem#define NFSERR_BADHANDLE 10001 /* These are Version 3, 4 only */ 102191783Srmacklem#define NFSERR_NOT_SYNC 10002 /* Version 3 Only */ 103191783Srmacklem#define NFSERR_BAD_COOKIE 10003 104191783Srmacklem#define NFSERR_NOTSUPP 10004 105191783Srmacklem#define NFSERR_TOOSMALL 10005 106191783Srmacklem#define NFSERR_SERVERFAULT 10006 107191783Srmacklem#define NFSERR_BADTYPE 10007 108191783Srmacklem#define NFSERR_DELAY 10008 /* Called NFSERR_JUKEBOX for V3 */ 109191783Srmacklem#define NFSERR_SAME 10009 /* These are Version 4 only */ 110191783Srmacklem#define NFSERR_DENIED 10010 111191783Srmacklem#define NFSERR_EXPIRED 10011 112191783Srmacklem#define NFSERR_LOCKED 10012 113191783Srmacklem#define NFSERR_GRACE 10013 114191783Srmacklem#define NFSERR_FHEXPIRED 10014 115191783Srmacklem#define NFSERR_SHAREDENIED 10015 116191783Srmacklem#define NFSERR_WRONGSEC 10016 117191783Srmacklem#define NFSERR_CLIDINUSE 10017 118191783Srmacklem#define NFSERR_RESOURCE 10018 119191783Srmacklem#define NFSERR_MOVED 10019 120191783Srmacklem#define NFSERR_NOFILEHANDLE 10020 121191783Srmacklem#define NFSERR_MINORVERMISMATCH 10021 122191783Srmacklem#define NFSERR_STALECLIENTID 10022 123191783Srmacklem#define NFSERR_STALESTATEID 10023 124191783Srmacklem#define NFSERR_OLDSTATEID 10024 125191783Srmacklem#define NFSERR_BADSTATEID 10025 126191783Srmacklem#define NFSERR_BADSEQID 10026 127191783Srmacklem#define NFSERR_NOTSAME 10027 128191783Srmacklem#define NFSERR_LOCKRANGE 10028 129191783Srmacklem#define NFSERR_SYMLINK 10029 130191783Srmacklem#define NFSERR_RESTOREFH 10030 131191783Srmacklem#define NFSERR_LEASEMOVED 10031 132191783Srmacklem#define NFSERR_ATTRNOTSUPP 10032 133191783Srmacklem#define NFSERR_NOGRACE 10033 134191783Srmacklem#define NFSERR_RECLAIMBAD 10034 135191783Srmacklem#define NFSERR_RECLAIMCONFLICT 10035 136191783Srmacklem#define NFSERR_BADXDR 10036 137191783Srmacklem#define NFSERR_LOCKSHELD 10037 138191783Srmacklem#define NFSERR_OPENMODE 10038 139191783Srmacklem#define NFSERR_BADOWNER 10039 140191783Srmacklem#define NFSERR_BADCHAR 10040 141191783Srmacklem#define NFSERR_BADNAME 10041 142191783Srmacklem#define NFSERR_BADRANGE 10042 143191783Srmacklem#define NFSERR_LOCKNOTSUPP 10043 144191783Srmacklem#define NFSERR_OPILLEGAL 10044 145191783Srmacklem#define NFSERR_DEADLOCK 10045 146191783Srmacklem#define NFSERR_FILEOPEN 10046 147191783Srmacklem#define NFSERR_ADMINREVOKED 10047 148191783Srmacklem#define NFSERR_CBPATHDOWN 10048 149191783Srmacklem 150244042Srmacklem/* NFSv4.1 specific errors. */ 151244042Srmacklem#define NFSERR_BADIOMODE 10049 152244042Srmacklem#define NFSERR_BADLAYOUT 10050 153244042Srmacklem#define NFSERR_BADSESSIONDIGEST 10051 154244042Srmacklem#define NFSERR_BADSESSION 10052 155244042Srmacklem#define NFSERR_BADSLOT 10053 156244042Srmacklem#define NFSERR_COMPLETEALREADY 10054 157244042Srmacklem#define NFSERR_NOTBNDTOSESS 10055 158244042Srmacklem#define NFSERR_DELEGALREADYWANT 10056 159244042Srmacklem#define NFSERR_BACKCHANBUSY 10057 160244042Srmacklem#define NFSERR_LAYOUTTRYLATER 10058 161244042Srmacklem#define NFSERR_LAYOUTUNAVAIL 10059 162244042Srmacklem#define NFSERR_NOMATCHLAYOUT 10060 163244042Srmacklem#define NFSERR_RECALLCONFLICT 10061 164244042Srmacklem#define NFSERR_UNKNLAYOUTTYPE 10062 165244042Srmacklem#define NFSERR_SEQMISORDERED 10063 166244042Srmacklem#define NFSERR_SEQUENCEPOS 10064 167244042Srmacklem#define NFSERR_REQTOOBIG 10065 168244042Srmacklem#define NFSERR_REPTOOBIG 10066 169244042Srmacklem#define NFSERR_REPTOOBIGTOCACHE 10067 170244042Srmacklem#define NFSERR_RETRYUNCACHEDREP 10068 171244042Srmacklem#define NFSERR_UNSAFECOMPOUND 10069 172244042Srmacklem#define NFSERR_TOOMANYOPS 10070 173244042Srmacklem#define NFSERR_OPNOTINSESS 10071 174244042Srmacklem#define NFSERR_HASHALGUNSUPP 10072 175244042Srmacklem#define NFSERR_CLIENTIDBUSY 10074 176244042Srmacklem#define NFSERR_PNFSIOHOLE 10075 177244042Srmacklem#define NFSERR_SEQFALSERETRY 10076 178244042Srmacklem#define NFSERR_BADHIGHSLOT 10077 179244042Srmacklem#define NFSERR_DEADSESSION 10078 180244042Srmacklem#define NFSERR_ENCRALGUNSUPP 10079 181244042Srmacklem#define NFSERR_PNFSNOLAYOUT 10080 182244042Srmacklem#define NFSERR_NOTONLYOP 10081 183244042Srmacklem#define NFSERR_WRONGCRED 10082 184244042Srmacklem#define NFSERR_WRONGTYPE 10083 185244042Srmacklem#define NFSERR_DIRDELEGUNAVAIL 10084 186244042Srmacklem#define NFSERR_REJECTDELEG 10085 187244042Srmacklem#define NFSERR_RETURNCONFLICT 10086 188244042Srmacklem#define NFSERR_DELEGREVOKED 10087 189244042Srmacklem 190191783Srmacklem#define NFSERR_STALEWRITEVERF 30001 /* Fake return for nfs_commit() */ 191191783Srmacklem#define NFSERR_DONTREPLY 30003 /* Don't process request */ 192191783Srmacklem#define NFSERR_RETVOID 30004 /* Return void, not error */ 193191783Srmacklem#define NFSERR_REPLYFROMCACHE 30005 /* Reply from recent request cache */ 194191783Srmacklem#define NFSERR_STALEDONTRECOVER 30006 /* Don't initiate recovery */ 195191783Srmacklem 196191783Srmacklem#define NFSERR_RPCERR 0x40000000 /* Mark an RPC layer error */ 197191783Srmacklem#define NFSERR_AUTHERR 0x80000000 /* Mark an authentication error */ 198191783Srmacklem 199191783Srmacklem#define NFSERR_RPCMISMATCH (NFSERR_RPCERR | RPC_MISMATCH) 200191783Srmacklem#define NFSERR_PROGUNAVAIL (NFSERR_RPCERR | RPC_PROGUNAVAIL) 201191783Srmacklem#define NFSERR_PROGMISMATCH (NFSERR_RPCERR | RPC_PROGMISMATCH) 202191783Srmacklem#define NFSERR_PROGNOTV4 (NFSERR_RPCERR | 0xffff) 203191783Srmacklem#define NFSERR_PROCUNAVAIL (NFSERR_RPCERR | RPC_PROCUNAVAIL) 204191783Srmacklem#define NFSERR_GARBAGE (NFSERR_RPCERR | RPC_GARBAGE) 205191783Srmacklem 206191783Srmacklem/* Sizes in bytes of various nfs rpc components */ 207191783Srmacklem#define NFSX_UNSIGNED 4 208191783Srmacklem#define NFSX_HYPER (2 * NFSX_UNSIGNED) 209191783Srmacklem 210191783Srmacklem/* specific to NFS Version 2 */ 211191783Srmacklem#define NFSX_V2FH 32 212191783Srmacklem#define NFSX_V2FATTR 68 213191783Srmacklem#define NFSX_V2SATTR 32 214191783Srmacklem#define NFSX_V2COOKIE 4 215191783Srmacklem#define NFSX_V2STATFS 20 216191783Srmacklem 217191783Srmacklem/* specific to NFS Version 3 */ 218191783Srmacklem#define NFSX_V3FHMAX 64 /* max. allowed by protocol */ 219191783Srmacklem#define NFSX_V3FATTR 84 220191783Srmacklem#define NFSX_V3SATTR 60 /* max. all fields filled in */ 221191783Srmacklem#define NFSX_V3SRVSATTR (sizeof (struct nfsv3_sattr)) 222191783Srmacklem#define NFSX_V3POSTOPATTR (NFSX_V3FATTR + NFSX_UNSIGNED) 223191783Srmacklem#define NFSX_V3WCCDATA (NFSX_V3POSTOPATTR + 8 * NFSX_UNSIGNED) 224191783Srmacklem#define NFSX_V3STATFS 52 225191783Srmacklem#define NFSX_V3FSINFO 48 226191783Srmacklem#define NFSX_V3PATHCONF 24 227191783Srmacklem 228191783Srmacklem/* specific to NFS Version 4 */ 229191783Srmacklem#define NFSX_V4FHMAX 128 230191783Srmacklem#define NFSX_V4FSID (2 * NFSX_HYPER) 231191783Srmacklem#define NFSX_V4SPECDATA (2 * NFSX_UNSIGNED) 232191783Srmacklem#define NFSX_V4TIME (NFSX_HYPER + NFSX_UNSIGNED) 233191783Srmacklem#define NFSX_V4SETTIME (NFSX_UNSIGNED + NFSX_V4TIME) 234244042Srmacklem#define NFSX_V4SESSIONID 16 235244042Srmacklem#define NFSX_V4DEVICEID 16 236191783Srmacklem 237191783Srmacklem/* sizes common to multiple NFS versions */ 238191783Srmacklem#define NFSX_FHMAX (NFSX_V4FHMAX) 239191783Srmacklem#define NFSX_MYFH (sizeof (fhandle_t)) /* size this server uses */ 240191783Srmacklem#define NFSX_VERF 8 241191783Srmacklem#define NFSX_STATEIDOTHER 12 242191783Srmacklem#define NFSX_STATEID (NFSX_UNSIGNED + NFSX_STATEIDOTHER) 243191783Srmacklem#define NFSX_GSSH 12 244191783Srmacklem 245191783Srmacklem/* variants for multiple versions */ 246191783Srmacklem#define NFSX_STATFS(v3) ((v3) ? NFSX_V3STATFS : NFSX_V2STATFS) 247191783Srmacklem 248191783Srmacklem/* nfs rpc procedure numbers (before version mapping) */ 249191783Srmacklem#define NFSPROC_NULL 0 250191783Srmacklem#define NFSPROC_GETATTR 1 251191783Srmacklem#define NFSPROC_SETATTR 2 252191783Srmacklem#define NFSPROC_LOOKUP 3 253191783Srmacklem#define NFSPROC_ACCESS 4 254191783Srmacklem#define NFSPROC_READLINK 5 255191783Srmacklem#define NFSPROC_READ 6 256191783Srmacklem#define NFSPROC_WRITE 7 257191783Srmacklem#define NFSPROC_CREATE 8 258191783Srmacklem#define NFSPROC_MKDIR 9 259191783Srmacklem#define NFSPROC_SYMLINK 10 260191783Srmacklem#define NFSPROC_MKNOD 11 261191783Srmacklem#define NFSPROC_REMOVE 12 262191783Srmacklem#define NFSPROC_RMDIR 13 263191783Srmacklem#define NFSPROC_RENAME 14 264191783Srmacklem#define NFSPROC_LINK 15 265191783Srmacklem#define NFSPROC_READDIR 16 266191783Srmacklem#define NFSPROC_READDIRPLUS 17 267191783Srmacklem#define NFSPROC_FSSTAT 18 268191783Srmacklem#define NFSPROC_FSINFO 19 269191783Srmacklem#define NFSPROC_PATHCONF 20 270191783Srmacklem#define NFSPROC_COMMIT 21 271191783Srmacklem 272191783Srmacklem/* 273223280Srmacklem * The lower numbers -> 21 are used by NFSv2 and v3. These define higher 274223280Srmacklem * numbers used by NFSv4. 275223280Srmacklem * NFS_V3NPROCS is one greater than the last V3 op and NFS_NPROCS is 276223280Srmacklem * one greater than the last number. 277223280Srmacklem */ 278223280Srmacklem#ifndef NFS_V3NPROCS 279223280Srmacklem#define NFS_V3NPROCS 22 280223280Srmacklem 281223280Srmacklem#define NFSPROC_LOOKUPP 22 282223280Srmacklem#define NFSPROC_SETCLIENTID 23 283223280Srmacklem#define NFSPROC_SETCLIENTIDCFRM 24 284223280Srmacklem#define NFSPROC_LOCK 25 285223280Srmacklem#define NFSPROC_LOCKU 26 286223280Srmacklem#define NFSPROC_OPEN 27 287223280Srmacklem#define NFSPROC_CLOSE 28 288223280Srmacklem#define NFSPROC_OPENCONFIRM 29 289223280Srmacklem#define NFSPROC_LOCKT 30 290223280Srmacklem#define NFSPROC_OPENDOWNGRADE 31 291223280Srmacklem#define NFSPROC_RENEW 32 292223280Srmacklem#define NFSPROC_PUTROOTFH 33 293223280Srmacklem#define NFSPROC_RELEASELCKOWN 34 294223280Srmacklem#define NFSPROC_DELEGRETURN 35 295223280Srmacklem#define NFSPROC_RETDELEGREMOVE 36 296223280Srmacklem#define NFSPROC_RETDELEGRENAME1 37 297223280Srmacklem#define NFSPROC_RETDELEGRENAME2 38 298223280Srmacklem#define NFSPROC_GETACL 39 299223280Srmacklem#define NFSPROC_SETACL 40 300223280Srmacklem 301223280Srmacklem/* 302223280Srmacklem * Must be defined as one higher than the last Proc# above. 303223280Srmacklem */ 304223280Srmacklem#define NFSV4_NPROCS 41 305244042Srmacklem 306244042Srmacklem/* Additional procedures for NFSv4.1. */ 307244042Srmacklem#define NFSPROC_EXCHANGEID 41 308244042Srmacklem#define NFSPROC_CREATESESSION 42 309244042Srmacklem#define NFSPROC_DESTROYSESSION 43 310244042Srmacklem#define NFSPROC_DESTROYCLIENT 44 311244042Srmacklem#define NFSPROC_FREESTATEID 45 312244042Srmacklem#define NFSPROC_LAYOUTGET 46 313244042Srmacklem#define NFSPROC_GETDEVICEINFO 47 314244042Srmacklem#define NFSPROC_LAYOUTCOMMIT 48 315244042Srmacklem#define NFSPROC_LAYOUTRETURN 49 316244042Srmacklem#define NFSPROC_RECLAIMCOMPL 50 317244042Srmacklem#define NFSPROC_WRITEDS 51 318244042Srmacklem#define NFSPROC_READDS 52 319244042Srmacklem#define NFSPROC_COMMITDS 53 320244042Srmacklem 321244042Srmacklem/* 322244042Srmacklem * Must be defined as one higher than the last NFSv4.1 Proc# above. 323244042Srmacklem */ 324244042Srmacklem#define NFSV41_NPROCS 54 325244042Srmacklem 326223280Srmacklem#endif /* NFS_V3NPROCS */ 327223280Srmacklem 328223280Srmacklem/* 329223280Srmacklem * Define NFS_NPROCS as NFSV4_NPROCS for the experimental kernel code. 330223280Srmacklem */ 331223280Srmacklem#ifndef NFS_NPROCS 332223280Srmacklem#define NFS_NPROCS NFSV4_NPROCS 333223280Srmacklem#endif 334223280Srmacklem 335223280Srmacklem/* 336191783Srmacklem * NFSPROC_NOOP is a fake op# that can't be the same as any V2/3/4 Procedure 337244042Srmacklem * or Operation#. Since the NFS V4 Op #s go higher, use NFSV41_NOPS, which 338191783Srmacklem * is one greater than the highest Op#. 339191783Srmacklem */ 340244042Srmacklem#define NFSPROC_NOOP NFSV41_NOPS 341191783Srmacklem 342191783Srmacklem/* Actual Version 2 procedure numbers */ 343191783Srmacklem#define NFSV2PROC_NULL 0 344191783Srmacklem#define NFSV2PROC_GETATTR 1 345191783Srmacklem#define NFSV2PROC_SETATTR 2 346191783Srmacklem#define NFSV2PROC_NOOP 3 347191783Srmacklem#define NFSV2PROC_ROOT NFSV2PROC_NOOP /* Obsolete */ 348191783Srmacklem#define NFSV2PROC_LOOKUP 4 349191783Srmacklem#define NFSV2PROC_READLINK 5 350191783Srmacklem#define NFSV2PROC_READ 6 351191783Srmacklem#define NFSV2PROC_WRITECACHE NFSV2PROC_NOOP /* Obsolete */ 352191783Srmacklem#define NFSV2PROC_WRITE 8 353191783Srmacklem#define NFSV2PROC_CREATE 9 354191783Srmacklem#define NFSV2PROC_REMOVE 10 355191783Srmacklem#define NFSV2PROC_RENAME 11 356191783Srmacklem#define NFSV2PROC_LINK 12 357191783Srmacklem#define NFSV2PROC_SYMLINK 13 358191783Srmacklem#define NFSV2PROC_MKDIR 14 359191783Srmacklem#define NFSV2PROC_RMDIR 15 360191783Srmacklem#define NFSV2PROC_READDIR 16 361191783Srmacklem#define NFSV2PROC_STATFS 17 362191783Srmacklem 363191783Srmacklem/* 364192152Srmacklem * V4 Procedure numbers 365191783Srmacklem */ 366191783Srmacklem#define NFSV4PROC_COMPOUND 1 367191783Srmacklem#define NFSV4PROC_CBNULL 0 368191783Srmacklem#define NFSV4PROC_CBCOMPOUND 1 369191783Srmacklem 370191783Srmacklem/* 371191783Srmacklem * Constants used by the Version 3 and 4 protocols for various RPCs 372191783Srmacklem */ 373191783Srmacklem#define NFSV3SATTRTIME_DONTCHANGE 0 374191783Srmacklem#define NFSV3SATTRTIME_TOSERVER 1 375191783Srmacklem#define NFSV3SATTRTIME_TOCLIENT 2 376191783Srmacklem 377191783Srmacklem#define NFSV4SATTRTIME_TOSERVER 0 378191783Srmacklem#define NFSV4SATTRTIME_TOCLIENT 1 379191783Srmacklem 380191783Srmacklem#define NFSV4LOCKT_READ 1 381191783Srmacklem#define NFSV4LOCKT_WRITE 2 382191783Srmacklem#define NFSV4LOCKT_READW 3 383191783Srmacklem#define NFSV4LOCKT_WRITEW 4 384191783Srmacklem#define NFSV4LOCKT_RELEASE 5 385191783Srmacklem 386191783Srmacklem#define NFSV4OPEN_NOCREATE 0 387191783Srmacklem#define NFSV4OPEN_CREATE 1 388191783Srmacklem#define NFSV4OPEN_CLAIMNULL 0 389191783Srmacklem#define NFSV4OPEN_CLAIMPREVIOUS 1 390191783Srmacklem#define NFSV4OPEN_CLAIMDELEGATECUR 2 391191783Srmacklem#define NFSV4OPEN_CLAIMDELEGATEPREV 3 392191783Srmacklem#define NFSV4OPEN_DELEGATENONE 0 393191783Srmacklem#define NFSV4OPEN_DELEGATEREAD 1 394191783Srmacklem#define NFSV4OPEN_DELEGATEWRITE 2 395191783Srmacklem#define NFSV4OPEN_LIMITSIZE 1 396191783Srmacklem#define NFSV4OPEN_LIMITBLOCKS 2 397191783Srmacklem 398191783Srmacklem/* 399191783Srmacklem * Nfs V4 ACE stuff 400191783Srmacklem */ 401191783Srmacklem#define NFSV4ACE_ALLOWEDTYPE 0x00000000 402191783Srmacklem#define NFSV4ACE_DENIEDTYPE 0x00000001 403191783Srmacklem#define NFSV4ACE_AUDITTYPE 0x00000002 404191783Srmacklem#define NFSV4ACE_ALARMTYPE 0x00000003 405191783Srmacklem 406191783Srmacklem#define NFSV4ACE_SUPALLOWED 0x00000001 407191783Srmacklem#define NFSV4ACE_SUPDENIED 0x00000002 408191783Srmacklem#define NFSV4ACE_SUPAUDIT 0x00000004 409191783Srmacklem#define NFSV4ACE_SUPALARM 0x00000008 410191783Srmacklem 411191783Srmacklem#define NFSV4ACE_SUPTYPES (NFSV4ACE_SUPALLOWED | NFSV4ACE_SUPDENIED) 412191783Srmacklem 413191783Srmacklem#define NFSV4ACE_FILEINHERIT 0x00000001 414191783Srmacklem#define NFSV4ACE_DIRECTORYINHERIT 0x00000002 415191783Srmacklem#define NFSV4ACE_NOPROPAGATEINHERIT 0x00000004 416191783Srmacklem#define NFSV4ACE_INHERITONLY 0x00000008 417191783Srmacklem#define NFSV4ACE_SUCCESSFULACCESS 0x00000010 418191783Srmacklem#define NFSV4ACE_FAILEDACCESS 0x00000020 419191783Srmacklem#define NFSV4ACE_IDENTIFIERGROUP 0x00000040 420191783Srmacklem 421191783Srmacklem#define NFSV4ACE_READDATA 0x00000001 422191783Srmacklem#define NFSV4ACE_LISTDIRECTORY 0x00000001 423191783Srmacklem#define NFSV4ACE_WRITEDATA 0x00000002 424191783Srmacklem#define NFSV4ACE_ADDFILE 0x00000002 425191783Srmacklem#define NFSV4ACE_APPENDDATA 0x00000004 426191783Srmacklem#define NFSV4ACE_ADDSUBDIRECTORY 0x00000004 427191783Srmacklem#define NFSV4ACE_READNAMEDATTR 0x00000008 428191783Srmacklem#define NFSV4ACE_WRITENAMEDATTR 0x00000010 429191783Srmacklem#define NFSV4ACE_EXECUTE 0x00000020 430191783Srmacklem#define NFSV4ACE_SEARCH 0x00000020 431191783Srmacklem#define NFSV4ACE_DELETECHILD 0x00000040 432191783Srmacklem#define NFSV4ACE_READATTRIBUTES 0x00000080 433191783Srmacklem#define NFSV4ACE_WRITEATTRIBUTES 0x00000100 434191783Srmacklem#define NFSV4ACE_DELETE 0x00010000 435191783Srmacklem#define NFSV4ACE_READACL 0x00020000 436191783Srmacklem#define NFSV4ACE_WRITEACL 0x00040000 437191783Srmacklem#define NFSV4ACE_WRITEOWNER 0x00080000 438191783Srmacklem#define NFSV4ACE_SYNCHRONIZE 0x00100000 439191783Srmacklem 440191783Srmacklem/* 441191783Srmacklem * Here are the mappings between mode bits and acl mask bits for 442191783Srmacklem * directories and other files. 443191783Srmacklem * (Named attributes have not been included, since named attributes are 444191783Srmacklem * not yet supported.) 445191783Srmacklem * The mailing list seems to indicate that NFSV4ACE_EXECUTE refers to 446191783Srmacklem * searching a directory, although I can't find a statement of that in 447191783Srmacklem * the RFC. 448191783Srmacklem */ 449191783Srmacklem#define NFSV4ACE_ALLFILESMASK (NFSV4ACE_READATTRIBUTES | NFSV4ACE_READACL) 450191783Srmacklem#define NFSV4ACE_OWNERMASK (NFSV4ACE_WRITEATTRIBUTES | NFSV4ACE_WRITEACL) 451191783Srmacklem#define NFSV4ACE_DIRREADMASK NFSV4ACE_LISTDIRECTORY 452191783Srmacklem#define NFSV4ACE_DIREXECUTEMASK NFSV4ACE_EXECUTE 453191783Srmacklem#define NFSV4ACE_DIRWRITEMASK (NFSV4ACE_ADDFILE | \ 454191783Srmacklem NFSV4ACE_ADDSUBDIRECTORY | NFSV4ACE_DELETECHILD) 455191783Srmacklem#define NFSV4ACE_READMASK NFSV4ACE_READDATA 456191783Srmacklem#define NFSV4ACE_WRITEMASK (NFSV4ACE_WRITEDATA | NFSV4ACE_APPENDDATA) 457191783Srmacklem#define NFSV4ACE_EXECUTEMASK NFSV4ACE_EXECUTE 458191783Srmacklem#define NFSV4ACE_ALLFILEBITS (NFSV4ACE_READMASK | NFSV4ACE_WRITEMASK | \ 459191783Srmacklem NFSV4ACE_EXECUTEMASK | NFSV4ACE_SYNCHRONIZE) 460191783Srmacklem#define NFSV4ACE_ALLDIRBITS (NFSV4ACE_DIRREADMASK | \ 461191783Srmacklem NFSV4ACE_DIRWRITEMASK | NFSV4ACE_DIREXECUTEMASK) 462191783Srmacklem#define NFSV4ACE_AUDITMASK 0x0 463191783Srmacklem 464191783Srmacklem/* 465191783Srmacklem * These GENERIC masks are not used and are no longer believed to be useful. 466191783Srmacklem */ 467191783Srmacklem#define NFSV4ACE_GENERICREAD 0x00120081 468191783Srmacklem#define NFSV4ACE_GENERICWRITE 0x00160106 469191783Srmacklem#define NFSV4ACE_GENERICEXECUTE 0x001200a0 470191783Srmacklem 471191783Srmacklem#define NFSSTATEID_PUTALLZERO 0 472191783Srmacklem#define NFSSTATEID_PUTALLONE 1 473191783Srmacklem#define NFSSTATEID_PUTSTATEID 2 474244042Srmacklem#define NFSSTATEID_PUTSEQIDZERO 3 475191783Srmacklem 476191783Srmacklem/* 477191783Srmacklem * Bits for share access and deny. 478191783Srmacklem */ 479191783Srmacklem#define NFSV4OPEN_ACCESSREAD 0x00000001 480191783Srmacklem#define NFSV4OPEN_ACCESSWRITE 0x00000002 481191783Srmacklem#define NFSV4OPEN_ACCESSBOTH 0x00000003 482191783Srmacklem 483191783Srmacklem#define NFSV4OPEN_DENYNONE 0x00000000 484191783Srmacklem#define NFSV4OPEN_DENYREAD 0x00000001 485191783Srmacklem#define NFSV4OPEN_DENYWRITE 0x00000002 486191783Srmacklem#define NFSV4OPEN_DENYBOTH 0x00000003 487191783Srmacklem 488191783Srmacklem/* 489191783Srmacklem * Open result flags 490191783Srmacklem * (The first two are in the spec. The rest are used internally.) 491191783Srmacklem */ 492191783Srmacklem#define NFSV4OPEN_RESULTCONFIRM 0x00000002 493191783Srmacklem#define NFSV4OPEN_LOCKTYPEPOSIX 0x00000004 494191783Srmacklem#define NFSV4OPEN_RFLAGS \ 495191783Srmacklem (NFSV4OPEN_RESULTCONFIRM | NFSV4OPEN_LOCKTYPEPOSIX) 496191783Srmacklem#define NFSV4OPEN_RECALL 0x00010000 497191783Srmacklem#define NFSV4OPEN_READDELEGATE 0x00020000 498191783Srmacklem#define NFSV4OPEN_WRITEDELEGATE 0x00040000 499191783Srmacklem 500191783Srmacklem/* 501191783Srmacklem * NFS V4 File Handle types 502191783Srmacklem */ 503191783Srmacklem#define NFSV4FHTYPE_PERSISTENT 0x0 504191783Srmacklem#define NFSV4FHTYPE_NOEXPIREWITHOPEN 0x1 505191783Srmacklem#define NFSV4FHTYPE_VOLATILEANY 0x2 506191783Srmacklem#define NFSV4FHTYPE_VOLATILEMIGRATE 0x4 507191783Srmacklem#define NFSV4FHTYPE_VOLATILERENAME 0x8 508191783Srmacklem 509191783Srmacklem/* 510191783Srmacklem * Maximum size of V4 opaque strings. 511191783Srmacklem */ 512191783Srmacklem#define NFSV4_OPAQUELIMIT 1024 513191783Srmacklem 514191783Srmacklem/* 515191783Srmacklem * These are the same for V3 and V4. 516191783Srmacklem */ 517191783Srmacklem#define NFSACCESS_READ 0x01 518191783Srmacklem#define NFSACCESS_LOOKUP 0x02 519191783Srmacklem#define NFSACCESS_MODIFY 0x04 520191783Srmacklem#define NFSACCESS_EXTEND 0x08 521191783Srmacklem#define NFSACCESS_DELETE 0x10 522191783Srmacklem#define NFSACCESS_EXECUTE 0x20 523191783Srmacklem 524191783Srmacklem#define NFSWRITE_UNSTABLE 0 525191783Srmacklem#define NFSWRITE_DATASYNC 1 526191783Srmacklem#define NFSWRITE_FILESYNC 2 527191783Srmacklem 528191783Srmacklem#define NFSCREATE_UNCHECKED 0 529191783Srmacklem#define NFSCREATE_GUARDED 1 530191783Srmacklem#define NFSCREATE_EXCLUSIVE 2 531244042Srmacklem#define NFSCREATE_EXCLUSIVE41 3 532191783Srmacklem 533191783Srmacklem#define NFSV3FSINFO_LINK 0x01 534191783Srmacklem#define NFSV3FSINFO_SYMLINK 0x02 535191783Srmacklem#define NFSV3FSINFO_HOMOGENEOUS 0x08 536191783Srmacklem#define NFSV3FSINFO_CANSETTIME 0x10 537191783Srmacklem 538244042Srmacklem/* Flags for Exchange ID */ 539244042Srmacklem#define NFSV4EXCH_SUPPMOVEDREFER 0x00000001 540244042Srmacklem#define NFSV4EXCH_SUPPMOVEDMIGR 0x00000002 541244042Srmacklem#define NFSV4EXCH_BINDPRINCSTATEID 0x00000100 542244042Srmacklem#define NFSV4EXCH_USENONPNFS 0x00010000 543244042Srmacklem#define NFSV4EXCH_USEPNFSMDS 0x00020000 544244042Srmacklem#define NFSV4EXCH_USEPNFSDS 0x00040000 545244042Srmacklem#define NFSV4EXCH_MASKPNFS 0x00070000 546244042Srmacklem#define NFSV4EXCH_UPDCONFIRMEDRECA 0x40000000 547244042Srmacklem#define NFSV4EXCH_CONFIRMEDR 0x80000000 548244042Srmacklem 549244042Srmacklem/* State Protects */ 550244042Srmacklem#define NFSV4EXCH_SP4NONE 0 551244042Srmacklem#define NFSV4EXCH_SP4MACHCRED 1 552244042Srmacklem#define NFSV4EXCH_SP4SSV 2 553244042Srmacklem 554244042Srmacklem/* Flags for Create Session */ 555244042Srmacklem#define NFSV4CRSESS_PERSIST 0x00000001 556244042Srmacklem#define NFSV4CRSESS_CONNBACKCHAN 0x00000002 557244042Srmacklem#define NFSV4CRSESS_CONNRDMA 0x00000004 558244042Srmacklem 559244042Srmacklem/* Flags for Sequence */ 560244042Srmacklem#define NFSV4SEQ_CBPATHDOWN 0x00000001 561244042Srmacklem#define NFSV4SEQ_CBGSSCONTEXPIRING 0x00000002 562244042Srmacklem#define NFSV4SEQ_CBGSSCONTEXPIRED 0x00000004 563244042Srmacklem#define NFSV4SEQ_EXPIREDALLSTATEREVOKED 0x00000008 564244042Srmacklem#define NFSV4SEQ_EXPIREDSOMESTATEREVOKED 0x00000010 565244042Srmacklem#define NFSV4SEQ_ADMINSTATEREVOKED 0x00000020 566244042Srmacklem#define NFSV4SEQ_RECALLABLESTATEREVOKED 0x00000040 567244042Srmacklem#define NFSV4SEQ_LEASEMOVED 0x00000080 568244042Srmacklem#define NFSV4SEQ_RESTARTRECLAIMNEEDED 0x00000100 569244042Srmacklem#define NFSV4SEQ_CBPATHDOWNSESSION 0x00000200 570244042Srmacklem#define NFSV4SEQ_BACKCHANNELFAULT 0x00000400 571244042Srmacklem#define NFSV4SEQ_DEVIDCHANGED 0x00000800 572244042Srmacklem#define NFSV4SEQ_DEVIDDELETED 0x00001000 573244042Srmacklem 574244042Srmacklem/* Flags for Layout. */ 575244042Srmacklem#define NFSLAYOUTRETURN_FILE 1 576244042Srmacklem#define NFSLAYOUTRETURN_FSID 2 577244042Srmacklem#define NFSLAYOUTRETURN_ALL 3 578244042Srmacklem 579244042Srmacklem#define NFSLAYOUT_NFSV4_1_FILES 0x1 580244042Srmacklem#define NFSLAYOUT_OSD2_OBJECTS 0x2 581244042Srmacklem#define NFSLAYOUT_BLOCK_VOLUME 0x3 582244042Srmacklem 583244042Srmacklem#define NFSLAYOUTIOMODE_READ 1 584244042Srmacklem#define NFSLAYOUTIOMODE_RW 2 585244042Srmacklem#define NFSLAYOUTIOMODE_ANY 3 586244042Srmacklem 587244042Srmacklem/* Flags for Get Device Info. */ 588244042Srmacklem#define NFSDEVICEIDNOTIFY_CHANGEBIT 0x1 589244042Srmacklem#define NFSDEVICEIDNOTIFY_DELETEBIT 0x2 590244042Srmacklem 591244042Srmacklem/* Flags for File Layout. */ 592244042Srmacklem#define NFSFLAYUTIL_DENSE 0x1 593244042Srmacklem#define NFSFLAYUTIL_COMMIT_THRU_MDS 0x2 594244042Srmacklem 595191783Srmacklem/* Conversion macros */ 596191783Srmacklem#define vtonfsv2_mode(t,m) \ 597191783Srmacklem txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : \ 598191783Srmacklem MAKEIMODE((t), (m))) 599191783Srmacklem#define vtonfsv34_mode(m) txdr_unsigned((m) & 07777) 600191783Srmacklem#define nfstov_mode(a) (fxdr_unsigned(u_int16_t, (a))&07777) 601191783Srmacklem#define vtonfsv2_type(a) (((u_int32_t)(a)) >= 9 ? txdr_unsigned(NFNON) : \ 602191783Srmacklem txdr_unsigned(newnfsv2_type[((u_int32_t)(a))])) 603191783Srmacklem#define vtonfsv34_type(a) (((u_int32_t)(a)) >= 9 ? txdr_unsigned(NFNON) : \ 604191783Srmacklem txdr_unsigned(nfsv34_type[((u_int32_t)(a))])) 605191783Srmacklem#define nfsv2tov_type(a) newnv2tov_type[fxdr_unsigned(u_int32_t,(a))&0x7] 606191783Srmacklem#define nfsv34tov_type(a) nv34tov_type[fxdr_unsigned(u_int32_t,(a))&0x7] 607191783Srmacklem#define vtonfs_dtype(a) (((u_int32_t)(a)) >= 9 ? IFTODT(VTTOIF(VNON)) : \ 608191783Srmacklem IFTODT(VTTOIF(a))) 609191783Srmacklem 610191783Srmacklem/* File types */ 611191783Srmacklemtypedef enum { NFNON=0, NFREG=1, NFDIR=2, NFBLK=3, NFCHR=4, NFLNK=5, 612191783Srmacklem NFSOCK=6, NFFIFO=7, NFATTRDIR=8, NFNAMEDATTR=9 } nfstype; 613191783Srmacklem 614191783Srmacklem/* Structs for common parts of the rpc's */ 615191783Srmacklem 616191783Srmacklemstruct nfsv2_time { 617191783Srmacklem u_int32_t nfsv2_sec; 618191783Srmacklem u_int32_t nfsv2_usec; 619191783Srmacklem}; 620191783Srmacklemtypedef struct nfsv2_time nfstime2; 621191783Srmacklem 622191783Srmacklemstruct nfsv3_time { 623191783Srmacklem u_int32_t nfsv3_sec; 624191783Srmacklem u_int32_t nfsv3_nsec; 625191783Srmacklem}; 626191783Srmacklemtypedef struct nfsv3_time nfstime3; 627191783Srmacklem 628191783Srmacklemstruct nfsv4_time { 629191783Srmacklem u_int32_t nfsv4_highsec; 630191783Srmacklem u_int32_t nfsv4_sec; 631191783Srmacklem u_int32_t nfsv4_nsec; 632191783Srmacklem}; 633191783Srmacklemtypedef struct nfsv4_time nfstime4; 634191783Srmacklem 635191783Srmacklem/* 636191783Srmacklem * Quads are defined as arrays of 2 longs to ensure dense packing for the 637191783Srmacklem * protocol and to facilitate xdr conversion. 638191783Srmacklem */ 639191783Srmacklemstruct nfs_uquad { 640191783Srmacklem u_int32_t nfsuquad[2]; 641191783Srmacklem}; 642191783Srmacklemtypedef struct nfs_uquad nfsuint64; 643191783Srmacklem 644191783Srmacklem/* 645191783Srmacklem * Used to convert between two u_longs and a u_quad_t. 646191783Srmacklem */ 647191783Srmacklemunion nfs_quadconvert { 648191783Srmacklem u_int32_t lval[2]; 649191783Srmacklem u_quad_t qval; 650191783Srmacklem}; 651191783Srmacklemtypedef union nfs_quadconvert nfsquad_t; 652191783Srmacklem 653191783Srmacklem/* 654191783Srmacklem * NFS Version 3 special file number. 655191783Srmacklem */ 656191783Srmacklemstruct nfsv3_spec { 657191783Srmacklem u_int32_t specdata1; 658191783Srmacklem u_int32_t specdata2; 659191783Srmacklem}; 660191783Srmacklemtypedef struct nfsv3_spec nfsv3spec; 661191783Srmacklem 662191783Srmacklem/* 663191783Srmacklem * File attributes and setable attributes. These structures cover both 664191783Srmacklem * NFS version 2 and the version 3 protocol. Note that the union is only 665191783Srmacklem * used so that one pointer can refer to both variants. These structures 666191783Srmacklem * go out on the wire and must be densely packed, so no quad data types 667191783Srmacklem * are used. (all fields are longs or u_longs or structures of same) 668191783Srmacklem * NB: You can't do sizeof(struct nfs_fattr), you must use the 669191783Srmacklem * NFSX_FATTR(v3) macro. 670191783Srmacklem */ 671191783Srmacklemstruct nfs_fattr { 672191783Srmacklem u_int32_t fa_type; 673191783Srmacklem u_int32_t fa_mode; 674191783Srmacklem u_int32_t fa_nlink; 675191783Srmacklem u_int32_t fa_uid; 676191783Srmacklem u_int32_t fa_gid; 677191783Srmacklem union { 678191783Srmacklem struct { 679191783Srmacklem u_int32_t nfsv2fa_size; 680191783Srmacklem u_int32_t nfsv2fa_blocksize; 681191783Srmacklem u_int32_t nfsv2fa_rdev; 682191783Srmacklem u_int32_t nfsv2fa_blocks; 683191783Srmacklem u_int32_t nfsv2fa_fsid; 684191783Srmacklem u_int32_t nfsv2fa_fileid; 685191783Srmacklem nfstime2 nfsv2fa_atime; 686191783Srmacklem nfstime2 nfsv2fa_mtime; 687191783Srmacklem nfstime2 nfsv2fa_ctime; 688191783Srmacklem } fa_nfsv2; 689191783Srmacklem struct { 690191783Srmacklem nfsuint64 nfsv3fa_size; 691191783Srmacklem nfsuint64 nfsv3fa_used; 692191783Srmacklem nfsv3spec nfsv3fa_rdev; 693191783Srmacklem nfsuint64 nfsv3fa_fsid; 694191783Srmacklem nfsuint64 nfsv3fa_fileid; 695191783Srmacklem nfstime3 nfsv3fa_atime; 696191783Srmacklem nfstime3 nfsv3fa_mtime; 697191783Srmacklem nfstime3 nfsv3fa_ctime; 698191783Srmacklem } fa_nfsv3; 699191783Srmacklem } fa_un; 700191783Srmacklem}; 701191783Srmacklem 702191783Srmacklem/* and some ugly defines for accessing union components */ 703191783Srmacklem#define fa2_size fa_un.fa_nfsv2.nfsv2fa_size 704191783Srmacklem#define fa2_blocksize fa_un.fa_nfsv2.nfsv2fa_blocksize 705191783Srmacklem#define fa2_rdev fa_un.fa_nfsv2.nfsv2fa_rdev 706191783Srmacklem#define fa2_blocks fa_un.fa_nfsv2.nfsv2fa_blocks 707191783Srmacklem#define fa2_fsid fa_un.fa_nfsv2.nfsv2fa_fsid 708191783Srmacklem#define fa2_fileid fa_un.fa_nfsv2.nfsv2fa_fileid 709191783Srmacklem#define fa2_atime fa_un.fa_nfsv2.nfsv2fa_atime 710191783Srmacklem#define fa2_mtime fa_un.fa_nfsv2.nfsv2fa_mtime 711191783Srmacklem#define fa2_ctime fa_un.fa_nfsv2.nfsv2fa_ctime 712191783Srmacklem#define fa3_size fa_un.fa_nfsv3.nfsv3fa_size 713191783Srmacklem#define fa3_used fa_un.fa_nfsv3.nfsv3fa_used 714191783Srmacklem#define fa3_rdev fa_un.fa_nfsv3.nfsv3fa_rdev 715191783Srmacklem#define fa3_fsid fa_un.fa_nfsv3.nfsv3fa_fsid 716191783Srmacklem#define fa3_fileid fa_un.fa_nfsv3.nfsv3fa_fileid 717191783Srmacklem#define fa3_atime fa_un.fa_nfsv3.nfsv3fa_atime 718191783Srmacklem#define fa3_mtime fa_un.fa_nfsv3.nfsv3fa_mtime 719191783Srmacklem#define fa3_ctime fa_un.fa_nfsv3.nfsv3fa_ctime 720191783Srmacklem 721191783Srmacklemstruct nfsv2_sattr { 722191783Srmacklem u_int32_t sa_mode; 723191783Srmacklem u_int32_t sa_uid; 724191783Srmacklem u_int32_t sa_gid; 725191783Srmacklem u_int32_t sa_size; 726191783Srmacklem nfstime2 sa_atime; 727191783Srmacklem nfstime2 sa_mtime; 728191783Srmacklem}; 729191783Srmacklem 730191783Srmacklem/* 731191783Srmacklem * NFS Version 3 sattr structure for the new node creation case. 732191783Srmacklem */ 733191783Srmacklemstruct nfsv3_sattr { 734191783Srmacklem u_int32_t sa_modetrue; 735191783Srmacklem u_int32_t sa_mode; 736191783Srmacklem u_int32_t sa_uidfalse; 737191783Srmacklem u_int32_t sa_gidfalse; 738191783Srmacklem u_int32_t sa_sizefalse; 739191783Srmacklem u_int32_t sa_atimetype; 740191783Srmacklem nfstime3 sa_atime; 741191783Srmacklem u_int32_t sa_mtimetype; 742191783Srmacklem nfstime3 sa_mtime; 743191783Srmacklem}; 744191783Srmacklem 745191783Srmacklem/* 746191783Srmacklem * The attribute bits used for V4. 747191783Srmacklem * NFSATTRBIT_xxx defines the attribute# (and its bit position) 748191783Srmacklem * NFSATTRBM_xxx is a 32bit mask with the correct bit set within the 749191783Srmacklem * appropriate 32bit word. 750191783Srmacklem * NFSATTRBIT_MAX is one greater than the largest NFSATTRBIT_xxx 751191783Srmacklem */ 752191783Srmacklem#define NFSATTRBIT_SUPPORTEDATTRS 0 753191783Srmacklem#define NFSATTRBIT_TYPE 1 754191783Srmacklem#define NFSATTRBIT_FHEXPIRETYPE 2 755191783Srmacklem#define NFSATTRBIT_CHANGE 3 756191783Srmacklem#define NFSATTRBIT_SIZE 4 757191783Srmacklem#define NFSATTRBIT_LINKSUPPORT 5 758191783Srmacklem#define NFSATTRBIT_SYMLINKSUPPORT 6 759191783Srmacklem#define NFSATTRBIT_NAMEDATTR 7 760191783Srmacklem#define NFSATTRBIT_FSID 8 761191783Srmacklem#define NFSATTRBIT_UNIQUEHANDLES 9 762191783Srmacklem#define NFSATTRBIT_LEASETIME 10 763191783Srmacklem#define NFSATTRBIT_RDATTRERROR 11 764191783Srmacklem#define NFSATTRBIT_ACL 12 765191783Srmacklem#define NFSATTRBIT_ACLSUPPORT 13 766191783Srmacklem#define NFSATTRBIT_ARCHIVE 14 767191783Srmacklem#define NFSATTRBIT_CANSETTIME 15 768191783Srmacklem#define NFSATTRBIT_CASEINSENSITIVE 16 769191783Srmacklem#define NFSATTRBIT_CASEPRESERVING 17 770191783Srmacklem#define NFSATTRBIT_CHOWNRESTRICTED 18 771191783Srmacklem#define NFSATTRBIT_FILEHANDLE 19 772191783Srmacklem#define NFSATTRBIT_FILEID 20 773191783Srmacklem#define NFSATTRBIT_FILESAVAIL 21 774191783Srmacklem#define NFSATTRBIT_FILESFREE 22 775191783Srmacklem#define NFSATTRBIT_FILESTOTAL 23 776191783Srmacklem#define NFSATTRBIT_FSLOCATIONS 24 777191783Srmacklem#define NFSATTRBIT_HIDDEN 25 778191783Srmacklem#define NFSATTRBIT_HOMOGENEOUS 26 779191783Srmacklem#define NFSATTRBIT_MAXFILESIZE 27 780191783Srmacklem#define NFSATTRBIT_MAXLINK 28 781191783Srmacklem#define NFSATTRBIT_MAXNAME 29 782191783Srmacklem#define NFSATTRBIT_MAXREAD 30 783191783Srmacklem#define NFSATTRBIT_MAXWRITE 31 784191783Srmacklem#define NFSATTRBIT_MIMETYPE 32 785191783Srmacklem#define NFSATTRBIT_MODE 33 786191783Srmacklem#define NFSATTRBIT_NOTRUNC 34 787191783Srmacklem#define NFSATTRBIT_NUMLINKS 35 788191783Srmacklem#define NFSATTRBIT_OWNER 36 789191783Srmacklem#define NFSATTRBIT_OWNERGROUP 37 790191783Srmacklem#define NFSATTRBIT_QUOTAHARD 38 791191783Srmacklem#define NFSATTRBIT_QUOTASOFT 39 792191783Srmacklem#define NFSATTRBIT_QUOTAUSED 40 793191783Srmacklem#define NFSATTRBIT_RAWDEV 41 794191783Srmacklem#define NFSATTRBIT_SPACEAVAIL 42 795191783Srmacklem#define NFSATTRBIT_SPACEFREE 43 796191783Srmacklem#define NFSATTRBIT_SPACETOTAL 44 797191783Srmacklem#define NFSATTRBIT_SPACEUSED 45 798191783Srmacklem#define NFSATTRBIT_SYSTEM 46 799191783Srmacklem#define NFSATTRBIT_TIMEACCESS 47 800191783Srmacklem#define NFSATTRBIT_TIMEACCESSSET 48 801191783Srmacklem#define NFSATTRBIT_TIMEBACKUP 49 802191783Srmacklem#define NFSATTRBIT_TIMECREATE 50 803191783Srmacklem#define NFSATTRBIT_TIMEDELTA 51 804191783Srmacklem#define NFSATTRBIT_TIMEMETADATA 52 805191783Srmacklem#define NFSATTRBIT_TIMEMODIFY 53 806191783Srmacklem#define NFSATTRBIT_TIMEMODIFYSET 54 807191783Srmacklem#define NFSATTRBIT_MOUNTEDONFILEID 55 808191783Srmacklem 809191783Srmacklem#define NFSATTRBM_SUPPORTEDATTRS 0x00000001 810191783Srmacklem#define NFSATTRBM_TYPE 0x00000002 811191783Srmacklem#define NFSATTRBM_FHEXPIRETYPE 0x00000004 812191783Srmacklem#define NFSATTRBM_CHANGE 0x00000008 813191783Srmacklem#define NFSATTRBM_SIZE 0x00000010 814191783Srmacklem#define NFSATTRBM_LINKSUPPORT 0x00000020 815191783Srmacklem#define NFSATTRBM_SYMLINKSUPPORT 0x00000040 816191783Srmacklem#define NFSATTRBM_NAMEDATTR 0x00000080 817191783Srmacklem#define NFSATTRBM_FSID 0x00000100 818191783Srmacklem#define NFSATTRBM_UNIQUEHANDLES 0x00000200 819191783Srmacklem#define NFSATTRBM_LEASETIME 0x00000400 820191783Srmacklem#define NFSATTRBM_RDATTRERROR 0x00000800 821191783Srmacklem#define NFSATTRBM_ACL 0x00001000 822191783Srmacklem#define NFSATTRBM_ACLSUPPORT 0x00002000 823191783Srmacklem#define NFSATTRBM_ARCHIVE 0x00004000 824191783Srmacklem#define NFSATTRBM_CANSETTIME 0x00008000 825191783Srmacklem#define NFSATTRBM_CASEINSENSITIVE 0x00010000 826191783Srmacklem#define NFSATTRBM_CASEPRESERVING 0x00020000 827191783Srmacklem#define NFSATTRBM_CHOWNRESTRICTED 0x00040000 828191783Srmacklem#define NFSATTRBM_FILEHANDLE 0x00080000 829191783Srmacklem#define NFSATTRBM_FILEID 0x00100000 830191783Srmacklem#define NFSATTRBM_FILESAVAIL 0x00200000 831191783Srmacklem#define NFSATTRBM_FILESFREE 0x00400000 832191783Srmacklem#define NFSATTRBM_FILESTOTAL 0x00800000 833191783Srmacklem#define NFSATTRBM_FSLOCATIONS 0x01000000 834191783Srmacklem#define NFSATTRBM_HIDDEN 0x02000000 835191783Srmacklem#define NFSATTRBM_HOMOGENEOUS 0x04000000 836191783Srmacklem#define NFSATTRBM_MAXFILESIZE 0x08000000 837191783Srmacklem#define NFSATTRBM_MAXLINK 0x10000000 838191783Srmacklem#define NFSATTRBM_MAXNAME 0x20000000 839191783Srmacklem#define NFSATTRBM_MAXREAD 0x40000000 840191783Srmacklem#define NFSATTRBM_MAXWRITE 0x80000000 841191783Srmacklem#define NFSATTRBM_MIMETYPE 0x00000001 842191783Srmacklem#define NFSATTRBM_MODE 0x00000002 843191783Srmacklem#define NFSATTRBM_NOTRUNC 0x00000004 844191783Srmacklem#define NFSATTRBM_NUMLINKS 0x00000008 845191783Srmacklem#define NFSATTRBM_OWNER 0x00000010 846191783Srmacklem#define NFSATTRBM_OWNERGROUP 0x00000020 847191783Srmacklem#define NFSATTRBM_QUOTAHARD 0x00000040 848191783Srmacklem#define NFSATTRBM_QUOTASOFT 0x00000080 849191783Srmacklem#define NFSATTRBM_QUOTAUSED 0x00000100 850191783Srmacklem#define NFSATTRBM_RAWDEV 0x00000200 851191783Srmacklem#define NFSATTRBM_SPACEAVAIL 0x00000400 852191783Srmacklem#define NFSATTRBM_SPACEFREE 0x00000800 853191783Srmacklem#define NFSATTRBM_SPACETOTAL 0x00001000 854191783Srmacklem#define NFSATTRBM_SPACEUSED 0x00002000 855191783Srmacklem#define NFSATTRBM_SYSTEM 0x00004000 856191783Srmacklem#define NFSATTRBM_TIMEACCESS 0x00008000 857191783Srmacklem#define NFSATTRBM_TIMEACCESSSET 0x00010000 858191783Srmacklem#define NFSATTRBM_TIMEBACKUP 0x00020000 859191783Srmacklem#define NFSATTRBM_TIMECREATE 0x00040000 860191783Srmacklem#define NFSATTRBM_TIMEDELTA 0x00080000 861191783Srmacklem#define NFSATTRBM_TIMEMETADATA 0x00100000 862191783Srmacklem#define NFSATTRBM_TIMEMODIFY 0x00200000 863191783Srmacklem#define NFSATTRBM_TIMEMODIFYSET 0x00400000 864191783Srmacklem#define NFSATTRBM_MOUNTEDONFILEID 0x00800000 865191783Srmacklem 866191783Srmacklem#define NFSATTRBIT_MAX 56 867191783Srmacklem 868191783Srmacklem/* 869191783Srmacklem * Sets of attributes that are supported, by words in the bitmap. 870191783Srmacklem */ 871191783Srmacklem/* 872191783Srmacklem * NFSATTRBIT_SUPPORTED - SUPP0 - bits 0<->31 873191783Srmacklem * SUPP1 - bits 32<->63 874191783Srmacklem */ 875191783Srmacklem#define NFSATTRBIT_SUPP0 \ 876191783Srmacklem (NFSATTRBM_SUPPORTEDATTRS | \ 877191783Srmacklem NFSATTRBM_TYPE | \ 878191783Srmacklem NFSATTRBM_FHEXPIRETYPE | \ 879191783Srmacklem NFSATTRBM_CHANGE | \ 880191783Srmacklem NFSATTRBM_SIZE | \ 881191783Srmacklem NFSATTRBM_LINKSUPPORT | \ 882191783Srmacklem NFSATTRBM_SYMLINKSUPPORT | \ 883191783Srmacklem NFSATTRBM_NAMEDATTR | \ 884191783Srmacklem NFSATTRBM_FSID | \ 885191783Srmacklem NFSATTRBM_UNIQUEHANDLES | \ 886191783Srmacklem NFSATTRBM_LEASETIME | \ 887191783Srmacklem NFSATTRBM_RDATTRERROR | \ 888191783Srmacklem NFSATTRBM_ACL | \ 889191783Srmacklem NFSATTRBM_ACLSUPPORT | \ 890191783Srmacklem NFSATTRBM_CANSETTIME | \ 891191783Srmacklem NFSATTRBM_CASEINSENSITIVE | \ 892191783Srmacklem NFSATTRBM_CASEPRESERVING | \ 893191783Srmacklem NFSATTRBM_CHOWNRESTRICTED | \ 894191783Srmacklem NFSATTRBM_FILEHANDLE | \ 895191783Srmacklem NFSATTRBM_FILEID | \ 896191783Srmacklem NFSATTRBM_FILESAVAIL | \ 897191783Srmacklem NFSATTRBM_FILESFREE | \ 898191783Srmacklem NFSATTRBM_FILESTOTAL | \ 899191783Srmacklem NFSATTRBM_FSLOCATIONS | \ 900191783Srmacklem NFSATTRBM_HOMOGENEOUS | \ 901191783Srmacklem NFSATTRBM_MAXFILESIZE | \ 902191783Srmacklem NFSATTRBM_MAXLINK | \ 903191783Srmacklem NFSATTRBM_MAXNAME | \ 904191783Srmacklem NFSATTRBM_MAXREAD | \ 905191783Srmacklem NFSATTRBM_MAXWRITE) 906191783Srmacklem 907191783Srmacklem/* 908191783Srmacklem * NFSATTRBIT_S1 - subset of SUPP1 - OR of the following bits: 909191783Srmacklem */ 910191783Srmacklem#define NFSATTRBIT_S1 \ 911191783Srmacklem (NFSATTRBM_MODE | \ 912191783Srmacklem NFSATTRBM_NOTRUNC | \ 913191783Srmacklem NFSATTRBM_NUMLINKS | \ 914191783Srmacklem NFSATTRBM_OWNER | \ 915191783Srmacklem NFSATTRBM_OWNERGROUP | \ 916191783Srmacklem NFSATTRBM_RAWDEV | \ 917191783Srmacklem NFSATTRBM_SPACEAVAIL | \ 918191783Srmacklem NFSATTRBM_SPACEFREE | \ 919191783Srmacklem NFSATTRBM_SPACETOTAL | \ 920191783Srmacklem NFSATTRBM_SPACEUSED | \ 921191783Srmacklem NFSATTRBM_TIMEACCESS | \ 922191783Srmacklem NFSATTRBM_TIMEDELTA | \ 923191783Srmacklem NFSATTRBM_TIMEMETADATA | \ 924191783Srmacklem NFSATTRBM_TIMEMODIFY | \ 925191783Srmacklem NFSATTRBM_MOUNTEDONFILEID) 926191783Srmacklem 927191783Srmacklem#ifdef QUOTA 928191783Srmacklem/* 929191783Srmacklem * If QUOTA OR in NFSATTRBIT_QUOTAHARD, NFSATTRBIT_QUOTASOFT and 930191783Srmacklem * NFSATTRBIT_QUOTAUSED. 931191783Srmacklem */ 932191783Srmacklem#define NFSATTRBIT_SUPP1 (NFSATTRBIT_S1 | \ 933191783Srmacklem NFSATTRBM_QUOTAHARD | \ 934191783Srmacklem NFSATTRBM_QUOTASOFT | \ 935191783Srmacklem NFSATTRBM_QUOTAUSED) 936191783Srmacklem#else 937191783Srmacklem#define NFSATTRBIT_SUPP1 NFSATTRBIT_S1 938191783Srmacklem#endif 939191783Srmacklem 940191783Srmacklem/* 941191783Srmacklem * NFSATTRBIT_SUPPSETONLY is the OR of NFSATTRBIT_TIMEACCESSSET and 942191783Srmacklem * NFSATTRBIT_TIMEMODIFYSET. 943191783Srmacklem */ 944191783Srmacklem#define NFSATTRBIT_SUPPSETONLY (NFSATTRBM_TIMEACCESSSET | \ 945191783Srmacklem NFSATTRBM_TIMEMODIFYSET) 946191783Srmacklem 947191783Srmacklem/* 948191783Srmacklem * NFSATTRBIT_SETABLE - SETABLE0 - bits 0<->31 949191783Srmacklem * SETABLE1 - bits 32<->63 950191783Srmacklem */ 951191783Srmacklem#define NFSATTRBIT_SETABLE0 \ 952191783Srmacklem (NFSATTRBM_SIZE | \ 953191783Srmacklem NFSATTRBM_ACL) 954191783Srmacklem#define NFSATTRBIT_SETABLE1 \ 955191783Srmacklem (NFSATTRBM_MODE | \ 956191783Srmacklem NFSATTRBM_OWNER | \ 957191783Srmacklem NFSATTRBM_OWNERGROUP | \ 958191783Srmacklem NFSATTRBM_TIMEACCESSSET | \ 959191783Srmacklem NFSATTRBM_TIMEMODIFYSET) 960191783Srmacklem 961191783Srmacklem/* 962191783Srmacklem * Set of attributes that the getattr vnode op needs. 963191783Srmacklem * OR of the following bits. 964191783Srmacklem * NFSATTRBIT_GETATTR0 - bits 0<->31 965191783Srmacklem */ 966191783Srmacklem#define NFSATTRBIT_GETATTR0 \ 967191783Srmacklem (NFSATTRBM_SUPPORTEDATTRS | \ 968191783Srmacklem NFSATTRBM_TYPE | \ 969191783Srmacklem NFSATTRBM_CHANGE | \ 970191783Srmacklem NFSATTRBM_SIZE | \ 971191783Srmacklem NFSATTRBM_FSID | \ 972191783Srmacklem NFSATTRBM_FILEID | \ 973191783Srmacklem NFSATTRBM_MAXREAD) 974191783Srmacklem 975191783Srmacklem/* 976191783Srmacklem * NFSATTRBIT_GETATTR1 - bits 32<->63 977191783Srmacklem */ 978191783Srmacklem#define NFSATTRBIT_GETATTR1 \ 979191783Srmacklem (NFSATTRBM_MODE | \ 980191783Srmacklem NFSATTRBM_NUMLINKS | \ 981191783Srmacklem NFSATTRBM_OWNER | \ 982191783Srmacklem NFSATTRBM_OWNERGROUP | \ 983191783Srmacklem NFSATTRBM_RAWDEV | \ 984191783Srmacklem NFSATTRBM_SPACEUSED | \ 985191783Srmacklem NFSATTRBM_TIMEACCESS | \ 986191783Srmacklem NFSATTRBM_TIMEMETADATA | \ 987191783Srmacklem NFSATTRBM_TIMEMODIFY) 988191783Srmacklem 989191783Srmacklem/* 990191783Srmacklem * Subset of the above that the Write RPC gets. 991191783Srmacklem * OR of the following bits. 992191783Srmacklem * NFSATTRBIT_WRITEGETATTR0 - bits 0<->31 993191783Srmacklem */ 994191783Srmacklem#define NFSATTRBIT_WRITEGETATTR0 \ 995223657Srmacklem (NFSATTRBM_SUPPORTEDATTRS | \ 996223657Srmacklem NFSATTRBM_TYPE | \ 997223657Srmacklem NFSATTRBM_CHANGE | \ 998191783Srmacklem NFSATTRBM_SIZE | \ 999223657Srmacklem NFSATTRBM_FSID | \ 1000223657Srmacklem NFSATTRBM_FILEID | \ 1001223657Srmacklem NFSATTRBM_MAXREAD) 1002191783Srmacklem 1003191783Srmacklem/* 1004191783Srmacklem * NFSATTRBIT_WRITEGETATTR1 - bits 32<->63 1005191783Srmacklem */ 1006191783Srmacklem#define NFSATTRBIT_WRITEGETATTR1 \ 1007223657Srmacklem (NFSATTRBM_MODE | \ 1008223657Srmacklem NFSATTRBM_NUMLINKS | \ 1009223657Srmacklem NFSATTRBM_RAWDEV | \ 1010223657Srmacklem NFSATTRBM_SPACEUSED | \ 1011223657Srmacklem NFSATTRBM_TIMEACCESS | \ 1012223657Srmacklem NFSATTRBM_TIMEMETADATA | \ 1013191783Srmacklem NFSATTRBM_TIMEMODIFY) 1014191783Srmacklem 1015191783Srmacklem/* 1016191783Srmacklem * Set of attributes that the wccattr operation op needs. 1017191783Srmacklem * OR of the following bits. 1018191783Srmacklem * NFSATTRBIT_WCCATTR0 - bits 0<->31 1019191783Srmacklem */ 1020191783Srmacklem#define NFSATTRBIT_WCCATTR0 0 1021191783Srmacklem 1022191783Srmacklem/* 1023191783Srmacklem * NFSATTRBIT_WCCATTR1 - bits 32<->63 1024191783Srmacklem */ 1025191783Srmacklem#define NFSATTRBIT_WCCATTR1 \ 1026191783Srmacklem (NFSATTRBM_TIMEMODIFY) 1027191783Srmacklem 1028191783Srmacklem/* 1029191783Srmacklem * NFSATTRBIT_CBGETATTR0 - bits 0<->31 1030191783Srmacklem */ 1031191783Srmacklem#define NFSATTRBIT_CBGETATTR0 (NFSATTRBM_CHANGE | NFSATTRBM_SIZE) 1032191783Srmacklem 1033191783Srmacklem/* 1034191783Srmacklem * NFSATTRBIT_CBGETATTR1 - bits 32<->63 1035191783Srmacklem */ 1036191783Srmacklem#define NFSATTRBIT_CBGETATTR1 0x0 1037191783Srmacklem 1038191783Srmacklem/* 1039191783Srmacklem * Sets of attributes that require a VFS_STATFS() call to get the 1040191783Srmacklem * values of. 1041191783Srmacklem * NFSATTRBIT_STATFS0 - bits 0<->31 1042191783Srmacklem */ 1043191783Srmacklem#define NFSATTRBIT_STATFS0 \ 1044191783Srmacklem (NFSATTRBM_LINKSUPPORT | \ 1045191783Srmacklem NFSATTRBM_SYMLINKSUPPORT | \ 1046191783Srmacklem NFSATTRBM_CANSETTIME | \ 1047191783Srmacklem NFSATTRBM_FILESAVAIL | \ 1048191783Srmacklem NFSATTRBM_FILESFREE | \ 1049191783Srmacklem NFSATTRBM_FILESTOTAL | \ 1050191783Srmacklem NFSATTRBM_HOMOGENEOUS | \ 1051191783Srmacklem NFSATTRBM_MAXFILESIZE | \ 1052191783Srmacklem NFSATTRBM_MAXNAME | \ 1053191783Srmacklem NFSATTRBM_MAXREAD | \ 1054191783Srmacklem NFSATTRBM_MAXWRITE) 1055191783Srmacklem 1056191783Srmacklem/* 1057191783Srmacklem * NFSATTRBIT_STATFS1 - bits 32<->63 1058191783Srmacklem */ 1059191783Srmacklem#define NFSATTRBIT_STATFS1 \ 1060191783Srmacklem (NFSATTRBM_QUOTAHARD | \ 1061191783Srmacklem NFSATTRBM_QUOTASOFT | \ 1062191783Srmacklem NFSATTRBM_QUOTAUSED | \ 1063191783Srmacklem NFSATTRBM_SPACEAVAIL | \ 1064191783Srmacklem NFSATTRBM_SPACEFREE | \ 1065191783Srmacklem NFSATTRBM_SPACETOTAL | \ 1066191783Srmacklem NFSATTRBM_SPACEUSED | \ 1067191783Srmacklem NFSATTRBM_TIMEDELTA) 1068191783Srmacklem 1069191783Srmacklem/* 1070191783Srmacklem * These are the bits that are needed by the nfs_statfs() call. 1071191783Srmacklem * (The regular getattr bits are or'd in so the vnode gets the correct 1072191783Srmacklem * type, etc.) 1073191783Srmacklem * NFSGETATTRBIT_STATFS0 - bits 0<->31 1074191783Srmacklem */ 1075191783Srmacklem#define NFSGETATTRBIT_STATFS0 (NFSATTRBIT_GETATTR0 | \ 1076191783Srmacklem NFSATTRBM_LINKSUPPORT | \ 1077191783Srmacklem NFSATTRBM_SYMLINKSUPPORT | \ 1078191783Srmacklem NFSATTRBM_CANSETTIME | \ 1079191783Srmacklem NFSATTRBM_FILESFREE | \ 1080191783Srmacklem NFSATTRBM_FILESTOTAL | \ 1081191783Srmacklem NFSATTRBM_HOMOGENEOUS | \ 1082191783Srmacklem NFSATTRBM_MAXFILESIZE | \ 1083191783Srmacklem NFSATTRBM_MAXNAME | \ 1084191783Srmacklem NFSATTRBM_MAXREAD | \ 1085191783Srmacklem NFSATTRBM_MAXWRITE) 1086191783Srmacklem 1087191783Srmacklem/* 1088191783Srmacklem * NFSGETATTRBIT_STATFS1 - bits 32<->63 1089191783Srmacklem */ 1090191783Srmacklem#define NFSGETATTRBIT_STATFS1 (NFSATTRBIT_GETATTR1 | \ 1091191783Srmacklem NFSATTRBM_SPACEAVAIL | \ 1092191783Srmacklem NFSATTRBM_SPACEFREE | \ 1093191783Srmacklem NFSATTRBM_SPACETOTAL | \ 1094191783Srmacklem NFSATTRBM_TIMEDELTA) 1095191783Srmacklem 1096191783Srmacklem/* 1097191783Srmacklem * Set of attributes for the equivalent of an nfsv3 pathconf rpc. 1098191783Srmacklem * NFSGETATTRBIT_PATHCONF0 - bits 0<->31 1099191783Srmacklem */ 1100191783Srmacklem#define NFSGETATTRBIT_PATHCONF0 (NFSATTRBIT_GETATTR0 | \ 1101191783Srmacklem NFSATTRBM_CASEINSENSITIVE | \ 1102191783Srmacklem NFSATTRBM_CASEPRESERVING | \ 1103191783Srmacklem NFSATTRBM_CHOWNRESTRICTED | \ 1104191783Srmacklem NFSATTRBM_MAXLINK | \ 1105191783Srmacklem NFSATTRBM_MAXNAME) 1106191783Srmacklem 1107191783Srmacklem/* 1108191783Srmacklem * NFSGETATTRBIT_PATHCONF1 - bits 32<->63 1109191783Srmacklem */ 1110191783Srmacklem#define NFSGETATTRBIT_PATHCONF1 (NFSATTRBIT_GETATTR1 | \ 1111191783Srmacklem NFSATTRBM_NOTRUNC) 1112191783Srmacklem 1113191783Srmacklem/* 1114191783Srmacklem * Sets of attributes required by readdir and readdirplus. 1115191783Srmacklem * NFSATTRBIT_READDIRPLUS0 (NFSATTRBIT_GETATTR0 | NFSATTRBIT_FILEHANDLE | 1116191783Srmacklem * NFSATTRBIT_RDATTRERROR) 1117191783Srmacklem */ 1118191783Srmacklem#define NFSATTRBIT_READDIRPLUS0 (NFSATTRBIT_GETATTR0 | NFSATTRBM_FILEHANDLE | \ 1119191783Srmacklem NFSATTRBM_RDATTRERROR) 1120191783Srmacklem#define NFSATTRBIT_READDIRPLUS1 NFSATTRBIT_GETATTR1 1121191783Srmacklem 1122191783Srmacklem/* 1123191783Srmacklem * Set of attributes supported by Referral vnodes. 1124191783Srmacklem */ 1125191783Srmacklem#define NFSATTRBIT_REFERRAL0 (NFSATTRBM_TYPE | NFSATTRBM_FSID | \ 1126191783Srmacklem NFSATTRBM_RDATTRERROR | NFSATTRBM_FSLOCATIONS) 1127191783Srmacklem#define NFSATTRBIT_REFERRAL1 NFSATTRBM_MOUNTEDONFILEID 1128191783Srmacklem 1129191783Srmacklem/* 1130191783Srmacklem * Structure for data handled by the statfs rpc. Since some fields are 1131191783Srmacklem * u_int64_t, this cannot be used for copying data on/off the wire, due 1132191783Srmacklem * to alignment concerns. 1133191783Srmacklem */ 1134191783Srmacklemstruct nfsstatfs { 1135191783Srmacklem union { 1136191783Srmacklem struct { 1137191783Srmacklem u_int32_t nfsv2sf_tsize; 1138191783Srmacklem u_int32_t nfsv2sf_bsize; 1139191783Srmacklem u_int32_t nfsv2sf_blocks; 1140191783Srmacklem u_int32_t nfsv2sf_bfree; 1141191783Srmacklem u_int32_t nfsv2sf_bavail; 1142191783Srmacklem } sf_nfsv2; 1143191783Srmacklem struct { 1144191783Srmacklem u_int64_t nfsv3sf_tbytes; 1145191783Srmacklem u_int64_t nfsv3sf_fbytes; 1146191783Srmacklem u_int64_t nfsv3sf_abytes; 1147191783Srmacklem u_int64_t nfsv3sf_tfiles; 1148191783Srmacklem u_int64_t nfsv3sf_ffiles; 1149191783Srmacklem u_int64_t nfsv3sf_afiles; 1150191783Srmacklem u_int32_t nfsv3sf_invarsec; 1151191783Srmacklem } sf_nfsv3; 1152191783Srmacklem } sf_un; 1153191783Srmacklem}; 1154191783Srmacklem 1155191783Srmacklem#define sf_tsize sf_un.sf_nfsv2.nfsv2sf_tsize 1156191783Srmacklem#define sf_bsize sf_un.sf_nfsv2.nfsv2sf_bsize 1157191783Srmacklem#define sf_blocks sf_un.sf_nfsv2.nfsv2sf_blocks 1158191783Srmacklem#define sf_bfree sf_un.sf_nfsv2.nfsv2sf_bfree 1159191783Srmacklem#define sf_bavail sf_un.sf_nfsv2.nfsv2sf_bavail 1160191783Srmacklem#define sf_tbytes sf_un.sf_nfsv3.nfsv3sf_tbytes 1161191783Srmacklem#define sf_fbytes sf_un.sf_nfsv3.nfsv3sf_fbytes 1162191783Srmacklem#define sf_abytes sf_un.sf_nfsv3.nfsv3sf_abytes 1163191783Srmacklem#define sf_tfiles sf_un.sf_nfsv3.nfsv3sf_tfiles 1164191783Srmacklem#define sf_ffiles sf_un.sf_nfsv3.nfsv3sf_ffiles 1165191783Srmacklem#define sf_afiles sf_un.sf_nfsv3.nfsv3sf_afiles 1166191783Srmacklem#define sf_invarsec sf_un.sf_nfsv3.nfsv3sf_invarsec 1167191783Srmacklem 1168191783Srmacklem/* 1169191783Srmacklem * Now defined using u_int64_t for the 64 bit field(s). 1170191783Srmacklem * (Cannot be used to move data on/off the wire, due to alignment concerns.) 1171191783Srmacklem */ 1172191783Srmacklemstruct nfsfsinfo { 1173191783Srmacklem u_int32_t fs_rtmax; 1174191783Srmacklem u_int32_t fs_rtpref; 1175191783Srmacklem u_int32_t fs_rtmult; 1176191783Srmacklem u_int32_t fs_wtmax; 1177191783Srmacklem u_int32_t fs_wtpref; 1178191783Srmacklem u_int32_t fs_wtmult; 1179191783Srmacklem u_int32_t fs_dtpref; 1180191783Srmacklem u_int64_t fs_maxfilesize; 1181191783Srmacklem struct timespec fs_timedelta; 1182191783Srmacklem u_int32_t fs_properties; 1183191783Srmacklem}; 1184191783Srmacklem 1185191783Srmacklem/* 1186191783Srmacklem * Bits for fs_properties 1187191783Srmacklem */ 1188191783Srmacklem#define NFSV3_FSFLINK 0x1 1189191783Srmacklem#define NFSV3_FSFSYMLINK 0x2 1190191783Srmacklem#define NFSV3_FSFHOMOGENEOUS 0x4 1191191783Srmacklem#define NFSV3_FSFCANSETTIME 0x8 1192191783Srmacklem 1193191783Srmacklem/* 1194191783Srmacklem * Yikes, overload fs_rtmult as fs_maxname for V4. 1195191783Srmacklem */ 1196191783Srmacklem#define fs_maxname fs_rtmult 1197191783Srmacklem 1198191783Srmacklemstruct nfsv3_pathconf { 1199191783Srmacklem u_int32_t pc_linkmax; 1200191783Srmacklem u_int32_t pc_namemax; 1201191783Srmacklem u_int32_t pc_notrunc; 1202191783Srmacklem u_int32_t pc_chownrestricted; 1203191783Srmacklem u_int32_t pc_caseinsensitive; 1204191783Srmacklem u_int32_t pc_casepreserving; 1205191783Srmacklem}; 1206191783Srmacklem 1207191783Srmacklem/* 1208191783Srmacklem * NFS V4 data structures. 1209191783Srmacklem */ 1210191783Srmacklemstruct nfsv4stateid { 1211191783Srmacklem u_int32_t seqid; 1212191783Srmacklem u_int32_t other[NFSX_STATEIDOTHER / NFSX_UNSIGNED]; 1213191783Srmacklem}; 1214191783Srmacklemtypedef struct nfsv4stateid nfsv4stateid_t; 1215191783Srmacklem 1216191783Srmacklem#endif /* _NFS_NFSPROTO_H_ */ 1217