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

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

unix.superglobalmegacorp.com

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