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