1ea7b4bf5SPeter Avalos /* NetBSD: nfs.h,v 1.1 1996/05/23 22:49:53 fvdl Exp */ 241c99275SPeter Avalos 341c99275SPeter Avalos /* 441c99275SPeter Avalos * Copyright (c) 1989, 1993 541c99275SPeter Avalos * The Regents of the University of California. All rights reserved. 641c99275SPeter Avalos * 741c99275SPeter Avalos * This code is derived from software contributed to Berkeley by 841c99275SPeter Avalos * Rick Macklem at The University of Guelph. 941c99275SPeter Avalos * 1041c99275SPeter Avalos * Redistribution and use in source and binary forms, with or without 1141c99275SPeter Avalos * modification, are permitted provided that the following conditions 1241c99275SPeter Avalos * are met: 1341c99275SPeter Avalos * 1. Redistributions of source code must retain the above copyright 1441c99275SPeter Avalos * notice, this list of conditions and the following disclaimer. 1541c99275SPeter Avalos * 2. Redistributions in binary form must reproduce the above copyright 1641c99275SPeter Avalos * notice, this list of conditions and the following disclaimer in the 1741c99275SPeter Avalos * documentation and/or other materials provided with the distribution. 1841c99275SPeter Avalos * 3. All advertising materials mentioning features or use of this software 1941c99275SPeter Avalos * must display the following acknowledgement: 2041c99275SPeter Avalos * This product includes software developed by the University of 2141c99275SPeter Avalos * California, Berkeley and its contributors. 2241c99275SPeter Avalos * 4. Neither the name of the University nor the names of its contributors 2341c99275SPeter Avalos * may be used to endorse or promote products derived from this software 2441c99275SPeter Avalos * without specific prior written permission. 2541c99275SPeter Avalos * 2641c99275SPeter Avalos * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2741c99275SPeter Avalos * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2841c99275SPeter Avalos * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2941c99275SPeter Avalos * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 3041c99275SPeter Avalos * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 3141c99275SPeter Avalos * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 3241c99275SPeter Avalos * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3341c99275SPeter Avalos * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 3441c99275SPeter Avalos * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3541c99275SPeter Avalos * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3641c99275SPeter Avalos * SUCH DAMAGE. 3741c99275SPeter Avalos * 3841c99275SPeter Avalos * @(#)nfsproto.h 8.2 (Berkeley) 3/30/95 3941c99275SPeter Avalos */ 4041c99275SPeter Avalos 4141c99275SPeter Avalos /* 4241c99275SPeter Avalos * nfs definitions as per the Version 2 and 3 specs 4341c99275SPeter Avalos */ 4441c99275SPeter Avalos 4541c99275SPeter Avalos /* 4641c99275SPeter Avalos * Constants as defined in the Sun NFS Version 2 and 3 specs. 4741c99275SPeter Avalos * "NFS: Network File System Protocol Specification" RFC1094 4841c99275SPeter Avalos * and in the "NFS: Network File System Version 3 Protocol 4941c99275SPeter Avalos * Specification" 5041c99275SPeter Avalos */ 5141c99275SPeter Avalos 5241c99275SPeter Avalos #define NFS_PORT 2049 5341c99275SPeter Avalos #define NFS_PROG 100003 5441c99275SPeter Avalos #define NFS_VER2 2 5541c99275SPeter Avalos #define NFS_VER3 3 5641c99275SPeter Avalos #define NFS_V2MAXDATA 8192 5741c99275SPeter Avalos #define NFS_MAXDGRAMDATA 16384 5841c99275SPeter Avalos #define NFS_MAXDATA 32768 5941c99275SPeter Avalos #define NFS_MAXPATHLEN 1024 6041c99275SPeter Avalos #define NFS_MAXNAMLEN 255 6141c99275SPeter Avalos #define NFS_MAXPKTHDR 404 6241c99275SPeter Avalos #define NFS_MAXPACKET (NFS_MAXPKTHDR + NFS_MAXDATA) 6341c99275SPeter Avalos #define NFS_MINPACKET 20 6441c99275SPeter Avalos #define NFS_FABLKSIZE 512 /* Size in bytes of a block wrt fa_blocks */ 6541c99275SPeter Avalos 6641c99275SPeter Avalos /* Stat numbers for rpc returns (version 2 and 3) */ 6741c99275SPeter Avalos #define NFS_OK 0 6841c99275SPeter Avalos #define NFSERR_PERM 1 6941c99275SPeter Avalos #define NFSERR_NOENT 2 7041c99275SPeter Avalos #define NFSERR_IO 5 7141c99275SPeter Avalos #define NFSERR_NXIO 6 7241c99275SPeter Avalos #define NFSERR_ACCES 13 7341c99275SPeter Avalos #define NFSERR_EXIST 17 7441c99275SPeter Avalos #define NFSERR_XDEV 18 /* Version 3 only */ 7541c99275SPeter Avalos #define NFSERR_NODEV 19 7641c99275SPeter Avalos #define NFSERR_NOTDIR 20 7741c99275SPeter Avalos #define NFSERR_ISDIR 21 7841c99275SPeter Avalos #define NFSERR_INVAL 22 /* Version 3 only */ 7941c99275SPeter Avalos #define NFSERR_FBIG 27 8041c99275SPeter Avalos #define NFSERR_NOSPC 28 8141c99275SPeter Avalos #define NFSERR_ROFS 30 8241c99275SPeter Avalos #define NFSERR_MLINK 31 /* Version 3 only */ 8341c99275SPeter Avalos #define NFSERR_NAMETOL 63 8441c99275SPeter Avalos #define NFSERR_NOTEMPTY 66 8541c99275SPeter Avalos #define NFSERR_DQUOT 69 8641c99275SPeter Avalos #define NFSERR_STALE 70 8741c99275SPeter Avalos #define NFSERR_REMOTE 71 /* Version 3 only */ 8841c99275SPeter Avalos #define NFSERR_WFLUSH 99 /* Version 2 only */ 8941c99275SPeter Avalos #define NFSERR_BADHANDLE 10001 /* The rest Version 3 only */ 9041c99275SPeter Avalos #define NFSERR_NOT_SYNC 10002 9141c99275SPeter Avalos #define NFSERR_BAD_COOKIE 10003 9241c99275SPeter Avalos #define NFSERR_NOTSUPP 10004 9341c99275SPeter Avalos #define NFSERR_TOOSMALL 10005 9441c99275SPeter Avalos #define NFSERR_SERVERFAULT 10006 9541c99275SPeter Avalos #define NFSERR_BADTYPE 10007 9641c99275SPeter Avalos #define NFSERR_JUKEBOX 10008 9741c99275SPeter Avalos #define NFSERR_TRYLATER NFSERR_JUKEBOX 9841c99275SPeter Avalos #define NFSERR_STALEWRITEVERF 30001 /* Fake return for nfs_commit() */ 9941c99275SPeter Avalos 10041c99275SPeter Avalos #define NFSERR_RETVOID 0x20000000 /* Return void, not error */ 10141c99275SPeter Avalos #define NFSERR_AUTHERR 0x40000000 /* Mark an authentication error */ 10241c99275SPeter Avalos #define NFSERR_RETERR 0x80000000 /* Mark an error return for V3 */ 10341c99275SPeter Avalos 10441c99275SPeter Avalos /* Sizes in bytes of various nfs rpc components */ 10541c99275SPeter Avalos #define NFSX_UNSIGNED 4 10641c99275SPeter Avalos 10741c99275SPeter Avalos /* specific to NFS Version 2 */ 10841c99275SPeter Avalos #define NFSX_V2FH 32 10941c99275SPeter Avalos #define NFSX_V2FATTR 68 11041c99275SPeter Avalos #define NFSX_V2SATTR 32 11141c99275SPeter Avalos #define NFSX_V2COOKIE 4 11241c99275SPeter Avalos #define NFSX_V2STATFS 20 11341c99275SPeter Avalos 11441c99275SPeter Avalos /* specific to NFS Version 3 */ 11541c99275SPeter Avalos #if 0 11641c99275SPeter Avalos #define NFSX_V3FH (sizeof (fhandle_t)) /* size this server uses */ 11741c99275SPeter Avalos #endif 11841c99275SPeter Avalos #define NFSX_V3FHMAX 64 /* max. allowed by protocol */ 11941c99275SPeter Avalos #define NFSX_V3FATTR 84 12041c99275SPeter Avalos #define NFSX_V3SATTR 60 /* max. all fields filled in */ 12141c99275SPeter Avalos #define NFSX_V3POSTOPATTR (NFSX_V3FATTR + NFSX_UNSIGNED) 12241c99275SPeter Avalos #define NFSX_V3WCCDATA (NFSX_V3POSTOPATTR + 8 * NFSX_UNSIGNED) 12341c99275SPeter Avalos #define NFSX_V3COOKIEVERF 8 12441c99275SPeter Avalos #define NFSX_V3WRITEVERF 8 12541c99275SPeter Avalos #define NFSX_V3CREATEVERF 8 12641c99275SPeter Avalos #define NFSX_V3STATFS 52 12741c99275SPeter Avalos #define NFSX_V3FSINFO 48 12841c99275SPeter Avalos #define NFSX_V3PATHCONF 24 12941c99275SPeter Avalos 13041c99275SPeter Avalos /* variants for both versions */ 13141c99275SPeter Avalos #define NFSX_FH(v3) ((v3) ? (NFSX_V3FHMAX + NFSX_UNSIGNED) : \ 13241c99275SPeter Avalos NFSX_V2FH) 13341c99275SPeter Avalos #define NFSX_SRVFH(v3) ((v3) ? NFSX_V3FH : NFSX_V2FH) 13441c99275SPeter Avalos #define NFSX_FATTR(v3) ((v3) ? NFSX_V3FATTR : NFSX_V2FATTR) 13541c99275SPeter Avalos #define NFSX_PREOPATTR(v3) ((v3) ? (7 * NFSX_UNSIGNED) : 0) 13641c99275SPeter Avalos #define NFSX_POSTOPATTR(v3) ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : 0) 13741c99275SPeter Avalos #define NFSX_POSTOPORFATTR(v3) ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : \ 13841c99275SPeter Avalos NFSX_V2FATTR) 13941c99275SPeter Avalos #define NFSX_WCCDATA(v3) ((v3) ? NFSX_V3WCCDATA : 0) 14041c99275SPeter Avalos #define NFSX_WCCORFATTR(v3) ((v3) ? NFSX_V3WCCDATA : NFSX_V2FATTR) 14141c99275SPeter Avalos #define NFSX_COOKIEVERF(v3) ((v3) ? NFSX_V3COOKIEVERF : 0) 14241c99275SPeter Avalos #define NFSX_WRITEVERF(v3) ((v3) ? NFSX_V3WRITEVERF : 0) 14341c99275SPeter Avalos #define NFSX_READDIR(v3) ((v3) ? (5 * NFSX_UNSIGNED) : \ 14441c99275SPeter Avalos (2 * NFSX_UNSIGNED)) 14541c99275SPeter Avalos #define NFSX_STATFS(v3) ((v3) ? NFSX_V3STATFS : NFSX_V2STATFS) 14641c99275SPeter Avalos 14741c99275SPeter Avalos /* nfs rpc procedure numbers (before version mapping) */ 14841c99275SPeter Avalos #define NFSPROC_NULL 0 14941c99275SPeter Avalos #define NFSPROC_GETATTR 1 15041c99275SPeter Avalos #define NFSPROC_SETATTR 2 15141c99275SPeter Avalos #define NFSPROC_LOOKUP 3 15241c99275SPeter Avalos #define NFSPROC_ACCESS 4 15341c99275SPeter Avalos #define NFSPROC_READLINK 5 15441c99275SPeter Avalos #define NFSPROC_READ 6 15541c99275SPeter Avalos #define NFSPROC_WRITE 7 15641c99275SPeter Avalos #define NFSPROC_CREATE 8 15741c99275SPeter Avalos #define NFSPROC_MKDIR 9 15841c99275SPeter Avalos #define NFSPROC_SYMLINK 10 15941c99275SPeter Avalos #define NFSPROC_MKNOD 11 16041c99275SPeter Avalos #define NFSPROC_REMOVE 12 16141c99275SPeter Avalos #define NFSPROC_RMDIR 13 16241c99275SPeter Avalos #define NFSPROC_RENAME 14 16341c99275SPeter Avalos #define NFSPROC_LINK 15 16441c99275SPeter Avalos #define NFSPROC_READDIR 16 16541c99275SPeter Avalos #define NFSPROC_READDIRPLUS 17 16641c99275SPeter Avalos #define NFSPROC_FSSTAT 18 16741c99275SPeter Avalos #define NFSPROC_FSINFO 19 16841c99275SPeter Avalos #define NFSPROC_PATHCONF 20 16941c99275SPeter Avalos #define NFSPROC_COMMIT 21 17041c99275SPeter Avalos 17141c99275SPeter Avalos /* And leasing (nqnfs) procedure numbers (must be last) */ 17241c99275SPeter Avalos #define NQNFSPROC_GETLEASE 22 17341c99275SPeter Avalos #define NQNFSPROC_VACATED 23 17441c99275SPeter Avalos #define NQNFSPROC_EVICTED 24 17541c99275SPeter Avalos 17641c99275SPeter Avalos #define NFSPROC_NOOP 25 17741c99275SPeter Avalos #define NFS_NPROCS 26 17841c99275SPeter Avalos 17941c99275SPeter Avalos /* Actual Version 2 procedure numbers */ 18041c99275SPeter Avalos #define NFSV2PROC_NULL 0 18141c99275SPeter Avalos #define NFSV2PROC_GETATTR 1 18241c99275SPeter Avalos #define NFSV2PROC_SETATTR 2 18341c99275SPeter Avalos #define NFSV2PROC_NOOP 3 18441c99275SPeter Avalos #define NFSV2PROC_ROOT NFSV2PROC_NOOP /* Obsolete */ 18541c99275SPeter Avalos #define NFSV2PROC_LOOKUP 4 18641c99275SPeter Avalos #define NFSV2PROC_READLINK 5 18741c99275SPeter Avalos #define NFSV2PROC_READ 6 18841c99275SPeter Avalos #define NFSV2PROC_WRITECACHE NFSV2PROC_NOOP /* Obsolete */ 18941c99275SPeter Avalos #define NFSV2PROC_WRITE 8 19041c99275SPeter Avalos #define NFSV2PROC_CREATE 9 19141c99275SPeter Avalos #define NFSV2PROC_REMOVE 10 19241c99275SPeter Avalos #define NFSV2PROC_RENAME 11 19341c99275SPeter Avalos #define NFSV2PROC_LINK 12 19441c99275SPeter Avalos #define NFSV2PROC_SYMLINK 13 19541c99275SPeter Avalos #define NFSV2PROC_MKDIR 14 19641c99275SPeter Avalos #define NFSV2PROC_RMDIR 15 19741c99275SPeter Avalos #define NFSV2PROC_READDIR 16 19841c99275SPeter Avalos #define NFSV2PROC_STATFS 17 19941c99275SPeter Avalos 20041c99275SPeter Avalos /* 20141c99275SPeter Avalos * Constants used by the Version 3 protocol for various RPCs 20241c99275SPeter Avalos */ 20341c99275SPeter Avalos #define NFSV3SATTRTIME_DONTCHANGE 0 20441c99275SPeter Avalos #define NFSV3SATTRTIME_TOSERVER 1 20541c99275SPeter Avalos #define NFSV3SATTRTIME_TOCLIENT 2 20641c99275SPeter Avalos 20741c99275SPeter Avalos #define NFSV3ATTRTIME_NMODES 3 20841c99275SPeter Avalos 20941c99275SPeter Avalos #define NFSV3ACCESS_READ 0x01 21041c99275SPeter Avalos #define NFSV3ACCESS_LOOKUP 0x02 21141c99275SPeter Avalos #define NFSV3ACCESS_MODIFY 0x04 21241c99275SPeter Avalos #define NFSV3ACCESS_EXTEND 0x08 21341c99275SPeter Avalos #define NFSV3ACCESS_DELETE 0x10 21441c99275SPeter Avalos #define NFSV3ACCESS_EXECUTE 0x20 21527bfbee1SPeter Avalos #define NFSV3ACCESS_FULL 0x3f 21641c99275SPeter Avalos 21741c99275SPeter Avalos #define NFSV3WRITE_UNSTABLE 0 21841c99275SPeter Avalos #define NFSV3WRITE_DATASYNC 1 21941c99275SPeter Avalos #define NFSV3WRITE_FILESYNC 2 22041c99275SPeter Avalos 22141c99275SPeter Avalos #define NFSV3WRITE_NMODES 3 22241c99275SPeter Avalos 22341c99275SPeter Avalos #define NFSV3CREATE_UNCHECKED 0 22441c99275SPeter Avalos #define NFSV3CREATE_GUARDED 1 22541c99275SPeter Avalos #define NFSV3CREATE_EXCLUSIVE 2 22641c99275SPeter Avalos 22741c99275SPeter Avalos #define NFSV3CREATE_NMODES 3 22841c99275SPeter Avalos 22941c99275SPeter Avalos #define NFSV3FSINFO_LINK 0x01 23041c99275SPeter Avalos #define NFSV3FSINFO_SYMLINK 0x02 23141c99275SPeter Avalos #define NFSV3FSINFO_HOMOGENEOUS 0x08 23241c99275SPeter Avalos #define NFSV3FSINFO_CANSETTIME 0x10 23341c99275SPeter Avalos 23441c99275SPeter Avalos /* Conversion macros */ 23541c99275SPeter Avalos #define vtonfsv2_mode(t,m) \ 23641c99275SPeter Avalos txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : \ 23741c99275SPeter Avalos MAKEIMODE((t), (m))) 23841c99275SPeter Avalos #define vtonfsv3_mode(m) txdr_unsigned((m) & 07777) 239411677aeSAaron LI #define nfstov_mode(a) (fxdr_unsigned(uint16_t, (a))&07777) 24041c99275SPeter Avalos #define vtonfsv2_type(a) txdr_unsigned(nfsv2_type[((int32_t)(a))]) 24141c99275SPeter Avalos #define vtonfsv3_type(a) txdr_unsigned(nfsv3_type[((int32_t)(a))]) 242411677aeSAaron LI #define nfsv2tov_type(a) nv2tov_type[fxdr_unsigned(uint32_t,(a))&0x7] 243411677aeSAaron LI #define nfsv3tov_type(a) nv3tov_type[fxdr_unsigned(uint32_t,(a))&0x7] 24441c99275SPeter Avalos 24541c99275SPeter Avalos /* File types */ 24641c99275SPeter Avalos typedef enum { NFNON=0, NFREG=1, NFDIR=2, NFBLK=3, NFCHR=4, NFLNK=5, 24741c99275SPeter Avalos NFSOCK=6, NFFIFO=7 } nfs_type; 24841c99275SPeter Avalos 249*ed775ee7SAntonio Huete Jimenez /* 250*ed775ee7SAntonio Huete Jimenez * Structs for common parts of the rpc's 251*ed775ee7SAntonio Huete Jimenez * 252*ed775ee7SAntonio Huete Jimenez * NOTE: these structures are not always overlaid directly on the 253*ed775ee7SAntonio Huete Jimenez * packet data - sometimes we declare a local variable of that type, 254*ed775ee7SAntonio Huete Jimenez * and fill it up with fields extracted using byte pointers - so we 255*ed775ee7SAntonio Huete Jimenez * don't use nd_ types for their members. 256*ed775ee7SAntonio Huete Jimenez */ 257*ed775ee7SAntonio Huete Jimenez 25841c99275SPeter Avalos /* 25941c99275SPeter Avalos * File Handle (32 bytes for version 2), variable up to 64 for version 3. 26041c99275SPeter Avalos * File Handles of up to NFS_SMALLFH in size are stored directly in the 26141c99275SPeter Avalos * nfs node, whereas larger ones are malloc'd. (This never happens when 26241c99275SPeter Avalos * NFS_SMALLFH is set to 64.) 26341c99275SPeter Avalos * NFS_SMALLFH should be in the range of 32 to 64 and be divisible by 4. 26441c99275SPeter Avalos */ 26541c99275SPeter Avalos #ifndef NFS_SMALLFH 26641c99275SPeter Avalos #define NFS_SMALLFH 64 26741c99275SPeter Avalos #endif 26841c99275SPeter Avalos union nfsfh { 26941c99275SPeter Avalos /* fhandle_t fh_generic; */ 27041c99275SPeter Avalos u_char fh_bytes[NFS_SMALLFH]; 27141c99275SPeter Avalos }; 27241c99275SPeter Avalos typedef union nfsfh nfsfh_t; 27341c99275SPeter Avalos 27441c99275SPeter Avalos struct nfsv2_time { 275*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv2_sec; 276*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv2_usec; 27741c99275SPeter Avalos }; 27841c99275SPeter Avalos typedef struct nfsv2_time nfstime2; 27941c99275SPeter Avalos 28041c99275SPeter Avalos struct nfsv3_time { 281*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv3_sec; 282*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv3_nsec; 28341c99275SPeter Avalos }; 28441c99275SPeter Avalos typedef struct nfsv3_time nfstime3; 28541c99275SPeter Avalos 28641c99275SPeter Avalos /* 28741c99275SPeter Avalos * NFS Version 3 special file number. 28841c99275SPeter Avalos */ 28941c99275SPeter Avalos struct nfsv3_spec { 290*ed775ee7SAntonio Huete Jimenez nd_uint32_t specdata1; 291*ed775ee7SAntonio Huete Jimenez nd_uint32_t specdata2; 29241c99275SPeter Avalos }; 29341c99275SPeter Avalos typedef struct nfsv3_spec nfsv3spec; 29441c99275SPeter Avalos 29541c99275SPeter Avalos /* 29641c99275SPeter Avalos * File attributes and setable attributes. These structures cover both 29741c99275SPeter Avalos * NFS version 2 and the version 3 protocol. Note that the union is only 29841c99275SPeter Avalos * used so that one pointer can refer to both variants. These structures 29941c99275SPeter Avalos * go out on the wire and must be densely packed, so no quad data types 30041c99275SPeter Avalos * are used. (all fields are longs or u_longs or structures of same) 30141c99275SPeter Avalos * NB: You can't do sizeof(struct nfs_fattr), you must use the 30241c99275SPeter Avalos * NFSX_FATTR(v3) macro. 30341c99275SPeter Avalos */ 30441c99275SPeter Avalos struct nfs_fattr { 305*ed775ee7SAntonio Huete Jimenez nd_uint32_t fa_type; 306*ed775ee7SAntonio Huete Jimenez nd_uint32_t fa_mode; 307*ed775ee7SAntonio Huete Jimenez nd_uint32_t fa_nlink; 308*ed775ee7SAntonio Huete Jimenez nd_uint32_t fa_uid; 309*ed775ee7SAntonio Huete Jimenez nd_uint32_t fa_gid; 31041c99275SPeter Avalos union { 31141c99275SPeter Avalos struct { 312*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv2fa_size; 313*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv2fa_blocksize; 314*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv2fa_rdev; 315*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv2fa_blocks; 316*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv2fa_fsid; 317*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv2fa_fileid; 31841c99275SPeter Avalos nfstime2 nfsv2fa_atime; 31941c99275SPeter Avalos nfstime2 nfsv2fa_mtime; 32041c99275SPeter Avalos nfstime2 nfsv2fa_ctime; 32141c99275SPeter Avalos } fa_nfsv2; 32241c99275SPeter Avalos struct { 323*ed775ee7SAntonio Huete Jimenez nd_uint64_t nfsv3fa_size; 324*ed775ee7SAntonio Huete Jimenez nd_uint64_t nfsv3fa_used; 32541c99275SPeter Avalos nfsv3spec nfsv3fa_rdev; 326*ed775ee7SAntonio Huete Jimenez nd_uint64_t nfsv3fa_fsid; 327*ed775ee7SAntonio Huete Jimenez nd_uint64_t nfsv3fa_fileid; 32841c99275SPeter Avalos nfstime3 nfsv3fa_atime; 32941c99275SPeter Avalos nfstime3 nfsv3fa_mtime; 33041c99275SPeter Avalos nfstime3 nfsv3fa_ctime; 33141c99275SPeter Avalos } fa_nfsv3; 33241c99275SPeter Avalos } fa_un; 33341c99275SPeter Avalos }; 33441c99275SPeter Avalos 33541c99275SPeter Avalos /* and some ugly defines for accessing union components */ 33641c99275SPeter Avalos #define fa2_size fa_un.fa_nfsv2.nfsv2fa_size 33741c99275SPeter Avalos #define fa2_blocksize fa_un.fa_nfsv2.nfsv2fa_blocksize 33841c99275SPeter Avalos #define fa2_rdev fa_un.fa_nfsv2.nfsv2fa_rdev 33941c99275SPeter Avalos #define fa2_blocks fa_un.fa_nfsv2.nfsv2fa_blocks 34041c99275SPeter Avalos #define fa2_fsid fa_un.fa_nfsv2.nfsv2fa_fsid 34141c99275SPeter Avalos #define fa2_fileid fa_un.fa_nfsv2.nfsv2fa_fileid 34241c99275SPeter Avalos #define fa2_atime fa_un.fa_nfsv2.nfsv2fa_atime 34341c99275SPeter Avalos #define fa2_mtime fa_un.fa_nfsv2.nfsv2fa_mtime 34441c99275SPeter Avalos #define fa2_ctime fa_un.fa_nfsv2.nfsv2fa_ctime 34541c99275SPeter Avalos #define fa3_size fa_un.fa_nfsv3.nfsv3fa_size 34641c99275SPeter Avalos #define fa3_used fa_un.fa_nfsv3.nfsv3fa_used 34741c99275SPeter Avalos #define fa3_rdev fa_un.fa_nfsv3.nfsv3fa_rdev 34841c99275SPeter Avalos #define fa3_fsid fa_un.fa_nfsv3.nfsv3fa_fsid 34941c99275SPeter Avalos #define fa3_fileid fa_un.fa_nfsv3.nfsv3fa_fileid 35041c99275SPeter Avalos #define fa3_atime fa_un.fa_nfsv3.nfsv3fa_atime 35141c99275SPeter Avalos #define fa3_mtime fa_un.fa_nfsv3.nfsv3fa_mtime 35241c99275SPeter Avalos #define fa3_ctime fa_un.fa_nfsv3.nfsv3fa_ctime 35341c99275SPeter Avalos 35441c99275SPeter Avalos struct nfsv2_sattr { 355*ed775ee7SAntonio Huete Jimenez nd_uint32_t sa_mode; 356*ed775ee7SAntonio Huete Jimenez nd_uint32_t sa_uid; 357*ed775ee7SAntonio Huete Jimenez nd_uint32_t sa_gid; 358*ed775ee7SAntonio Huete Jimenez nd_uint32_t sa_size; 35941c99275SPeter Avalos nfstime2 sa_atime; 36041c99275SPeter Avalos nfstime2 sa_mtime; 36141c99275SPeter Avalos }; 36241c99275SPeter Avalos 36341c99275SPeter Avalos struct nfs_statfs { 36441c99275SPeter Avalos union { 36541c99275SPeter Avalos struct { 366*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv2sf_tsize; 367*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv2sf_bsize; 368*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv2sf_blocks; 369*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv2sf_bfree; 370*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv2sf_bavail; 37141c99275SPeter Avalos } sf_nfsv2; 37241c99275SPeter Avalos struct { 373*ed775ee7SAntonio Huete Jimenez nd_uint64_t nfsv3sf_tbytes; 374*ed775ee7SAntonio Huete Jimenez nd_uint64_t nfsv3sf_fbytes; 375*ed775ee7SAntonio Huete Jimenez nd_uint64_t nfsv3sf_abytes; 376*ed775ee7SAntonio Huete Jimenez nd_uint64_t nfsv3sf_tfiles; 377*ed775ee7SAntonio Huete Jimenez nd_uint64_t nfsv3sf_ffiles; 378*ed775ee7SAntonio Huete Jimenez nd_uint64_t nfsv3sf_afiles; 379*ed775ee7SAntonio Huete Jimenez nd_uint32_t nfsv3sf_invarsec; 38041c99275SPeter Avalos } sf_nfsv3; 38141c99275SPeter Avalos } sf_un; 38241c99275SPeter Avalos }; 38341c99275SPeter Avalos 38441c99275SPeter Avalos #define sf_tsize sf_un.sf_nfsv2.nfsv2sf_tsize 38541c99275SPeter Avalos #define sf_bsize sf_un.sf_nfsv2.nfsv2sf_bsize 38641c99275SPeter Avalos #define sf_blocks sf_un.sf_nfsv2.nfsv2sf_blocks 38741c99275SPeter Avalos #define sf_bfree sf_un.sf_nfsv2.nfsv2sf_bfree 38841c99275SPeter Avalos #define sf_bavail sf_un.sf_nfsv2.nfsv2sf_bavail 38941c99275SPeter Avalos #define sf_tbytes sf_un.sf_nfsv3.nfsv3sf_tbytes 39041c99275SPeter Avalos #define sf_fbytes sf_un.sf_nfsv3.nfsv3sf_fbytes 39141c99275SPeter Avalos #define sf_abytes sf_un.sf_nfsv3.nfsv3sf_abytes 39241c99275SPeter Avalos #define sf_tfiles sf_un.sf_nfsv3.nfsv3sf_tfiles 39341c99275SPeter Avalos #define sf_ffiles sf_un.sf_nfsv3.nfsv3sf_ffiles 39441c99275SPeter Avalos #define sf_afiles sf_un.sf_nfsv3.nfsv3sf_afiles 39541c99275SPeter Avalos #define sf_invarsec sf_un.sf_nfsv3.nfsv3sf_invarsec 39641c99275SPeter Avalos 39741c99275SPeter Avalos struct nfsv3_fsinfo { 398*ed775ee7SAntonio Huete Jimenez nd_uint32_t fs_rtmax; 399*ed775ee7SAntonio Huete Jimenez nd_uint32_t fs_rtpref; 400*ed775ee7SAntonio Huete Jimenez nd_uint32_t fs_rtmult; 401*ed775ee7SAntonio Huete Jimenez nd_uint32_t fs_wtmax; 402*ed775ee7SAntonio Huete Jimenez nd_uint32_t fs_wtpref; 403*ed775ee7SAntonio Huete Jimenez nd_uint32_t fs_wtmult; 404*ed775ee7SAntonio Huete Jimenez nd_uint32_t fs_dtpref; 405*ed775ee7SAntonio Huete Jimenez nd_uint64_t fs_maxfilesize; 40641c99275SPeter Avalos nfstime3 fs_timedelta; 407*ed775ee7SAntonio Huete Jimenez nd_uint32_t fs_properties; 40841c99275SPeter Avalos }; 40941c99275SPeter Avalos 41041c99275SPeter Avalos struct nfsv3_pathconf { 411*ed775ee7SAntonio Huete Jimenez nd_uint32_t pc_linkmax; 412*ed775ee7SAntonio Huete Jimenez nd_uint32_t pc_namemax; 413*ed775ee7SAntonio Huete Jimenez nd_uint32_t pc_notrunc; 414*ed775ee7SAntonio Huete Jimenez nd_uint32_t pc_chownrestricted; 415*ed775ee7SAntonio Huete Jimenez nd_uint32_t pc_caseinsensitive; 416*ed775ee7SAntonio Huete Jimenez nd_uint32_t pc_casepreserving; 41741c99275SPeter Avalos }; 418