1 /*        $NetBSD: nfsmount.h,v 1.3 2016/12/13 22:17:33 pgoyette Exp $          */
2 /*-
3  * Copyright (c) 1989, 1993
4  *        The Regents of the University of California.  All rights reserved.
5  *
6  * This code is derived from software contributed to Berkeley by
7  * Rick Macklem at The University of Guelph.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  * 4. Neither the name of the University nor the names of its contributors
18  *    may be used to endorse or promote products derived from this software
19  *    without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  *
33  * FreeBSD: head/sys/fs/nfsclient/nfsmount.h 244042 2012-12-08 22:52:39Z rmacklem
34  * $NetBSD: nfsmount.h,v 1.3 2016/12/13 22:17:33 pgoyette Exp $
35  */
36 
37 #ifndef _NFSCLIENT_NFSMOUNT_H_
38 #define   _NFSCLIENT_NFSMOUNT_H_
39 
40 #include <fs/nfs/common/nfs_mountcommon.h>
41 
42 /*
43  * Mount structure.
44  * One allocated on every NFS mount.
45  * Holds NFS specific information for mount.
46  */
47 struct    nfsmount {
48           struct    nfsmount_common nm_com;       /* Common fields for nlm */
49           int       nm_numgrps;                   /* Max. size of groupslist */
50           u_char    nm_fh[NFSX_FHMAX];  /* File handle of root dir */
51           int       nm_fhsize;                    /* Size of root file handle */
52           struct    nfssockreq nm_sockreq;        /* Socket Info */
53           int       nm_timeouts;                  /* Request timeouts */
54           int       nm_rsize;           /* Max size of read rpc */
55           int       nm_wsize;           /* Max size of write rpc */
56           int       nm_readdirsize;               /* Size of a readdir rpc */
57           int       nm_readahead;                 /* Num. of blocks to readahead */
58           int       nm_wcommitsize;               /* Max size of commit for write */
59           int       nm_acdirmin;                  /* Directory attr cache min lifetime */
60           int       nm_acdirmax;                  /* Directory attr cache max lifetime */
61           int       nm_acregmin;                  /* Reg file attr cache min lifetime */
62           int       nm_acregmax;                  /* Reg file attr cache max lifetime */
63           u_char    nm_verf[NFSX_VERF]; /* write verifier */
64           TAILQ_HEAD(, buf) nm_bufq;    /* async io buffer queue */
65           short     nm_bufqlen;                   /* number of buffers in queue */
66           short     nm_bufqwant;                  /* process wants to add to the queue */
67           int       nm_bufqiods;                  /* number of iods processing queue */
68           u_int64_t nm_maxfilesize;     /* maximum file size */
69           int       nm_tprintf_initial_delay; /* initial delay */
70           int       nm_tprintf_delay;   /* interval for messages */
71           int       nm_nametimeo;                 /* timeout for +ve entries (sec) */
72           int       nm_negnametimeo;    /* timeout for -ve entries (sec) */
73 
74           /* Newnfs additions */
75           TAILQ_HEAD(, nfsclds) nm_sess;          /* Session(s) for NFSv4.1. */
76           struct    nfsclclient *nm_clp;
77           uid_t     nm_uid;                       /* Uid for SetClientID etc. */
78           u_int64_t nm_clval;           /* identifies which clientid */
79           u_int64_t nm_fsid[2];                   /* NFSv4 fsid */
80           int       nm_minorvers;                 /* Minor version # for NFSv4 */
81           u_int16_t nm_krbnamelen;      /* Krb5 host principal, if any */
82           u_int16_t nm_dirpathlen;      /* and mount dirpath, for V4 */
83           u_int16_t nm_srvkrbnamelen;   /* and the server's target name */
84           u_char    nm_name[1];         /* malloc'd actual len of krbname + dirpath */
85 };
86 
87 #define   nm_nam              nm_sockreq.nr_nam
88 #define   nm_sotype nm_sockreq.nr_sotype
89 #define   nm_so               nm_sockreq.nr_so
90 #define   nm_soflags          nm_sockreq.nr_soflags
91 #define   nm_soproto          nm_sockreq.nr_soproto
92 #define   nm_client nm_sockreq.nr_client
93 #define   nm_krbname          nm_name
94 #define   nm_mtx              nm_com.nmcom_mtx
95 #define   nm_flag             nm_com.nmcom_flag
96 #define   nm_state  nm_com.nmcom_state
97 #define   nm_mountp nm_com.nmcom_mountp
98 #define   nm_timeo  nm_com.nmcom_timeo
99 #define   nm_retry  nm_com.nmcom_retry
100 #define   nm_hostname         nm_com.nmcom_hostname
101 #define   nm_getinfo          nm_com.nmcom_getinfo
102 #define   nm_vinvalbuf        nm_com.nmcom_vinvalbuf
103 
104 #define   NFSMNT_DIRPATH(m)   (&((m)->nm_name[(m)->nm_krbnamelen + 1]))
105 #define   NFSMNT_SRVKRBNAME(m)                                                            \
106           (&((m)->nm_name[(m)->nm_krbnamelen + (m)->nm_dirpathlen + 2]))
107 
108 #if defined(_KERNEL)
109 /*
110  * Convert mount ptr to nfsmount ptr.
111  */
112 #define   VFSTONFS(mp)        ((struct nfsmount *)((mp)->mnt_data))
113 
114 /*
115  * Get a pointer to the MDS session, which is always the first element
116  * in the list.
117  */
118 #define   NFSMNT_MDSSESSION(m)          (&(TAILQ_FIRST(&((m)->nm_sess))->nfsclds_sess))
119 
120 #ifndef NFS_DEFAULT_NAMETIMEO
121 #define NFS_DEFAULT_NAMETIMEO           60
122 #endif
123 
124 #ifndef NFS_DEFAULT_NEGNAMETIMEO
125 #define NFS_DEFAULT_NEGNAMETIMEO        60
126 #endif
127 
128 #endif    /* _KERNEL */
129 
130 #endif    /* _NFSCLIENT_NFSMOUNT_H_ */
131