1/*-
2 * SPDX-License-Identifier: BSD-3-Clause
3 *
4 * Copyright (c) 1989, 1993
5 * The Regents of the University of California. All rights reserved.
6 *
7 * This code is derived from software contributed to Berkeley by
8 * Rick Macklem at The University of Guelph.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 * 3. Neither the name of the University nor the names of its contributors
19 * may be used to endorse or promote products derived from this software
20 * without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 * SUCH DAMAGE.
33 */
34
35/*
36 * XXX needs <nfs/rpcv2.h> and <nfs/nfs.h> because of typedefs
37 */
38
39struct uio;
40struct ucred;
41struct nfscred;
42NFSPROC_T;
43struct buf;
44struct sockaddr_in;
45struct nfs_dlmount;
46struct file;
47struct nfsmount;
48struct socket;
49struct nfsreq;
50struct nfssockreq;
51struct vattr;
52struct nameidata;
53struct nfsnode;
54struct nfsfh;
55struct sillyrename;
56struct componentname;
57struct nfsd_srvargs;
58struct nfsrv_descript;
59struct nfs_fattr;
60union nethostaddr;
61struct nfsstate;
62struct nfslock;
63struct nfsclient;
64struct nfslayout;
65struct nfsdsession;
66struct nfslockconflict;
67struct nfsd_idargs;
68struct nfsd_clid;
69struct nfsusrgrp;
70struct nfsclowner;
71struct nfsclopen;
72struct nfsclopenhead;
73struct nfsclclient;
74struct nfsclsession;
75struct nfscllockowner;
76struct nfscllock;
77struct nfscldeleg;
78struct nfscllayout;
79struct nfscldevinfo;
80struct nfsv4lock;
81struct nfsvattr;
82struct nfs_vattr;
83struct NFSSVCARGS;
84struct nfsdevice;
85struct pnfsdsfile;
86struct pnfsdsattr;
87#ifdef __FreeBSD__
88NFS_ACCESS_ARGS;
89NFS_OPEN_ARGS;
90NFS_GETATTR_ARGS;
91NFS_LOOKUP_ARGS;
92NFS_READDIR_ARGS;
93#endif
94
95/* nfs_nfsdstate.c */
96int nfsrv_setclient(struct nfsrv_descript *, struct nfsclient **,
97 nfsquad_t *, nfsquad_t *, NFSPROC_T *);
98int nfsrv_getclient(nfsquad_t, int, struct nfsclient **, struct nfsdsession *,
99 nfsquad_t, uint32_t, struct nfsrv_descript *, NFSPROC_T *);
100int nfsrv_destroyclient(struct nfsrv_descript *, nfsquad_t, NFSPROC_T *);
101int nfsrv_destroysession(struct nfsrv_descript *, uint8_t *);
102int nfsrv_bindconnsess(struct nfsrv_descript *, uint8_t *, int *);
103int nfsrv_freestateid(struct nfsrv_descript *, nfsv4stateid_t *, NFSPROC_T *);
104int nfsrv_teststateid(struct nfsrv_descript *, nfsv4stateid_t *, NFSPROC_T *);
105int nfsrv_adminrevoke(struct nfsd_clid *, NFSPROC_T *);
106void nfsrv_dumpclients(struct nfsd_dumpclients *, int);
107void nfsrv_dumplocks(vnode_t, struct nfsd_dumplocks *, int, NFSPROC_T *);
108int nfsrv_lockctrl(vnode_t, struct nfsstate **,
109 struct nfslock **, struct nfslockconflict *, nfsquad_t, nfsv4stateid_t *,
110 struct nfsexstuff *, struct nfsrv_descript *, NFSPROC_T *);
111int nfsrv_openctrl(struct nfsrv_descript *, vnode_t,
112 struct nfsstate **, nfsquad_t, nfsv4stateid_t *, nfsv4stateid_t *,
113 u_int32_t *, struct nfsexstuff *, NFSPROC_T *, u_quad_t);
114int nfsrv_opencheck(nfsquad_t, nfsv4stateid_t *, struct nfsstate *,
115 vnode_t, struct nfsrv_descript *, NFSPROC_T *, int);
116int nfsrv_openupdate(vnode_t, struct nfsstate *, nfsquad_t,
117 nfsv4stateid_t *, struct nfsrv_descript *, NFSPROC_T *, int *);
118int nfsrv_delegupdate(struct nfsrv_descript *, nfsquad_t, nfsv4stateid_t *,
119 vnode_t, int, struct ucred *, NFSPROC_T *, int *);
120int nfsrv_releaselckown(struct nfsstate *, nfsquad_t, NFSPROC_T *);
121void nfsrv_zapclient(struct nfsclient *, NFSPROC_T *);
122int nfssvc_idname(struct nfsd_idargs *);
123void nfsrv_servertimer(void * __unused);
124int nfsrv_getclientipaddr(struct nfsrv_descript *, struct nfsclient *);
125void nfsrv_setupstable(NFSPROC_T *);
126void nfsrv_updatestable(NFSPROC_T *);
127void nfsrv_writestable(u_char *, int, int, NFSPROC_T *);
128void nfsrv_throwawayopens(NFSPROC_T *);
129int nfsrv_checkremove(vnode_t, int, struct nfsrv_descript *, nfsquad_t,
130 NFSPROC_T *);
131void nfsd_recalldelegation(vnode_t, NFSPROC_T *);
132void nfsd_disabledelegation(vnode_t, NFSPROC_T *);
133int nfsrv_checksetattr(vnode_t, struct nfsrv_descript *,
134 nfsv4stateid_t *, struct nfsvattr *, nfsattrbit_t *, struct nfsexstuff *,
135 NFSPROC_T *);
136int nfsrv_checkgetattr(struct nfsrv_descript *, vnode_t,
137 struct nfsvattr *, nfsattrbit_t *, NFSPROC_T *);
138int nfsrv_nfsuserdport(struct nfsuserd_args *, NFSPROC_T *);
139void nfsrv_nfsuserddelport(void);
140void nfsrv_throwawayallstate(NFSPROC_T *);
141int nfsrv_checksequence(struct nfsrv_descript *, uint32_t, uint32_t *,
142 uint32_t *, int, uint32_t *, NFSPROC_T *);
143int nfsrv_checkreclaimcomplete(struct nfsrv_descript *, int);
144void nfsrv_cache_session(struct nfsrv_descript *, struct mbuf **);
145void nfsrv_freeallbackchannel_xprts(void);
146int nfsrv_layoutcommit(struct nfsrv_descript *, vnode_t, int, int, uint64_t,
147 uint64_t, uint64_t, int, struct timespec *, int, nfsv4stateid_t *,
148 int, char *, int *, uint64_t *, struct ucred *, NFSPROC_T *);
149int nfsrv_layoutget(struct nfsrv_descript *, vnode_t, struct nfsexstuff *,
150 int, int *, uint64_t *, uint64_t *, uint64_t, nfsv4stateid_t *, int, int *,
151 int *, char *, struct ucred *, NFSPROC_T *);
152void nfsrv_flexmirrordel(char *, NFSPROC_T *);
153void nfsrv_recalloldlayout(NFSPROC_T *);
154int nfsrv_layoutreturn(struct nfsrv_descript *, vnode_t, int, int, uint64_t,
155 uint64_t, int, int, nfsv4stateid_t *, int, uint32_t *, int *,
156 struct ucred *, NFSPROC_T *);
157int nfsrv_getdevinfo(char *, int, uint32_t *, uint32_t *, int *, char **);
158void nfsrv_freeonedevid(struct nfsdevice *);
159void nfsrv_freealllayoutsanddevids(void);
160void nfsrv_freefilelayouts(fhandle_t *);
161int nfsrv_deldsserver(int, char *, NFSPROC_T *);
162struct nfsdevice *nfsrv_deldsnmp(int, struct nfsmount *, NFSPROC_T *);
163int nfsrv_delds(char *, NFSPROC_T *);
164int nfsrv_createdevids(struct nfsd_nfsd_args *, NFSPROC_T *);
165int nfsrv_checkdsattr(vnode_t, NFSPROC_T *);
166int nfsrv_copymr(vnode_t, vnode_t, vnode_t, struct nfsdevice *,
167 struct pnfsdsfile *, struct pnfsdsfile *, int, struct ucred *, NFSPROC_T *);
168int nfsrv_mdscopymr(char *, char *, char *, char *, int *, char *, NFSPROC_T *,
169 struct vnode **, struct vnode **, struct pnfsdsfile **, struct nfsdevice **,
170 struct nfsdevice **);
171void nfsrv_marknospc(char *, bool);
172void nfsrv_removedeleg(fhandle_t *, struct nfsrv_descript *, NFSPROC_T *);
173
174/* nfs_nfsdserv.c */
175int nfsrvd_access(struct nfsrv_descript *, int,
176 vnode_t, struct nfsexstuff *);
177int nfsrvd_getattr(struct nfsrv_descript *, int,
178 vnode_t, struct nfsexstuff *);
179int nfsrvd_setattr(struct nfsrv_descript *, int,
180 vnode_t, struct nfsexstuff *);
181int nfsrvd_lookup(struct nfsrv_descript *, int,
182 vnode_t, vnode_t *, fhandle_t *, struct nfsexstuff *);
183int nfsrvd_readlink(struct nfsrv_descript *, int,
184 vnode_t, struct nfsexstuff *);
185int nfsrvd_read(struct nfsrv_descript *, int,
186 vnode_t, struct nfsexstuff *);
187int nfsrvd_write(struct nfsrv_descript *, int,
188 vnode_t, struct nfsexstuff *);
189int nfsrvd_create(struct nfsrv_descript *, int,
190 vnode_t, struct nfsexstuff *);
191int nfsrvd_mknod(struct nfsrv_descript *, int,
192 vnode_t, vnode_t *, fhandle_t *, struct nfsexstuff *);
193int nfsrvd_remove(struct nfsrv_descript *, int,
194 vnode_t, struct nfsexstuff *);
195int nfsrvd_rename(struct nfsrv_descript *, int,
196 vnode_t, vnode_t, struct nfsexstuff *, struct nfsexstuff *);
197int nfsrvd_link(struct nfsrv_descript *, int,
198 vnode_t, vnode_t, struct nfsexstuff *, struct nfsexstuff *);
199int nfsrvd_symlink(struct nfsrv_descript *, int,
200 vnode_t, vnode_t *, fhandle_t *, struct nfsexstuff *);
201int nfsrvd_mkdir(struct nfsrv_descript *, int,
202 vnode_t, vnode_t *, fhandle_t *, struct nfsexstuff *);
203int nfsrvd_readdir(struct nfsrv_descript *, int,
204 vnode_t, struct nfsexstuff *);
205int nfsrvd_readdirplus(struct nfsrv_descript *, int,
206 vnode_t, struct nfsexstuff *);
207int nfsrvd_commit(struct nfsrv_descript *, int,
208 vnode_t, struct nfsexstuff *);
209int nfsrvd_statfs(struct nfsrv_descript *, int,
210 vnode_t, struct nfsexstuff *);
211int nfsrvd_fsinfo(struct nfsrv_descript *, int,
212 vnode_t, struct nfsexstuff *);
213int nfsrvd_close(struct nfsrv_descript *, int,
214 vnode_t, struct nfsexstuff *);
215int nfsrvd_delegpurge(struct nfsrv_descript *, int,
216 vnode_t, struct nfsexstuff *);
217int nfsrvd_delegreturn(struct nfsrv_descript *, int,
218 vnode_t, struct nfsexstuff *);
219int nfsrvd_getfh(struct nfsrv_descript *, int,
220 vnode_t, struct nfsexstuff *);
221int nfsrvd_lock(struct nfsrv_descript *, int,
222 vnode_t, struct nfsexstuff *);
223int nfsrvd_lockt(struct nfsrv_descript *, int,
224 vnode_t, struct nfsexstuff *);
225int nfsrvd_locku(struct nfsrv_descript *, int,
226 vnode_t, struct nfsexstuff *);
227int nfsrvd_openconfirm(struct nfsrv_descript *, int,
228 vnode_t, struct nfsexstuff *);
229int nfsrvd_opendowngrade(struct nfsrv_descript *, int,
230 vnode_t, struct nfsexstuff *);
231int nfsrvd_renew(struct nfsrv_descript *, int,
232 vnode_t, struct nfsexstuff *);
233int nfsrvd_secinfo(struct nfsrv_descript *, int,
234 vnode_t, struct nfsexstuff *);
235int nfsrvd_secinfononame(struct nfsrv_descript *, int,
236 vnode_t, struct nfsexstuff *);
237int nfsrvd_setclientid(struct nfsrv_descript *, int,
238 vnode_t, struct nfsexstuff *);
239int nfsrvd_setclientidcfrm(struct nfsrv_descript *, int,
240 vnode_t, struct nfsexstuff *);
241int nfsrvd_verify(struct nfsrv_descript *, int,
242 vnode_t, struct nfsexstuff *);
243int nfsrvd_open(struct nfsrv_descript *, int,
244 vnode_t, vnode_t *, fhandle_t *, struct nfsexstuff *);
245int nfsrvd_openattr(struct nfsrv_descript *, int,
246 vnode_t, vnode_t *, fhandle_t *, struct nfsexstuff *);
247int nfsrvd_releaselckown(struct nfsrv_descript *, int,
248 vnode_t, struct nfsexstuff *);
249int nfsrvd_pathconf(struct nfsrv_descript *, int,
250 vnode_t, struct nfsexstuff *);
251int nfsrvd_exchangeid(struct nfsrv_descript *, int,
252 vnode_t, struct nfsexstuff *);
253int nfsrvd_createsession(struct nfsrv_descript *, int,
254 vnode_t, struct nfsexstuff *);
255int nfsrvd_sequence(struct nfsrv_descript *, int,
256 vnode_t, struct nfsexstuff *);
257int nfsrvd_reclaimcomplete(struct nfsrv_descript *, int,
258 vnode_t, struct nfsexstuff *);
259int nfsrvd_destroyclientid(struct nfsrv_descript *, int,
260 vnode_t, struct nfsexstuff *);
261int nfsrvd_bindconnsess(struct nfsrv_descript *, int,
262 vnode_t, struct nfsexstuff *);
263int nfsrvd_destroysession(struct nfsrv_descript *, int,
264 vnode_t, struct nfsexstuff *);
265int nfsrvd_freestateid(struct nfsrv_descript *, int,
266 vnode_t, struct nfsexstuff *);
267int nfsrvd_layoutget(struct nfsrv_descript *, int,
268 vnode_t, struct nfsexstuff *);
269int nfsrvd_getdevinfo(struct nfsrv_descript *, int,
270 vnode_t, struct nfsexstuff *);
271int nfsrvd_layoutcommit(struct nfsrv_descript *, int,
272 vnode_t, struct nfsexstuff *);
273int nfsrvd_layoutreturn(struct nfsrv_descript *, int,
274 vnode_t, struct nfsexstuff *);
275int nfsrvd_ioadvise(struct nfsrv_descript *, int,
276 vnode_t, struct nfsexstuff *);
277int nfsrvd_layouterror(struct nfsrv_descript *, int,
278 vnode_t, struct nfsexstuff *);
279int nfsrvd_layoutstats(struct nfsrv_descript *, int,
280 vnode_t, struct nfsexstuff *);
281int nfsrvd_teststateid(struct nfsrv_descript *, int,
282 vnode_t, struct nfsexstuff *);
283int nfsrvd_allocate(struct nfsrv_descript *, int,
284 vnode_t, struct nfsexstuff *);
285int nfsrvd_deallocate(struct nfsrv_descript *, int,
286 vnode_t, struct nfsexstuff *);
287int nfsrvd_copy_file_range(struct nfsrv_descript *, int,
288 vnode_t, vnode_t, struct nfsexstuff *, struct nfsexstuff *);
289int nfsrvd_clone(struct nfsrv_descript *, int,
290 vnode_t, vnode_t, struct nfsexstuff *, struct nfsexstuff *);
291int nfsrvd_seek(struct nfsrv_descript *, int,
292 vnode_t, struct nfsexstuff *);
293int nfsrvd_getxattr(struct nfsrv_descript *, int,
294 vnode_t, struct nfsexstuff *);
295int nfsrvd_setxattr(struct nfsrv_descript *, int,
296 vnode_t, struct nfsexstuff *);
297int nfsrvd_rmxattr(struct nfsrv_descript *, int,
298 vnode_t, struct nfsexstuff *);
299int nfsrvd_listxattr(struct nfsrv_descript *, int,
300 vnode_t, struct nfsexstuff *);
301int nfsrvd_notsupp(struct nfsrv_descript *, int,
302 vnode_t, struct nfsexstuff *);
303
304/* nfs_nfsdsocket.c */
305void nfsrvd_rephead(struct nfsrv_descript *);
306void nfsrvd_dorpc(struct nfsrv_descript *, int, u_char *, int, u_int32_t);
307
308/* nfs_nfsdcache.c */
309void nfsrvd_initcache(void);
310int nfsrvd_getcache(struct nfsrv_descript *);
311struct nfsrvcache *nfsrvd_updatecache(struct nfsrv_descript *);
312void nfsrvd_sentcache(struct nfsrvcache *, int, uint32_t);
313void nfsrvd_cleancache(void);
314void nfsrvd_refcache(struct nfsrvcache *);
315void nfsrvd_derefcache(struct nfsrvcache *);
316void nfsrvd_delcache(struct nfsrvcache *);
317void nfsrc_trimcache(uint64_t, uint32_t, int);
318
319/* nfs_commonsubs.c */
320void nfscl_reqstart(struct nfsrv_descript *, int, struct nfsmount *,
321 u_int8_t *, int, u_int32_t **, struct nfsclsession *, int, int,
322 struct ucred *);
323void nfsm_stateidtom(struct nfsrv_descript *, nfsv4stateid_t *, int);
324void nfscl_fillsattr(struct nfsrv_descript *, struct vattr *,
325 vnode_t, int, u_int32_t);
326void newnfs_init(void);
327int nfsaddr_match(int, union nethostaddr *, NFSSOCKADDR_T);
328int nfsaddr2_match(NFSSOCKADDR_T, NFSSOCKADDR_T);
329int nfsm_strtom(struct nfsrv_descript *, const char *, int);
330int nfsm_mbufuio(struct nfsrv_descript *, struct uio *, int);
331int nfsm_fhtom(struct nfsmount *, struct nfsrv_descript *, u_int8_t *, int,
332 int);
333int nfsm_advance(struct nfsrv_descript *, int, int);
334void *nfsm_dissct(struct nfsrv_descript *, int, int);
335void newnfs_copycred(struct nfscred *, struct ucred *);
336void newnfs_copyincred(struct ucred *, struct nfscred *);
337int nfsrv_dissectacl(struct nfsrv_descript *, NFSACL_T *, bool, int *,
338 int *, NFSPROC_T *);
339int nfsrv_getattrbits(struct nfsrv_descript *, nfsattrbit_t *, int *,
340 int *);
341int nfsrv_getopbits(struct nfsrv_descript *, nfsopbit_t *, int *);
342int nfsv4_loadattr(struct nfsrv_descript *, vnode_t,
343 struct nfsvattr *, struct nfsfh **, fhandle_t *, int,
344 struct nfsv3_pathconf *, struct statfs *, struct nfsstatfs *,
345 struct nfsfsinfo *, NFSACL_T *,
346 int, int *, u_int32_t *, u_int32_t *, bool *, uint32_t *, NFSPROC_T *,
347 struct ucred *);
348int nfsv4_lock(struct nfsv4lock *, int, int *, struct mtx *, struct mount *);
349void nfsv4_unlock(struct nfsv4lock *, int);
350void nfsv4_relref(struct nfsv4lock *);
351void nfsv4_getref(struct nfsv4lock *, int *, struct mtx *, struct mount *);
352int nfsv4_getref_nonblock(struct nfsv4lock *);
353int nfsv4_testlock(struct nfsv4lock *);
354int nfsrv_mtostr(struct nfsrv_descript *, char *, int);
355void nfsrv_cleanusergroup(void);
356int nfsrv_checkutf8(u_int8_t *, int);
357int newnfs_sndlock(int *);
358void newnfs_sndunlock(int *);
359int nfsv4_getipaddr(struct nfsrv_descript *, struct sockaddr_in *,
360 struct sockaddr_in6 *, sa_family_t *, int *);
361int nfsv4_seqsession(uint32_t, uint32_t, uint32_t, struct nfsslot *,
362 struct mbuf **, uint16_t);
363void nfsv4_seqsess_cacherep(uint32_t, struct nfsslot *, int, struct mbuf **);
364void nfsv4_setsequence(struct nfsmount *, struct nfsrv_descript *,
365 struct nfsclsession *, int, struct ucred *);
366int nfsv4_sequencelookup(struct nfsmount *, struct nfsclsession *, int *,
367 int *, uint32_t *, uint8_t *, bool);
368void nfsv4_freeslot(struct nfsclsession *, int, bool);
369struct ucred *nfsrv_getgrpscred(struct ucred *);
370struct nfsdevice *nfsv4_findmirror(struct nfsmount *);
371void nfsm_set(struct nfsrv_descript *, u_int);
372struct mbuf *nfsm_add_ext_pgs(struct mbuf *, int, int *);
373int nfsrpc_destroysession(struct nfsmount *, struct nfsclsession *,
374 struct ucred *, NFSPROC_T *);
375
376/* nfs_clcomsubs.c */
377int nfsm_uiombuf(struct nfsrv_descript *, struct uio *, int);
378struct mbuf *nfsm_uiombuflist(struct uio *, int, u_int);
379u_int8_t *nfscl_getmyip(struct nfsmount *, struct in6_addr *, int *);
380int nfsm_getfh(struct nfsrv_descript *, struct nfsfh **);
381int nfscl_mtofh(struct nfsrv_descript *, struct nfsfh **,
382 struct nfsvattr *, int *);
383int nfscl_postop_attr(struct nfsrv_descript *, struct nfsvattr *, int *);
384int nfscl_wcc_data(struct nfsrv_descript *, vnode_t,
385 struct nfsvattr *, int *, int *, uint64_t *);
386int nfsm_loadattr(struct nfsrv_descript *, struct nfsvattr *);
387int nfscl_request(struct nfsrv_descript *, vnode_t,
388 NFSPROC_T *, struct ucred *);
389
390/* nfs_nfsdsubs.c */
391void nfsd_fhtovp(struct nfsrv_descript *, struct nfsrvfh *, int,
392 vnode_t *, struct nfsexstuff *, mount_t *, int, int);
393int nfsd_excred(struct nfsrv_descript *, struct nfsexstuff *, struct ucred *,
394 bool);
395int nfsrv_mtofh(struct nfsrv_descript *, struct nfsrvfh *);
396int nfsrv_putattrbit(struct nfsrv_descript *, nfsattrbit_t *);
397int nfsrv_putopbit(struct nfsrv_descript *, nfsopbit_t *);
398void nfsrv_wcc(struct nfsrv_descript *, int, struct nfsvattr *, int,
399 struct nfsvattr *);
400int nfsv4_fillattr(struct nfsrv_descript *, struct mount *, vnode_t, NFSACL_T *,
401 struct vattr *, fhandle_t *, int, nfsattrbit_t *, struct ucred *,
402 NFSPROC_T *, int, int, int, int, uint64_t, struct statfs *, bool, bool,
403 bool, uint32_t);
404void nfsrv_fillattr(struct nfsrv_descript *, struct nfsvattr *);
405struct mbuf *nfsrv_adj(struct mbuf *, int, int);
406void nfsrv_postopattr(struct nfsrv_descript *, int, struct nfsvattr *);
407int nfsd_errmap(struct nfsrv_descript *);
408void nfsv4_uidtostr(uid_t, u_char **, int *);
409int nfsv4_strtouid(struct nfsrv_descript *, u_char *, int, uid_t *);
410void nfsv4_gidtostr(gid_t, u_char **, int *);
411int nfsv4_strtogid(struct nfsrv_descript *, u_char *, int, gid_t *);
412int nfsrv_checkuidgid(struct nfsrv_descript *, struct nfsvattr *);
413void nfsrv_fixattr(struct nfsrv_descript *, vnode_t,
414 struct nfsvattr *, NFSACL_T *, NFSPROC_T *, nfsattrbit_t *,
415 struct nfsexstuff *);
416int nfsrv_errmoved(int);
417int nfsrv_putreferralattr(struct nfsrv_descript *, nfsattrbit_t *,
418 struct nfsreferral *, int, int *);
419int nfsrv_parsename(struct nfsrv_descript *, char *, u_long *,
420 NFSPATHLEN_T *);
421void nfsd_init(void);
422int nfsd_checkrootexp(struct nfsrv_descript *);
423void nfsd_getminorvers(struct nfsrv_descript *, u_char *, u_char **, int *,
424 u_int32_t *);
425
426/* nfs_clvfsops.c */
427void nfscl_retopts(struct nfsmount *, char *, size_t);
428
429/* nfs_commonport.c */
430int nfsrv_lookupfilename(struct nameidata *, char *, NFSPROC_T *);
431void nfsrv_object_create(vnode_t, NFSPROC_T *);
432int nfsrv_mallocmget_limit(void);
433int nfsvno_v4rootexport(struct nfsrv_descript *);
434void newnfs_portinit(void);
435struct ucred *newnfs_getcred(void);
436void newnfs_setroot(struct ucred *);
437int nfs_catnap(int, int, const char *);
438struct nfsreferral *nfsv4root_getreferral(vnode_t, vnode_t, u_int32_t);
439int nfsvno_pathconf(vnode_t, int, long *, struct ucred *, NFSPROC_T *);
440int nfsrv_atroot(vnode_t, uint64_t *);
441int nfs_supportsnfsv4acls(vnode_t);
442
443/* nfs_commonacl.c */
444int nfsrv_dissectace(struct nfsrv_descript *, struct acl_entry *,
445 bool, int *, int *, NFSPROC_T *);
446uint32_t nfs_aceperm(acl_perm_t);
447int nfsrv_buildacl(struct nfsrv_descript *, NFSACL_T *, __enum_uint8(vtype),
448 NFSPROC_T *);
449int nfsrv_compareacl(NFSACL_T *, NFSACL_T *);
450
451/* nfs_clrpcops.c */
452int nfsrpc_null(vnode_t, struct ucred *, NFSPROC_T *);
453int nfsrpc_access(vnode_t, int, struct ucred *, NFSPROC_T *,
454 struct nfsvattr *, int *);
455int nfsrpc_accessrpc(vnode_t, u_int32_t, struct ucred *,
456 NFSPROC_T *, struct nfsvattr *, int *, u_int32_t *);
457int nfsrpc_open(vnode_t, int, struct ucred *, NFSPROC_T *);
458int nfsrpc_openrpc(struct nfsmount *, vnode_t, u_int8_t *, int, u_int8_t *, int,
459 u_int32_t, struct nfsclopen *, u_int8_t *, int, struct nfscldeleg **, int,
460 u_int32_t, struct ucred *, NFSPROC_T *, int, int);
461int nfsrpc_opendowngrade(vnode_t, u_int32_t, struct nfsclopen *,
462 struct ucred *, NFSPROC_T *);
463int nfsrpc_close(vnode_t, int, NFSPROC_T *);
464int nfsrpc_closerpc(struct nfsrv_descript *, struct nfsmount *,
465 struct nfsclopen *, struct ucred *, NFSPROC_T *, int);
466int nfsrpc_openconfirm(vnode_t, u_int8_t *, int, struct nfsclopen *,
467 struct ucred *, NFSPROC_T *);
468int nfsrpc_setclient(struct nfsmount *, struct nfsclclient *, int,
469 bool *, struct ucred *, NFSPROC_T *);
470int nfsrpc_getattr(vnode_t, struct ucred *, NFSPROC_T *, struct nfsvattr *);
471int nfsrpc_getattrnovp(struct nfsmount *, u_int8_t *, int, int,
472 struct ucred *, NFSPROC_T *, struct nfsvattr *, u_int64_t *, uint32_t *);
473int nfsrpc_setattr(vnode_t, struct vattr *, NFSACL_T *, struct ucred *,
474 NFSPROC_T *, struct nfsvattr *, int *);
475int nfsrpc_lookup(vnode_t, char *, int, struct ucred *, NFSPROC_T *,
476 struct nfsvattr *, struct nfsvattr *, struct nfsfh **, int *, int *,
477 uint32_t);
478int nfsrpc_readlink(vnode_t, struct uio *, struct ucred *,
479 NFSPROC_T *, struct nfsvattr *, int *);
480int nfsrpc_read(vnode_t, struct uio *, struct ucred *, NFSPROC_T *,
481 struct nfsvattr *, int *);
482int nfsrpc_write(vnode_t, struct uio *, int *, int *,
483 struct ucred *, NFSPROC_T *, struct nfsvattr *, int *, int, int);
484int nfsrpc_mknod(vnode_t, char *, int, struct vattr *, u_int32_t,
485 __enum_uint8(vtype), struct ucred *, NFSPROC_T *, struct nfsvattr *,
486 struct nfsvattr *, struct nfsfh **, int *, int *);
487int nfsrpc_create(vnode_t, char *, int, struct vattr *, nfsquad_t,
488 int, struct ucred *, NFSPROC_T *, struct nfsvattr *, struct nfsvattr *,
489 struct nfsfh **, int *, int *);
490int nfsrpc_remove(struct vnode *, char *, int, struct vnode *,
491 struct nfsvattr *, int *, nfsremove_status *, struct nfsvattr *, int *,
492 struct ucred *, NFSPROC_T *);
493int nfsrpc_rename(struct vnode *, struct vnode *, char *, int, struct vnode *,
494 struct vnode *, char *, int, nfsremove_status *, struct nfsvattr *,
495 struct nfsvattr *, int *, int *, struct nfsvattr *, int *, struct ucred *,
496 NFSPROC_T *);
497int nfsrpc_link(vnode_t, vnode_t, char *, int,
498 struct ucred *, NFSPROC_T *, struct nfsvattr *, struct nfsvattr *,
499 int *, int *);
500int nfsrpc_symlink(vnode_t, char *, int, const char *, struct vattr *,
501 struct ucred *, NFSPROC_T *, struct nfsvattr *, struct nfsvattr *,
502 struct nfsfh **, int *, int *);
503int nfsrpc_mkdir(vnode_t, char *, int, struct vattr *,
504 struct ucred *, NFSPROC_T *, struct nfsvattr *, struct nfsvattr *,
505 struct nfsfh **, int *, int *);
506int nfsrpc_rmdir(vnode_t, char *, int, struct ucred *, NFSPROC_T *,
507 struct nfsvattr *, int *);
508int nfsrpc_readdir(vnode_t, struct uio *, nfsuint64 *, struct ucred *,
509 NFSPROC_T *, struct nfsvattr *, int *, int *);
510int nfsrpc_readdirplus(vnode_t, struct uio *, nfsuint64 *,
511 struct ucred *, NFSPROC_T *, struct nfsvattr *, int *, int *);
512int nfsrpc_commit(vnode_t, u_quad_t, int, struct ucred *,
513 NFSPROC_T *, struct nfsvattr *, int *);
514int nfsrpc_advlock(vnode_t, off_t, int, struct flock *, int,
515 struct ucred *, NFSPROC_T *, void *, int);
516int nfsrpc_lockt(struct nfsrv_descript *, vnode_t,
517 struct nfsclclient *, u_int64_t, u_int64_t, struct flock *,
518 struct ucred *, NFSPROC_T *, void *, int);
519int nfsrpc_lock(struct nfsrv_descript *, struct nfsmount *, vnode_t,
520 u_int8_t *, int, struct nfscllockowner *, int, int, u_int64_t,
521 u_int64_t, short, struct ucred *, NFSPROC_T *, int);
522int nfsrpc_statfs(vnode_t, struct nfsstatfs *, struct nfsfsinfo *, uint32_t *,
523 uint32_t *, struct ucred *, NFSPROC_T *, struct nfsvattr *, int *);
524int nfsrpc_fsinfo(vnode_t, struct nfsfsinfo *, struct ucred *,
525 NFSPROC_T *, struct nfsvattr *, int *);
526int nfsrpc_pathconf(vnode_t, struct nfsv3_pathconf *, bool *, uint32_t *,
527 struct ucred *, NFSPROC_T *, struct nfsvattr *, int *);
528int nfsrpc_renew(struct nfsclclient *, struct nfsclds *, struct ucred *,
529 NFSPROC_T *);
530int nfsrpc_rellockown(struct nfsmount *, struct nfscllockowner *, uint8_t *,
531 int, struct ucred *, NFSPROC_T *);
532int nfsrpc_getdirpath(struct nfsmount *, u_char *, struct ucred *,
533 NFSPROC_T *);
534int nfsrpc_delegreturn(struct nfscldeleg *, struct ucred *,
535 struct nfsmount *, NFSPROC_T *, int);
536int nfsrpc_getacl(vnode_t, struct ucred *, NFSPROC_T *, NFSACL_T *);
537int nfsrpc_setacl(vnode_t, struct ucred *, NFSPROC_T *, NFSACL_T *);
538int nfsrpc_exchangeid(struct nfsmount *, struct nfsclclient *,
539 struct nfssockreq *, int, uint32_t, struct nfsclds **, struct ucred *,
540 NFSPROC_T *);
541int nfsrpc_createsession(struct nfsmount *, struct nfsclsession *,
542 struct nfssockreq *, struct nfsclds *, uint32_t, int, struct ucred *,
543 NFSPROC_T *);
544int nfsrpc_destroyclient(struct nfsmount *, struct nfsclclient *,
545 struct ucred *, NFSPROC_T *);
546int nfsrpc_getdeviceinfo(struct nfsmount *, uint8_t *, int, uint32_t *,
547 struct nfscldevinfo **, struct ucred *, NFSPROC_T *);
548int nfsrpc_layoutcommit(struct nfsmount *, uint8_t *, int, int,
549 uint64_t, uint64_t, uint64_t, nfsv4stateid_t *, int, struct ucred *,
550 NFSPROC_T *);
551int nfsrpc_layoutreturn(struct nfsmount *, uint8_t *, int, int, int, uint32_t,
552 int, uint64_t, uint64_t, nfsv4stateid_t *, struct ucred *, NFSPROC_T *,
553 uint32_t, uint32_t, char *);
554int nfsrpc_reclaimcomplete(struct nfsmount *, struct ucred *, NFSPROC_T *);
555int nfsrpc_advise(vnode_t, off_t, uint64_t, int, struct ucred *, NFSPROC_T *);
556int nfscl_doiods(vnode_t, struct uio *, int *, int *, uint32_t, int,
557 struct ucred *, NFSPROC_T *);
558int nfscl_findlayoutforio(struct nfscllayout *, uint64_t, uint32_t,
559 struct nfsclflayout **);
560void nfscl_freenfsclds(struct nfsclds *);
561int nfsrpc_allocate(vnode_t, off_t, off_t, struct nfsvattr *, int *,
562 struct ucred *, NFSPROC_T *);
563int nfsrpc_deallocate(vnode_t, off_t, off_t, struct nfsvattr *, int *,
564 struct ucred *, NFSPROC_T *);
565int nfsrpc_copy_file_range(vnode_t, off_t *, vnode_t, off_t *, size_t *,
566 unsigned int, int *, struct nfsvattr *, int *, struct nfsvattr *,
567 struct ucred *, bool, bool *);
568int nfsrpc_clone(vnode_t, off_t *, vnode_t, off_t *, size_t *, bool,
569 int *, struct nfsvattr *, int *, struct nfsvattr *, struct ucred *);
570int nfsrpc_seek(vnode_t, off_t *, bool *, int, struct ucred *,
571 struct nfsvattr *, int *);
572int nfsrpc_getextattr(vnode_t, const char *, struct uio *, ssize_t *,
573 struct nfsvattr *, int *, struct ucred *, NFSPROC_T *);
574int nfsrpc_setextattr(vnode_t, const char *, struct uio *, struct nfsvattr *,
575 int *, struct ucred *, NFSPROC_T *);
576int nfsrpc_listextattr(vnode_t, uint64_t *, struct uio *, size_t *, bool *,
577 struct nfsvattr *, int *, struct ucred *, NFSPROC_T *);
578int nfsrpc_rmextattr(vnode_t, const char *, struct nfsvattr *, int *,
579 struct ucred *, NFSPROC_T *);
580void nfsrpc_bindconnsess(CLIENT *, void *, struct ucred *);
581int nfsrpc_openattr(struct nfsmount *, struct vnode *, uint8_t *, int,
582 bool, struct ucred *, NFSPROC_T *, struct nfsvattr *, struct nfsfh **,
583 int *);
584
585/* nfs_clstate.c */
586int nfscl_open(vnode_t, u_int8_t *, int, u_int32_t, int,
587 struct ucred *, NFSPROC_T *, struct nfsclowner **, struct nfsclopen **,
588 int *, int *, int, bool);
589int nfscl_getstateid(vnode_t, u_int8_t *, int, u_int32_t, int, struct ucred *,
590 NFSPROC_T *, nfsv4stateid_t *, void **);
591void nfscl_ownerrelease(struct nfsmount *, struct nfsclowner *, int, int, int);
592void nfscl_openrelease(struct nfsmount *, struct nfsclopen *, int, int);
593int nfscl_getcl(struct mount *, struct ucred *, NFSPROC_T *, bool, bool,
594 struct nfsclclient **);
595struct nfsclclient *nfscl_findcl(struct nfsmount *);
596void nfscl_clientrelease(struct nfsclclient *);
597void nfscl_freelock(struct nfscllock *, int);
598void nfscl_freelockowner(struct nfscllockowner *, int);
599int nfscl_getbytelock(vnode_t, u_int64_t, u_int64_t, short,
600 struct ucred *, NFSPROC_T *, struct nfsclclient *, int, void *, int,
601 u_int8_t *, u_int8_t *, struct nfscllockowner **, int *, int *);
602int nfscl_relbytelock(vnode_t, u_int64_t, u_int64_t,
603 struct ucred *, NFSPROC_T *, int, struct nfsclclient *,
604 void *, int, struct nfscllockowner **, int *);
605int nfscl_checkwritelocked(vnode_t, struct flock *,
606 struct ucred *, NFSPROC_T *, void *, int);
607void nfscl_lockrelease(struct nfscllockowner *, int, int);
608void nfscl_fillclid(u_int64_t, char *, u_int8_t *, u_int16_t);
609void nfscl_filllockowner(void *, u_int8_t *, int);
610void nfscl_freeopen(struct nfsclopen *, int, bool);
611void nfscl_umount(struct nfsmount *, NFSPROC_T *, struct nfscldeleghead *);
612void nfscl_renewthread(struct nfsclclient *, NFSPROC_T *);
613void nfscl_initiate_recovery(struct nfsclclient *);
614int nfscl_hasexpired(struct nfsclclient *, u_int32_t, NFSPROC_T *);
615void nfscl_dumpstate(struct nfsmount *, int, int, int, int);
616void nfscl_dupopen(vnode_t, int);
617int nfscl_getclose(vnode_t, struct nfsclclient **);
618int nfscl_doclose(vnode_t, struct nfsclclient **, NFSPROC_T *);
619int nfsrpc_doclose(struct nfsmount *, struct nfsclopen *, NFSPROC_T *, bool,
620 bool);
621int nfscl_deleg(mount_t, struct nfsclclient *, u_int8_t *, int,
622 struct ucred *, NFSPROC_T *, struct nfscldeleg *);
623void nfscl_lockinit(struct nfsv4lock *);
624void nfscl_lockexcl(struct nfsv4lock *, void *);
625void nfscl_lockunlock(struct nfsv4lock *);
626void nfscl_lockderef(struct nfsv4lock *);
627void nfscl_delegreturnvp(struct vnode *, bool, NFSPROC_T *);
628void nfscl_docb(struct nfsrv_descript *, NFSPROC_T *);
629void nfscl_releasealllocks(struct nfsclclient *, vnode_t, NFSPROC_T *, void *,
630 int);
631int nfscl_lockt(vnode_t, struct nfsclclient *, u_int64_t,
632 u_int64_t, struct flock *, NFSPROC_T *, void *, int);
633int nfscl_mustflush(vnode_t);
634int nfscl_nodeleg(vnode_t, int);
635int nfscl_removedeleg(vnode_t, NFSPROC_T *, nfsv4stateid_t *);
636int nfscl_getref(struct nfsmount *);
637void nfscl_relref(struct nfsmount *);
638int nfscl_renamedeleg(vnode_t, nfsv4stateid_t *, int *, vnode_t,
639 nfsv4stateid_t *, int *, NFSPROC_T *);
640void nfscl_reclaimnode(vnode_t);
641void nfscl_newnode(vnode_t);
642void nfscl_delegmodtime(struct vnode *, struct timespec *);
643void nfscl_deleggetmodtime(vnode_t, struct timespec *);
644int nfscl_trydelegreturn(struct nfscldeleg *, struct ucred *,
645 struct nfsmount *, NFSPROC_T *);
646int nfscl_tryclose(struct nfsclopen *, struct ucred *,
647 struct nfsmount *, NFSPROC_T *, bool);
648void nfscl_cleanup(NFSPROC_T *);
649int nfscl_layout(struct nfsmount *, vnode_t, u_int8_t *, int, nfsv4stateid_t *,
650 int, int, struct nfsclflayouthead *, struct nfscllayout **, struct ucred *,
651 NFSPROC_T *);
652struct nfscllayout *nfscl_getlayout(struct nfsclclient *, uint8_t *, int,
653 uint64_t, uint32_t, struct nfsclflayout **, int *);
654void nfscl_dserr(uint32_t, uint32_t, struct nfscldevinfo *,
655 struct nfscllayout *, struct nfsclds *);
656void nfscl_cancelreqs(struct nfsclds *);
657void nfscl_rellayout(struct nfscllayout *, int);
658struct nfscldevinfo *nfscl_getdevinfo(struct nfsclclient *, uint8_t *,
659 struct nfscldevinfo *);
660void nfscl_reldevinfo(struct nfscldevinfo *);
661int nfscl_adddevinfo(struct nfsmount *, struct nfscldevinfo *, int,
662 struct nfsclflayout *);
663void nfscl_freelayout(struct nfscllayout *);
664void nfscl_freeflayout(struct nfsclflayout *);
665void nfscl_freedevinfo(struct nfscldevinfo *);
666int nfscl_layoutcommit(vnode_t, NFSPROC_T *);
667int nfscl_delegacecheck(struct vnode *, accmode_t, struct ucred *);
668void nfscl_startdelegrecall(struct nfsclclient *, struct nfsfh *);
669
670/* nfs_clport.c */
671int nfscl_nget(mount_t, vnode_t, struct nfsfh *,
672 struct componentname *, NFSPROC_T *, struct nfsnode **, int);
673NFSPROC_T *nfscl_getparent(NFSPROC_T *);
674void nfscl_start_renewthread(struct nfsclclient *);
675void nfscl_loadsbinfo(struct nfsmount *, struct nfsstatfs *, void *);
676void nfscl_loadfsinfo(struct nfsmount *, struct nfsfsinfo *, uint32_t);
677void nfscl_delegreturn(struct nfscldeleg *, int, struct nfsmount *,
678 struct ucred *, NFSPROC_T *);
679void nfsrvd_cbinit(int);
680int nfscl_checksattr(struct vattr *, struct nfsvattr *);
681int nfscl_ngetreopen(mount_t, u_int8_t *, int, NFSPROC_T *,
682 struct nfsnode **);
683int nfscl_procdoesntexist(u_int8_t *);
684int nfscl_maperr(NFSPROC_T *, int, uid_t, gid_t);
685
686/* nfs_clsubs.c */
687void nfscl_init(void);
688
689/* nfs_clbio.c */
690int ncl_flush(vnode_t, int, NFSPROC_T *, int, int);
691
692/* nfs_clnode.c */
693void ncl_invalcaches(vnode_t);
694
695/* nfs_nfsdport.c */
696int nfsvno_getattr(vnode_t, struct nfsvattr *, struct nfsrv_descript *,
697 NFSPROC_T *, int, nfsattrbit_t *);
698int nfsvno_setattr(vnode_t, struct nfsvattr *, struct ucred *,
699 NFSPROC_T *, struct nfsexstuff *);
700int nfsvno_getfh(vnode_t, fhandle_t *, NFSPROC_T *);
701int nfsvno_accchk(vnode_t, accmode_t, struct ucred *,
702 struct nfsexstuff *, NFSPROC_T *, int, int, u_int32_t *);
703int nfsvno_namei(struct nfsrv_descript *, struct nameidata *,
704 vnode_t, int, struct nfsexstuff *, vnode_t *);
705void nfsvno_setpathbuf(struct nameidata *, char **, u_long **);
706void nfsvno_relpathbuf(struct nameidata *);
707int nfsvno_readlink(vnode_t, struct ucred *, int, NFSPROC_T *, struct mbuf **,
708 struct mbuf **, int *);
709int nfsvno_read(vnode_t, off_t, int, struct ucred *, int, NFSPROC_T *,
710 struct mbuf **, struct mbuf **);
711int nfsvno_write(vnode_t, off_t, int, int *, struct mbuf *, char *,
712 struct ucred *, NFSPROC_T *);
713int nfsvno_createsub(struct nfsrv_descript *, struct nameidata *,
714 vnode_t *, struct nfsvattr *, int *, int32_t *, NFSDEV_T,
715 struct nfsexstuff *);
716int nfsvno_mknod(struct nameidata *, struct nfsvattr *, struct ucred *,
717 NFSPROC_T *);
718int nfsvno_mkdir(struct nameidata *,
719 struct nfsvattr *, uid_t, struct ucred *, NFSPROC_T *,
720 struct nfsexstuff *);
721int nfsvno_symlink(struct nameidata *, struct nfsvattr *, char *, int, int,
722 uid_t, struct ucred *, NFSPROC_T *, struct nfsexstuff *);
723int nfsvno_getsymlink(struct nfsrv_descript *, struct nfsvattr *,
724 NFSPROC_T *, char **, int *);
725int nfsvno_removesub(struct nameidata *, bool, struct nfsrv_descript *,
726 NFSPROC_T *, struct nfsexstuff *);
727int nfsvno_rmdirsub(struct nameidata *, int, struct ucred *, NFSPROC_T *,
728 struct nfsexstuff *);
729int nfsvno_rename(struct nameidata *, struct nameidata *,
730 struct nfsrv_descript *, NFSPROC_T *);
731int nfsvno_link(struct nameidata *, vnode_t, nfsquad_t, struct ucred *,
732 NFSPROC_T *, struct nfsexstuff *);
733int nfsvno_fsync(vnode_t, u_int64_t, int, struct ucred *, NFSPROC_T *);
734int nfsvno_statfs(vnode_t, struct statfs *);
735void nfsvno_getfs(struct nfsfsinfo *, int);
736void nfsvno_open(struct nfsrv_descript *, struct nameidata *, nfsquad_t,
737 nfsv4stateid_t *, struct nfsstate *, int *, struct nfsvattr *, int32_t *,
738 int, NFSACL_T *, nfsattrbit_t *, struct ucred *, bool,
739 struct nfsexstuff *, vnode_t *);
740int nfsvno_updfilerev(vnode_t, struct nfsvattr *, struct nfsrv_descript *,
741 NFSPROC_T *);
742int nfsvno_fillattr(struct nfsrv_descript *, struct mount *, vnode_t,
743 struct nfsvattr *, fhandle_t *, int, nfsattrbit_t *,
744 struct ucred *, NFSPROC_T *, int, int, int, int, uint64_t, bool, bool,
745 bool, uint32_t);
746int nfsrv_sattr(struct nfsrv_descript *, vnode_t, struct nfsvattr *, nfsattrbit_t *,
747 NFSACL_T *, NFSPROC_T *);
748int nfsv4_sattr(struct nfsrv_descript *, vnode_t, struct nfsvattr *, nfsattrbit_t *,
749 NFSACL_T *, NFSPROC_T *);
750int nfsvno_checkexp(mount_t, NFSSOCKADDR_T, struct nfsexstuff *,
751 struct ucred **);
752int nfsvno_fhtovp(mount_t, fhandle_t *, NFSSOCKADDR_T, int,
753 vnode_t *, struct nfsexstuff *, struct ucred **);
754vnode_t nfsvno_getvp(fhandle_t *);
755int nfsvno_advlock(vnode_t, int, u_int64_t, u_int64_t, NFSPROC_T *);
756int nfsrv_v4rootexport(void *, struct ucred *, NFSPROC_T *);
757int nfsvno_testexp(struct nfsrv_descript *, struct nfsexstuff *);
758uint32_t nfsrv_hashfh(fhandle_t *);
759uint32_t nfsrv_hashsessionid(uint8_t *);
760void nfsrv_backupstable(void);
761int nfsrv_dsgetdevandfh(struct vnode *, NFSPROC_T *, int *, fhandle_t *,
762 char *);
763int nfsrv_dsgetsockmnt(struct vnode *, int, char *, int *, int *,
764 NFSPROC_T *, struct vnode **, fhandle_t *, char *, char *,
765 struct vnode **, struct nfsmount **, struct nfsmount *, int *, int *);
766int nfsrv_dscreate(struct vnode *, struct vattr *, struct vattr *,
767 fhandle_t *, struct pnfsdsfile *, struct pnfsdsattr *, char *,
768 struct ucred *, NFSPROC_T *, struct vnode **);
769int nfsrv_updatemdsattr(struct vnode *, struct nfsvattr *, NFSPROC_T *);
770void nfsrv_killrpcs(struct nfsmount *);
771int nfsrv_setacl(struct vnode *, NFSACL_T *, struct ucred *, NFSPROC_T *);
772int nfsvno_seek(struct nfsrv_descript *, struct vnode *, u_long, off_t *, int,
773 bool *, struct ucred *, NFSPROC_T *);
774int nfsvno_allocate(struct vnode *, off_t, off_t, struct ucred *, NFSPROC_T *);
775int nfsvno_deallocate(struct vnode *, off_t, off_t, struct ucred *,
776 NFSPROC_T *);
777int nfsvno_getxattr(struct vnode *, char *, uint32_t, struct ucred *,
778 uint64_t, int, struct thread *, struct mbuf **, struct mbuf **, int *);
779int nfsvno_setxattr(struct vnode *, char *, int, struct mbuf *, char *,
780 struct ucred *, struct thread *);
781int nfsvno_rmxattr(struct nfsrv_descript *, struct vnode *, char *,
782 struct ucred *, struct thread *);
783int nfsvno_listxattr(struct vnode *, uint64_t, struct ucred *, struct thread *,
784 u_char **, uint32_t *, bool *);
785void nfsm_trimtrailing(struct nfsrv_descript *, struct mbuf *, char *, int,
786 int);
787bool nfsrv_checkwrongsec(struct nfsrv_descript *, int, __enum_uint8(vtype));
788void nfsrv_checknospc(void);
789
790/* nfs_commonkrpc.c */
791int newnfs_nmcancelreqs(struct nfsmount *);
792void newnfs_set_sigmask(struct thread *, sigset_t *);
793void newnfs_restore_sigmask(struct thread *, sigset_t *);
794int newnfs_msleep(struct thread *, void *, struct mtx *, int, char *, int);
795int newnfs_request(struct nfsrv_descript *, struct nfsmount *,
796 struct nfsclient *, struct nfssockreq *, vnode_t, NFSPROC_T *,
797 struct ucred *, u_int32_t, u_int32_t, u_char *, int, u_int64_t *,
798 struct nfsclsession *);
799void nfs_resetslots(struct nfsclsession *);
800int newnfs_connect(struct nfsmount *, struct nfssockreq *,
801 struct ucred *, NFSPROC_T *, int, bool, struct __rpc_client **);
802void newnfs_disconnect(struct nfsmount *, struct nfssockreq *);
803int newnfs_sigintr(struct nfsmount *, NFSPROC_T *);
804
805/* nfs_nfsdkrpc.c */
806int nfsrvd_addsock(struct file *);
807int nfsrvd_nfsd(NFSPROC_T *, struct nfsd_nfsd_args *);
808void nfsrvd_init(int);
809
810/* nfs_clkrpc.c */
811int nfscbd_addsock(struct file *);
812int nfscbd_nfsd(NFSPROC_T *, struct nfsd_nfscbd_args *);