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