1*27a22134Sthib /* $OpenBSD: nfs.h,v 1.5 2007/06/29 11:39:25 thib Exp $ */ 22be5fe52Sderaadt /* $NetBSD: nfs.h,v 1.1 1996/05/23 22:49:53 fvdl Exp $ */ 32be5fe52Sderaadt 42be5fe52Sderaadt /* 52be5fe52Sderaadt * Copyright (c) 1989, 1993 62be5fe52Sderaadt * The Regents of the University of California. All rights reserved. 72be5fe52Sderaadt * 82be5fe52Sderaadt * This code is derived from software contributed to Berkeley by 92be5fe52Sderaadt * Rick Macklem at The University of Guelph. 102be5fe52Sderaadt * 112be5fe52Sderaadt * Redistribution and use in source and binary forms, with or without 122be5fe52Sderaadt * modification, are permitted provided that the following conditions 132be5fe52Sderaadt * are met: 142be5fe52Sderaadt * 1. Redistributions of source code must retain the above copyright 152be5fe52Sderaadt * notice, this list of conditions and the following disclaimer. 162be5fe52Sderaadt * 2. Redistributions in binary form must reproduce the above copyright 172be5fe52Sderaadt * notice, this list of conditions and the following disclaimer in the 182be5fe52Sderaadt * documentation and/or other materials provided with the distribution. 1929295d1cSmillert * 3. Neither the name of the University nor the names of its contributors 202be5fe52Sderaadt * may be used to endorse or promote products derived from this software 212be5fe52Sderaadt * without specific prior written permission. 222be5fe52Sderaadt * 232be5fe52Sderaadt * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 242be5fe52Sderaadt * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 252be5fe52Sderaadt * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 262be5fe52Sderaadt * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 272be5fe52Sderaadt * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 282be5fe52Sderaadt * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 292be5fe52Sderaadt * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 302be5fe52Sderaadt * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 312be5fe52Sderaadt * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 322be5fe52Sderaadt * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 332be5fe52Sderaadt * SUCH DAMAGE. 342be5fe52Sderaadt * 352be5fe52Sderaadt * @(#)nfsproto.h 8.2 (Berkeley) 3/30/95 362be5fe52Sderaadt */ 372be5fe52Sderaadt 382be5fe52Sderaadt /* 392be5fe52Sderaadt * nfs definitions as per the Version 2 and 3 specs 402be5fe52Sderaadt */ 412be5fe52Sderaadt 422be5fe52Sderaadt /* 432be5fe52Sderaadt * Constants as defined in the Sun NFS Version 2 and 3 specs. 442be5fe52Sderaadt * "NFS: Network File System Protocol Specification" RFC1094 452be5fe52Sderaadt * and in the "NFS: Network File System Version 3 Protocol 462be5fe52Sderaadt * Specification" 472be5fe52Sderaadt */ 482be5fe52Sderaadt 492be5fe52Sderaadt #define NFS_PORT 2049 502be5fe52Sderaadt #define NFS_PROG 100003 512be5fe52Sderaadt #define NFS_VER2 2 522be5fe52Sderaadt #define NFS_VER3 3 53*27a22134Sthib #define NFS_VER4 4 542be5fe52Sderaadt #define NFS_V2MAXDATA 8192 552be5fe52Sderaadt #define NFS_MAXDGRAMDATA 16384 562be5fe52Sderaadt #define NFS_MAXDATA 32768 572be5fe52Sderaadt #define NFS_MAXPATHLEN 1024 582be5fe52Sderaadt #define NFS_MAXNAMLEN 255 592be5fe52Sderaadt #define NFS_MAXPKTHDR 404 602be5fe52Sderaadt #define NFS_MAXPACKET (NFS_MAXPKTHDR + NFS_MAXDATA) 612be5fe52Sderaadt #define NFS_MINPACKET 20 622be5fe52Sderaadt #define NFS_FABLKSIZE 512 /* Size in bytes of a block wrt fa_blocks */ 632be5fe52Sderaadt 642be5fe52Sderaadt /* Stat numbers for rpc returns (version 2 and 3) */ 652be5fe52Sderaadt #define NFS_OK 0 662be5fe52Sderaadt #define NFSERR_PERM 1 672be5fe52Sderaadt #define NFSERR_NOENT 2 682be5fe52Sderaadt #define NFSERR_IO 5 692be5fe52Sderaadt #define NFSERR_NXIO 6 702be5fe52Sderaadt #define NFSERR_ACCES 13 712be5fe52Sderaadt #define NFSERR_EXIST 17 722be5fe52Sderaadt #define NFSERR_XDEV 18 /* Version 3 only */ 732be5fe52Sderaadt #define NFSERR_NODEV 19 742be5fe52Sderaadt #define NFSERR_NOTDIR 20 752be5fe52Sderaadt #define NFSERR_ISDIR 21 762be5fe52Sderaadt #define NFSERR_INVAL 22 /* Version 3 only */ 772be5fe52Sderaadt #define NFSERR_FBIG 27 782be5fe52Sderaadt #define NFSERR_NOSPC 28 792be5fe52Sderaadt #define NFSERR_ROFS 30 802be5fe52Sderaadt #define NFSERR_MLINK 31 /* Version 3 only */ 812be5fe52Sderaadt #define NFSERR_NAMETOL 63 822be5fe52Sderaadt #define NFSERR_NOTEMPTY 66 832be5fe52Sderaadt #define NFSERR_DQUOT 69 842be5fe52Sderaadt #define NFSERR_STALE 70 852be5fe52Sderaadt #define NFSERR_REMOTE 71 /* Version 3 only */ 862be5fe52Sderaadt #define NFSERR_WFLUSH 99 /* Version 2 only */ 872be5fe52Sderaadt #define NFSERR_BADHANDLE 10001 /* The rest Version 3 only */ 882be5fe52Sderaadt #define NFSERR_NOT_SYNC 10002 892be5fe52Sderaadt #define NFSERR_BAD_COOKIE 10003 902be5fe52Sderaadt #define NFSERR_NOTSUPP 10004 912be5fe52Sderaadt #define NFSERR_TOOSMALL 10005 922be5fe52Sderaadt #define NFSERR_SERVERFAULT 10006 932be5fe52Sderaadt #define NFSERR_BADTYPE 10007 942be5fe52Sderaadt #define NFSERR_JUKEBOX 10008 952be5fe52Sderaadt #define NFSERR_TRYLATER NFSERR_JUKEBOX 962be5fe52Sderaadt #define NFSERR_STALEWRITEVERF 30001 /* Fake return for nfs_commit() */ 972be5fe52Sderaadt 982be5fe52Sderaadt #define NFSERR_RETVOID 0x20000000 /* Return void, not error */ 992be5fe52Sderaadt #define NFSERR_AUTHERR 0x40000000 /* Mark an authentication error */ 1002be5fe52Sderaadt #define NFSERR_RETERR 0x80000000 /* Mark an error return for V3 */ 1012be5fe52Sderaadt 1022be5fe52Sderaadt /* Sizes in bytes of various nfs rpc components */ 1032be5fe52Sderaadt #define NFSX_UNSIGNED 4 1042be5fe52Sderaadt 1052be5fe52Sderaadt /* specific to NFS Version 2 */ 1062be5fe52Sderaadt #define NFSX_V2FH 32 1072be5fe52Sderaadt #define NFSX_V2FATTR 68 1082be5fe52Sderaadt #define NFSX_V2SATTR 32 1092be5fe52Sderaadt #define NFSX_V2COOKIE 4 1102be5fe52Sderaadt #define NFSX_V2STATFS 20 1112be5fe52Sderaadt 1122be5fe52Sderaadt /* specific to NFS Version 3 */ 1132be5fe52Sderaadt #if 0 1142be5fe52Sderaadt #define NFSX_V3FH (sizeof (fhandle_t)) /* size this server uses */ 1152be5fe52Sderaadt #endif 1162be5fe52Sderaadt #define NFSX_V3FHMAX 64 /* max. allowed by protocol */ 1172be5fe52Sderaadt #define NFSX_V3FATTR 84 1182be5fe52Sderaadt #define NFSX_V3SATTR 60 /* max. all fields filled in */ 1192be5fe52Sderaadt #define NFSX_V3SRVSATTR (sizeof (struct nfsv3_sattr)) 1202be5fe52Sderaadt #define NFSX_V3POSTOPATTR (NFSX_V3FATTR + NFSX_UNSIGNED) 1212be5fe52Sderaadt #define NFSX_V3WCCDATA (NFSX_V3POSTOPATTR + 8 * NFSX_UNSIGNED) 1222be5fe52Sderaadt #define NFSX_V3COOKIEVERF 8 1232be5fe52Sderaadt #define NFSX_V3WRITEVERF 8 1242be5fe52Sderaadt #define NFSX_V3CREATEVERF 8 1252be5fe52Sderaadt #define NFSX_V3STATFS 52 1262be5fe52Sderaadt #define NFSX_V3FSINFO 48 1272be5fe52Sderaadt #define NFSX_V3PATHCONF 24 1282be5fe52Sderaadt 1292be5fe52Sderaadt /* variants for both versions */ 1302be5fe52Sderaadt #define NFSX_FH(v3) ((v3) ? (NFSX_V3FHMAX + NFSX_UNSIGNED) : \ 1312be5fe52Sderaadt NFSX_V2FH) 1322be5fe52Sderaadt #define NFSX_SRVFH(v3) ((v3) ? NFSX_V3FH : NFSX_V2FH) 1332be5fe52Sderaadt #define NFSX_FATTR(v3) ((v3) ? NFSX_V3FATTR : NFSX_V2FATTR) 1342be5fe52Sderaadt #define NFSX_PREOPATTR(v3) ((v3) ? (7 * NFSX_UNSIGNED) : 0) 1352be5fe52Sderaadt #define NFSX_POSTOPATTR(v3) ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : 0) 1362be5fe52Sderaadt #define NFSX_POSTOPORFATTR(v3) ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : \ 1372be5fe52Sderaadt NFSX_V2FATTR) 1382be5fe52Sderaadt #define NFSX_WCCDATA(v3) ((v3) ? NFSX_V3WCCDATA : 0) 1392be5fe52Sderaadt #define NFSX_WCCORFATTR(v3) ((v3) ? NFSX_V3WCCDATA : NFSX_V2FATTR) 1402be5fe52Sderaadt #define NFSX_SATTR(v3) ((v3) ? NFSX_V3SATTR : NFSX_V2SATTR) 1412be5fe52Sderaadt #define NFSX_COOKIEVERF(v3) ((v3) ? NFSX_V3COOKIEVERF : 0) 1422be5fe52Sderaadt #define NFSX_WRITEVERF(v3) ((v3) ? NFSX_V3WRITEVERF : 0) 1432be5fe52Sderaadt #define NFSX_READDIR(v3) ((v3) ? (5 * NFSX_UNSIGNED) : \ 1442be5fe52Sderaadt (2 * NFSX_UNSIGNED)) 1452be5fe52Sderaadt #define NFSX_STATFS(v3) ((v3) ? NFSX_V3STATFS : NFSX_V2STATFS) 1462be5fe52Sderaadt 1472be5fe52Sderaadt /* nfs rpc procedure numbers (before version mapping) */ 1482be5fe52Sderaadt #define NFSPROC_NULL 0 1492be5fe52Sderaadt #define NFSPROC_GETATTR 1 1502be5fe52Sderaadt #define NFSPROC_SETATTR 2 1512be5fe52Sderaadt #define NFSPROC_LOOKUP 3 1522be5fe52Sderaadt #define NFSPROC_ACCESS 4 1532be5fe52Sderaadt #define NFSPROC_READLINK 5 1542be5fe52Sderaadt #define NFSPROC_READ 6 1552be5fe52Sderaadt #define NFSPROC_WRITE 7 1562be5fe52Sderaadt #define NFSPROC_CREATE 8 1572be5fe52Sderaadt #define NFSPROC_MKDIR 9 1582be5fe52Sderaadt #define NFSPROC_SYMLINK 10 1592be5fe52Sderaadt #define NFSPROC_MKNOD 11 1602be5fe52Sderaadt #define NFSPROC_REMOVE 12 1612be5fe52Sderaadt #define NFSPROC_RMDIR 13 1622be5fe52Sderaadt #define NFSPROC_RENAME 14 1632be5fe52Sderaadt #define NFSPROC_LINK 15 1642be5fe52Sderaadt #define NFSPROC_READDIR 16 1652be5fe52Sderaadt #define NFSPROC_READDIRPLUS 17 1662be5fe52Sderaadt #define NFSPROC_FSSTAT 18 1672be5fe52Sderaadt #define NFSPROC_FSINFO 19 1682be5fe52Sderaadt #define NFSPROC_PATHCONF 20 1692be5fe52Sderaadt #define NFSPROC_COMMIT 21 1702be5fe52Sderaadt 1712be5fe52Sderaadt /* And leasing (nqnfs) procedure numbers (must be last) */ 1722be5fe52Sderaadt #define NQNFSPROC_GETLEASE 22 1732be5fe52Sderaadt #define NQNFSPROC_VACATED 23 1742be5fe52Sderaadt #define NQNFSPROC_EVICTED 24 1752be5fe52Sderaadt 1762be5fe52Sderaadt #define NFSPROC_NOOP 25 1772be5fe52Sderaadt #define NFS_NPROCS 26 1782be5fe52Sderaadt 1792be5fe52Sderaadt /* Actual Version 2 procedure numbers */ 1802be5fe52Sderaadt #define NFSV2PROC_NULL 0 1812be5fe52Sderaadt #define NFSV2PROC_GETATTR 1 1822be5fe52Sderaadt #define NFSV2PROC_SETATTR 2 1832be5fe52Sderaadt #define NFSV2PROC_NOOP 3 1842be5fe52Sderaadt #define NFSV2PROC_ROOT NFSV2PROC_NOOP /* Obsolete */ 1852be5fe52Sderaadt #define NFSV2PROC_LOOKUP 4 1862be5fe52Sderaadt #define NFSV2PROC_READLINK 5 1872be5fe52Sderaadt #define NFSV2PROC_READ 6 1882be5fe52Sderaadt #define NFSV2PROC_WRITECACHE NFSV2PROC_NOOP /* Obsolete */ 1892be5fe52Sderaadt #define NFSV2PROC_WRITE 8 1902be5fe52Sderaadt #define NFSV2PROC_CREATE 9 1912be5fe52Sderaadt #define NFSV2PROC_REMOVE 10 1922be5fe52Sderaadt #define NFSV2PROC_RENAME 11 1932be5fe52Sderaadt #define NFSV2PROC_LINK 12 1942be5fe52Sderaadt #define NFSV2PROC_SYMLINK 13 1952be5fe52Sderaadt #define NFSV2PROC_MKDIR 14 1962be5fe52Sderaadt #define NFSV2PROC_RMDIR 15 1972be5fe52Sderaadt #define NFSV2PROC_READDIR 16 1982be5fe52Sderaadt #define NFSV2PROC_STATFS 17 1992be5fe52Sderaadt 2002be5fe52Sderaadt /* 2012be5fe52Sderaadt * Constants used by the Version 3 protocol for various RPCs 2022be5fe52Sderaadt */ 2032be5fe52Sderaadt #define NFSV3SATTRTIME_DONTCHANGE 0 2042be5fe52Sderaadt #define NFSV3SATTRTIME_TOSERVER 1 2052be5fe52Sderaadt #define NFSV3SATTRTIME_TOCLIENT 2 2062be5fe52Sderaadt 2072be5fe52Sderaadt #define NFSV3ATTRTIME_NMODES 3 2082be5fe52Sderaadt 2092be5fe52Sderaadt #define NFSV3ACCESS_READ 0x01 2102be5fe52Sderaadt #define NFSV3ACCESS_LOOKUP 0x02 2112be5fe52Sderaadt #define NFSV3ACCESS_MODIFY 0x04 2122be5fe52Sderaadt #define NFSV3ACCESS_EXTEND 0x08 2132be5fe52Sderaadt #define NFSV3ACCESS_DELETE 0x10 2142be5fe52Sderaadt #define NFSV3ACCESS_EXECUTE 0x20 2152be5fe52Sderaadt 2162be5fe52Sderaadt #define NFSV3WRITE_UNSTABLE 0 2172be5fe52Sderaadt #define NFSV3WRITE_DATASYNC 1 2182be5fe52Sderaadt #define NFSV3WRITE_FILESYNC 2 2192be5fe52Sderaadt 2202be5fe52Sderaadt #define NFSV3WRITE_NMODES 3 2212be5fe52Sderaadt 2222be5fe52Sderaadt #define NFSV3CREATE_UNCHECKED 0 2232be5fe52Sderaadt #define NFSV3CREATE_GUARDED 1 2242be5fe52Sderaadt #define NFSV3CREATE_EXCLUSIVE 2 2252be5fe52Sderaadt 2262be5fe52Sderaadt #define NFSV3CREATE_NMODES 3 2272be5fe52Sderaadt 2282be5fe52Sderaadt #define NFSV3FSINFO_LINK 0x01 2292be5fe52Sderaadt #define NFSV3FSINFO_SYMLINK 0x02 2302be5fe52Sderaadt #define NFSV3FSINFO_HOMOGENEOUS 0x08 2312be5fe52Sderaadt #define NFSV3FSINFO_CANSETTIME 0x10 2322be5fe52Sderaadt 2332be5fe52Sderaadt /* Conversion macros */ 2342be5fe52Sderaadt #define vtonfsv2_mode(t,m) \ 2352be5fe52Sderaadt txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : \ 2362be5fe52Sderaadt MAKEIMODE((t), (m))) 2372be5fe52Sderaadt #define vtonfsv3_mode(m) txdr_unsigned((m) & 07777) 2382be5fe52Sderaadt #define nfstov_mode(a) (fxdr_unsigned(u_int16_t, (a))&07777) 2392be5fe52Sderaadt #define vtonfsv2_type(a) txdr_unsigned(nfsv2_type[((int32_t)(a))]) 2402be5fe52Sderaadt #define vtonfsv3_type(a) txdr_unsigned(nfsv3_type[((int32_t)(a))]) 241edd7aa8fSjakob #define nfsv2tov_type(a) nv2tov_type[fxdr_unsigned(u_int32_t,(a))&0x7] 242edd7aa8fSjakob #define nfsv3tov_type(a) nv3tov_type[fxdr_unsigned(u_int32_t,(a))&0x7] 2432be5fe52Sderaadt 2442be5fe52Sderaadt /* File types */ 2452be5fe52Sderaadt typedef enum { NFNON=0, NFREG=1, NFDIR=2, NFBLK=3, NFCHR=4, NFLNK=5, 2462be5fe52Sderaadt NFSOCK=6, NFFIFO=7 } nfstype; 2472be5fe52Sderaadt 2482be5fe52Sderaadt /* Structs for common parts of the rpc's */ 2492be5fe52Sderaadt /* 2502be5fe52Sderaadt * File Handle (32 bytes for version 2), variable up to 64 for version 3. 2512be5fe52Sderaadt * File Handles of up to NFS_SMALLFH in size are stored directly in the 2522be5fe52Sderaadt * nfs node, whereas larger ones are malloc'd. (This never happens when 2532be5fe52Sderaadt * NFS_SMALLFH is set to 64.) 2542be5fe52Sderaadt * NFS_SMALLFH should be in the range of 32 to 64 and be divisible by 4. 2552be5fe52Sderaadt */ 2562be5fe52Sderaadt #ifndef NFS_SMALLFH 2572be5fe52Sderaadt #define NFS_SMALLFH 64 2582be5fe52Sderaadt #endif 2592be5fe52Sderaadt union nfsfh { 2602be5fe52Sderaadt /* fhandle_t fh_generic; */ 2612be5fe52Sderaadt u_char fh_bytes[NFS_SMALLFH]; 2622be5fe52Sderaadt }; 2632be5fe52Sderaadt typedef union nfsfh nfsfh_t; 2642be5fe52Sderaadt 2652be5fe52Sderaadt struct nfsv2_time { 266edd7aa8fSjakob u_int32_t nfsv2_sec; 267edd7aa8fSjakob u_int32_t nfsv2_usec; 2682be5fe52Sderaadt }; 2692be5fe52Sderaadt typedef struct nfsv2_time nfstime2; 2702be5fe52Sderaadt 2712be5fe52Sderaadt struct nfsv3_time { 272edd7aa8fSjakob u_int32_t nfsv3_sec; 273edd7aa8fSjakob u_int32_t nfsv3_nsec; 2742be5fe52Sderaadt }; 2752be5fe52Sderaadt typedef struct nfsv3_time nfstime3; 2762be5fe52Sderaadt 2772be5fe52Sderaadt /* 2782be5fe52Sderaadt * Quads are defined as arrays of 2 longs to ensure dense packing for the 2792be5fe52Sderaadt * protocol and to facilitate xdr conversion. 2802be5fe52Sderaadt */ 2812be5fe52Sderaadt struct nfs_uquad { 282edd7aa8fSjakob u_int32_t nfsuquad[2]; 2832be5fe52Sderaadt }; 2842be5fe52Sderaadt typedef struct nfs_uquad nfsuint64; 2852be5fe52Sderaadt 2862be5fe52Sderaadt /* 2872be5fe52Sderaadt * Used to convert between two u_longs and a u_quad_t. 2882be5fe52Sderaadt */ 2892be5fe52Sderaadt union nfs_quadconvert { 290edd7aa8fSjakob u_int32_t lval[2]; 2912be5fe52Sderaadt u_quad_t qval; 2922be5fe52Sderaadt }; 2932be5fe52Sderaadt typedef union nfs_quadconvert nfsquad_t; 2942be5fe52Sderaadt 2952be5fe52Sderaadt /* 2962be5fe52Sderaadt * NFS Version 3 special file number. 2972be5fe52Sderaadt */ 2982be5fe52Sderaadt struct nfsv3_spec { 299edd7aa8fSjakob u_int32_t specdata1; 300edd7aa8fSjakob u_int32_t specdata2; 3012be5fe52Sderaadt }; 3022be5fe52Sderaadt typedef struct nfsv3_spec nfsv3spec; 3032be5fe52Sderaadt 3042be5fe52Sderaadt /* 3052be5fe52Sderaadt * File attributes and setable attributes. These structures cover both 3062be5fe52Sderaadt * NFS version 2 and the version 3 protocol. Note that the union is only 3072be5fe52Sderaadt * used so that one pointer can refer to both variants. These structures 3082be5fe52Sderaadt * go out on the wire and must be densely packed, so no quad data types 3092be5fe52Sderaadt * are used. (all fields are longs or u_longs or structures of same) 3102be5fe52Sderaadt * NB: You can't do sizeof(struct nfs_fattr), you must use the 3112be5fe52Sderaadt * NFSX_FATTR(v3) macro. 3122be5fe52Sderaadt */ 3132be5fe52Sderaadt struct nfs_fattr { 314edd7aa8fSjakob u_int32_t fa_type; 315edd7aa8fSjakob u_int32_t fa_mode; 316edd7aa8fSjakob u_int32_t fa_nlink; 317edd7aa8fSjakob u_int32_t fa_uid; 318edd7aa8fSjakob u_int32_t fa_gid; 3192be5fe52Sderaadt union { 3202be5fe52Sderaadt struct { 321edd7aa8fSjakob u_int32_t nfsv2fa_size; 322edd7aa8fSjakob u_int32_t nfsv2fa_blocksize; 323edd7aa8fSjakob u_int32_t nfsv2fa_rdev; 324edd7aa8fSjakob u_int32_t nfsv2fa_blocks; 325edd7aa8fSjakob u_int32_t nfsv2fa_fsid; 326edd7aa8fSjakob u_int32_t nfsv2fa_fileid; 3272be5fe52Sderaadt nfstime2 nfsv2fa_atime; 3282be5fe52Sderaadt nfstime2 nfsv2fa_mtime; 3292be5fe52Sderaadt nfstime2 nfsv2fa_ctime; 3302be5fe52Sderaadt } fa_nfsv2; 3312be5fe52Sderaadt struct { 3322be5fe52Sderaadt nfsuint64 nfsv3fa_size; 3332be5fe52Sderaadt nfsuint64 nfsv3fa_used; 3342be5fe52Sderaadt nfsv3spec nfsv3fa_rdev; 3352be5fe52Sderaadt nfsuint64 nfsv3fa_fsid; 3362be5fe52Sderaadt nfsuint64 nfsv3fa_fileid; 3372be5fe52Sderaadt nfstime3 nfsv3fa_atime; 3382be5fe52Sderaadt nfstime3 nfsv3fa_mtime; 3392be5fe52Sderaadt nfstime3 nfsv3fa_ctime; 3402be5fe52Sderaadt } fa_nfsv3; 3412be5fe52Sderaadt } fa_un; 3422be5fe52Sderaadt }; 3432be5fe52Sderaadt 3442be5fe52Sderaadt /* and some ugly defines for accessing union components */ 3452be5fe52Sderaadt #define fa2_size fa_un.fa_nfsv2.nfsv2fa_size 3462be5fe52Sderaadt #define fa2_blocksize fa_un.fa_nfsv2.nfsv2fa_blocksize 3472be5fe52Sderaadt #define fa2_rdev fa_un.fa_nfsv2.nfsv2fa_rdev 3482be5fe52Sderaadt #define fa2_blocks fa_un.fa_nfsv2.nfsv2fa_blocks 3492be5fe52Sderaadt #define fa2_fsid fa_un.fa_nfsv2.nfsv2fa_fsid 3502be5fe52Sderaadt #define fa2_fileid fa_un.fa_nfsv2.nfsv2fa_fileid 3512be5fe52Sderaadt #define fa2_atime fa_un.fa_nfsv2.nfsv2fa_atime 3522be5fe52Sderaadt #define fa2_mtime fa_un.fa_nfsv2.nfsv2fa_mtime 3532be5fe52Sderaadt #define fa2_ctime fa_un.fa_nfsv2.nfsv2fa_ctime 3542be5fe52Sderaadt #define fa3_size fa_un.fa_nfsv3.nfsv3fa_size 3552be5fe52Sderaadt #define fa3_used fa_un.fa_nfsv3.nfsv3fa_used 3562be5fe52Sderaadt #define fa3_rdev fa_un.fa_nfsv3.nfsv3fa_rdev 3572be5fe52Sderaadt #define fa3_fsid fa_un.fa_nfsv3.nfsv3fa_fsid 3582be5fe52Sderaadt #define fa3_fileid fa_un.fa_nfsv3.nfsv3fa_fileid 3592be5fe52Sderaadt #define fa3_atime fa_un.fa_nfsv3.nfsv3fa_atime 3602be5fe52Sderaadt #define fa3_mtime fa_un.fa_nfsv3.nfsv3fa_mtime 3612be5fe52Sderaadt #define fa3_ctime fa_un.fa_nfsv3.nfsv3fa_ctime 3622be5fe52Sderaadt 3632be5fe52Sderaadt struct nfsv2_sattr { 364edd7aa8fSjakob u_int32_t sa_mode; 365edd7aa8fSjakob u_int32_t sa_uid; 366edd7aa8fSjakob u_int32_t sa_gid; 367edd7aa8fSjakob u_int32_t sa_size; 3682be5fe52Sderaadt nfstime2 sa_atime; 3692be5fe52Sderaadt nfstime2 sa_mtime; 3702be5fe52Sderaadt }; 3712be5fe52Sderaadt 3722be5fe52Sderaadt /* 3732be5fe52Sderaadt * NFS Version 3 sattr structure for the new node creation case. 3742be5fe52Sderaadt */ 3752be5fe52Sderaadt struct nfsv3_sattr { 376edd7aa8fSjakob u_int32_t sa_modeset; 377edd7aa8fSjakob u_int32_t sa_mode; 378edd7aa8fSjakob u_int32_t sa_uidset; 379edd7aa8fSjakob u_int32_t sa_uid; 380edd7aa8fSjakob u_int32_t sa_gidset; 381edd7aa8fSjakob u_int32_t sa_gid; 382edd7aa8fSjakob u_int32_t sa_sizeset; 383edd7aa8fSjakob u_int32_t sa_size; 384edd7aa8fSjakob u_int32_t sa_atimetype; 3852be5fe52Sderaadt nfstime3 sa_atime; 386edd7aa8fSjakob u_int32_t sa_mtimetype; 3872be5fe52Sderaadt nfstime3 sa_mtime; 3882be5fe52Sderaadt }; 3892be5fe52Sderaadt 3902be5fe52Sderaadt struct nfs_statfs { 3912be5fe52Sderaadt union { 3922be5fe52Sderaadt struct { 393edd7aa8fSjakob u_int32_t nfsv2sf_tsize; 394edd7aa8fSjakob u_int32_t nfsv2sf_bsize; 395edd7aa8fSjakob u_int32_t nfsv2sf_blocks; 396edd7aa8fSjakob u_int32_t nfsv2sf_bfree; 397edd7aa8fSjakob u_int32_t nfsv2sf_bavail; 3982be5fe52Sderaadt } sf_nfsv2; 3992be5fe52Sderaadt struct { 4002be5fe52Sderaadt nfsuint64 nfsv3sf_tbytes; 4012be5fe52Sderaadt nfsuint64 nfsv3sf_fbytes; 4022be5fe52Sderaadt nfsuint64 nfsv3sf_abytes; 4032be5fe52Sderaadt nfsuint64 nfsv3sf_tfiles; 4042be5fe52Sderaadt nfsuint64 nfsv3sf_ffiles; 4052be5fe52Sderaadt nfsuint64 nfsv3sf_afiles; 406edd7aa8fSjakob u_int32_t nfsv3sf_invarsec; 4072be5fe52Sderaadt } sf_nfsv3; 4082be5fe52Sderaadt } sf_un; 4092be5fe52Sderaadt }; 4102be5fe52Sderaadt 4112be5fe52Sderaadt #define sf_tsize sf_un.sf_nfsv2.nfsv2sf_tsize 4122be5fe52Sderaadt #define sf_bsize sf_un.sf_nfsv2.nfsv2sf_bsize 4132be5fe52Sderaadt #define sf_blocks sf_un.sf_nfsv2.nfsv2sf_blocks 4142be5fe52Sderaadt #define sf_bfree sf_un.sf_nfsv2.nfsv2sf_bfree 4152be5fe52Sderaadt #define sf_bavail sf_un.sf_nfsv2.nfsv2sf_bavail 4162be5fe52Sderaadt #define sf_tbytes sf_un.sf_nfsv3.nfsv3sf_tbytes 4172be5fe52Sderaadt #define sf_fbytes sf_un.sf_nfsv3.nfsv3sf_fbytes 4182be5fe52Sderaadt #define sf_abytes sf_un.sf_nfsv3.nfsv3sf_abytes 4192be5fe52Sderaadt #define sf_tfiles sf_un.sf_nfsv3.nfsv3sf_tfiles 4202be5fe52Sderaadt #define sf_ffiles sf_un.sf_nfsv3.nfsv3sf_ffiles 4212be5fe52Sderaadt #define sf_afiles sf_un.sf_nfsv3.nfsv3sf_afiles 4222be5fe52Sderaadt #define sf_invarsec sf_un.sf_nfsv3.nfsv3sf_invarsec 4232be5fe52Sderaadt 4242be5fe52Sderaadt struct nfsv3_fsinfo { 425edd7aa8fSjakob u_int32_t fs_rtmax; 426edd7aa8fSjakob u_int32_t fs_rtpref; 427edd7aa8fSjakob u_int32_t fs_rtmult; 428edd7aa8fSjakob u_int32_t fs_wtmax; 429edd7aa8fSjakob u_int32_t fs_wtpref; 430edd7aa8fSjakob u_int32_t fs_wtmult; 431edd7aa8fSjakob u_int32_t fs_dtpref; 4322be5fe52Sderaadt nfsuint64 fs_maxfilesize; 4332be5fe52Sderaadt nfstime3 fs_timedelta; 434edd7aa8fSjakob u_int32_t fs_properties; 4352be5fe52Sderaadt }; 4362be5fe52Sderaadt 4372be5fe52Sderaadt struct nfsv3_pathconf { 438edd7aa8fSjakob u_int32_t pc_linkmax; 439edd7aa8fSjakob u_int32_t pc_namemax; 440edd7aa8fSjakob u_int32_t pc_notrunc; 441edd7aa8fSjakob u_int32_t pc_chownrestricted; 442edd7aa8fSjakob u_int32_t pc_caseinsensitive; 443edd7aa8fSjakob u_int32_t pc_casepreserving; 4442be5fe52Sderaadt }; 445