xref: /titanic_53/usr/src/lib/libsmbfs/smb/private.h (revision 9c9af2590af49bb395bc8d2eace0f2d4ea16d165)
1*9c9af259SGordon Ross /*
2*9c9af259SGordon Ross  * Copyright (c) 2000-2001 Boris Popov
3*9c9af259SGordon Ross  * All rights reserved.
4*9c9af259SGordon Ross  *
5*9c9af259SGordon Ross  * Redistribution and use in source and binary forms, with or without
6*9c9af259SGordon Ross  * modification, are permitted provided that the following conditions
7*9c9af259SGordon Ross  * are met:
8*9c9af259SGordon Ross  * 1. Redistributions of source code must retain the above copyright
9*9c9af259SGordon Ross  *    notice, this list of conditions and the following disclaimer.
10*9c9af259SGordon Ross  * 2. Redistributions in binary form must reproduce the above copyright
11*9c9af259SGordon Ross  *    notice, this list of conditions and the following disclaimer in the
12*9c9af259SGordon Ross  *    documentation and/or other materials provided with the distribution.
13*9c9af259SGordon Ross  * 3. All advertising materials mentioning features or use of this software
14*9c9af259SGordon Ross  *    must display the following acknowledgement:
15*9c9af259SGordon Ross  *    This product includes software developed by Boris Popov.
16*9c9af259SGordon Ross  * 4. Neither the name of the author nor the names of any co-contributors
17*9c9af259SGordon Ross  *    may be used to endorse or promote products derived from this software
18*9c9af259SGordon Ross  *    without specific prior written permission.
19*9c9af259SGordon Ross  *
20*9c9af259SGordon Ross  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21*9c9af259SGordon Ross  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22*9c9af259SGordon Ross  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23*9c9af259SGordon Ross  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24*9c9af259SGordon Ross  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25*9c9af259SGordon Ross  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26*9c9af259SGordon Ross  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27*9c9af259SGordon Ross  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28*9c9af259SGordon Ross  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29*9c9af259SGordon Ross  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30*9c9af259SGordon Ross  * SUCH DAMAGE.
31*9c9af259SGordon Ross  */
32*9c9af259SGordon Ross 
33*9c9af259SGordon Ross /*
34*9c9af259SGordon Ross  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
35*9c9af259SGordon Ross  * Use is subject to license terms.
36*9c9af259SGordon Ross  */
37*9c9af259SGordon Ross 
38*9c9af259SGordon Ross #ifndef _PRIVATE_H
39*9c9af259SGordon Ross #define	_PRIVATE_H
40*9c9af259SGordon Ross 
41*9c9af259SGordon Ross /*
42*9c9af259SGordon Ross  * Private declarations for this library.
43*9c9af259SGordon Ross  * Moved from smb_lib.h
44*9c9af259SGordon Ross  */
45*9c9af259SGordon Ross 
46*9c9af259SGordon Ross #include <inttypes.h>
47*9c9af259SGordon Ross 
48*9c9af259SGordon Ross /*
49*9c9af259SGordon Ross  * BSD-style mbuf simulation
50*9c9af259SGordon Ross  */
51*9c9af259SGordon Ross struct mbuf {
52*9c9af259SGordon Ross 	int		m_len;
53*9c9af259SGordon Ross 	int		m_maxlen;
54*9c9af259SGordon Ross 	char		*m_data;
55*9c9af259SGordon Ross 	struct mbuf	*m_next;
56*9c9af259SGordon Ross };
57*9c9af259SGordon Ross typedef struct mbuf mbuf_t;
58*9c9af259SGordon Ross 
59*9c9af259SGordon Ross #if 0 /* in smb_lib.h */
60*9c9af259SGordon Ross struct mbdata {
61*9c9af259SGordon Ross 	struct mbuf	*mb_top;
62*9c9af259SGordon Ross 	struct mbuf	*mb_cur;
63*9c9af259SGordon Ross 	char		*mb_pos;
64*9c9af259SGordon Ross 	int		mb_count;
65*9c9af259SGordon Ross };
66*9c9af259SGordon Ross typedef struct mbdata mbdata_t;
67*9c9af259SGordon Ross #endif
68*9c9af259SGordon Ross 
69*9c9af259SGordon Ross #define	M_ALIGNFACTOR	(sizeof (long))
70*9c9af259SGordon Ross #define	M_ALIGN(len)	(((len) + M_ALIGNFACTOR - 1) & ~(M_ALIGNFACTOR - 1))
71*9c9af259SGordon Ross #define	M_BASESIZE	(sizeof (struct mbuf))
72*9c9af259SGordon Ross #define	M_MINSIZE	(256 - M_BASESIZE)
73*9c9af259SGordon Ross #define	M_TOP(m)	((char *)(m) + M_BASESIZE)
74*9c9af259SGordon Ross #define	M_TRAILINGSPACE(m) ((m)->m_maxlen - (m)->m_len)
75*9c9af259SGordon Ross #define	mtod(m, t)	((t)(m)->m_data)
76*9c9af259SGordon Ross 
77*9c9af259SGordon Ross /*
78*9c9af259SGordon Ross  * request handling structures
79*9c9af259SGordon Ross  */
80*9c9af259SGordon Ross struct smb_rq {
81*9c9af259SGordon Ross 	uchar_t		rq_cmd;
82*9c9af259SGordon Ross 	struct mbdata	rq_rq;
83*9c9af259SGordon Ross 	struct mbdata	rq_rp;
84*9c9af259SGordon Ross 	struct smb_ctx *rq_ctx;
85*9c9af259SGordon Ross 	int		rq_wcount;
86*9c9af259SGordon Ross 	int		rq_bcount;
87*9c9af259SGordon Ross };
88*9c9af259SGordon Ross typedef struct smb_rq smb_rq_t;
89*9c9af259SGordon Ross 
90*9c9af259SGordon Ross #define	smb_rq_getrequest(rqp)	(&(rqp)->rq_rq)
91*9c9af259SGordon Ross #define	smb_rq_getreply(rqp)	(&(rqp)->rq_rp)
92*9c9af259SGordon Ross 
93*9c9af259SGordon Ross int  smb_rq_init(struct smb_ctx *, uchar_t, size_t, struct smb_rq **);
94*9c9af259SGordon Ross void smb_rq_done(struct smb_rq *);
95*9c9af259SGordon Ross void smb_rq_wend(struct smb_rq *);
96*9c9af259SGordon Ross int  smb_rq_simple(struct smb_rq *);
97*9c9af259SGordon Ross int  smb_rq_dmem(struct mbdata *, const char *, size_t);
98*9c9af259SGordon Ross int  smb_rq_dstring(struct mbdata *, const char *);
99*9c9af259SGordon Ross 
100*9c9af259SGordon Ross 
101*9c9af259SGordon Ross /*
102*9c9af259SGordon Ross  * Message compose/parse
103*9c9af259SGordon Ross  */
104*9c9af259SGordon Ross 
105*9c9af259SGordon Ross int  m_getm(struct mbuf *, size_t, struct mbuf **);
106*9c9af259SGordon Ross int  m_lineup(struct mbuf *, struct mbuf **);
107*9c9af259SGordon Ross int  mb_init(struct mbdata *, size_t);
108*9c9af259SGordon Ross int  mb_initm(struct mbdata *, struct mbuf *);
109*9c9af259SGordon Ross int  mb_done(struct mbdata *);
110*9c9af259SGordon Ross int  mb_fit(struct mbdata *mbp, size_t size, char **pp);
111*9c9af259SGordon Ross int  mb_put_uint8(struct mbdata *, uint8_t);
112*9c9af259SGordon Ross int  mb_put_uint16be(struct mbdata *, uint16_t);
113*9c9af259SGordon Ross int  mb_put_uint16le(struct mbdata *, uint16_t);
114*9c9af259SGordon Ross int  mb_put_uint32be(struct mbdata *, uint32_t);
115*9c9af259SGordon Ross int  mb_put_uint32le(struct mbdata *, uint32_t);
116*9c9af259SGordon Ross int  mb_put_uint64be(struct mbdata *, uint64_t);
117*9c9af259SGordon Ross int  mb_put_uint64le(struct mbdata *, uint64_t);
118*9c9af259SGordon Ross int  mb_put_mem(struct mbdata *, const char *, size_t);
119*9c9af259SGordon Ross int  mb_put_pstring(struct mbdata *mbp, const char *s);
120*9c9af259SGordon Ross int  mb_put_mbuf(struct mbdata *, struct mbuf *);
121*9c9af259SGordon Ross 
122*9c9af259SGordon Ross int  mb_get_uint8(struct mbdata *, uint8_t *);
123*9c9af259SGordon Ross int  mb_get_uint16(struct mbdata *, uint16_t *);
124*9c9af259SGordon Ross int  mb_get_uint16le(struct mbdata *, uint16_t *);
125*9c9af259SGordon Ross int  mb_get_uint16be(struct mbdata *, uint16_t *);
126*9c9af259SGordon Ross int  mb_get_uint32(struct mbdata *, uint32_t *);
127*9c9af259SGordon Ross int  mb_get_uint32be(struct mbdata *, uint32_t *);
128*9c9af259SGordon Ross int  mb_get_uint32le(struct mbdata *, uint32_t *);
129*9c9af259SGordon Ross int  mb_get_uint64(struct mbdata *, uint64_t *);
130*9c9af259SGordon Ross int  mb_get_uint64be(struct mbdata *, uint64_t *);
131*9c9af259SGordon Ross int  mb_get_uint64le(struct mbdata *, uint64_t *);
132*9c9af259SGordon Ross int  mb_get_mem(struct mbdata *, char *, size_t);
133*9c9af259SGordon Ross 
134*9c9af259SGordon Ross /*
135*9c9af259SGordon Ross  * Network stuff (NetBIOS and otherwise)
136*9c9af259SGordon Ross  */
137*9c9af259SGordon Ross 
138*9c9af259SGordon Ross int nb_name_len(struct nb_name *);
139*9c9af259SGordon Ross /* new flag UCflag. 1=uppercase,0=don't */
140*9c9af259SGordon Ross int nb_name_encode(struct nb_name *, uchar_t *);
141*9c9af259SGordon Ross int nb_encname_len(const uchar_t *);
142*9c9af259SGordon Ross 
143*9c9af259SGordon Ross int  nb_snballoc(int namelen, struct sockaddr_nb **);
144*9c9af259SGordon Ross void nb_snbfree(struct sockaddr *);
145*9c9af259SGordon Ross int  nb_sockaddr(struct sockaddr *, struct nb_name *, struct sockaddr_nb **);
146*9c9af259SGordon Ross 
147*9c9af259SGordon Ross int  nbns_resolvename(const char *, struct nb_ctx *, struct sockaddr **);
148*9c9af259SGordon Ross int  nbns_getnodestatus(struct sockaddr *targethost,
149*9c9af259SGordon Ross     struct nb_ctx *ctx, char *system, char *workgroup);
150*9c9af259SGordon Ross int  nb_getlocalname(char *name, size_t maxlen);
151*9c9af259SGordon Ross 
152*9c9af259SGordon Ross extern uchar_t nls_lower[256], nls_upper[256];
153*9c9af259SGordon Ross 
154*9c9af259SGordon Ross #endif /* _PRIVATE_H */
155