1a62dc406SDoug Rabson /* 2a62dc406SDoug Rabson * Copyright (c) 1989, 1993 3a62dc406SDoug Rabson * The Regents of the University of California. All rights reserved. 4a62dc406SDoug Rabson * 5a62dc406SDoug Rabson * This code is derived from software contributed to Berkeley by 6a62dc406SDoug Rabson * Rick Macklem at The University of Guelph. 7a62dc406SDoug Rabson * 8a62dc406SDoug Rabson * Redistribution and use in source and binary forms, with or without 9a62dc406SDoug Rabson * modification, are permitted provided that the following conditions 10a62dc406SDoug Rabson * are met: 11a62dc406SDoug Rabson * 1. Redistributions of source code must retain the above copyright 12a62dc406SDoug Rabson * notice, this list of conditions and the following disclaimer. 13a62dc406SDoug Rabson * 2. Redistributions in binary form must reproduce the above copyright 14a62dc406SDoug Rabson * notice, this list of conditions and the following disclaimer in the 15a62dc406SDoug Rabson * documentation and/or other materials provided with the distribution. 16a62dc406SDoug Rabson * 3. All advertising materials mentioning features or use of this software 17a62dc406SDoug Rabson * must display the following acknowledgement: 18a62dc406SDoug Rabson * This product includes software developed by the University of 19a62dc406SDoug Rabson * California, Berkeley and its contributors. 20a62dc406SDoug Rabson * 4. Neither the name of the University nor the names of its contributors 21a62dc406SDoug Rabson * may be used to endorse or promote products derived from this software 22a62dc406SDoug Rabson * without specific prior written permission. 23a62dc406SDoug Rabson * 24a62dc406SDoug Rabson * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25a62dc406SDoug Rabson * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26a62dc406SDoug Rabson * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27a62dc406SDoug Rabson * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28a62dc406SDoug Rabson * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29a62dc406SDoug Rabson * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30a62dc406SDoug Rabson * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31a62dc406SDoug Rabson * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32a62dc406SDoug Rabson * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33a62dc406SDoug Rabson * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34a62dc406SDoug Rabson * SUCH DAMAGE. 35a62dc406SDoug Rabson * 36a62dc406SDoug Rabson * @(#)nfsproto.h 8.1 (Berkeley) 6/10/93 37a62dc406SDoug Rabson * $Id: nfsproto.h,v 1.4 1994/08/21 06:50:13 paul Exp $ 38a62dc406SDoug Rabson */ 39a62dc406SDoug Rabson 40a62dc406SDoug Rabson #ifndef _NFS_NFSPROTO_H_ 41a62dc406SDoug Rabson #define _NFS_NFSPROTO_H_ 42a62dc406SDoug Rabson 43a62dc406SDoug Rabson /* 44a62dc406SDoug Rabson * nfs definitions as per the Version 2 and 3 specs 45a62dc406SDoug Rabson */ 46a62dc406SDoug Rabson 47a62dc406SDoug Rabson /* 48a62dc406SDoug Rabson * Constants as defined in the Sun NFS Version 2 and 3 specs. 49a62dc406SDoug Rabson * "NFS: Network File System Protocol Specification" RFC1094 50a62dc406SDoug Rabson * and in the "NFS: Network File System Version 3 Protocol 51a62dc406SDoug Rabson * Specification" 52a62dc406SDoug Rabson */ 53a62dc406SDoug Rabson 54a62dc406SDoug Rabson #define NFS_PORT 2049 55a62dc406SDoug Rabson #define NFS_PROG 100003 56a62dc406SDoug Rabson #define NFS_VER2 2 57a62dc406SDoug Rabson #define NFS_VER3 3 58a62dc406SDoug Rabson #define NFS_V2MAXDATA 8192 59a62dc406SDoug Rabson #define NFS_MAXDGRAMDATA 16384 60a62dc406SDoug Rabson #define NFS_MAXDATA 32768 61a62dc406SDoug Rabson #define NFS_MAXPATHLEN 1024 62a62dc406SDoug Rabson #define NFS_MAXNAMLEN 255 63a62dc406SDoug Rabson #define NFS_MAXPKTHDR 404 64a62dc406SDoug Rabson #define NFS_MAXPACKET (NFS_MAXPKTHDR + NFS_MAXDATA) 65a62dc406SDoug Rabson #define NFS_MINPACKET 20 66a62dc406SDoug Rabson #define NFS_FABLKSIZE 512 /* Size in bytes of a block wrt fa_blocks */ 67a62dc406SDoug Rabson 68a62dc406SDoug Rabson /* Stat numbers for rpc returns (version 2 and 3) */ 69a62dc406SDoug Rabson #define NFS_OK 0 70a62dc406SDoug Rabson #define NFSERR_PERM 1 71a62dc406SDoug Rabson #define NFSERR_NOENT 2 72a62dc406SDoug Rabson #define NFSERR_IO 5 73a62dc406SDoug Rabson #define NFSERR_NXIO 6 74a62dc406SDoug Rabson #define NFSERR_ACCES 13 75a62dc406SDoug Rabson #define NFSERR_EXIST 17 76a62dc406SDoug Rabson #define NFSERR_XDEV 18 /* Version 3 only */ 77a62dc406SDoug Rabson #define NFSERR_NODEV 19 78a62dc406SDoug Rabson #define NFSERR_NOTDIR 20 79a62dc406SDoug Rabson #define NFSERR_ISDIR 21 80a62dc406SDoug Rabson #define NFSERR_INVAL 22 /* Version 3 only */ 81a62dc406SDoug Rabson #define NFSERR_FBIG 27 82a62dc406SDoug Rabson #define NFSERR_NOSPC 28 83a62dc406SDoug Rabson #define NFSERR_ROFS 30 84a62dc406SDoug Rabson #define NFSERR_MLINK 31 /* Version 3 only */ 85a62dc406SDoug Rabson #define NFSERR_NAMETOL 63 86a62dc406SDoug Rabson #define NFSERR_NOTEMPTY 66 87a62dc406SDoug Rabson #define NFSERR_DQUOT 69 88a62dc406SDoug Rabson #define NFSERR_STALE 70 89a62dc406SDoug Rabson #define NFSERR_REMOTE 71 /* Version 3 only */ 90a62dc406SDoug Rabson #define NFSERR_WFLUSH 99 /* Version 2 only */ 91a62dc406SDoug Rabson #define NFSERR_BADHANDLE 10001 /* The rest Version 3 only */ 92a62dc406SDoug Rabson #define NFSERR_NOT_SYNC 10002 93a62dc406SDoug Rabson #define NFSERR_BAD_COOKIE 10003 94a62dc406SDoug Rabson #define NFSERR_NOTSUPP 10004 95a62dc406SDoug Rabson #define NFSERR_TOOSMALL 10005 96a62dc406SDoug Rabson #define NFSERR_SERVERFAULT 10006 97a62dc406SDoug Rabson #define NFSERR_BADTYPE 10007 98a62dc406SDoug Rabson #define NFSERR_JUKEBOX 10008 99a62dc406SDoug Rabson #define NFSERR_TRYLATER NFSERR_JUKEBOX 100a62dc406SDoug Rabson #define NFSERR_STALEWRITEVERF 30001 /* Fake return for nfs_commit() */ 101a62dc406SDoug Rabson 102a62dc406SDoug Rabson #define NFSERR_RETVOID 0x20000000 /* Return void, not error */ 103a62dc406SDoug Rabson #define NFSERR_AUTHERR 0x40000000 /* Mark an authentication error */ 104a62dc406SDoug Rabson #define NFSERR_RETERR 0x80000000 /* Mark an error return for V3 */ 105a62dc406SDoug Rabson 106a62dc406SDoug Rabson /* Sizes in bytes of various nfs rpc components */ 107a62dc406SDoug Rabson #define NFSX_UNSIGNED 4 108a62dc406SDoug Rabson 109a62dc406SDoug Rabson /* specific to NFS Version 2 */ 110a62dc406SDoug Rabson #define NFSX_V2FH 32 111a62dc406SDoug Rabson #define NFSX_V2FATTR 68 112a62dc406SDoug Rabson #define NFSX_V2SATTR 32 113a62dc406SDoug Rabson #define NFSX_V2COOKIE 4 114a62dc406SDoug Rabson #define NFSX_V2STATFS 20 115a62dc406SDoug Rabson 116a62dc406SDoug Rabson /* specific to NFS Version 3 */ 117a62dc406SDoug Rabson #define NFSX_V3FH (sizeof (fhandle_t)) /* size this server uses */ 118a62dc406SDoug Rabson #define NFSX_V3FHMAX 64 /* max. allowed by protocol */ 119a62dc406SDoug Rabson #define NFSX_V3FATTR 84 120a62dc406SDoug Rabson #define NFSX_V3SATTR 60 /* max. all fields filled in */ 121a62dc406SDoug Rabson #define NFSX_V3SRVSATTR (sizeof (struct nfsv3_sattr)) 122a62dc406SDoug Rabson #define NFSX_V3POSTOPATTR (NFSX_V3FATTR + NFSX_UNSIGNED) 123a62dc406SDoug Rabson #define NFSX_V3WCCDATA (NFSX_V3POSTOPATTR + 8 * NFSX_UNSIGNED) 124a62dc406SDoug Rabson #define NFSX_V3COOKIEVERF 8 125a62dc406SDoug Rabson #define NFSX_V3WRITEVERF 8 126a62dc406SDoug Rabson #define NFSX_V3CREATEVERF 8 127a62dc406SDoug Rabson #define NFSX_V3STATFS 52 128a62dc406SDoug Rabson #define NFSX_V3FSINFO 48 129a62dc406SDoug Rabson #define NFSX_V3PATHCONF 24 130a62dc406SDoug Rabson 131a62dc406SDoug Rabson /* variants for both versions */ 132a62dc406SDoug Rabson #define NFSX_FH(v3) ((v3) ? (NFSX_V3FHMAX + NFSX_UNSIGNED) : \ 133a62dc406SDoug Rabson NFSX_V2FH) 134a62dc406SDoug Rabson #define NFSX_SRVFH(v3) ((v3) ? NFSX_V3FH : NFSX_V2FH) 135a62dc406SDoug Rabson #define NFSX_FATTR(v3) ((v3) ? NFSX_V3FATTR : NFSX_V2FATTR) 136a62dc406SDoug Rabson #define NFSX_PREOPATTR(v3) ((v3) ? (7 * NFSX_UNSIGNED) : 0) 137a62dc406SDoug Rabson #define NFSX_POSTOPATTR(v3) ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : 0) 138a62dc406SDoug Rabson #define NFSX_POSTOPORFATTR(v3) ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : \ 139a62dc406SDoug Rabson NFSX_V2FATTR) 140a62dc406SDoug Rabson #define NFSX_WCCDATA(v3) ((v3) ? NFSX_V3WCCDATA : 0) 141a62dc406SDoug Rabson #define NFSX_WCCORFATTR(v3) ((v3) ? NFSX_V3WCCDATA : NFSX_V2FATTR) 142a62dc406SDoug Rabson #define NFSX_SATTR(v3) ((v3) ? NFSX_V3SATTR : NFSX_V2SATTR) 143a62dc406SDoug Rabson #define NFSX_COOKIEVERF(v3) ((v3) ? NFSX_V3COOKIEVERF : 0) 144a62dc406SDoug Rabson #define NFSX_WRITEVERF(v3) ((v3) ? NFSX_V3WRITEVERF : 0) 145a62dc406SDoug Rabson #define NFSX_READDIR(v3) ((v3) ? (5 * NFSX_UNSIGNED) : \ 146a62dc406SDoug Rabson (2 * NFSX_UNSIGNED)) 147a62dc406SDoug Rabson #define NFSX_STATFS(v3) ((v3) ? NFSX_V3STATFS : NFSX_V2STATFS) 148a62dc406SDoug Rabson 149a62dc406SDoug Rabson /* nfs rpc procedure numbers (before version mapping) */ 150a62dc406SDoug Rabson #define NFSPROC_NULL 0 151a62dc406SDoug Rabson #define NFSPROC_GETATTR 1 152a62dc406SDoug Rabson #define NFSPROC_SETATTR 2 153a62dc406SDoug Rabson #define NFSPROC_LOOKUP 3 154a62dc406SDoug Rabson #define NFSPROC_ACCESS 4 155a62dc406SDoug Rabson #define NFSPROC_READLINK 5 156a62dc406SDoug Rabson #define NFSPROC_READ 6 157a62dc406SDoug Rabson #define NFSPROC_WRITE 7 158a62dc406SDoug Rabson #define NFSPROC_CREATE 8 159a62dc406SDoug Rabson #define NFSPROC_MKDIR 9 160a62dc406SDoug Rabson #define NFSPROC_SYMLINK 10 161a62dc406SDoug Rabson #define NFSPROC_MKNOD 11 162a62dc406SDoug Rabson #define NFSPROC_REMOVE 12 163a62dc406SDoug Rabson #define NFSPROC_RMDIR 13 164a62dc406SDoug Rabson #define NFSPROC_RENAME 14 165a62dc406SDoug Rabson #define NFSPROC_LINK 15 166a62dc406SDoug Rabson #define NFSPROC_READDIR 16 167a62dc406SDoug Rabson #define NFSPROC_READDIRPLUS 17 168a62dc406SDoug Rabson #define NFSPROC_FSSTAT 18 169a62dc406SDoug Rabson #define NFSPROC_FSINFO 19 170a62dc406SDoug Rabson #define NFSPROC_PATHCONF 20 171a62dc406SDoug Rabson #define NFSPROC_COMMIT 21 172a62dc406SDoug Rabson 173a62dc406SDoug Rabson /* And leasing (nqnfs) procedure numbers (must be last) */ 174a62dc406SDoug Rabson #define NQNFSPROC_GETLEASE 22 175a62dc406SDoug Rabson #define NQNFSPROC_VACATED 23 176a62dc406SDoug Rabson #define NQNFSPROC_EVICTED 24 177a62dc406SDoug Rabson 178a62dc406SDoug Rabson #define NFSPROC_NOOP 25 179a62dc406SDoug Rabson #define NFS_NPROCS 26 180a62dc406SDoug Rabson 181a62dc406SDoug Rabson /* Actual Version 2 procedure numbers */ 182a62dc406SDoug Rabson #define NFSV2PROC_NULL 0 183a62dc406SDoug Rabson #define NFSV2PROC_GETATTR 1 184a62dc406SDoug Rabson #define NFSV2PROC_SETATTR 2 185a62dc406SDoug Rabson #define NFSV2PROC_NOOP 3 186a62dc406SDoug Rabson #define NFSV2PROC_ROOT NFSV2PROC_NOOP /* Obsolete */ 187a62dc406SDoug Rabson #define NFSV2PROC_LOOKUP 4 188a62dc406SDoug Rabson #define NFSV2PROC_READLINK 5 189a62dc406SDoug Rabson #define NFSV2PROC_READ 6 190a62dc406SDoug Rabson #define NFSV2PROC_WRITECACHE NFSV2PROC_NOOP /* Obsolete */ 191a62dc406SDoug Rabson #define NFSV2PROC_WRITE 8 192a62dc406SDoug Rabson #define NFSV2PROC_CREATE 9 193a62dc406SDoug Rabson #define NFSV2PROC_REMOVE 10 194a62dc406SDoug Rabson #define NFSV2PROC_RENAME 11 195a62dc406SDoug Rabson #define NFSV2PROC_LINK 12 196a62dc406SDoug Rabson #define NFSV2PROC_SYMLINK 13 197a62dc406SDoug Rabson #define NFSV2PROC_MKDIR 14 198a62dc406SDoug Rabson #define NFSV2PROC_RMDIR 15 199a62dc406SDoug Rabson #define NFSV2PROC_READDIR 16 200a62dc406SDoug Rabson #define NFSV2PROC_STATFS 17 201a62dc406SDoug Rabson 202a62dc406SDoug Rabson /* 203a62dc406SDoug Rabson * Constants used by the Version 3 protocol for various RPCs 204a62dc406SDoug Rabson */ 205a62dc406SDoug Rabson #define NFSV3SATTRTIME_DONTCHANGE 0 206a62dc406SDoug Rabson #define NFSV3SATTRTIME_TOSERVER 1 207a62dc406SDoug Rabson #define NFSV3SATTRTIME_TOCLIENT 2 208a62dc406SDoug Rabson 209a62dc406SDoug Rabson #define NFSV3ACCESS_READ 0x01 210a62dc406SDoug Rabson #define NFSV3ACCESS_LOOKUP 0x02 211a62dc406SDoug Rabson #define NFSV3ACCESS_MODIFY 0x04 212a62dc406SDoug Rabson #define NFSV3ACCESS_EXTEND 0x08 213a62dc406SDoug Rabson #define NFSV3ACCESS_DELETE 0x10 214a62dc406SDoug Rabson #define NFSV3ACCESS_EXECUTE 0x20 215a62dc406SDoug Rabson 216a62dc406SDoug Rabson #define NFSV3WRITE_UNSTABLE 0 217a62dc406SDoug Rabson #define NFSV3WRITE_DATASYNC 1 218a62dc406SDoug Rabson #define NFSV3WRITE_FILESYNC 2 219a62dc406SDoug Rabson 220a62dc406SDoug Rabson #define NFSV3CREATE_UNCHECKED 0 221a62dc406SDoug Rabson #define NFSV3CREATE_GUARDED 1 222a62dc406SDoug Rabson #define NFSV3CREATE_EXCLUSIVE 2 223a62dc406SDoug Rabson 224a62dc406SDoug Rabson #define NFSV3FSINFO_LINK 0x01 225a62dc406SDoug Rabson #define NFSV3FSINFO_SYMLINK 0x02 226a62dc406SDoug Rabson #define NFSV3FSINFO_HOMOGENEOUS 0x08 227a62dc406SDoug Rabson #define NFSV3FSINFO_CANSETTIME 0x10 228a62dc406SDoug Rabson 229a62dc406SDoug Rabson /* Conversion macros */ 230a62dc406SDoug Rabson #define vtonfsv2_mode(t,m) \ 231a62dc406SDoug Rabson txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : \ 232a62dc406SDoug Rabson MAKEIMODE((t), (m))) 233a62dc406SDoug Rabson #define vtonfsv3_mode(m) txdr_unsigned((m) & 07777) 234a62dc406SDoug Rabson #define nfstov_mode(a) (fxdr_unsigned(u_short, (a))&07777) 235a62dc406SDoug Rabson #define vtonfsv2_type(a) txdr_unsigned(nfsv2_type[((long)(a))]) 236a62dc406SDoug Rabson #define vtonfsv3_type(a) txdr_unsigned(nfsv3_type[((long)(a))]) 237a62dc406SDoug Rabson #define nfsv2tov_type(a) nv2tov_type[fxdr_unsigned(u_long,(a))&0x7] 238a62dc406SDoug Rabson #define nfsv3tov_type(a) nv3tov_type[fxdr_unsigned(u_long,(a))&0x7] 239a62dc406SDoug Rabson 240a62dc406SDoug Rabson /* File types */ 241a62dc406SDoug Rabson typedef enum { NFNON=0, NFREG=1, NFDIR=2, NFBLK=3, NFCHR=4, NFLNK=5, 242a62dc406SDoug Rabson NFSOCK=6, NFFIFO=7 } nfstype; 243a62dc406SDoug Rabson 244a62dc406SDoug Rabson /* Structs for common parts of the rpc's */ 245a62dc406SDoug Rabson /* 246a62dc406SDoug Rabson * File Handle (32 bytes for version 2), variable up to 64 for version 3. 247a62dc406SDoug Rabson * File Handles of up to NFS_SMALLFH in size are stored directly in the 248a62dc406SDoug Rabson * nfs node, whereas larger ones are malloc'd. (This never happens when 249a62dc406SDoug Rabson * NFS_SMALLFH is set to 64.) 250a62dc406SDoug Rabson * NFS_SMALLFH should be in the range of 32 to 64 and be divisible by 4. 251a62dc406SDoug Rabson */ 252a62dc406SDoug Rabson #ifndef NFS_SMALLFH 253a62dc406SDoug Rabson #define NFS_SMALLFH 64 254a62dc406SDoug Rabson #endif 255a62dc406SDoug Rabson union nfsfh { 256a62dc406SDoug Rabson fhandle_t fh_generic; 257a62dc406SDoug Rabson u_char fh_bytes[NFS_SMALLFH]; 258a62dc406SDoug Rabson }; 259a62dc406SDoug Rabson typedef union nfsfh nfsfh_t; 260a62dc406SDoug Rabson 261a62dc406SDoug Rabson struct nfsv2_time { 262a62dc406SDoug Rabson u_long nfsv2_sec; 263a62dc406SDoug Rabson u_long nfsv2_usec; 264a62dc406SDoug Rabson }; 265a62dc406SDoug Rabson typedef struct nfsv2_time nfstime2; 266a62dc406SDoug Rabson 267a62dc406SDoug Rabson struct nfsv3_time { 268a62dc406SDoug Rabson u_long nfsv3_sec; 269a62dc406SDoug Rabson u_long nfsv3_nsec; 270a62dc406SDoug Rabson }; 271a62dc406SDoug Rabson typedef struct nfsv3_time nfstime3; 272a62dc406SDoug Rabson 273a62dc406SDoug Rabson /* 274a62dc406SDoug Rabson * Quads are defined as arrays of 2 longs to ensure dense packing for the 275a62dc406SDoug Rabson * protocol and to facilitate xdr conversion. 276a62dc406SDoug Rabson */ 277a62dc406SDoug Rabson struct nfs_uquad { 278a62dc406SDoug Rabson u_long nfsuquad[2]; 279a62dc406SDoug Rabson }; 280a62dc406SDoug Rabson typedef struct nfs_uquad nfsuint64; 281a62dc406SDoug Rabson 282a62dc406SDoug Rabson /* 283a62dc406SDoug Rabson * Used to convert between two u_longs and a u_quad_t. 284a62dc406SDoug Rabson */ 285a62dc406SDoug Rabson union nfs_quadconvert { 286a62dc406SDoug Rabson u_long lval[2]; 287a62dc406SDoug Rabson u_quad_t qval; 288a62dc406SDoug Rabson }; 289a62dc406SDoug Rabson typedef union nfs_quadconvert nfsquad_t; 290a62dc406SDoug Rabson 291a62dc406SDoug Rabson /* 292a62dc406SDoug Rabson * NFS Version 3 special file number. 293a62dc406SDoug Rabson */ 294a62dc406SDoug Rabson struct nfsv3_spec { 295a62dc406SDoug Rabson u_long specdata1; 296a62dc406SDoug Rabson u_long specdata2; 297a62dc406SDoug Rabson }; 298a62dc406SDoug Rabson typedef struct nfsv3_spec nfsv3spec; 299a62dc406SDoug Rabson 300a62dc406SDoug Rabson /* 301a62dc406SDoug Rabson * File attributes and setable attributes. These structures cover both 302a62dc406SDoug Rabson * NFS version 2 and the version 3 protocol. Note that the union is only 303a62dc406SDoug Rabson * used so that one pointer can refer to both variants. These structures 304a62dc406SDoug Rabson * go out on the wire and must be densely packed, so no quad data types 305a62dc406SDoug Rabson * are used. (all fields are longs or u_longs or structures of same) 306a62dc406SDoug Rabson * NB: You can't do sizeof(struct nfs_fattr), you must use the 307a62dc406SDoug Rabson * NFSX_FATTR(v3) macro. 308a62dc406SDoug Rabson */ 309a62dc406SDoug Rabson struct nfs_fattr { 310a62dc406SDoug Rabson u_long fa_type; 311a62dc406SDoug Rabson u_long fa_mode; 312a62dc406SDoug Rabson u_long fa_nlink; 313a62dc406SDoug Rabson u_long fa_uid; 314a62dc406SDoug Rabson u_long fa_gid; 315a62dc406SDoug Rabson union { 316a62dc406SDoug Rabson struct { 317a62dc406SDoug Rabson u_long nfsv2fa_size; 318a62dc406SDoug Rabson u_long nfsv2fa_blocksize; 319a62dc406SDoug Rabson u_long nfsv2fa_rdev; 320a62dc406SDoug Rabson u_long nfsv2fa_blocks; 321a62dc406SDoug Rabson u_long nfsv2fa_fsid; 322a62dc406SDoug Rabson u_long nfsv2fa_fileid; 323a62dc406SDoug Rabson nfstime2 nfsv2fa_atime; 324a62dc406SDoug Rabson nfstime2 nfsv2fa_mtime; 325a62dc406SDoug Rabson nfstime2 nfsv2fa_ctime; 326a62dc406SDoug Rabson } fa_nfsv2; 327a62dc406SDoug Rabson struct { 328a62dc406SDoug Rabson nfsuint64 nfsv3fa_size; 329a62dc406SDoug Rabson nfsuint64 nfsv3fa_used; 330a62dc406SDoug Rabson nfsv3spec nfsv3fa_rdev; 331a62dc406SDoug Rabson nfsuint64 nfsv3fa_fsid; 332a62dc406SDoug Rabson nfsuint64 nfsv3fa_fileid; 333a62dc406SDoug Rabson nfstime3 nfsv3fa_atime; 334a62dc406SDoug Rabson nfstime3 nfsv3fa_mtime; 335a62dc406SDoug Rabson nfstime3 nfsv3fa_ctime; 336a62dc406SDoug Rabson } fa_nfsv3; 337a62dc406SDoug Rabson } fa_un; 338a62dc406SDoug Rabson }; 339a62dc406SDoug Rabson 340a62dc406SDoug Rabson /* and some ugly defines for accessing union components */ 341a62dc406SDoug Rabson #define fa2_size fa_un.fa_nfsv2.nfsv2fa_size 342a62dc406SDoug Rabson #define fa2_blocksize fa_un.fa_nfsv2.nfsv2fa_blocksize 343a62dc406SDoug Rabson #define fa2_rdev fa_un.fa_nfsv2.nfsv2fa_rdev 344a62dc406SDoug Rabson #define fa2_blocks fa_un.fa_nfsv2.nfsv2fa_blocks 345a62dc406SDoug Rabson #define fa2_fsid fa_un.fa_nfsv2.nfsv2fa_fsid 346a62dc406SDoug Rabson #define fa2_fileid fa_un.fa_nfsv2.nfsv2fa_fileid 347a62dc406SDoug Rabson #define fa2_atime fa_un.fa_nfsv2.nfsv2fa_atime 348a62dc406SDoug Rabson #define fa2_mtime fa_un.fa_nfsv2.nfsv2fa_mtime 349a62dc406SDoug Rabson #define fa2_ctime fa_un.fa_nfsv2.nfsv2fa_ctime 350a62dc406SDoug Rabson #define fa3_size fa_un.fa_nfsv3.nfsv3fa_size 351a62dc406SDoug Rabson #define fa3_used fa_un.fa_nfsv3.nfsv3fa_used 352a62dc406SDoug Rabson #define fa3_rdev fa_un.fa_nfsv3.nfsv3fa_rdev 353a62dc406SDoug Rabson #define fa3_fsid fa_un.fa_nfsv3.nfsv3fa_fsid 354a62dc406SDoug Rabson #define fa3_fileid fa_un.fa_nfsv3.nfsv3fa_fileid 355a62dc406SDoug Rabson #define fa3_atime fa_un.fa_nfsv3.nfsv3fa_atime 356a62dc406SDoug Rabson #define fa3_mtime fa_un.fa_nfsv3.nfsv3fa_mtime 357a62dc406SDoug Rabson #define fa3_ctime fa_un.fa_nfsv3.nfsv3fa_ctime 358a62dc406SDoug Rabson 359a62dc406SDoug Rabson struct nfsv2_sattr { 360a62dc406SDoug Rabson u_long sa_mode; 361a62dc406SDoug Rabson u_long sa_uid; 362a62dc406SDoug Rabson u_long sa_gid; 363a62dc406SDoug Rabson u_long sa_size; 364a62dc406SDoug Rabson nfstime2 sa_atime; 365a62dc406SDoug Rabson nfstime2 sa_mtime; 366a62dc406SDoug Rabson }; 367a62dc406SDoug Rabson 368a62dc406SDoug Rabson /* 369a62dc406SDoug Rabson * NFS Version 3 sattr structure for the new node creation case. 370a62dc406SDoug Rabson */ 371a62dc406SDoug Rabson struct nfsv3_sattr { 372a62dc406SDoug Rabson u_long sa_modetrue; 373a62dc406SDoug Rabson u_long sa_mode; 374a62dc406SDoug Rabson u_long sa_uidtrue; 375a62dc406SDoug Rabson u_long sa_uid; 376a62dc406SDoug Rabson u_long sa_gidtrue; 377a62dc406SDoug Rabson u_long sa_gid; 378a62dc406SDoug Rabson u_long sa_sizefalse; 379a62dc406SDoug Rabson u_long sa_atimetype; 380a62dc406SDoug Rabson nfstime3 sa_atime; 381a62dc406SDoug Rabson u_long sa_mtimetype; 382a62dc406SDoug Rabson nfstime3 sa_mtime; 383a62dc406SDoug Rabson }; 384a62dc406SDoug Rabson 385a62dc406SDoug Rabson struct nfs_statfs { 386a62dc406SDoug Rabson union { 387a62dc406SDoug Rabson struct { 388a62dc406SDoug Rabson u_long nfsv2sf_tsize; 389a62dc406SDoug Rabson u_long nfsv2sf_bsize; 390a62dc406SDoug Rabson u_long nfsv2sf_blocks; 391a62dc406SDoug Rabson u_long nfsv2sf_bfree; 392a62dc406SDoug Rabson u_long nfsv2sf_bavail; 393a62dc406SDoug Rabson } sf_nfsv2; 394a62dc406SDoug Rabson struct { 395a62dc406SDoug Rabson nfsuint64 nfsv3sf_tbytes; 396a62dc406SDoug Rabson nfsuint64 nfsv3sf_fbytes; 397a62dc406SDoug Rabson nfsuint64 nfsv3sf_abytes; 398a62dc406SDoug Rabson nfsuint64 nfsv3sf_tfiles; 399a62dc406SDoug Rabson nfsuint64 nfsv3sf_ffiles; 400a62dc406SDoug Rabson nfsuint64 nfsv3sf_afiles; 401a62dc406SDoug Rabson u_long nfsv3sf_invarsec; 402a62dc406SDoug Rabson } sf_nfsv3; 403a62dc406SDoug Rabson } sf_un; 404a62dc406SDoug Rabson }; 405a62dc406SDoug Rabson 406a62dc406SDoug Rabson #define sf_tsize sf_un.sf_nfsv2.nfsv2sf_tsize 407a62dc406SDoug Rabson #define sf_bsize sf_un.sf_nfsv2.nfsv2sf_bsize 408a62dc406SDoug Rabson #define sf_blocks sf_un.sf_nfsv2.nfsv2sf_blocks 409a62dc406SDoug Rabson #define sf_bfree sf_un.sf_nfsv2.nfsv2sf_bfree 410a62dc406SDoug Rabson #define sf_bavail sf_un.sf_nfsv2.nfsv2sf_bavail 411a62dc406SDoug Rabson #define sf_tbytes sf_un.sf_nfsv3.nfsv3sf_tbytes 412a62dc406SDoug Rabson #define sf_fbytes sf_un.sf_nfsv3.nfsv3sf_fbytes 413a62dc406SDoug Rabson #define sf_abytes sf_un.sf_nfsv3.nfsv3sf_abytes 414a62dc406SDoug Rabson #define sf_tfiles sf_un.sf_nfsv3.nfsv3sf_tfiles 415a62dc406SDoug Rabson #define sf_ffiles sf_un.sf_nfsv3.nfsv3sf_ffiles 416a62dc406SDoug Rabson #define sf_afiles sf_un.sf_nfsv3.nfsv3sf_afiles 417a62dc406SDoug Rabson #define sf_invarsec sf_un.sf_nfsv3.nfsv3sf_invarsec 418a62dc406SDoug Rabson 419a62dc406SDoug Rabson struct nfsv3_fsinfo { 420a62dc406SDoug Rabson u_long fs_rtmax; 421a62dc406SDoug Rabson u_long fs_rtpref; 422a62dc406SDoug Rabson u_long fs_rtmult; 423a62dc406SDoug Rabson u_long fs_wtmax; 424a62dc406SDoug Rabson u_long fs_wtpref; 425a62dc406SDoug Rabson u_long fs_wtmult; 426a62dc406SDoug Rabson u_long fs_dtpref; 427a62dc406SDoug Rabson nfsuint64 fs_maxfilesize; 428a62dc406SDoug Rabson nfstime3 fs_timedelta; 429a62dc406SDoug Rabson u_long fs_properties; 430a62dc406SDoug Rabson }; 431a62dc406SDoug Rabson 432a62dc406SDoug Rabson struct nfsv3_pathconf { 433a62dc406SDoug Rabson u_long pc_linkmax; 434a62dc406SDoug Rabson u_long pc_namemax; 435a62dc406SDoug Rabson u_long pc_notrunc; 436a62dc406SDoug Rabson u_long pc_chownrestricted; 437a62dc406SDoug Rabson u_long pc_caseinsensitive; 438a62dc406SDoug Rabson u_long pc_casepreserving; 439a62dc406SDoug Rabson }; 440a62dc406SDoug Rabson 441a62dc406SDoug Rabson #endif 442