nfsproto.h revision 36541
19336Sdfr/* 29336Sdfr * Copyright (c) 1989, 1993 39336Sdfr * The Regents of the University of California. All rights reserved. 49336Sdfr * 59336Sdfr * This code is derived from software contributed to Berkeley by 69336Sdfr * Rick Macklem at The University of Guelph. 79336Sdfr * 89336Sdfr * Redistribution and use in source and binary forms, with or without 99336Sdfr * modification, are permitted provided that the following conditions 109336Sdfr * are met: 119336Sdfr * 1. Redistributions of source code must retain the above copyright 129336Sdfr * notice, this list of conditions and the following disclaimer. 139336Sdfr * 2. Redistributions in binary form must reproduce the above copyright 149336Sdfr * notice, this list of conditions and the following disclaimer in the 159336Sdfr * documentation and/or other materials provided with the distribution. 169336Sdfr * 3. All advertising materials mentioning features or use of this software 179336Sdfr * must display the following acknowledgement: 189336Sdfr * This product includes software developed by the University of 199336Sdfr * California, Berkeley and its contributors. 209336Sdfr * 4. Neither the name of the University nor the names of its contributors 219336Sdfr * may be used to endorse or promote products derived from this software 229336Sdfr * without specific prior written permission. 239336Sdfr * 249336Sdfr * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 259336Sdfr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 269336Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 279336Sdfr * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 289336Sdfr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 299336Sdfr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 309336Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 319336Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 329336Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 339336Sdfr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 349336Sdfr * SUCH DAMAGE. 359336Sdfr * 3636503Speter * @(#)nfsproto.h 8.2 (Berkeley) 3/30/95 3736541Speter * $Id: nfsproto.h,v 1.5 1998/05/31 19:00:19 peter Exp $ 389336Sdfr */ 399336Sdfr 409336Sdfr#ifndef _NFS_NFSPROTO_H_ 419336Sdfr#define _NFS_NFSPROTO_H_ 429336Sdfr 439336Sdfr/* 449336Sdfr * nfs definitions as per the Version 2 and 3 specs 459336Sdfr */ 469336Sdfr 479336Sdfr/* 489336Sdfr * Constants as defined in the Sun NFS Version 2 and 3 specs. 499336Sdfr * "NFS: Network File System Protocol Specification" RFC1094 509336Sdfr * and in the "NFS: Network File System Version 3 Protocol 519336Sdfr * Specification" 529336Sdfr */ 539336Sdfr 549336Sdfr#define NFS_PORT 2049 559336Sdfr#define NFS_PROG 100003 569336Sdfr#define NFS_VER2 2 579336Sdfr#define NFS_VER3 3 589336Sdfr#define NFS_V2MAXDATA 8192 599336Sdfr#define NFS_MAXDGRAMDATA 16384 609336Sdfr#define NFS_MAXDATA 32768 619336Sdfr#define NFS_MAXPATHLEN 1024 629336Sdfr#define NFS_MAXNAMLEN 255 639336Sdfr#define NFS_MAXPKTHDR 404 649336Sdfr#define NFS_MAXPACKET (NFS_MAXPKTHDR + NFS_MAXDATA) 659336Sdfr#define NFS_MINPACKET 20 669336Sdfr#define NFS_FABLKSIZE 512 /* Size in bytes of a block wrt fa_blocks */ 679336Sdfr 689336Sdfr/* Stat numbers for rpc returns (version 2 and 3) */ 699336Sdfr#define NFS_OK 0 709336Sdfr#define NFSERR_PERM 1 719336Sdfr#define NFSERR_NOENT 2 729336Sdfr#define NFSERR_IO 5 739336Sdfr#define NFSERR_NXIO 6 749336Sdfr#define NFSERR_ACCES 13 759336Sdfr#define NFSERR_EXIST 17 769336Sdfr#define NFSERR_XDEV 18 /* Version 3 only */ 779336Sdfr#define NFSERR_NODEV 19 789336Sdfr#define NFSERR_NOTDIR 20 799336Sdfr#define NFSERR_ISDIR 21 809336Sdfr#define NFSERR_INVAL 22 /* Version 3 only */ 819336Sdfr#define NFSERR_FBIG 27 829336Sdfr#define NFSERR_NOSPC 28 839336Sdfr#define NFSERR_ROFS 30 849336Sdfr#define NFSERR_MLINK 31 /* Version 3 only */ 859336Sdfr#define NFSERR_NAMETOL 63 869336Sdfr#define NFSERR_NOTEMPTY 66 879336Sdfr#define NFSERR_DQUOT 69 889336Sdfr#define NFSERR_STALE 70 899336Sdfr#define NFSERR_REMOTE 71 /* Version 3 only */ 909336Sdfr#define NFSERR_WFLUSH 99 /* Version 2 only */ 919336Sdfr#define NFSERR_BADHANDLE 10001 /* The rest Version 3 only */ 929336Sdfr#define NFSERR_NOT_SYNC 10002 939336Sdfr#define NFSERR_BAD_COOKIE 10003 949336Sdfr#define NFSERR_NOTSUPP 10004 959336Sdfr#define NFSERR_TOOSMALL 10005 969336Sdfr#define NFSERR_SERVERFAULT 10006 979336Sdfr#define NFSERR_BADTYPE 10007 989336Sdfr#define NFSERR_JUKEBOX 10008 999336Sdfr#define NFSERR_TRYLATER NFSERR_JUKEBOX 1009336Sdfr#define NFSERR_STALEWRITEVERF 30001 /* Fake return for nfs_commit() */ 1019336Sdfr 1029336Sdfr#define NFSERR_RETVOID 0x20000000 /* Return void, not error */ 1039336Sdfr#define NFSERR_AUTHERR 0x40000000 /* Mark an authentication error */ 1049336Sdfr#define NFSERR_RETERR 0x80000000 /* Mark an error return for V3 */ 1059336Sdfr 1069336Sdfr/* Sizes in bytes of various nfs rpc components */ 1079336Sdfr#define NFSX_UNSIGNED 4 1089336Sdfr 1099336Sdfr/* specific to NFS Version 2 */ 1109336Sdfr#define NFSX_V2FH 32 1119336Sdfr#define NFSX_V2FATTR 68 1129336Sdfr#define NFSX_V2SATTR 32 1139336Sdfr#define NFSX_V2COOKIE 4 1149336Sdfr#define NFSX_V2STATFS 20 1159336Sdfr 1169336Sdfr/* specific to NFS Version 3 */ 1179336Sdfr#define NFSX_V3FH (sizeof (fhandle_t)) /* size this server uses */ 1189336Sdfr#define NFSX_V3FHMAX 64 /* max. allowed by protocol */ 1199336Sdfr#define NFSX_V3FATTR 84 1209336Sdfr#define NFSX_V3SATTR 60 /* max. all fields filled in */ 1219336Sdfr#define NFSX_V3SRVSATTR (sizeof (struct nfsv3_sattr)) 1229336Sdfr#define NFSX_V3POSTOPATTR (NFSX_V3FATTR + NFSX_UNSIGNED) 1239336Sdfr#define NFSX_V3WCCDATA (NFSX_V3POSTOPATTR + 8 * NFSX_UNSIGNED) 1249336Sdfr#define NFSX_V3COOKIEVERF 8 1259336Sdfr#define NFSX_V3WRITEVERF 8 1269336Sdfr#define NFSX_V3CREATEVERF 8 1279336Sdfr#define NFSX_V3STATFS 52 1289336Sdfr#define NFSX_V3FSINFO 48 1299336Sdfr#define NFSX_V3PATHCONF 24 1309336Sdfr 1319336Sdfr/* variants for both versions */ 1329336Sdfr#define NFSX_FH(v3) ((v3) ? (NFSX_V3FHMAX + NFSX_UNSIGNED) : \ 1339336Sdfr NFSX_V2FH) 1349336Sdfr#define NFSX_SRVFH(v3) ((v3) ? NFSX_V3FH : NFSX_V2FH) 1359336Sdfr#define NFSX_FATTR(v3) ((v3) ? NFSX_V3FATTR : NFSX_V2FATTR) 1369336Sdfr#define NFSX_PREOPATTR(v3) ((v3) ? (7 * NFSX_UNSIGNED) : 0) 1379336Sdfr#define NFSX_POSTOPATTR(v3) ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : 0) 1389336Sdfr#define NFSX_POSTOPORFATTR(v3) ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : \ 1399336Sdfr NFSX_V2FATTR) 1409336Sdfr#define NFSX_WCCDATA(v3) ((v3) ? NFSX_V3WCCDATA : 0) 1419336Sdfr#define NFSX_WCCORFATTR(v3) ((v3) ? NFSX_V3WCCDATA : NFSX_V2FATTR) 1429336Sdfr#define NFSX_SATTR(v3) ((v3) ? NFSX_V3SATTR : NFSX_V2SATTR) 1439336Sdfr#define NFSX_COOKIEVERF(v3) ((v3) ? NFSX_V3COOKIEVERF : 0) 1449336Sdfr#define NFSX_WRITEVERF(v3) ((v3) ? NFSX_V3WRITEVERF : 0) 1459336Sdfr#define NFSX_READDIR(v3) ((v3) ? (5 * NFSX_UNSIGNED) : \ 1469336Sdfr (2 * NFSX_UNSIGNED)) 1479336Sdfr#define NFSX_STATFS(v3) ((v3) ? NFSX_V3STATFS : NFSX_V2STATFS) 1489336Sdfr 1499336Sdfr/* nfs rpc procedure numbers (before version mapping) */ 1509336Sdfr#define NFSPROC_NULL 0 1519336Sdfr#define NFSPROC_GETATTR 1 1529336Sdfr#define NFSPROC_SETATTR 2 1539336Sdfr#define NFSPROC_LOOKUP 3 1549336Sdfr#define NFSPROC_ACCESS 4 1559336Sdfr#define NFSPROC_READLINK 5 1569336Sdfr#define NFSPROC_READ 6 1579336Sdfr#define NFSPROC_WRITE 7 1589336Sdfr#define NFSPROC_CREATE 8 1599336Sdfr#define NFSPROC_MKDIR 9 1609336Sdfr#define NFSPROC_SYMLINK 10 1619336Sdfr#define NFSPROC_MKNOD 11 1629336Sdfr#define NFSPROC_REMOVE 12 1639336Sdfr#define NFSPROC_RMDIR 13 1649336Sdfr#define NFSPROC_RENAME 14 1659336Sdfr#define NFSPROC_LINK 15 1669336Sdfr#define NFSPROC_READDIR 16 1679336Sdfr#define NFSPROC_READDIRPLUS 17 1689336Sdfr#define NFSPROC_FSSTAT 18 1699336Sdfr#define NFSPROC_FSINFO 19 1709336Sdfr#define NFSPROC_PATHCONF 20 1719336Sdfr#define NFSPROC_COMMIT 21 1729336Sdfr 1739336Sdfr/* And leasing (nqnfs) procedure numbers (must be last) */ 1749336Sdfr#define NQNFSPROC_GETLEASE 22 1759336Sdfr#define NQNFSPROC_VACATED 23 1769336Sdfr#define NQNFSPROC_EVICTED 24 1779336Sdfr 1789336Sdfr#define NFSPROC_NOOP 25 1799336Sdfr#define NFS_NPROCS 26 1809336Sdfr 1819336Sdfr/* Actual Version 2 procedure numbers */ 1829336Sdfr#define NFSV2PROC_NULL 0 1839336Sdfr#define NFSV2PROC_GETATTR 1 1849336Sdfr#define NFSV2PROC_SETATTR 2 1859336Sdfr#define NFSV2PROC_NOOP 3 1869336Sdfr#define NFSV2PROC_ROOT NFSV2PROC_NOOP /* Obsolete */ 1879336Sdfr#define NFSV2PROC_LOOKUP 4 1889336Sdfr#define NFSV2PROC_READLINK 5 1899336Sdfr#define NFSV2PROC_READ 6 1909336Sdfr#define NFSV2PROC_WRITECACHE NFSV2PROC_NOOP /* Obsolete */ 1919336Sdfr#define NFSV2PROC_WRITE 8 1929336Sdfr#define NFSV2PROC_CREATE 9 1939336Sdfr#define NFSV2PROC_REMOVE 10 1949336Sdfr#define NFSV2PROC_RENAME 11 1959336Sdfr#define NFSV2PROC_LINK 12 1969336Sdfr#define NFSV2PROC_SYMLINK 13 1979336Sdfr#define NFSV2PROC_MKDIR 14 1989336Sdfr#define NFSV2PROC_RMDIR 15 1999336Sdfr#define NFSV2PROC_READDIR 16 2009336Sdfr#define NFSV2PROC_STATFS 17 2019336Sdfr 2029336Sdfr/* 2039336Sdfr * Constants used by the Version 3 protocol for various RPCs 2049336Sdfr */ 2059336Sdfr#define NFSV3SATTRTIME_DONTCHANGE 0 2069336Sdfr#define NFSV3SATTRTIME_TOSERVER 1 2079336Sdfr#define NFSV3SATTRTIME_TOCLIENT 2 2089336Sdfr 2099336Sdfr#define NFSV3ACCESS_READ 0x01 2109336Sdfr#define NFSV3ACCESS_LOOKUP 0x02 2119336Sdfr#define NFSV3ACCESS_MODIFY 0x04 2129336Sdfr#define NFSV3ACCESS_EXTEND 0x08 2139336Sdfr#define NFSV3ACCESS_DELETE 0x10 2149336Sdfr#define NFSV3ACCESS_EXECUTE 0x20 2159336Sdfr 2169336Sdfr#define NFSV3WRITE_UNSTABLE 0 2179336Sdfr#define NFSV3WRITE_DATASYNC 1 2189336Sdfr#define NFSV3WRITE_FILESYNC 2 2199336Sdfr 2209336Sdfr#define NFSV3CREATE_UNCHECKED 0 2219336Sdfr#define NFSV3CREATE_GUARDED 1 2229336Sdfr#define NFSV3CREATE_EXCLUSIVE 2 2239336Sdfr 2249336Sdfr#define NFSV3FSINFO_LINK 0x01 2259336Sdfr#define NFSV3FSINFO_SYMLINK 0x02 2269336Sdfr#define NFSV3FSINFO_HOMOGENEOUS 0x08 2279336Sdfr#define NFSV3FSINFO_CANSETTIME 0x10 2289336Sdfr 2299336Sdfr/* Conversion macros */ 2309336Sdfr#define vtonfsv2_mode(t,m) \ 2319336Sdfr txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : \ 2329336Sdfr MAKEIMODE((t), (m))) 23336541Speter#define vtonfsv3_mode(m) txdr_unsigned((m) & ALLPERMS) 23436541Speter#define nfstov_mode(a) (fxdr_unsigned(u_int32_t, (a)) & ALLPERMS) 23536541Speter#define vtonfsv2_type(a) txdr_unsigned(nfsv2_type[((int32_t)(a))]) 23636541Speter#define vtonfsv3_type(a) txdr_unsigned(nfsv3_type[((int32_t)(a))]) 23736541Speter#define nfsv2tov_type(a) nv2tov_type[fxdr_unsigned(u_int32_t,(a))&0x7] 23836541Speter#define nfsv3tov_type(a) nv3tov_type[fxdr_unsigned(u_int32_t,(a))&0x7] 2399336Sdfr 2409336Sdfr/* File types */ 2419336Sdfrtypedef enum { NFNON=0, NFREG=1, NFDIR=2, NFBLK=3, NFCHR=4, NFLNK=5, 2429336Sdfr NFSOCK=6, NFFIFO=7 } nfstype; 2439336Sdfr 2449336Sdfr/* Structs for common parts of the rpc's */ 2459336Sdfr/* 2469336Sdfr * File Handle (32 bytes for version 2), variable up to 64 for version 3. 2479336Sdfr * File Handles of up to NFS_SMALLFH in size are stored directly in the 2489336Sdfr * nfs node, whereas larger ones are malloc'd. (This never happens when 2499336Sdfr * NFS_SMALLFH is set to 64.) 2509336Sdfr * NFS_SMALLFH should be in the range of 32 to 64 and be divisible by 4. 2519336Sdfr */ 2529336Sdfr#ifndef NFS_SMALLFH 2539336Sdfr#define NFS_SMALLFH 64 2549336Sdfr#endif 2559336Sdfrunion nfsfh { 2569336Sdfr fhandle_t fh_generic; 2579336Sdfr u_char fh_bytes[NFS_SMALLFH]; 2589336Sdfr}; 2599336Sdfrtypedef union nfsfh nfsfh_t; 2609336Sdfr 2619336Sdfrstruct nfsv2_time { 26236541Speter u_int32_t nfsv2_sec; 26336541Speter u_int32_t nfsv2_usec; 2649336Sdfr}; 2659336Sdfrtypedef struct nfsv2_time nfstime2; 2669336Sdfr 2679336Sdfrstruct nfsv3_time { 26836541Speter u_int32_t nfsv3_sec; 26936541Speter u_int32_t nfsv3_nsec; 2709336Sdfr}; 2719336Sdfrtypedef struct nfsv3_time nfstime3; 2729336Sdfr 2739336Sdfr/* 2749336Sdfr * Quads are defined as arrays of 2 longs to ensure dense packing for the 2759336Sdfr * protocol and to facilitate xdr conversion. 2769336Sdfr */ 2779336Sdfrstruct nfs_uquad { 27836541Speter u_int32_t nfsuquad[2]; 2799336Sdfr}; 2809336Sdfrtypedef struct nfs_uquad nfsuint64; 2819336Sdfr 2829336Sdfr/* 2839336Sdfr * Used to convert between two u_longs and a u_quad_t. 2849336Sdfr */ 2859336Sdfrunion nfs_quadconvert { 28636541Speter u_int32_t lval[2]; 2879336Sdfr u_quad_t qval; 2889336Sdfr}; 2899336Sdfrtypedef union nfs_quadconvert nfsquad_t; 2909336Sdfr 2919336Sdfr/* 2929336Sdfr * NFS Version 3 special file number. 2939336Sdfr */ 2949336Sdfrstruct nfsv3_spec { 29536541Speter u_int32_t specdata1; 29636541Speter u_int32_t specdata2; 2979336Sdfr}; 2989336Sdfrtypedef struct nfsv3_spec nfsv3spec; 2999336Sdfr 3009336Sdfr/* 3019336Sdfr * File attributes and setable attributes. These structures cover both 3029336Sdfr * NFS version 2 and the version 3 protocol. Note that the union is only 3039336Sdfr * used so that one pointer can refer to both variants. These structures 3049336Sdfr * go out on the wire and must be densely packed, so no quad data types 3059336Sdfr * are used. (all fields are longs or u_longs or structures of same) 3069336Sdfr * NB: You can't do sizeof(struct nfs_fattr), you must use the 3079336Sdfr * NFSX_FATTR(v3) macro. 3089336Sdfr */ 3099336Sdfrstruct nfs_fattr { 31036541Speter u_int32_t fa_type; 31136541Speter u_int32_t fa_mode; 31236541Speter u_int32_t fa_nlink; 31336541Speter u_int32_t fa_uid; 31436541Speter u_int32_t fa_gid; 3159336Sdfr union { 3169336Sdfr struct { 31736541Speter u_int32_t nfsv2fa_size; 31836541Speter u_int32_t nfsv2fa_blocksize; 31936541Speter u_int32_t nfsv2fa_rdev; 32036541Speter u_int32_t nfsv2fa_blocks; 32136541Speter u_int32_t nfsv2fa_fsid; 32236541Speter u_int32_t nfsv2fa_fileid; 3239336Sdfr nfstime2 nfsv2fa_atime; 3249336Sdfr nfstime2 nfsv2fa_mtime; 3259336Sdfr nfstime2 nfsv2fa_ctime; 3269336Sdfr } fa_nfsv2; 3279336Sdfr struct { 3289336Sdfr nfsuint64 nfsv3fa_size; 3299336Sdfr nfsuint64 nfsv3fa_used; 3309336Sdfr nfsv3spec nfsv3fa_rdev; 3319336Sdfr nfsuint64 nfsv3fa_fsid; 3329336Sdfr nfsuint64 nfsv3fa_fileid; 3339336Sdfr nfstime3 nfsv3fa_atime; 3349336Sdfr nfstime3 nfsv3fa_mtime; 3359336Sdfr nfstime3 nfsv3fa_ctime; 3369336Sdfr } fa_nfsv3; 3379336Sdfr } fa_un; 3389336Sdfr}; 3399336Sdfr 3409336Sdfr/* and some ugly defines for accessing union components */ 3419336Sdfr#define fa2_size fa_un.fa_nfsv2.nfsv2fa_size 3429336Sdfr#define fa2_blocksize fa_un.fa_nfsv2.nfsv2fa_blocksize 3439336Sdfr#define fa2_rdev fa_un.fa_nfsv2.nfsv2fa_rdev 3449336Sdfr#define fa2_blocks fa_un.fa_nfsv2.nfsv2fa_blocks 3459336Sdfr#define fa2_fsid fa_un.fa_nfsv2.nfsv2fa_fsid 3469336Sdfr#define fa2_fileid fa_un.fa_nfsv2.nfsv2fa_fileid 3479336Sdfr#define fa2_atime fa_un.fa_nfsv2.nfsv2fa_atime 3489336Sdfr#define fa2_mtime fa_un.fa_nfsv2.nfsv2fa_mtime 3499336Sdfr#define fa2_ctime fa_un.fa_nfsv2.nfsv2fa_ctime 3509336Sdfr#define fa3_size fa_un.fa_nfsv3.nfsv3fa_size 3519336Sdfr#define fa3_used fa_un.fa_nfsv3.nfsv3fa_used 3529336Sdfr#define fa3_rdev fa_un.fa_nfsv3.nfsv3fa_rdev 3539336Sdfr#define fa3_fsid fa_un.fa_nfsv3.nfsv3fa_fsid 3549336Sdfr#define fa3_fileid fa_un.fa_nfsv3.nfsv3fa_fileid 3559336Sdfr#define fa3_atime fa_un.fa_nfsv3.nfsv3fa_atime 3569336Sdfr#define fa3_mtime fa_un.fa_nfsv3.nfsv3fa_mtime 3579336Sdfr#define fa3_ctime fa_un.fa_nfsv3.nfsv3fa_ctime 3589336Sdfr 3599336Sdfrstruct nfsv2_sattr { 36036541Speter u_int32_t sa_mode; 36136541Speter u_int32_t sa_uid; 36236541Speter u_int32_t sa_gid; 36336541Speter u_int32_t sa_size; 3649336Sdfr nfstime2 sa_atime; 3659336Sdfr nfstime2 sa_mtime; 3669336Sdfr}; 3679336Sdfr 3689336Sdfr/* 3699336Sdfr * NFS Version 3 sattr structure for the new node creation case. 3709336Sdfr */ 3719336Sdfrstruct nfsv3_sattr { 37236541Speter u_int32_t sa_modetrue; 37336541Speter u_int32_t sa_mode; 37436541Speter u_int32_t sa_uidfalse; 37536541Speter u_int32_t sa_gidfalse; 37636541Speter u_int32_t sa_sizefalse; 37736541Speter u_int32_t sa_atimetype; 3789336Sdfr nfstime3 sa_atime; 37936541Speter u_int32_t sa_mtimetype; 3809336Sdfr nfstime3 sa_mtime; 3819336Sdfr}; 3829336Sdfr 3839336Sdfrstruct nfs_statfs { 3849336Sdfr union { 3859336Sdfr struct { 38636541Speter u_int32_t nfsv2sf_tsize; 38736541Speter u_int32_t nfsv2sf_bsize; 38836541Speter u_int32_t nfsv2sf_blocks; 38936541Speter u_int32_t nfsv2sf_bfree; 39036541Speter u_int32_t nfsv2sf_bavail; 3919336Sdfr } sf_nfsv2; 3929336Sdfr struct { 3939336Sdfr nfsuint64 nfsv3sf_tbytes; 3949336Sdfr nfsuint64 nfsv3sf_fbytes; 3959336Sdfr nfsuint64 nfsv3sf_abytes; 3969336Sdfr nfsuint64 nfsv3sf_tfiles; 3979336Sdfr nfsuint64 nfsv3sf_ffiles; 3989336Sdfr nfsuint64 nfsv3sf_afiles; 39936541Speter u_int32_t nfsv3sf_invarsec; 4009336Sdfr } sf_nfsv3; 4019336Sdfr } sf_un; 4029336Sdfr}; 4039336Sdfr 4049336Sdfr#define sf_tsize sf_un.sf_nfsv2.nfsv2sf_tsize 4059336Sdfr#define sf_bsize sf_un.sf_nfsv2.nfsv2sf_bsize 4069336Sdfr#define sf_blocks sf_un.sf_nfsv2.nfsv2sf_blocks 4079336Sdfr#define sf_bfree sf_un.sf_nfsv2.nfsv2sf_bfree 4089336Sdfr#define sf_bavail sf_un.sf_nfsv2.nfsv2sf_bavail 4099336Sdfr#define sf_tbytes sf_un.sf_nfsv3.nfsv3sf_tbytes 4109336Sdfr#define sf_fbytes sf_un.sf_nfsv3.nfsv3sf_fbytes 4119336Sdfr#define sf_abytes sf_un.sf_nfsv3.nfsv3sf_abytes 4129336Sdfr#define sf_tfiles sf_un.sf_nfsv3.nfsv3sf_tfiles 4139336Sdfr#define sf_ffiles sf_un.sf_nfsv3.nfsv3sf_ffiles 4149336Sdfr#define sf_afiles sf_un.sf_nfsv3.nfsv3sf_afiles 4159336Sdfr#define sf_invarsec sf_un.sf_nfsv3.nfsv3sf_invarsec 4169336Sdfr 4179336Sdfrstruct nfsv3_fsinfo { 41836541Speter u_int32_t fs_rtmax; 41936541Speter u_int32_t fs_rtpref; 42036541Speter u_int32_t fs_rtmult; 42136541Speter u_int32_t fs_wtmax; 42236541Speter u_int32_t fs_wtpref; 42336541Speter u_int32_t fs_wtmult; 42436541Speter u_int32_t fs_dtpref; 4259336Sdfr nfsuint64 fs_maxfilesize; 4269336Sdfr nfstime3 fs_timedelta; 42736541Speter u_int32_t fs_properties; 4289336Sdfr}; 4299336Sdfr 4309336Sdfrstruct nfsv3_pathconf { 43136541Speter u_int32_t pc_linkmax; 43236541Speter u_int32_t pc_namemax; 43336541Speter u_int32_t pc_notrunc; 43436541Speter u_int32_t pc_chownrestricted; 43536541Speter u_int32_t pc_caseinsensitive; 43636541Speter u_int32_t pc_casepreserving; 4379336Sdfr}; 4389336Sdfr 4399336Sdfr#endif 440