Annotation of XNU/bsd/nfs/nfsproto.h, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.