1/*	$NetBSD: netbios.h,v 1.6 2005/12/11 00:06:21 elad Exp $	*/
2
3/*
4 * Copyright (c) 2000-2001 Boris Popov
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 *    notice, this list of conditions and the following disclaimer in the
14 *    documentation and/or other materials provided with the distribution.
15 * 3. All advertising materials mentioning features or use of this software
16 *    must display the following acknowledgement:
17 *    This product includes software developed by Boris Popov.
18 * 4. Neither the name of the author nor the names of any co-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 AUTHOR 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 AUTHOR 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 * FreeBSD: src/sys/netsmb/netbios.h,v 1.1 2001/04/10 07:59:05 bp Exp
35 */
36#ifndef _NETSMB_NETBIOS_H_
37#define	_NETSMB_NETBIOS_H_
38
39/*
40 * make this file dirty...
41 */
42#ifndef _NETINET_IN_H_
43#include <netinet/in.h>
44#endif
45
46#ifndef NetBSD
47#ifndef _NETIPX_IPX_H_
48#include <netipx/ipx.h>
49#endif
50#endif
51
52#define AF_NETBIOS	AF_NS		/* XXX: should go to socket.h */
53#define PF_NETBIOS	AF_NETBIOS
54
55#define	NBPROTO_TCPSSN	1		/* NETBIOS session over TCP */
56#define	NBPROTO_IPXSSN	11		/* NETBIOS over IPX */
57
58#define NB_NAMELEN	16
59#define	NB_ENCNAMELEN	(NB_NAMELEN * 2)
60#define	NB_MAXLABLEN	63
61
62#define	NB_MINSALEN	(sizeof(struct sockaddr_nb))
63
64/*
65 * name types
66 */
67#define	NBT_WKSTA	0x00
68#define	NBT_SERVER	0x20
69
70/*
71 * Session packet types
72 */
73#define	NB_SSN_MESSAGE		0x0
74#define	NB_SSN_REQUEST		0x81
75#define	NB_SSN_POSRESP		0x82
76#define	NB_SSN_NEGRESP		0x83
77#define	NB_SSN_RTGRESP		0x84
78#define	NB_SSN_KEEPALIVE	0x85
79
80/*
81 * resolver: Opcodes
82 */
83#define	NBNS_OPCODE_QUERY	0x00
84#define	NBNS_OPCODE_REGISTER	0x05
85#define	NBNS_OPCODE_RELEASE	0x06
86#define	NBNS_OPCODE_WACK	0x07
87#define	NBNS_OPCODE_REFRESH	0x08
88#define	NBNS_OPCODE_RESPONSE	0x10	/* or'ed with other opcodes */
89
90/*
91 * resolver: NM_FLAGS
92 */
93#define	NBNS_NMFLAG_BCAST	0x01
94#define	NBNS_NMFLAG_RA		0x08	/* recursion available */
95#define	NBNS_NMFLAG_RD		0x10	/* recursion desired */
96#define	NBNS_NMFLAG_TC		0x20	/* truncation occurred */
97#define	NBNS_NMFLAG_AA		0x40	/* authoritative answer */
98
99/*
100 * resolver: Question types
101 */
102#define	NBNS_QUESTION_TYPE_NB		0x0020
103#define NBNS_QUESTION_TYPE_NBSTAT	0x0021
104
105/*
106 * resolver: Question class
107 */
108#define NBNS_QUESTION_CLASS_IN	0x0001
109
110/*
111 * resolver: Limits
112 */
113#define	NBNS_MAXREDIRECTS	3	/* maximum number of accepted redirects */
114#define	NBDG_MAXSIZE		576	/* maximum nbns datagram size */
115
116/*
117 * NETBIOS addressing
118 */
119union nb_tran {
120	struct sockaddr_in	x_in;
121};
122
123struct nb_name {
124	u_int		nn_type;
125	u_char		nn_name[NB_NAMELEN + 1];
126	u_char *	nn_scope;
127};
128
129/*
130 * Socket address
131 */
132struct sockaddr_nb {
133	u_char		snb_len;
134	u_char		snb_family;
135	union nb_tran	snb_tran;		/* transport */
136	u_char		snb_name[1 + NB_ENCNAMELEN + 1];	/* encoded */
137};
138
139#define	snb_addrin	snb_tran.x_in
140
141#endif /* !_NETSMB_NETBIOS_H_ */
142