2 * Copyright (c) 2000-2018 Apple Inc. All rights reserved.
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the License
10 * may not be used to create, or enable the creation or redistribution of,
11 * unlawful or unlicensed copies of an Apple operating system, or to
12 * circumvent, violate, or enable the circumvention or violation of, any
13 * terms of an Apple operating system software license agreement.
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
18 * The Original Code and all software distributed under the License are
19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 * Please see the License for the specific language governing rights and
24 * limitations under the License.
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
28 /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
30 * Copyright (c) 1989, 1993
31 * The Regents of the University of California. All rights reserved.
33 * This code is derived from software contributed to Berkeley by
34 * Rick Macklem at The University of Guelph.
36 * Redistribution and use in source and binary forms, with or without
37 * modification, are permitted provided that the following conditions
39 * 1. Redistributions of source code must retain the above copyright
40 * notice, this list of conditions and the following disclaimer.
41 * 2. Redistributions in binary form must reproduce the above copyright
42 * notice, this list of conditions and the following disclaimer in the
43 * documentation and/or other materials provided with the distribution.
44 * 3. All advertising materials mentioning features or use of this software
45 * must display the following acknowledgement:
46 * This product includes software developed by the University of
47 * California, Berkeley and its contributors.
48 * 4. Neither the name of the University nor the names of its contributors
49 * may be used to endorse or promote products derived from this software
50 * without specific prior written permission.
52 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
53 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
54 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
55 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
56 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
57 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
58 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
59 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
60 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
61 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
64 * @(#)nfsmount.h 8.3 (Berkeley) 3/30/95
65 * FreeBSD-Id: nfsmount.h,v 1.13 1997/08/16 19:16:05 wollman Exp $
69 #ifndef _NFS_NFSMOUNT_H_
70 #define _NFS_NFSMOUNT_H_
72 #include <sys/appleapiopts.h>
74 #ifdef __APPLE_API_PRIVATE
77 * NFS mount file system attributes
80 uint32_t nfsa_flags
; /* file system flags */
81 uint32_t nfsa_lease
; /* lease time in seconds */
82 int32_t nfsa_maxname
; /* maximum filename size */
83 uint32_t nfsa_maxlink
; /* maximum # links */
84 uint32_t nfsa_bsize
; /* block size */
85 uint32_t nfsa_pad
; /* UNUSED */
86 uint64_t nfsa_maxfilesize
; /* maximum file size */
87 uint32_t nfsa_maxread
; /* maximum read size */
88 uint32_t nfsa_maxwrite
; /* maximum write size */
89 uint64_t nfsa_files_avail
; /* file slots available */
90 uint64_t nfsa_files_free
; /* file slots free */
91 uint64_t nfsa_files_total
; /* file slots total */
92 uint64_t nfsa_space_avail
; /* disk space available */
93 uint64_t nfsa_space_free
; /* disk space free */
94 uint64_t nfsa_space_total
; /* disk space total */
95 uint32_t nfsa_supp_attr
[NFS_ATTR_BITMAP_LEN
]; /* attributes supported on this file system */
96 uint32_t nfsa_bitmap
[NFS_ATTR_BITMAP_LEN
]; /* valid attributes */
98 #define NFS_FSFLAG_LINK 0x00000001
99 #define NFS_FSFLAG_SYMLINK 0x00000002
100 #define NFS_FSFLAG_UNIQUE_FH 0x00000004
101 #define NFS_FSFLAG_ACL 0x00000008
102 #define NFS_FSFLAG_SET_TIME 0x00000010
103 #define NFS_FSFLAG_CASE_INSENSITIVE 0x00000020
104 #define NFS_FSFLAG_CASE_PRESERVING 0x00000040
105 #define NFS_FSFLAG_CHOWN_RESTRICTED 0x00000080
106 #define NFS_FSFLAG_HOMOGENEOUS 0x00000100
107 #define NFS_FSFLAG_NO_TRUNC 0x00000200
108 #define NFS_FSFLAG_NAMED_ATTR 0x00000400
109 #define NFS_FSFLAG_FHTYPE_MASK 0xFF000000
110 #define NFS_FSFLAG_FHTYPE_SHIFT 24
113 * NFS file system location structures
115 struct nfs_fs_server
{
116 char * ns_name
; /* name of server */
117 char ** ns_addresses
; /* array of addresses for server */
118 uint32_t ns_addrcount
; /* # of addresses */
121 char ** np_components
; /* array of component pointers */
122 uint32_t np_compcount
; /* # components in path */
124 struct nfs_fs_location
{
125 struct nfs_fs_server
** nl_servers
; /* array of server pointers */
126 struct nfs_fs_path nl_path
; /* file system path */
127 uint32_t nl_servcount
; /* # of servers */
130 struct nfs_location_index
{
131 uint8_t nli_flags
; /* misc flags */
132 uint8_t nli_loc
; /* location index */
133 uint8_t nli_serv
; /* server index */
134 uint8_t nli_addr
; /* address index */
136 #define NLI_VALID 0x01 /* index is valid */
138 struct nfs_fs_locations
{
139 struct nfs_fs_path nl_root
; /* current server's root file system path */
140 uint32_t nl_numlocs
; /* # of locations */
141 struct nfs_location_index nl_current
; /* index of current location/server/address */
142 struct nfs_fs_location
**nl_locations
; /* array of fs locations */
146 * RPC record marker parsing state
148 struct nfs_rpc_record_state
{
149 mbuf_t nrrs_m
; /* mbufs for current record */
151 uint16_t nrrs_lastfrag
; /* last fragment of record */
152 uint16_t nrrs_markerleft
; /* marker bytes remaining */
153 uint32_t nrrs_fragleft
; /* fragment bytes remaining */
154 uint32_t nrrs_reclen
; /* length of RPC record */
158 * NFS socket structures
161 lck_mtx_t nso_lock
; /* nfs socket lock */
162 TAILQ_ENTRY(nfs_socket
) nso_link
; /* list of sockets */
163 struct sockaddr
* nso_saddr
; /* socket address */
164 struct sockaddr
* nso_saddr2
; /* additional socket address */
165 void * nso_wake
; /* address to wake up */
166 time_t nso_timestamp
;
167 time_t nso_reqtimestamp
; /* last request sent */
168 socket_t nso_so
; /* socket */
169 uint8_t nso_sotype
; /* Type of socket */
170 uint16_t nso_flags
; /* NSO_* flags */
171 struct nfs_location_index nso_location
; /* location index */
172 uint32_t nso_protocol
; /* RPC protocol */
173 uint32_t nso_version
; /* RPC protocol version */
174 uint32_t nso_pingxid
; /* RPC XID of NULL ping request */
175 uint32_t nso_nfs_min_vers
; /* minimum nfs version for connecting sockets */
176 uint32_t nso_nfs_max_vers
; /* maximum nfs version for connecting sockets */
177 int nso_error
; /* saved error/status */
178 struct nfs_rpc_record_state nso_rrs
; /* RPC record parsing state (TCP) */
181 TAILQ_HEAD(nfssocketlist
, nfs_socket
);
184 #define NSO_UPCALL 0x0001 /* socket upcall in progress */
185 #define NSO_DEAD 0x0002 /* socket is dead */
186 #define NSO_CONNECTING 0x0004 /* socket is being connected */
187 #define NSO_CONNECTED 0x0008 /* socket connection complete */
188 #define NSO_PINGING 0x0010 /* socket is being tested */
189 #define NSO_VERIFIED 0x0020 /* socket appears functional */
190 #define NSO_DISCONNECTING 0x0040 /* socket is being disconnected */
192 /* NFS connect socket search state */
193 struct nfs_socket_search
{
194 struct nfs_location_index nss_startloc
; /* starting location index */
195 struct nfs_location_index nss_nextloc
; /* next location index */
196 struct nfssocketlist nss_socklist
; /* list of active sockets */
197 time_t nss_timestamp
; /* search start time */
198 time_t nss_last
; /* timestamp of last socket */
199 struct nfs_socket
* nss_sock
; /* found socket */
200 uint8_t nss_sotype
; /* TCP/UDP */
201 uint8_t nss_sockcnt
; /* # of active sockets */
202 in_port_t nss_port
; /* port # to connect to */
203 uint32_t nss_protocol
; /* RPC protocol */
204 uint32_t nss_version
; /* RPC protocol version */
205 uint32_t nss_flags
; /* (see below) */
206 int nss_addrcnt
; /* Number addresses to try or left */
207 int nss_timeo
; /* how long we are willing to wait */
208 int nss_error
; /* best error we've gotten so far */
211 #define NSS_VERBOSE 0x00000001 /* OK to log info about socket search */
212 #define NSS_WARNED 0x00000002 /* logged warning about socket search taking a while */
213 #define NSS_FALLBACK2PMAP 0x00000004 /* Try V4 on NFS_PORT first, if that fails fall back to portmapper */
216 * function table for calling version-specific NFS functions
219 int (*nf_mount
)(struct nfsmount
*, vfs_context_t
, nfsnode_t
*);
220 int (*nf_update_statfs
)(struct nfsmount
*, vfs_context_t
);
221 int (*nf_getquota
)(struct nfsmount
*, vfs_context_t
, uid_t
, int, struct dqblk
*);
222 int (*nf_access_rpc
)(nfsnode_t
, u_int32_t
*, int, vfs_context_t
);
223 int (*nf_getattr_rpc
)(nfsnode_t
, mount_t
, u_char
*, size_t, int, vfs_context_t
, struct nfs_vattr
*, u_int64_t
*);
224 int (*nf_setattr_rpc
)(nfsnode_t
, struct vnode_attr
*, vfs_context_t
);
225 int (*nf_read_rpc_async
)(nfsnode_t
, off_t
, size_t, thread_t
, kauth_cred_t
, struct nfsreq_cbinfo
*, struct nfsreq
**);
226 int (*nf_read_rpc_async_finish
)(nfsnode_t
, struct nfsreq
*, uio_t
, size_t *, int *);
227 int (*nf_readlink_rpc
)(nfsnode_t
, char *, size_t *, vfs_context_t
);
228 int (*nf_write_rpc_async
)(nfsnode_t
, uio_t
, size_t, thread_t
, kauth_cred_t
, int, struct nfsreq_cbinfo
*, struct nfsreq
**);
229 int (*nf_write_rpc_async_finish
)(nfsnode_t
, struct nfsreq
*, int *, size_t *, uint64_t *);
230 int (*nf_commit_rpc
)(nfsnode_t
, uint64_t, uint64_t, kauth_cred_t
, uint64_t);
231 int (*nf_lookup_rpc_async
)(nfsnode_t
, char *, int, vfs_context_t
, struct nfsreq
**);
232 int (*nf_lookup_rpc_async_finish
)(nfsnode_t
, char *, int, vfs_context_t
, struct nfsreq
*, u_int64_t
*, fhandle_t
*, struct nfs_vattr
*);
233 int (*nf_remove_rpc
)(nfsnode_t
, char *, int, thread_t
, kauth_cred_t
);
234 int (*nf_rename_rpc
)(nfsnode_t
, char *, int, nfsnode_t
, char *, int, vfs_context_t
);
235 int (*nf_setlock_rpc
)(nfsnode_t
, struct nfs_open_file
*, struct nfs_file_lock
*, int, int, thread_t
, kauth_cred_t
);
236 int (*nf_unlock_rpc
)(nfsnode_t
, struct nfs_lock_owner
*, int, uint64_t, uint64_t, int, thread_t
, kauth_cred_t
);
237 int (*nf_getlock_rpc
)(nfsnode_t
, struct nfs_lock_owner
*, struct flock
*, uint64_t, uint64_t, vfs_context_t
);
241 * The long form of the NFSv4 client ID.
243 struct nfs_client_id
{
244 TAILQ_ENTRY(nfs_client_id
) nci_link
; /* list of client IDs */
245 char *nci_id
; /* client id buffer */
246 long nci_idlen
; /* length of client id buffer */
248 TAILQ_HEAD(nfsclientidlist
, nfs_client_id
);
249 extern struct nfsclientidlist nfsclientids
;
253 * One allocated on every NFS mount.
254 * Holds NFS specific information for mount.
257 lck_mtx_t nm_lock
; /* nfs mount lock */
258 char * nm_args
; /* NFS mount args (XDR) */
259 uint32_t nm_mattrs
[NFS_MATTR_BITMAP_LEN
]; /* mount attributes in mount args */
260 uint32_t nm_mflags_mask
[NFS_MFLAG_BITMAP_LEN
]; /* mount flags mask in mount args */
261 uint32_t nm_mflags
[NFS_MFLAG_BITMAP_LEN
]; /* mount flags in mount args */
262 uint32_t nm_flags
[NFS_MFLAG_BITMAP_LEN
]; /* current mount flags (soft, intr, etc...) */
263 char * nm_realm
; /* Kerberos realm to use */
264 char * nm_principal
; /* GSS principal to use on initial mount */
265 char * nm_sprinc
; /* Kerberos principal of the server */
266 int nm_ref
; /* Reference count on this mount */
267 int nm_state
; /* Internal state flags */
268 int nm_vers
; /* NFS version */
269 uint32_t nm_minor_vers
; /* minor version of above */
270 uint32_t nm_min_vers
; /* minimum packed version to try */
271 uint32_t nm_max_vers
; /* maximum packed version to try */
272 const struct nfs_funcs
*nm_funcs
;/* version-specific functions */
273 kauth_cred_t nm_mcred
; /* credential used for the mount */
274 mount_t nm_mountp
; /* VFS structure for this filesystem */
275 nfsnode_t nm_dnp
; /* root directory nfsnode pointer */
276 struct nfs_fs_locations nm_locations
; /* file system locations */
277 uint32_t nm_numgrps
; /* Max. size of groupslist */
278 TAILQ_HEAD(, nfs_gss_clnt_ctx
) nm_gsscl
; /* GSS user contexts */
279 uint32_t nm_ncentries
; /* GSS expired negative cache entries */
280 int nm_timeo
; /* Init timer for NFSMNT_DUMBTIMR */
281 int nm_retry
; /* Max retries */
282 uint32_t nm_rsize
; /* Max size of read rpc */
283 uint32_t nm_wsize
; /* Max size of write rpc */
284 uint32_t nm_biosize
; /* buffer I/O size */
285 uint32_t nm_readdirsize
; /* Size of a readdir rpc */
286 uint32_t nm_readahead
; /* Num. of blocks to readahead */
287 time_t nm_acregmin
; /* reg file min attr cache timeout */
288 time_t nm_acregmax
; /* reg file max attr cache timeout */
289 time_t nm_acdirmin
; /* dir min attr cache timeout */
290 time_t nm_acdirmax
; /* dir max attr cache timeout */
291 uint32_t nm_auth
; /* security mechanism flavor being used */
292 uint32_t nm_writers
; /* Number of nodes open for writing */
293 uint32_t nm_mappers
; /* Number of nodes that have mmapped */
294 struct nfs_sec nm_sec
; /* acceptable security mechanism flavors */
295 struct nfs_sec nm_servsec
; /* server's acceptable security mechanism flavors */
296 struct nfs_etype nm_etype
; /* If using kerberos, the support session key encryption types */
297 fhandle_t
*nm_fh
; /* initial file handle */
298 uint32_t nm_lockmode
; /* advisory file locking mode */
300 time_t nm_fsattrstamp
; /* timestamp for fs attrs */
301 struct nfs_fsattr nm_fsattr
; /* file system attributes */
302 uint64_t nm_verf
; /* v3/v4 write verifier */
304 struct { /* v2/v3 specific fields */
305 TAILQ_ENTRY(nfsmount
) ldlink
; /* chain of mounts registered for lockd use */
306 int udp_sent
; /* UDP request send count */
307 int udp_cwnd
; /* UDP request congestion window */
308 struct nfs_reqqhead udp_cwndq
; /* requests waiting on cwnd */
309 struct sockaddr
*rqsaddr
;/* cached rquota socket address */
310 uint64_t rqsaddrstamp
; /* timestamp of rquota socket address */
312 struct { /* v4 specific fields */
313 struct nfs_client_id
*longid
; /* client ID, long form */
314 uint64_t mounttime
; /* used as client ID verifier */
315 uint64_t clientid
; /* client ID, short form */
316 thread_call_t renew_timer
; /* RENEW timer call */
317 lck_mtx_t timer_lock
; /* RENEW timer lock */
318 nfs_fsid fsid
; /* NFS file system id */
319 TAILQ_HEAD(, nfsnode
) delegations
; /* list of nodes with delegations */
320 TAILQ_HEAD(, nfsnode
) dreturnq
; /* list of nodes with delegations to return */
321 TAILQ_ENTRY(nfsmount
) cblink
; /* chain of mounts registered for callbacks */
322 uint32_t cbid
; /* callback channel identifier */
323 uint32_t cbrefs
; /* # callbacks using this mount */
327 TAILQ_HEAD(, nfs_open_owner
) nm_open_owners
; /* list of open owners */
328 uint32_t nm_stateinuse
; /* state in use counter */
329 uint32_t nm_stategenid
; /* state generation counter */
330 time_t nm_recover_start
; /* recover start time */
331 LIST_HEAD(, nfsnode
) nm_monlist
; /* list of nodes being monitored */
332 /* async I/O queue */
333 struct nfs_reqqhead nm_resendq
; /* async I/O resend queue */
334 struct nfs_reqqhead nm_iodq
; /* async I/O request queue */
335 struct nfsiod
*nm_niod
; /* nfsiod processing this mount */
336 TAILQ_ENTRY(nfsmount
) nm_iodlink
; /* chain of mounts awaiting nfsiod */
337 int nm_asyncwrites
; /* outstanding async I/O writes */
339 uint8_t nm_sofamily
; /* (preferred) protocol family of socket */
340 uint8_t nm_sotype
; /* (preferred) type of socket */
341 in_port_t nm_nfsport
; /* NFS protocol port */
342 in_port_t nm_mountport
; /* MOUNT protocol port (v2/v3) */
343 char *nm_nfs_localport
; /* Unix domain address (port) for nfs */
344 char *nm_mount_localport
; /* Unix domain address (port) for mountd */
345 struct nfs_socket_search
*nm_nss
; /* current socket search structure */
346 struct nfs_socket
*nm_nso
; /* current socket */
347 struct sockaddr
*nm_saddr
; /* Address of server */
348 u_short nm_sockflags
; /* socket state flags */
349 time_t nm_deadto_start
; /* dead timeout start time */
350 time_t nm_reconnect_start
; /* reconnect start time */
351 int nm_tprintf_initial_delay
; /* delay first "server down" */
352 int nm_tprintf_delay
; /* delay between "server down" */
353 int nm_deadtimeout
; /* delay between first "server down" and dead set at mount time */
354 int nm_curdeadtimeout
; /* current dead timeout. Adjusted by mount state and mobility */
355 int nm_srtt
[4]; /* Timers for RPCs */
357 int nm_timeouts
; /* Request timeouts */
358 int nm_jbreqs
; /* # R_JBTPRINTFMSG requests */
359 int nm_mounterror
; /* status of mount connect */
360 TAILQ_ENTRY(nfsmount
) nm_pokeq
; /* mount poke queue chain */
361 thread_t nm_sockthd
; /* socket thread for this mount */
364 /* macro for checking current mount flags */
365 #define NMFLAG(NMP, F) NFS_BITMAP_ISSET((NMP)->nm_flags, NFS_MFLAG_ ## F)
366 /* macros for checking (original) mount attributes/flags */
367 #define NM_OMATTR_GIVEN(NMP, F) NFS_BITMAP_ISSET((NMP)->nm_mattrs, NFS_MATTR_ ## F)
368 #define NM_OMFLAG_GIVEN(NMP, F) NFS_BITMAP_ISSET((NMP)->nm_mflags_mask, NFS_MFLAG_ ## F)
369 #define NM_OMFLAG(NMP, F) NFS_BITMAP_ISSET((NMP)->nm_mflags, NFS_MFLAG_ ## F)
372 * NFS mount state flags (nm_state)
374 #define NFSSTA_MOUNT_THREAD 0x00000040 /* nfs_mount_connect_thread running */
375 #define NFSSTA_MONITOR_SCAN 0x00000080 /* scan of monitored nodes in progress */
376 #define NFSSTA_UNMOUNTING 0x00000100 /* an unmount attempt is in progress */
377 #define NFSSTA_NEEDSECINFO 0x00000200 /* need to fetch security info */
378 #define NFSSTA_CLIENTID 0x00000400 /* short client ID is valid */
379 #define NFSSTA_BIGCOOKIES 0x00000800 /* have seen >32bit dir cookies */
380 #define NFSSTA_JUKEBOXTIMEO 0x00001000 /* experienced a jukebox timeout */
381 #define NFSSTA_LOCKTIMEO 0x00002000 /* experienced a lock req timeout */
382 #define NFSSTA_MOUNTED 0x00004000 /* completely mounted */
383 #define NFSSTA_LOCKSWORK 0x00008000 /* lock ops have worked. */
384 #define NFSSTA_TIMEO 0x00010000 /* experienced a timeout. */
385 #define NFSSTA_FORCE 0x00020000 /* doing a forced unmount. */
386 #define NFSSTA_HASWRITEVERF 0x00040000 /* Has write verifier for V3 */
387 #define NFSSTA_GOTPATHCONF 0x00080000 /* Got the V3 pathconf info */
388 #define NFSSTA_GOTFSINFO 0x00100000 /* Got the V3 fsinfo */
389 #define NFSSTA_WANTRQUOTA 0x00200000 /* Want rquota address */
390 #define NFSSTA_RQUOTAINPROG 0x00400000 /* Getting rquota address */
391 #define NFSSTA_SENDING 0x00800000 /* Sending on socket */
392 #define NFSSTA_SNDLOCK 0x01000000 /* Send socket lock */
393 #define NFSSTA_WANTSND 0x02000000 /* Want above */
394 #define NFSSTA_DEAD 0x04000000 /* mount is dead */
395 #define NFSSTA_RECOVER 0x08000000 /* mount state needs to be recovered */
396 #define NFSSTA_RECOVER_EXPIRED 0x10000000 /* mount state expired */
397 #define NFSSTA_REVOKE 0x20000000 /* need to scan for revoked nodes */
398 #define NFSSTA_SQUISHY 0x40000000 /* we can ask to be forcibly unmounted */
399 #define NFSSTA_MOUNT_DRAIN 0x80000000 /* mount is draining references */
401 /* flags for nm_sockflags */
402 #define NMSOCK_READY 0x0001 /* socket is ready for use */
403 #define NMSOCK_CONNECTING 0x0002 /* socket is being connect()ed */
404 #define NMSOCK_SETUP 0x0004 /* socket/connection is being set up */
405 #define NMSOCK_UNMOUNT 0x0008 /* unmounted, no more socket activity */
406 #define NMSOCK_HASCONNECTED 0x0010 /* socket has connected before */
407 #define NMSOCK_POKE 0x0020 /* socket needs to be poked */
408 #define NMSOCK_DISCONNECTING 0x0080 /* socket is being disconnected */
410 /* aliases for version-specific fields */
411 #define nm_ldlink nm_un.v3.ldlink
412 #define nm_sent nm_un.v3.udp_sent
413 #define nm_cwnd nm_un.v3.udp_cwnd
414 #define nm_cwndq nm_un.v3.udp_cwndq
415 #define nm_rqproto nm_un.v3.rqproto
416 #define nm_rqsaddr nm_un.v3.rqsaddr
417 #define nm_rqsaddrstamp nm_un.v3.rqsaddrstamp
418 #define nm_longid nm_un.v4.longid
419 #define nm_clientid nm_un.v4.clientid
420 #define nm_mounttime nm_un.v4.mounttime
421 #define nm_fsid nm_un.v4.fsid
422 #define nm_renew_timer nm_un.v4.renew_timer
423 #define nm_timer_lock nm_un.v4.timer_lock
424 #define nm_cbid nm_un.v4.cbid
425 #define nm_cblink nm_un.v4.cblink
426 #define nm_cbrefs nm_un.v4.cbrefs
427 #define nm_delegations nm_un.v4.delegations
428 #define nm_dreturnq nm_un.v4.dreturnq
432 * Macros to convert from various things to mount structures.
434 #define VFSTONFS(mp) ((mp) ? ((struct nfsmount *)vfs_fsprivate(mp)) : NULL)
435 #define VTONMP(vp) VFSTONFS(vnode_mount(vp))
436 #define NFSTONMP(np) VTONMP(NFSTOV(np))
437 #define NFSTOMP(np) (vnode_mount(NFSTOV(np)))
441 #endif /* __APPLE_API_PRIVATE */
442 #endif /* _NFS_NFSMOUNT_H_ */