138414Smckusick /* 263236Sbostic * Copyright (c) 1989, 1993 363236Sbostic * The Regents of the University of California. All rights reserved. 438414Smckusick * 538414Smckusick * This code is derived from software contributed to Berkeley by 638414Smckusick * Rick Macklem at The University of Guelph. 738414Smckusick * 844515Sbostic * %sccs.include.redist.c% 938414Smckusick * 10*68653Smckusick * @(#)nfsproto.h 8.2 (Berkeley) 03/30/95 1138414Smckusick */ 1238414Smckusick 13*68653Smckusick #ifndef _NFS_NFSPROTO_H_ 14*68653Smckusick #define _NFS_NFSPROTO_H_ 15*68653Smckusick 16*68653Smckusick 1738414Smckusick /* 18*68653Smckusick * nfs definitions as per the Version 2 and 3 specs 1938414Smckusick */ 2038414Smckusick 2138414Smckusick /* 22*68653Smckusick * Constants as defined in the Sun NFS Version 2 and 3 specs. 2339746Smckusick * "NFS: Network File System Protocol Specification" RFC1094 24*68653Smckusick * and in the "NFS: Network File System Version 3 Protocol 25*68653Smckusick * Specification" 2638414Smckusick */ 2738414Smckusick 2838414Smckusick #define NFS_PORT 2049 2938414Smckusick #define NFS_PROG 100003 3038414Smckusick #define NFS_VER2 2 31*68653Smckusick #define NFS_VER3 3 32*68653Smckusick #define NFS_V2MAXDATA 8192 33*68653Smckusick #define NFS_MAXDGRAMDATA 16384 3443347Smckusick #define NFS_MAXDATA 32768 3538414Smckusick #define NFS_MAXPATHLEN 1024 3638414Smckusick #define NFS_MAXNAMLEN 255 3741896Smckusick #define NFS_MAXPKTHDR 404 38*68653Smckusick #define NFS_MAXPACKET (NFS_MAXPKTHDR + NFS_MAXDATA) 3952196Smckusick #define NFS_MINPACKET 20 4042240Smckusick #define NFS_FABLKSIZE 512 /* Size in bytes of a block wrt fa_blocks */ 4138414Smckusick 42*68653Smckusick /* Stat numbers for rpc returns (version 2 and 3) */ 43*68653Smckusick #define NFS_OK 0 44*68653Smckusick #define NFSERR_PERM 1 45*68653Smckusick #define NFSERR_NOENT 2 46*68653Smckusick #define NFSERR_IO 5 47*68653Smckusick #define NFSERR_NXIO 6 48*68653Smckusick #define NFSERR_ACCES 13 49*68653Smckusick #define NFSERR_EXIST 17 50*68653Smckusick #define NFSERR_XDEV 18 /* Version 3 only */ 51*68653Smckusick #define NFSERR_NODEV 19 52*68653Smckusick #define NFSERR_NOTDIR 20 53*68653Smckusick #define NFSERR_ISDIR 21 54*68653Smckusick #define NFSERR_INVAL 22 /* Version 3 only */ 55*68653Smckusick #define NFSERR_FBIG 27 56*68653Smckusick #define NFSERR_NOSPC 28 57*68653Smckusick #define NFSERR_ROFS 30 58*68653Smckusick #define NFSERR_MLINK 31 /* Version 3 only */ 59*68653Smckusick #define NFSERR_NAMETOL 63 60*68653Smckusick #define NFSERR_NOTEMPTY 66 61*68653Smckusick #define NFSERR_DQUOT 69 62*68653Smckusick #define NFSERR_STALE 70 63*68653Smckusick #define NFSERR_REMOTE 71 /* Version 3 only */ 64*68653Smckusick #define NFSERR_WFLUSH 99 /* Version 2 only */ 65*68653Smckusick #define NFSERR_BADHANDLE 10001 /* The rest Version 3 only */ 66*68653Smckusick #define NFSERR_NOT_SYNC 10002 67*68653Smckusick #define NFSERR_BAD_COOKIE 10003 68*68653Smckusick #define NFSERR_NOTSUPP 10004 69*68653Smckusick #define NFSERR_TOOSMALL 10005 70*68653Smckusick #define NFSERR_SERVERFAULT 10006 71*68653Smckusick #define NFSERR_BADTYPE 10007 72*68653Smckusick #define NFSERR_JUKEBOX 10008 73*68653Smckusick #define NFSERR_TRYLATER NFSERR_JUKEBOX 74*68653Smckusick #define NFSERR_STALEWRITEVERF 30001 /* Fake return for nfs_commit() */ 7538414Smckusick 76*68653Smckusick #define NFSERR_RETVOID 0x20000000 /* Return void, not error */ 77*68653Smckusick #define NFSERR_AUTHERR 0x40000000 /* Mark an authentication error */ 78*68653Smckusick #define NFSERR_RETERR 0x80000000 /* Mark an error return for V3 */ 79*68653Smckusick 8038414Smckusick /* Sizes in bytes of various nfs rpc components */ 8138414Smckusick #define NFSX_UNSIGNED 4 8238414Smckusick 83*68653Smckusick /* specific to NFS Version 2 */ 84*68653Smckusick #define NFSX_V2FH 32 85*68653Smckusick #define NFSX_V2FATTR 68 86*68653Smckusick #define NFSX_V2SATTR 32 87*68653Smckusick #define NFSX_V2COOKIE 4 88*68653Smckusick #define NFSX_V2STATFS 20 89*68653Smckusick 90*68653Smckusick /* specific to NFS Version 3 */ 91*68653Smckusick #define NFSX_V3FH (sizeof (fhandle_t)) /* size this server uses */ 92*68653Smckusick #define NFSX_V3FHMAX 64 /* max. allowed by protocol */ 93*68653Smckusick #define NFSX_V3FATTR 84 94*68653Smckusick #define NFSX_V3SATTR 60 /* max. all fields filled in */ 95*68653Smckusick #define NFSX_V3SRVSATTR (sizeof (struct nfsv3_sattr)) 96*68653Smckusick #define NFSX_V3POSTOPATTR (NFSX_V3FATTR + NFSX_UNSIGNED) 97*68653Smckusick #define NFSX_V3WCCDATA (NFSX_V3POSTOPATTR + 8 * NFSX_UNSIGNED) 98*68653Smckusick #define NFSX_V3COOKIEVERF 8 99*68653Smckusick #define NFSX_V3WRITEVERF 8 100*68653Smckusick #define NFSX_V3CREATEVERF 8 101*68653Smckusick #define NFSX_V3STATFS 52 102*68653Smckusick #define NFSX_V3FSINFO 48 103*68653Smckusick #define NFSX_V3PATHCONF 24 104*68653Smckusick 105*68653Smckusick /* variants for both versions */ 106*68653Smckusick #define NFSX_FH(v3) ((v3) ? (NFSX_V3FHMAX + NFSX_UNSIGNED) : \ 107*68653Smckusick NFSX_V2FH) 108*68653Smckusick #define NFSX_SRVFH(v3) ((v3) ? NFSX_V3FH : NFSX_V2FH) 109*68653Smckusick #define NFSX_FATTR(v3) ((v3) ? NFSX_V3FATTR : NFSX_V2FATTR) 110*68653Smckusick #define NFSX_PREOPATTR(v3) ((v3) ? (7 * NFSX_UNSIGNED) : 0) 111*68653Smckusick #define NFSX_POSTOPATTR(v3) ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : 0) 112*68653Smckusick #define NFSX_POSTOPORFATTR(v3) ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : \ 113*68653Smckusick NFSX_V2FATTR) 114*68653Smckusick #define NFSX_WCCDATA(v3) ((v3) ? NFSX_V3WCCDATA : 0) 115*68653Smckusick #define NFSX_WCCORFATTR(v3) ((v3) ? NFSX_V3WCCDATA : NFSX_V2FATTR) 116*68653Smckusick #define NFSX_SATTR(v3) ((v3) ? NFSX_V3SATTR : NFSX_V2SATTR) 117*68653Smckusick #define NFSX_COOKIEVERF(v3) ((v3) ? NFSX_V3COOKIEVERF : 0) 118*68653Smckusick #define NFSX_WRITEVERF(v3) ((v3) ? NFSX_V3WRITEVERF : 0) 119*68653Smckusick #define NFSX_READDIR(v3) ((v3) ? (5 * NFSX_UNSIGNED) : \ 120*68653Smckusick (2 * NFSX_UNSIGNED)) 121*68653Smckusick #define NFSX_STATFS(v3) ((v3) ? NFSX_V3STATFS : NFSX_V2STATFS) 122*68653Smckusick 123*68653Smckusick /* nfs rpc procedure numbers (before version mapping) */ 12438414Smckusick #define NFSPROC_NULL 0 12538414Smckusick #define NFSPROC_GETATTR 1 12638414Smckusick #define NFSPROC_SETATTR 2 127*68653Smckusick #define NFSPROC_LOOKUP 3 128*68653Smckusick #define NFSPROC_ACCESS 4 12938414Smckusick #define NFSPROC_READLINK 5 13038414Smckusick #define NFSPROC_READ 6 131*68653Smckusick #define NFSPROC_WRITE 7 132*68653Smckusick #define NFSPROC_CREATE 8 133*68653Smckusick #define NFSPROC_MKDIR 9 134*68653Smckusick #define NFSPROC_SYMLINK 10 135*68653Smckusick #define NFSPROC_MKNOD 11 136*68653Smckusick #define NFSPROC_REMOVE 12 137*68653Smckusick #define NFSPROC_RMDIR 13 138*68653Smckusick #define NFSPROC_RENAME 14 139*68653Smckusick #define NFSPROC_LINK 15 14038414Smckusick #define NFSPROC_READDIR 16 141*68653Smckusick #define NFSPROC_READDIRPLUS 17 142*68653Smckusick #define NFSPROC_FSSTAT 18 143*68653Smckusick #define NFSPROC_FSINFO 19 144*68653Smckusick #define NFSPROC_PATHCONF 20 145*68653Smckusick #define NFSPROC_COMMIT 21 14638414Smckusick 147*68653Smckusick /* And leasing (nqnfs) procedure numbers (must be last) */ 148*68653Smckusick #define NQNFSPROC_GETLEASE 22 149*68653Smckusick #define NQNFSPROC_VACATED 23 150*68653Smckusick #define NQNFSPROC_EVICTED 24 15152196Smckusick 152*68653Smckusick #define NFSPROC_NOOP 25 153*68653Smckusick #define NFS_NPROCS 26 154*68653Smckusick 155*68653Smckusick /* Actual Version 2 procedure numbers */ 156*68653Smckusick #define NFSV2PROC_NULL 0 157*68653Smckusick #define NFSV2PROC_GETATTR 1 158*68653Smckusick #define NFSV2PROC_SETATTR 2 159*68653Smckusick #define NFSV2PROC_NOOP 3 160*68653Smckusick #define NFSV2PROC_ROOT NFSV2PROC_NOOP /* Obsolete */ 161*68653Smckusick #define NFSV2PROC_LOOKUP 4 162*68653Smckusick #define NFSV2PROC_READLINK 5 163*68653Smckusick #define NFSV2PROC_READ 6 164*68653Smckusick #define NFSV2PROC_WRITECACHE NFSV2PROC_NOOP /* Obsolete */ 165*68653Smckusick #define NFSV2PROC_WRITE 8 166*68653Smckusick #define NFSV2PROC_CREATE 9 167*68653Smckusick #define NFSV2PROC_REMOVE 10 168*68653Smckusick #define NFSV2PROC_RENAME 11 169*68653Smckusick #define NFSV2PROC_LINK 12 170*68653Smckusick #define NFSV2PROC_SYMLINK 13 171*68653Smckusick #define NFSV2PROC_MKDIR 14 172*68653Smckusick #define NFSV2PROC_RMDIR 15 173*68653Smckusick #define NFSV2PROC_READDIR 16 174*68653Smckusick #define NFSV2PROC_STATFS 17 175*68653Smckusick 176*68653Smckusick /* 177*68653Smckusick * Constants used by the Version 3 protocol for various RPCs 178*68653Smckusick */ 179*68653Smckusick #define NFSV3SATTRTIME_DONTCHANGE 0 180*68653Smckusick #define NFSV3SATTRTIME_TOSERVER 1 181*68653Smckusick #define NFSV3SATTRTIME_TOCLIENT 2 182*68653Smckusick 183*68653Smckusick #define NFSV3ACCESS_READ 0x01 184*68653Smckusick #define NFSV3ACCESS_LOOKUP 0x02 185*68653Smckusick #define NFSV3ACCESS_MODIFY 0x04 186*68653Smckusick #define NFSV3ACCESS_EXTEND 0x08 187*68653Smckusick #define NFSV3ACCESS_DELETE 0x10 188*68653Smckusick #define NFSV3ACCESS_EXECUTE 0x20 189*68653Smckusick 190*68653Smckusick #define NFSV3WRITE_UNSTABLE 0 191*68653Smckusick #define NFSV3WRITE_DATASYNC 1 192*68653Smckusick #define NFSV3WRITE_FILESYNC 2 193*68653Smckusick 194*68653Smckusick #define NFSV3CREATE_UNCHECKED 0 195*68653Smckusick #define NFSV3CREATE_GUARDED 1 196*68653Smckusick #define NFSV3CREATE_EXCLUSIVE 2 197*68653Smckusick 198*68653Smckusick #define NFSV3FSINFO_LINK 0x01 199*68653Smckusick #define NFSV3FSINFO_SYMLINK 0x02 200*68653Smckusick #define NFSV3FSINFO_HOMOGENEOUS 0x08 201*68653Smckusick #define NFSV3FSINFO_CANSETTIME 0x10 202*68653Smckusick 20338414Smckusick /* Conversion macros */ 204*68653Smckusick #define vtonfsv2_mode(t,m) \ 20542240Smckusick txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : \ 20642240Smckusick MAKEIMODE((t), (m))) 207*68653Smckusick #define vtonfsv3_mode(m) txdr_unsigned((m) & 07777) 208*68653Smckusick #define nfstov_mode(a) (fxdr_unsigned(u_short, (a))&07777) 209*68653Smckusick #define vtonfsv2_type(a) txdr_unsigned(nfsv2_type[((long)(a))]) 210*68653Smckusick #define vtonfsv3_type(a) txdr_unsigned(nfsv3_type[((long)(a))]) 211*68653Smckusick #define nfsv2tov_type(a) nv2tov_type[fxdr_unsigned(u_long,(a))&0x7] 212*68653Smckusick #define nfsv3tov_type(a) nv3tov_type[fxdr_unsigned(u_long,(a))&0x7] 21338414Smckusick 21438414Smckusick /* File types */ 215*68653Smckusick typedef enum { NFNON=0, NFREG=1, NFDIR=2, NFBLK=3, NFCHR=4, NFLNK=5, 216*68653Smckusick NFSOCK=6, NFFIFO=7 } nfstype; 21738884Smacklem 21838884Smacklem /* Structs for common parts of the rpc's */ 219*68653Smckusick /* 220*68653Smckusick * File Handle (32 bytes for version 2), variable up to 64 for version 3. 221*68653Smckusick * File Handles of up to NFS_SMALLFH in size are stored directly in the 222*68653Smckusick * nfs node, whereas larger ones are malloc'd. (This never happens when 223*68653Smckusick * NFS_SMALLFH is set to 64.) 224*68653Smckusick * NFS_SMALLFH should be in the range of 32 to 64 and be divisible by 4. 225*68653Smckusick */ 226*68653Smckusick #ifndef NFS_SMALLFH 227*68653Smckusick #define NFS_SMALLFH 64 228*68653Smckusick #endif 229*68653Smckusick union nfsfh { 230*68653Smckusick fhandle_t fh_generic; 231*68653Smckusick u_char fh_bytes[NFS_SMALLFH]; 232*68653Smckusick }; 233*68653Smckusick typedef union nfsfh nfsfh_t; 234*68653Smckusick 23538884Smacklem struct nfsv2_time { 236*68653Smckusick u_long nfsv2_sec; 237*68653Smckusick u_long nfsv2_usec; 23838884Smacklem }; 239*68653Smckusick typedef struct nfsv2_time nfstime2; 24038884Smacklem 241*68653Smckusick struct nfsv3_time { 242*68653Smckusick u_long nfsv3_sec; 243*68653Smckusick u_long nfsv3_nsec; 24456279Smckusick }; 245*68653Smckusick typedef struct nfsv3_time nfstime3; 24656279Smckusick 24756279Smckusick /* 248*68653Smckusick * Quads are defined as arrays of 2 longs to ensure dense packing for the 249*68653Smckusick * protocol and to facilitate xdr conversion. 250*68653Smckusick */ 251*68653Smckusick struct nfs_uquad { 252*68653Smckusick u_long nfsuquad[2]; 253*68653Smckusick }; 254*68653Smckusick typedef struct nfs_uquad nfsuint64; 255*68653Smckusick 256*68653Smckusick /* 257*68653Smckusick * Used to convert between two u_longs and a u_quad_t. 258*68653Smckusick */ 259*68653Smckusick union nfs_quadconvert { 260*68653Smckusick u_long lval[2]; 261*68653Smckusick u_quad_t qval; 262*68653Smckusick }; 263*68653Smckusick typedef union nfs_quadconvert nfsquad_t; 264*68653Smckusick 265*68653Smckusick /* 266*68653Smckusick * NFS Version 3 special file number. 267*68653Smckusick */ 268*68653Smckusick struct nfsv3_spec { 269*68653Smckusick u_long specdata1; 270*68653Smckusick u_long specdata2; 271*68653Smckusick }; 272*68653Smckusick typedef struct nfsv3_spec nfsv3spec; 273*68653Smckusick 274*68653Smckusick /* 27556279Smckusick * File attributes and setable attributes. These structures cover both 276*68653Smckusick * NFS version 2 and the version 3 protocol. Note that the union is only 277*68653Smckusick * used so that one pointer can refer to both variants. These structures 27856279Smckusick * go out on the wire and must be densely packed, so no quad data types 27956279Smckusick * are used. (all fields are longs or u_longs or structures of same) 280*68653Smckusick * NB: You can't do sizeof(struct nfs_fattr), you must use the 281*68653Smckusick * NFSX_FATTR(v3) macro. 28256279Smckusick */ 283*68653Smckusick struct nfs_fattr { 28438884Smacklem u_long fa_type; 28538884Smacklem u_long fa_mode; 28638884Smacklem u_long fa_nlink; 28738884Smacklem u_long fa_uid; 28838884Smacklem u_long fa_gid; 28956279Smckusick union { 29056279Smckusick struct { 291*68653Smckusick u_long nfsv2fa_size; 292*68653Smckusick u_long nfsv2fa_blocksize; 293*68653Smckusick u_long nfsv2fa_rdev; 294*68653Smckusick u_long nfsv2fa_blocks; 295*68653Smckusick u_long nfsv2fa_fsid; 296*68653Smckusick u_long nfsv2fa_fileid; 297*68653Smckusick nfstime2 nfsv2fa_atime; 298*68653Smckusick nfstime2 nfsv2fa_mtime; 299*68653Smckusick nfstime2 nfsv2fa_ctime; 30056279Smckusick } fa_nfsv2; 30156279Smckusick struct { 302*68653Smckusick nfsuint64 nfsv3fa_size; 303*68653Smckusick nfsuint64 nfsv3fa_used; 304*68653Smckusick nfsv3spec nfsv3fa_rdev; 305*68653Smckusick nfsuint64 nfsv3fa_fsid; 306*68653Smckusick nfsuint64 nfsv3fa_fileid; 307*68653Smckusick nfstime3 nfsv3fa_atime; 308*68653Smckusick nfstime3 nfsv3fa_mtime; 309*68653Smckusick nfstime3 nfsv3fa_ctime; 310*68653Smckusick } fa_nfsv3; 31156279Smckusick } fa_un; 31238884Smacklem }; 31338884Smacklem 31456279Smckusick /* and some ugly defines for accessing union components */ 315*68653Smckusick #define fa2_size fa_un.fa_nfsv2.nfsv2fa_size 316*68653Smckusick #define fa2_blocksize fa_un.fa_nfsv2.nfsv2fa_blocksize 317*68653Smckusick #define fa2_rdev fa_un.fa_nfsv2.nfsv2fa_rdev 318*68653Smckusick #define fa2_blocks fa_un.fa_nfsv2.nfsv2fa_blocks 319*68653Smckusick #define fa2_fsid fa_un.fa_nfsv2.nfsv2fa_fsid 320*68653Smckusick #define fa2_fileid fa_un.fa_nfsv2.nfsv2fa_fileid 321*68653Smckusick #define fa2_atime fa_un.fa_nfsv2.nfsv2fa_atime 322*68653Smckusick #define fa2_mtime fa_un.fa_nfsv2.nfsv2fa_mtime 323*68653Smckusick #define fa2_ctime fa_un.fa_nfsv2.nfsv2fa_ctime 324*68653Smckusick #define fa3_size fa_un.fa_nfsv3.nfsv3fa_size 325*68653Smckusick #define fa3_used fa_un.fa_nfsv3.nfsv3fa_used 326*68653Smckusick #define fa3_rdev fa_un.fa_nfsv3.nfsv3fa_rdev 327*68653Smckusick #define fa3_fsid fa_un.fa_nfsv3.nfsv3fa_fsid 328*68653Smckusick #define fa3_fileid fa_un.fa_nfsv3.nfsv3fa_fileid 329*68653Smckusick #define fa3_atime fa_un.fa_nfsv3.nfsv3fa_atime 330*68653Smckusick #define fa3_mtime fa_un.fa_nfsv3.nfsv3fa_mtime 331*68653Smckusick #define fa3_ctime fa_un.fa_nfsv3.nfsv3fa_ctime 33256279Smckusick 33338884Smacklem struct nfsv2_sattr { 334*68653Smckusick u_long sa_mode; 335*68653Smckusick u_long sa_uid; 336*68653Smckusick u_long sa_gid; 337*68653Smckusick u_long sa_size; 338*68653Smckusick nfstime2 sa_atime; 339*68653Smckusick nfstime2 sa_mtime; 340*68653Smckusick }; 341*68653Smckusick 342*68653Smckusick /* 343*68653Smckusick * NFS Version 3 sattr structure for the new node creation case. 344*68653Smckusick */ 345*68653Smckusick struct nfsv3_sattr { 346*68653Smckusick u_long sa_modetrue; 347*68653Smckusick u_long sa_mode; 348*68653Smckusick u_long sa_uidtrue; 349*68653Smckusick u_long sa_uid; 350*68653Smckusick u_long sa_gidtrue; 351*68653Smckusick u_long sa_gid; 352*68653Smckusick u_long sa_sizefalse; 353*68653Smckusick u_long sa_atimetype; 354*68653Smckusick nfstime3 sa_atime; 355*68653Smckusick u_long sa_mtimetype; 356*68653Smckusick nfstime3 sa_mtime; 357*68653Smckusick }; 358*68653Smckusick 359*68653Smckusick struct nfs_statfs { 36056279Smckusick union { 36156279Smckusick struct { 362*68653Smckusick u_long nfsv2sf_tsize; 363*68653Smckusick u_long nfsv2sf_bsize; 364*68653Smckusick u_long nfsv2sf_blocks; 365*68653Smckusick u_long nfsv2sf_bfree; 366*68653Smckusick u_long nfsv2sf_bavail; 367*68653Smckusick } sf_nfsv2; 36856279Smckusick struct { 369*68653Smckusick nfsuint64 nfsv3sf_tbytes; 370*68653Smckusick nfsuint64 nfsv3sf_fbytes; 371*68653Smckusick nfsuint64 nfsv3sf_abytes; 372*68653Smckusick nfsuint64 nfsv3sf_tfiles; 373*68653Smckusick nfsuint64 nfsv3sf_ffiles; 374*68653Smckusick nfsuint64 nfsv3sf_afiles; 375*68653Smckusick u_long nfsv3sf_invarsec; 376*68653Smckusick } sf_nfsv3; 377*68653Smckusick } sf_un; 37838884Smacklem }; 37938884Smacklem 380*68653Smckusick #define sf_tsize sf_un.sf_nfsv2.nfsv2sf_tsize 381*68653Smckusick #define sf_bsize sf_un.sf_nfsv2.nfsv2sf_bsize 382*68653Smckusick #define sf_blocks sf_un.sf_nfsv2.nfsv2sf_blocks 383*68653Smckusick #define sf_bfree sf_un.sf_nfsv2.nfsv2sf_bfree 384*68653Smckusick #define sf_bavail sf_un.sf_nfsv2.nfsv2sf_bavail 385*68653Smckusick #define sf_tbytes sf_un.sf_nfsv3.nfsv3sf_tbytes 386*68653Smckusick #define sf_fbytes sf_un.sf_nfsv3.nfsv3sf_fbytes 387*68653Smckusick #define sf_abytes sf_un.sf_nfsv3.nfsv3sf_abytes 388*68653Smckusick #define sf_tfiles sf_un.sf_nfsv3.nfsv3sf_tfiles 389*68653Smckusick #define sf_ffiles sf_un.sf_nfsv3.nfsv3sf_ffiles 390*68653Smckusick #define sf_afiles sf_un.sf_nfsv3.nfsv3sf_afiles 391*68653Smckusick #define sf_invarsec sf_un.sf_nfsv3.nfsv3sf_invarsec 39256279Smckusick 393*68653Smckusick struct nfsv3_fsinfo { 394*68653Smckusick u_long fs_rtmax; 395*68653Smckusick u_long fs_rtpref; 396*68653Smckusick u_long fs_rtmult; 397*68653Smckusick u_long fs_wtmax; 398*68653Smckusick u_long fs_wtpref; 399*68653Smckusick u_long fs_wtmult; 400*68653Smckusick u_long fs_dtpref; 401*68653Smckusick nfsuint64 fs_maxfilesize; 402*68653Smckusick nfstime3 fs_timedelta; 403*68653Smckusick u_long fs_properties; 40438884Smacklem }; 405*68653Smckusick 406*68653Smckusick struct nfsv3_pathconf { 407*68653Smckusick u_long pc_linkmax; 408*68653Smckusick u_long pc_namemax; 409*68653Smckusick u_long pc_notrunc; 410*68653Smckusick u_long pc_chownrestricted; 411*68653Smckusick u_long pc_caseinsensitive; 412*68653Smckusick u_long pc_casepreserving; 413*68653Smckusick }; 414*68653Smckusick 415*68653Smckusick #endif 416