[BACK]Return to nfs.h CVS log [TXT][DIR] Up to [local] / sys / nfs

Annotation of sys/nfs/nfs.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: nfs.h,v 1.28 2007/01/16 17:52:18 thib Exp $   */
        !             2: /*     $NetBSD: nfs.h,v 1.10.4.1 1996/05/27 11:23:56 fvdl Exp $        */
        !             3:
        !             4: /*
        !             5:  * Copyright (c) 1989, 1993, 1995
        !             6:  *     The Regents of the University of California.  All rights reserved.
        !             7:  *
        !             8:  * This code is derived from software contributed to Berkeley by
        !             9:  * Rick Macklem at The University of Guelph.
        !            10:  *
        !            11:  * Redistribution and use in source and binary forms, with or without
        !            12:  * modification, are permitted provided that the following conditions
        !            13:  * are met:
        !            14:  * 1. Redistributions of source code must retain the above copyright
        !            15:  *    notice, this list of conditions and the following disclaimer.
        !            16:  * 2. Redistributions in binary form must reproduce the above copyright
        !            17:  *    notice, this list of conditions and the following disclaimer in the
        !            18:  *    documentation and/or other materials provided with the distribution.
        !            19:  * 3. Neither the name of the University nor the names of its contributors
        !            20:  *    may be used to endorse or promote products derived from this software
        !            21:  *    without specific prior written permission.
        !            22:  *
        !            23:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            24:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            25:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            26:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            27:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            28:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            29:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            30:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            31:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            32:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            33:  * SUCH DAMAGE.
        !            34:  *
        !            35:  *     @(#)nfs.h       8.4 (Berkeley) 5/1/95
        !            36:  */
        !            37:
        !            38: #ifndef _NFS_NFS_H_
        !            39: #define _NFS_NFS_H_
        !            40:
        !            41: /*
        !            42:  * Tunable constants for nfs
        !            43:  */
        !            44:
        !            45: #define        NFS_MAXIOVEC    34
        !            46: #define NFS_TICKINTVL  5               /* Desired time for a tick (msec) */
        !            47: #define NFS_HZ         (hz / nfs_ticks) /* Ticks/sec */
        !            48: #define        NFS_TIMEO       (1 * NFS_HZ)    /* Default timeout = 1 second */
        !            49: #define        NFS_MINTIMEO    (1 * NFS_HZ)    /* Min timeout to use */
        !            50: #define        NFS_MAXTIMEO    (60 * NFS_HZ)   /* Max timeout to backoff to */
        !            51: #define        NFS_MINIDEMTIMEO (5 * NFS_HZ)   /* Min timeout for non-idempotent ops*/
        !            52: #define        NFS_TIMEOUTMUL  2               /* Timeout/Delay multiplier */
        !            53: #define        NFS_MAXREXMIT   100             /* Stop counting after this many */
        !            54: #define        NFS_MAXWINDOW   1024            /* Max number of outstanding requests */
        !            55: #define        NFS_RETRANS     10              /* Num of retrans for soft mounts */
        !            56: #define        NFS_MAXGRPS     16              /* Max. size of groups list */
        !            57: #ifndef NFS_MINATTRTIMO
        !            58: #define        NFS_MINATTRTIMO 5               /* Attribute cache timeout in sec */
        !            59: #endif
        !            60: #ifndef NFS_MAXATTRTIMO
        !            61: #define        NFS_MAXATTRTIMO 60
        !            62: #endif
        !            63: #define        NFS_WSIZE       8192            /* Def. write data size <= 8192 */
        !            64: #define        NFS_RSIZE       8192            /* Def. read data size <= 8192 */
        !            65: #define NFS_READDIRSIZE        8192            /* Def. readdir size */
        !            66: #define        NFS_DEFRAHEAD   1               /* Def. read ahead # blocks */
        !            67: #define        NFS_MAXRAHEAD   4               /* Max. read ahead # blocks */
        !            68: #define        NFS_MAXUIDHASH  64              /* Max. # of hashed uid entries/mp */
        !            69: #define        NFS_MAXASYNCDAEMON      20      /* Max. number async_daemons runable */
        !            70: #define NFS_MAXGATHERDELAY     100     /* Max. write gather delay (msec) */
        !            71: #ifndef NFS_GATHERDELAY
        !            72: #define NFS_GATHERDELAY                10      /* Default write gather delay (msec) */
        !            73: #endif
        !            74: /*
        !            75:  * Ideally, NFS_DIRBLKSIZ should be bigger, but I've seen servers with
        !            76:  * broken NFS/ethernet drivers that won't work with anything bigger (Linux..)
        !            77:  */
        !            78: #define        NFS_DIRBLKSIZ   1024            /* Must be a multiple of DIRBLKSIZ */
        !            79: #define NFS_READDIRBLKSIZ      512     /* Size of read dir blocks. XXX */
        !            80:
        !            81: /*
        !            82:  * Oddballs
        !            83:  */
        !            84: #define        NMOD(a)         ((a) % nfs_asyncdaemons)
        !            85: #define NFS_CMPFH(n, f, s) \
        !            86:        ((n)->n_fhsize == (s) && !bcmp((caddr_t)(n)->n_fhp, (caddr_t)(f), (s)))
        !            87: #define NFS_ISV3(v)    (VFSTONFS((v)->v_mount)->nm_flag & NFSMNT_NFSV3)
        !            88: #define NFS_SRVMAXDATA(n) \
        !            89:                (((n)->nd_flag & ND_NFSV3) ? (((n)->nd_nam2) ? \
        !            90:                 NFS_MAXDGRAMDATA : NFS_MAXDATA) : NFS_V2MAXDATA)
        !            91:
        !            92: /*
        !            93:  * sys/malloc.h needs M_NFSDIROFF, M_NFSRVDESC and M_NFSBIGFH added.
        !            94:  * The VA_EXCLUSIVE flag should be added for va_vaflags and set for an
        !            95:  * exclusive create.
        !            96:  */
        !            97: #ifndef M_NFSRVDESC
        !            98: #define M_NFSRVDESC    M_TEMP
        !            99: #endif
        !           100: #ifndef M_NFSDIROFF
        !           101: #define M_NFSDIROFF    M_TEMP
        !           102: #endif
        !           103: #ifndef M_NFSBIGFH
        !           104: #define M_NFSBIGFH     M_TEMP
        !           105: #endif
        !           106: #ifndef VA_EXCLUSIVE
        !           107: #define VA_EXCLUSIVE   0
        !           108: #endif
        !           109:
        !           110: /*
        !           111:  * The B_INVAFTERWRITE flag should be set to whatever is required by the
        !           112:  * buffer cache code to say "Invalidate the block after it is written back".
        !           113:  */
        !           114: #define        B_INVAFTERWRITE B_INVAL
        !           115:
        !           116: /*
        !           117:  * The IO_METASYNC flag should be implemented for local file systems.
        !           118:  * (Until then, it is nothin at all.)
        !           119:  */
        !           120: #ifndef IO_METASYNC
        !           121: #define IO_METASYNC    0
        !           122: #endif
        !           123:
        !           124: /*
        !           125:  * Set the attribute timeout based on how recently the file has been modified.
        !           126:  */
        !           127: #if 0 /* replaced by nfs_attrtimeo() in nfs_subs.c */
        !           128: #define        NFS_ATTRTIMEO(np) \
        !           129:        ((((np)->n_flag & NMODIFIED) || \
        !           130:         (time_second - (np)->n_mtime) / 10 < NFS_MINATTRTIMO) ? NFS_MINATTRTIMO : \
        !           131:         ((time_second - (np)->n_mtime) / 10 > NFS_MAXATTRTIMO ? NFS_MAXATTRTIMO : \
        !           132:          (time_second - (np)->n_mtime) / 10))
        !           133: #endif
        !           134:
        !           135: /*
        !           136:  * Structures for the nfssvc(2) syscall. Not that anyone but nfsd and mount_nfs
        !           137:  * should ever try and use it.
        !           138:  */
        !           139: struct nfsd_args {
        !           140:        int     sock;           /* Socket to serve */
        !           141:        caddr_t name;           /* Client addr for connection based sockets */
        !           142:        int     namelen;        /* Length of name */
        !           143: };
        !           144:
        !           145: struct nfsd_srvargs {
        !           146:        struct nfsd     *nsd_nfsd;      /* Pointer to in kernel nfsd struct */
        !           147:        uid_t           nsd_uid;        /* Effective uid mapped to cred */
        !           148:        u_int32_t       nsd_haddr;      /* IP address of client */
        !           149:        struct ucred    nsd_cr;         /* Cred. uid maps to */
        !           150:        int             nsd_authlen;    /* Length of auth string (ret) */
        !           151:        u_char          *nsd_authstr;   /* Auth string (ret) */
        !           152:        int             nsd_verflen;    /* and the verifier */
        !           153:        u_char          *nsd_verfstr;
        !           154:        struct timeval  nsd_timestamp;  /* timestamp from verifier */
        !           155:        u_int32_t       nsd_ttl;        /* credential ttl (sec) */
        !           156:        NFSKERBKEY_T    nsd_key;        /* Session key */
        !           157: };
        !           158:
        !           159: struct nfsd_cargs {
        !           160:        char            *ncd_dirp;      /* Mount dir path */
        !           161:        uid_t           ncd_authuid;    /* Effective uid */
        !           162:        int             ncd_authtype;   /* Type of authenticator */
        !           163:        u_int           ncd_authlen;    /* Length of authenticator string */
        !           164:        u_char          *ncd_authstr;   /* Authenticator string */
        !           165:        u_int           ncd_verflen;    /* and the verifier */
        !           166:        u_char          *ncd_verfstr;
        !           167:        NFSKERBKEY_T    ncd_key;        /* Session key */
        !           168: };
        !           169:
        !           170: /*
        !           171:  * Stats structure
        !           172:  */
        !           173: struct nfsstats {
        !           174:        uint64_t        attrcache_hits;
        !           175:        uint64_t        attrcache_misses;
        !           176:        uint64_t        lookupcache_hits;
        !           177:        uint64_t        lookupcache_misses;
        !           178:        uint64_t        direofcache_hits;
        !           179:        uint64_t        direofcache_misses;
        !           180:        uint64_t        biocache_reads;
        !           181:        uint64_t        read_bios;
        !           182:        uint64_t        read_physios;
        !           183:        uint64_t        biocache_writes;
        !           184:        uint64_t        write_bios;
        !           185:        uint64_t        write_physios;
        !           186:        uint64_t        biocache_readlinks;
        !           187:        uint64_t        readlink_bios;
        !           188:        uint64_t        biocache_readdirs;
        !           189:        uint64_t        readdir_bios;
        !           190:        uint64_t        rpccnt[NFS_NPROCS];
        !           191:        uint64_t        rpcretries;
        !           192:        uint64_t        srvrpccnt[NFS_NPROCS];
        !           193:        uint64_t        srvrpc_errs;
        !           194:        uint64_t        srv_errs;
        !           195:        uint64_t        rpcrequests;
        !           196:        uint64_t        rpctimeouts;
        !           197:        uint64_t        rpcunexpected;
        !           198:        uint64_t        rpcinvalid;
        !           199:        uint64_t        srvcache_inproghits;
        !           200:        uint64_t        srvcache_idemdonehits;
        !           201:        uint64_t        srvcache_nonidemdonehits;
        !           202:        uint64_t        srvcache_misses;
        !           203:        uint64_t        srvnqnfs_leases;
        !           204:        uint64_t        srvnqnfs_maxleases;
        !           205:        uint64_t        srvnqnfs_getleases;
        !           206:        uint64_t        srvvop_writes;
        !           207: };
        !           208:
        !           209: /*
        !           210:  * Flags for nfssvc() system call.
        !           211:  */
        !           212: #define        NFSSVC_BIOD     0x002
        !           213: #define        NFSSVC_NFSD     0x004
        !           214: #define        NFSSVC_ADDSOCK  0x008
        !           215: #define        NFSSVC_AUTHIN   0x010
        !           216: #define        NFSSVC_GOTAUTH  0x040
        !           217: #define        NFSSVC_AUTHINFAIL 0x080
        !           218: #define        NFSSVC_MNTD     0x100
        !           219:
        !           220: /*
        !           221:  * fs.nfs sysctl(3) identifiers
        !           222:  */
        !           223: #define        NFS_NFSSTATS    1       /* struct: struct nfsstats */
        !           224: #define        NFS_NIOTHREADS  2       /* number of i/o threads */
        !           225: #define        NFS_MAXID       3
        !           226:
        !           227: #define FS_NFS_NAMES { \
        !           228:                        { 0, 0 }, \
        !           229:                        { "nfsstats", CTLTYPE_STRUCT }, \
        !           230:                        { "iothreads", CTLTYPE_INT } \
        !           231: }
        !           232:
        !           233: /*
        !           234:  * The set of signals the interrupt an I/O in progress for NFSMNT_INT mounts.
        !           235:  * What should be in this set is open to debate, but I believe that since
        !           236:  * I/O system calls on ufs are never interrupted by signals the set should
        !           237:  * be minimal. My reasoning is that many current programs that use signals
        !           238:  * such as SIGALRM will not expect file I/O system calls to be interrupted
        !           239:  * by them and break.
        !           240:  */
        !           241: #ifdef _KERNEL
        !           242: extern int nfs_niothreads;
        !           243:
        !           244: struct uio; struct buf; struct vattr; struct nameidata;        /* XXX */
        !           245:
        !           246: #define        NFSINT_SIGMASK  (sigmask(SIGINT)|sigmask(SIGTERM)|sigmask(SIGKILL)| \
        !           247:                         sigmask(SIGHUP)|sigmask(SIGQUIT))
        !           248:
        !           249: /*
        !           250:  * Socket errors ignored for connectionless sockets??
        !           251:  * For now, ignore them all
        !           252:  */
        !           253: #define        NFSIGNORE_SOERROR(s, e) \
        !           254:                ((e) != EINTR && (e) != ERESTART && (e) != EWOULDBLOCK && \
        !           255:                ((s) & PR_CONNREQUIRED) == 0)
        !           256:
        !           257: /*
        !           258:  * Nfs outstanding request list element
        !           259:  */
        !           260: struct nfsreq {
        !           261:        TAILQ_ENTRY(nfsreq) r_chain;
        !           262:        struct mbuf     *r_mreq;
        !           263:        struct mbuf     *r_mrep;
        !           264:        struct mbuf     *r_md;
        !           265:        caddr_t         r_dpos;
        !           266:        struct nfsmount *r_nmp;
        !           267:        struct vnode    *r_vp;
        !           268:        u_int32_t       r_xid;
        !           269:        int             r_flags;        /* flags on request, see below */
        !           270:        int             r_retry;        /* max retransmission count */
        !           271:        int             r_rexmit;       /* current retrans count */
        !           272:        int             r_timer;        /* tick counter on reply */
        !           273:        int             r_procnum;      /* NFS procedure number */
        !           274:        int             r_rtt;          /* RTT for rpc */
        !           275:        struct proc     *r_procp;       /* Proc that did I/O system call */
        !           276: };
        !           277:
        !           278: /*
        !           279:  * Queue head for nfsreq's
        !           280:  */
        !           281: extern TAILQ_HEAD(nfsreqhead, nfsreq) nfs_reqq;
        !           282:
        !           283: /* Flag values for r_flags */
        !           284: #define R_TIMING       0x01            /* timing request (in mntp) */
        !           285: #define R_SENT         0x02            /* request has been sent */
        !           286: #define        R_SOFTTERM      0x04            /* soft mnt, too many retries */
        !           287: #define        R_INTR          0x08            /* intr mnt, signal pending */
        !           288: #define        R_SOCKERR       0x10            /* Fatal error on socket */
        !           289: #define        R_TPRINTFMSG    0x20            /* Did a tprintf msg. */
        !           290: #define        R_MUSTRESEND    0x40            /* Must resend request */
        !           291: #define        R_GETONEREP     0x80            /* Probe for one reply only */
        !           292:
        !           293: /*
        !           294:  * A list of nfssvc_sock structures is maintained with all the sockets
        !           295:  * that require service by the nfsd.
        !           296:  * The nfsuid structs hang off of the nfssvc_sock structs in both lru
        !           297:  * and uid hash lists.
        !           298:  */
        !           299: #ifndef NFS_UIDHASHSIZ
        !           300: #define        NFS_UIDHASHSIZ  29      /* Tune the size of nfssvc_sock with this */
        !           301: #endif
        !           302: #define        NUIDHASH(sock, uid) \
        !           303:        (&(sock)->ns_uidhashtbl[(uid) % NFS_UIDHASHSIZ])
        !           304: #ifndef NFS_WDELAYHASHSIZ
        !           305: #define        NFS_WDELAYHASHSIZ 16    /* and with this */
        !           306: #endif
        !           307: #define        NWDELAYHASH(sock, f) \
        !           308:        (&(sock)->ns_wdelayhashtbl[(*((u_int32_t *)(f))) % NFS_WDELAYHASHSIZ])
        !           309: #ifndef NFS_MUIDHASHSIZ
        !           310: #define NFS_MUIDHASHSIZ        67      /* Tune the size of nfsmount with this */
        !           311: #endif
        !           312: #define        NMUIDHASH(nmp, uid) \
        !           313:        (&(nmp)->nm_uidhashtbl[(uid) % NFS_MUIDHASHSIZ])
        !           314: #define        NFSNOHASH(fhsum) \
        !           315:        (&nfsnodehashtbl[(fhsum) & nfsnodehash])
        !           316:
        !           317: /*
        !           318:  * Network address hash list element
        !           319:  */
        !           320: union nethostaddr {
        !           321:        u_int32_t had_inetaddr;
        !           322:        struct mbuf *had_nam;
        !           323: };
        !           324:
        !           325: struct nfsuid {
        !           326:        TAILQ_ENTRY(nfsuid) nu_lru;     /* LRU chain */
        !           327:        LIST_ENTRY(nfsuid) nu_hash;     /* Hash list */
        !           328:        int             nu_flag;        /* Flags */
        !           329:        union nethostaddr nu_haddr;     /* Host addr. for dgram sockets */
        !           330:        struct ucred    nu_cr;          /* Cred uid mapped to */
        !           331:        int             nu_expire;      /* Expiry time (sec) */
        !           332:        struct timeval  nu_timestamp;   /* Kerb. timestamp */
        !           333:        u_int32_t       nu_nickname;    /* Nickname on server */
        !           334:        NFSKERBKEY_T    nu_key;         /* and session key */
        !           335: };
        !           336:
        !           337: #define        nu_inetaddr     nu_haddr.had_inetaddr
        !           338: #define        nu_nam          nu_haddr.had_nam
        !           339: /* Bits for nu_flag */
        !           340: #define        NU_INETADDR     0x1
        !           341: #define NU_NAM         0x2
        !           342: #define NU_NETFAM(u)   (((u)->nu_flag & NU_INETADDR) ? AF_INET : AF_ISO)
        !           343:
        !           344: struct nfssvc_sock {
        !           345:        TAILQ_ENTRY(nfssvc_sock) ns_chain;      /* List of all nfssvc_sock's */
        !           346:        TAILQ_HEAD(, nfsuid) ns_uidlruhead;
        !           347:        struct file     *ns_fp;
        !           348:        struct socket   *ns_so;
        !           349:        struct mbuf     *ns_nam;
        !           350:        struct mbuf     *ns_raw;
        !           351:        struct mbuf     *ns_rawend;
        !           352:        struct mbuf     *ns_rec;
        !           353:        struct mbuf     *ns_recend;
        !           354:        struct mbuf     *ns_frag;
        !           355:        int             ns_flag;
        !           356:        int             ns_solock;
        !           357:        int             ns_cc;
        !           358:        int             ns_reclen;
        !           359:        int             ns_numuids;
        !           360:        u_int32_t       ns_sref;
        !           361:        LIST_HEAD(, nfsrv_descript) ns_tq;      /* Write gather lists */
        !           362:        LIST_HEAD(, nfsuid) ns_uidhashtbl[NFS_UIDHASHSIZ];
        !           363:        LIST_HEAD(nfsrvw_delayhash, nfsrv_descript) ns_wdelayhashtbl[NFS_WDELAYHASHSIZ];
        !           364: };
        !           365:
        !           366: /* Bits for "ns_flag" */
        !           367: #define        SLP_VALID       0x01
        !           368: #define        SLP_DOREC       0x02
        !           369: #define        SLP_NEEDQ       0x04
        !           370: #define        SLP_DISCONN     0x08
        !           371: #define        SLP_GETSTREAM   0x10
        !           372: #define        SLP_LASTFRAG    0x20
        !           373: #define SLP_ALLFLAGS   0xff
        !           374:
        !           375: extern TAILQ_HEAD(nfssvc_sockhead, nfssvc_sock) nfssvc_sockhead;
        !           376: extern int nfssvc_sockhead_flag;
        !           377: #define        SLP_INIT        0x01
        !           378: #define        SLP_WANTINIT    0x02
        !           379:
        !           380: /*
        !           381:  * One of these structures is allocated for each nfsd.
        !           382:  */
        !           383: struct nfsd {
        !           384:        TAILQ_ENTRY(nfsd) nfsd_chain;   /* List of all nfsd's */
        !           385:        int             nfsd_flag;      /* NFSD_ flags */
        !           386:        struct nfssvc_sock *nfsd_slp;   /* Current socket */
        !           387:        int             nfsd_authlen;   /* Authenticator len */
        !           388:        u_char          nfsd_authstr[RPCAUTH_MAXSIZ]; /* Authenticator data */
        !           389:        int             nfsd_verflen;   /* and the Verifier */
        !           390:        u_char          nfsd_verfstr[RPCVERF_MAXSIZ];
        !           391:        struct proc     *nfsd_procp;    /* Proc ptr */
        !           392:        struct nfsrv_descript *nfsd_nd; /* Associated nfsrv_descript */
        !           393: };
        !           394:
        !           395: /* Bits for "nfsd_flag" */
        !           396: #define        NFSD_WAITING    0x01
        !           397: #define        NFSD_REQINPROG  0x02
        !           398: #define        NFSD_NEEDAUTH   0x04
        !           399: #define        NFSD_AUTHFAIL   0x08
        !           400:
        !           401: /*
        !           402:  * This structure is used by the server for describing each request.
        !           403:  * Some fields are used only when write request gathering is performed.
        !           404:  */
        !           405: struct nfsrv_descript {
        !           406:        u_quad_t                nd_time;        /* Write deadline (usec) */
        !           407:        off_t                   nd_off;         /* Start byte offset */
        !           408:        off_t                   nd_eoff;        /* and end byte offset */
        !           409:        LIST_ENTRY(nfsrv_descript) nd_hash;     /* Hash list */
        !           410:        LIST_ENTRY(nfsrv_descript) nd_tq;               /* and timer list */
        !           411:        LIST_HEAD(,nfsrv_descript) nd_coalesce; /* coalesced writes */
        !           412:        struct mbuf             *nd_mrep;       /* Request mbuf list */
        !           413:        struct mbuf             *nd_md;         /* Current dissect mbuf */
        !           414:        struct mbuf             *nd_mreq;       /* Reply mbuf list */
        !           415:        struct mbuf             *nd_nam;        /* and socket addr */
        !           416:        struct mbuf             *nd_nam2;       /* return socket addr */
        !           417:        caddr_t                 nd_dpos;        /* Current dissect pos */
        !           418:        unsigned int            nd_procnum;     /* RPC # */
        !           419:        int                     nd_stable;      /* storage type */
        !           420:        int                     nd_flag;        /* nd_flag */
        !           421:        int                     nd_len;         /* Length of this write */
        !           422:        int                     nd_repstat;     /* Reply status */
        !           423:        u_int32_t               nd_retxid;      /* Reply xid */
        !           424:        struct timeval          nd_starttime;   /* Time RPC initiated */
        !           425:        fhandle_t               nd_fh;          /* File handle */
        !           426:        struct ucred            nd_cr;          /* Credentials */
        !           427: };
        !           428:
        !           429: /* Bits for "nd_flag" */
        !           430: #define ND_NFSV3       0x08
        !           431: #define ND_KERBNICK    0x20
        !           432: #define ND_KERBFULL    0x40
        !           433: #define ND_KERBAUTH    (ND_KERBNICK | ND_KERBFULL)
        !           434:
        !           435: extern struct pool nfsreqpl;
        !           436: extern TAILQ_HEAD(nfsdhead, nfsd) nfsd_head;
        !           437: extern int nfsd_head_flag;
        !           438: #define        NFSD_CHECKSLP   0x01
        !           439:
        !           440: /*
        !           441:  * These macros compare nfsrv_descript structures.
        !           442:  */
        !           443: #define NFSW_CONTIG(o, n) \
        !           444:                ((o)->nd_eoff >= (n)->nd_off && \
        !           445:                 !bcmp((caddr_t)&(o)->nd_fh, (caddr_t)&(n)->nd_fh, NFSX_V3FH))
        !           446:
        !           447: #define NFSW_SAMECRED(o, n) \
        !           448:        (((o)->nd_flag & ND_KERBAUTH) == ((n)->nd_flag & ND_KERBAUTH) && \
        !           449:         !bcmp((caddr_t)&(o)->nd_cr, (caddr_t)&(n)->nd_cr, \
        !           450:                sizeof (struct ucred)))
        !           451:
        !           452: #endif /* _KERNEL */
        !           453: #endif /* _NFS_NFS_H */

CVSweb