date and time created 92/07/13 00:43:47 by torek
[unix-history] / usr / src / sys / nfs / nfs.h
CommitLineData
a2907882
KM
1/*
2 * Copyright (c) 1989 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Rick Macklem at The University of Guelph.
7 *
dbf0c423 8 * %sccs.include.redist.c%
a2907882 9 *
fe893626 10 * @(#)nfs.h 7.16 (Berkeley) %G%
a2907882
KM
11 */
12
13/*
14 * Tunable constants for nfs
15 */
b143b1f4 16
170bfd05 17#define NFS_MAXIOVEC 34
0d515be6 18#define NFS_HZ 25 /* Ticks per second for NFS timeouts */
b143b1f4 19#define NFS_TIMEO (1*NFS_HZ) /* Default timeout = 1 second */
0d515be6 20#define NFS_MINTIMEO (1*NFS_HZ) /* Min timeout to use */
b143b1f4 21#define NFS_MAXTIMEO (60*NFS_HZ) /* Max timeout to backoff to */
0d515be6 22#define NFS_MINIDEMTIMEO (5*NFS_HZ) /* Min timeout for non-idempotent ops*/
b143b1f4
KM
23#define NFS_MAXREXMIT 100 /* Stop counting after this many */
24#define NFS_MAXWINDOW 1024 /* Max number of outstanding requests */
25#define NFS_RETRANS 10 /* Num of retrans for soft mounts */
0d515be6 26#define NFS_MAXGRPS 16 /* Max. size of groups list */
b143b1f4 27#define NFS_ATTRTIMEO 5 /* Attribute cache timeout in sec */
170bfd05
KM
28#define NFS_WSIZE 8192 /* Def. write data size <= 8192 */
29#define NFS_RSIZE 8192 /* Def. read data size <= 8192 */
0d515be6
KM
30#define NFS_DEFRAHEAD 1 /* Def. read ahead # blocks */
31#define NFS_MAXRAHEAD 4 /* Max. read ahead # blocks */
170bfd05 32#define NFS_MAXREADDIR NFS_MAXDATA /* Max. size of directory read */
0d515be6
KM
33#define NFS_MAXUIDHASH 64 /* Max. # of hashed uid entries/mp */
34#define NFS_MAXASYNCDAEMON 20 /* Max. number async_daemons runable */
3b97c194 35#define NFS_DIRBLKSIZ 1024 /* Size of an NFS directory block */
ffe6f482 36#define NMOD(a) ((a) % nfs_asyncdaemons)
a2907882 37
0d515be6
KM
38/*
39 * Structures for the nfssvc(2) syscall. Not that anyone but nfsd and mount_nfs
40 * should ever try and use it.
41 */
42struct nfsd_args {
43 int sock; /* Socket to serve */
44 caddr_t name; /* Client address for connection based sockets */
45 int namelen; /* Length of name */
46};
47
48struct nfsd_srvargs {
49 struct nfsd *nsd_nfsd; /* Pointer to in kernel nfsd struct */
50 uid_t nsd_uid; /* Effective uid mapped to cred */
51 u_long nsd_haddr; /* Ip address of client */
52 struct ucred nsd_cr; /* Cred. uid maps to */
53 int nsd_authlen; /* Length of auth string (ret) */
54 char *nsd_authstr; /* Auth string (ret) */
55};
56
57struct nfsd_cargs {
58 char *ncd_dirp; /* Mount dir path */
59 uid_t ncd_authuid; /* Effective uid */
60 int ncd_authtype; /* Type of authenticator */
61 int ncd_authlen; /* Length of authenticator string */
62 char *ncd_authstr; /* Authenticator string */
63};
64
65/*
66 * Stats structure
67 */
68struct nfsstats {
69 int attrcache_hits;
70 int attrcache_misses;
71 int lookupcache_hits;
72 int lookupcache_misses;
73 int direofcache_hits;
74 int direofcache_misses;
75 int biocache_reads;
76 int read_bios;
77 int read_physios;
78 int biocache_writes;
79 int write_bios;
80 int write_physios;
81 int biocache_readlinks;
82 int readlink_bios;
83 int biocache_readdirs;
84 int readdir_bios;
85 int rpccnt[NFS_NPROCS];
86 int rpcretries;
87 int srvrpccnt[NFS_NPROCS];
88 int srvrpc_errs;
89 int srv_errs;
90 int rpcrequests;
91 int rpctimeouts;
92 int rpcunexpected;
93 int rpcinvalid;
94 int srvcache_inproghits;
95 int srvcache_idemdonehits;
96 int srvcache_nonidemdonehits;
97 int srvcache_misses;
98 int srvnqnfs_leases;
99 int srvnqnfs_maxleases;
100 int srvnqnfs_getleases;
101};
102
103/*
104 * Flags for nfssvc() system call.
105 */
106#define NFSSVC_BIOD 0x002
107#define NFSSVC_NFSD 0x004
108#define NFSSVC_ADDSOCK 0x008
109#define NFSSVC_AUTHIN 0x010
110#define NFSSVC_GOTAUTH 0x040
111#define NFSSVC_AUTHINFAIL 0x080
112#define NFSSVC_MNTD 0x100
113
f0f1cbaa
KM
114/*
115 * The set of signals the interrupt an I/O in progress for NFSMNT_INT mounts.
116 * What should be in this set is open to debate, but I believe that since
117 * I/O system calls on ufs are never interrupted by signals the set should
118 * be minimal. My reasoning is that many current programs that use signals
119 * such as SIGALRM will not expect file I/O system calls to be interrupted
120 * by them and break.
121 */
0d515be6 122#ifdef KERNEL
f0f1cbaa
KM
123#define NFSINT_SIGMASK (sigmask(SIGINT)|sigmask(SIGTERM)|sigmask(SIGKILL)| \
124 sigmask(SIGHUP)|sigmask(SIGQUIT))
125
126/*
127 * Socket errors ignored for connectionless sockets??
128 * For now, ignore them all
129 */
130#define NFSIGNORE_SOERROR(s, e) \
131 ((e) != EINTR && (e) != ERESTART && (e) != EWOULDBLOCK && \
132 ((s) & PR_CONNREQUIRED) == 0)
b143b1f4 133
a2907882
KM
134/*
135 * Nfs outstanding request list element
136 */
137struct nfsreq {
138 struct nfsreq *r_next;
139 struct nfsreq *r_prev;
140 struct mbuf *r_mreq;
141 struct mbuf *r_mrep;
0d515be6
KM
142 struct mbuf *r_md;
143 caddr_t r_dpos;
f0f1cbaa 144 struct nfsmount *r_nmp;
a2907882 145 struct vnode *r_vp;
a2907882 146 u_long r_xid;
0d515be6
KM
147 int r_flags; /* flags on request, see below */
148 int r_retry; /* max retransmission count */
149 int r_rexmit; /* current retrans count */
150 int r_timer; /* tick counter on reply */
151 int r_procnum; /* NFS procedure number */
152 int r_rtt; /* RTT for rpc */
f0f1cbaa 153 struct proc *r_procp; /* Proc that did I/O system call */
a2907882
KM
154};
155
b143b1f4
KM
156/* Flag values for r_flags */
157#define R_TIMING 0x01 /* timing request (in mntp) */
158#define R_SENT 0x02 /* request has been sent */
f0f1cbaa
KM
159#define R_SOFTTERM 0x04 /* soft mnt, too many retries */
160#define R_INTR 0x08 /* intr mnt, signal pending */
161#define R_SOCKERR 0x10 /* Fatal error on socket */
162#define R_TPRINTFMSG 0x20 /* Did a tprintf msg. */
163#define R_MUSTRESEND 0x40 /* Must resend request */
b143b1f4 164
0d515be6
KM
165struct nfsstats nfsstats;
166
a2907882 167/*
0d515be6
KM
168 * A list of nfssvc_sock structures is maintained with all the sockets
169 * that require service by the nfsd.
170 * The nfsuid structs hang off of the nfssvc_sock structs in both lru
171 * and uid hash lists.
a2907882 172 */
0d515be6
KM
173#define NUIDHASHSIZ 32
174#define NUIDHASH(uid) ((uid) & (NUIDHASHSIZ - 1))
175
176struct nfsuid {
177 struct nfsuid *nu_lrunext; /* MUST be first */
178 struct nfsuid *nu_lruprev;
179 struct nfsuid *nu_hnext;
180 struct nfsuid *nu_hprev;
181 int nu_flag; /* Flags */
182 uid_t nu_uid; /* Uid mapped by this entry */
183 union nethostaddr nu_haddr; /* Host addr. for dgram sockets */
184 struct ucred nu_cr; /* Cred uid mapped to */
a2907882
KM
185};
186
0d515be6
KM
187#define nu_inetaddr nu_haddr.had_inetaddr
188#define nu_nam nu_haddr.had_nam
189/* Bits for nu_flag */
190#define NU_INETADDR 0x1
191
192struct nfssvc_sock {
193 struct nfsuid *ns_lrunext; /* MUST be first */
194 struct nfsuid *ns_lruprev;
195 struct nfssvc_sock *ns_next;
196 struct nfssvc_sock *ns_prev;
197 int ns_flag;
198 u_long ns_sref;
199 struct file *ns_fp;
200 struct socket *ns_so;
201 int ns_solock;
202 struct mbuf *ns_nam;
203 int ns_cc;
204 struct mbuf *ns_raw;
205 struct mbuf *ns_rawend;
206 int ns_reclen;
207 struct mbuf *ns_rec;
208 struct mbuf *ns_recend;
209 int ns_numuids;
210 struct nfsuid *ns_uidh[NUIDHASHSIZ];
211};
212
213/* Bits for "ns_flag" */
214#define SLP_VALID 0x01
a5a4c300 215#define SLP_DOREC 0x02
0d515be6
KM
216#define SLP_NEEDQ 0x04
217#define SLP_DISCONN 0x08
218#define SLP_GETSTREAM 0x10
fe893626
KM
219#define SLP_INIT 0x20
220#define SLP_WANTINIT 0x40
221
222#define SLP_ALLFLAGS 0xff
a2907882
KM
223
224/*
0d515be6 225 * One of these structures is allocated for each nfsd.
a2907882 226 */
0d515be6
KM
227struct nfsd {
228 struct nfsd *nd_next; /* Must be first */
229 struct nfsd *nd_prev;
230 int nd_flag; /* NFSD_ flags */
231 struct nfssvc_sock *nd_slp; /* Current socket */
0d515be6
KM
232 struct mbuf *nd_nam; /* Client addr for datagram req. */
233 struct mbuf *nd_mrep; /* Req. mbuf list */
234 struct mbuf *nd_md;
235 caddr_t nd_dpos; /* Position in list */
236 int nd_procnum; /* RPC procedure number */
237 u_long nd_retxid; /* RPC xid */
238 int nd_repstat; /* Reply status value */
239 struct ucred nd_cr; /* Credentials for req. */
240 int nd_nqlflag; /* Leasing flag */
241 int nd_duration; /* Lease duration */
242 int nd_authlen; /* Authenticator len */
243 u_char nd_authstr[RPCAUTH_MAXSIZ]; /* Authenticator data */
244 struct proc *nd_procp; /* Proc ptr */
a2907882
KM
245};
246
0d515be6
KM
247#define NFSD_WAITING 0x01
248#define NFSD_CHECKSLP 0x02
249#define NFSD_REQINPROG 0x04
250#define NFSD_NEEDAUTH 0x08
251#define NFSD_AUTHFAIL 0x10
252#endif /* KERNEL */