nfs_common.h revision 84057
1/*
2 * Copyright (c) 1989, 1993
3 *	The Regents of the University of California.  All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Rick Macklem at The University of Guelph.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 *    must display the following acknowledgement:
18 *	This product includes software developed by the University of
19 *	California, Berkeley and its contributors.
20 * 4. Neither the name of the University nor the names of its contributors
21 *    may be used to endorse or promote products derived from this software
22 *    without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 *	@(#)nfsm_subs.h	8.2 (Berkeley) 3/30/95
37 * $FreeBSD: head/sys/nfs/nfs_common.h 84057 2001-09-27 22:40:38Z peter $
38 */
39
40
41#ifndef _NFS_NFS_COMMON_H_
42#define _NFS_NFS_COMMON_H_
43
44extern enum vtype nv3tov_type[];
45extern nfstype nfsv3_type[];
46
47#define	vtonfsv2_mode(t, m) \
48    txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : MAKEIMODE((t), (m)))
49
50#define	nfsv3tov_type(a)	nv3tov_type[fxdr_unsigned(u_int32_t,(a))&0x7]
51#define	vtonfsv3_type(a)	txdr_unsigned(nfsv3_type[((int32_t)(a))])
52
53#define NFSMADV(m, s) \
54	do { \
55		(m)->m_data += (s); \
56	} while (0)
57
58int	nfs_adv(struct mbuf **, caddr_t *, int, int);
59void	*nfsm_build_xx(int s, struct mbuf **mb, caddr_t *bpos);
60void	*nfsm_dissect_xx(int s, struct mbuf **md, caddr_t *dpos);
61int	nfsm_strsiz_xx(int *s, int m, u_int32_t **tl, struct mbuf **mb,
62	    caddr_t *bpos);
63int	nfsm_adv_xx(int s, u_int32_t **tl, struct mbuf **md, caddr_t *dpos);
64u_quad_t nfs_curusec(void);
65void	*nfsm_disct(struct mbuf **, caddr_t *, int, int);
66
67#define	nfsm_build(c, s) \
68	(c)nfsm_build_xx((s), &mb, &bpos)
69
70#define	nfsm_dissect(c, s) \
71({ \
72	void *ret; \
73	ret = nfsm_dissect_xx((s), &md, &dpos); \
74	if (ret == NULL) { \
75		error = EBADRPC; \
76		m_freem(mrep); \
77		mrep = NULL; \
78		goto nfsmout; \
79	} \
80	(c)ret; \
81})
82
83#define	nfsm_strsiz(s,m) \
84do { \
85	int t1; \
86	t1 = nfsm_strsiz_xx(&(s), (m), &tl, &md, &dpos); \
87	if (t1) { \
88		error = t1; \
89		m_freem(mrep); \
90		mrep = NULL; \
91		goto nfsmout; \
92	} \
93} while(0)
94
95#define nfsm_mtouio(p,s) \
96do {\
97	int32_t t1; \
98	if ((s) > 0 && (t1 = nfsm_mbuftouio(&md, (p), (s), &dpos)) != 0) { \
99		error = t1; \
100		m_freem(mrep); \
101		mrep = NULL; \
102		goto nfsmout; \
103	} \
104} while (0)
105
106#define nfsm_rndup(a)	(((a)+3)&(~0x3))
107
108#define	nfsm_adv(s) \
109do { \
110	int t1; \
111	t1 = nfsm_adv_xx((s), &tl, &md, &dpos); \
112	if (t1) { \
113		error = t1; \
114		m_freem(mrep); \
115		mrep = NULL; \
116		goto nfsmout; \
117	} \
118} while (0)
119
120#endif
121