Merge remote-tracking branch 'origin/master'
[unleashed/lotheac.git] / usr / src / uts / common / netsmb / netbios.h
blobb9ebce1018a101c131b55ac6238c6cea67bef97e
1 /*
2 * Copyright (c) 2000-2001 Boris Popov
3 * All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by Boris Popov.
16 * 4. Neither the name of the author nor the names of any co-contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
32 * $Id: netbios.h,v 1.5 2004/03/19 01:49:45 lindak Exp $
36 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
37 * Use is subject to license terms.
40 #ifndef _NETSMB_NETBIOS_H_
41 #define _NETSMB_NETBIOS_H_
43 #ifndef _NETINET_IN_H_
44 #include <netinet/in.h>
45 #endif
48 * This is a fake address family number, used to
49 * recognize our fake sockaddr_nb objects.
50 * This is never handed to bind or connect.
52 #ifndef AF_NETBIOS
53 #define AF_NETBIOS (AF_MAX+2)
54 #endif
56 #define PF_NETBIOS AF_NETBIOS
59 * NetBIOS port numbers by the names used in the Darwin code.
60 * XXX: Change the code to use IPPORT_xxx from in.h directly.
61 * XXX: Add IPPORT_SMB_OVER_TCP or some such (port 445)
63 #define NBNS_UDP_PORT IPPORT_NETBIOS_NS /* 137 */
64 #define SMB_TCP_PORT IPPORT_NETBIOS_SSN /* 139 */
66 #define NBPROTO_TCPSSN 1 /* NETBIOS session over TCP */
68 #define NB_NAMELEN 16
69 #define NB_ENCNAMELEN NB_NAMELEN * 2
70 #define NB_MAXLABLEN 63
72 #define NB_MAXPKTLEN 0x1FFFF
74 #define NB_MINSALEN (sizeof (struct sockaddr_nb))
77 * name types
79 #define NBT_WKSTA 0x00
80 #define NBT_CLIENT 0x03
81 #define NBT_RASSRVR 0x06
82 #define NBT_DMB 0x1B
83 #define NBT_IP 0x1C
84 #define NBT_MB 0x1D
85 #define NBT_BS 0x1E
86 #define NBT_NETDDE 0x1F
87 #define NBT_SERVER 0x20
88 #define NBT_RASCLNT 0x21
89 #define NBT_NMAGENT 0xBE
90 #define NBT_NMUTIL 0xBF
93 * Session packet types
95 #define NB_SSN_MESSAGE 0x0
96 #define NB_SSN_REQUEST 0x81
97 #define NB_SSN_POSRESP 0x82
98 #define NB_SSN_NEGRESP 0x83
99 #define NB_SSN_RTGRESP 0x84
100 #define NB_SSN_KEEPALIVE 0x85
103 * resolver: Opcodes
105 #define NBNS_OPCODE_QUERY 0x00
106 #define NBNS_OPCODE_REGISTER 0x05
107 #define NBNS_OPCODE_RELEASE 0x06
108 #define NBNS_OPCODE_WACK 0x07
109 #define NBNS_OPCODE_REFRESH 0x08
110 #define NBNS_OPCODE_RESPONSE 0x10 /* or'ed with other opcodes */
113 * resolver: NM_FLAGS
115 #define NBNS_NMFLAG_BCAST 0x01
116 #define NBNS_NMFLAG_RA 0x08 /* recursion available */
117 #define NBNS_NMFLAG_RD 0x10 /* recursion desired */
118 #define NBNS_NMFLAG_TC 0x20 /* truncation occured */
119 #define NBNS_NMFLAG_AA 0x40 /* authoritative answer */
122 * resolver: Question types
124 #define NBNS_QUESTION_TYPE_NB 0x0020
125 #define NBNS_QUESTION_TYPE_NBSTAT 0x0021
128 * resolver: Question class
130 #define NBNS_QUESTION_CLASS_IN 0x0001
133 * resolver: Limits
135 #define NBNS_MAXREDIRECTS 3 /* max number of accepted redirects */
136 #define NBDG_MAXSIZE 576 /* maximum nbns datagram size */
139 * NETBIOS addressing
142 struct nb_name {
143 uint_t nn_type;
144 char nn_name[NB_NAMELEN];
145 char *nn_scope;
147 typedef struct nb_name nb_name_t;
150 * Our private NetBIOS socket address format.
151 * Note that it's LARGER than sockaddr.
153 * XXX: Also note that the library code is sloppy about
154 * casting this to sockaddr_in so let's keep snb_ipaddr
155 * at the same offset, at least until that's fixed.
157 struct sockaddr_nb {
158 sa_family_t snb_family; /* address family */
159 uint16_t snb_flags; /* NBNS_GROUPFLG, etc. */
160 uint32_t snb_ipaddr; /* always IPv4 */
161 char snb_name[NB_NAMELEN]; /* NOT encoded */
163 typedef struct sockaddr_nb sockaddr_nb_t;
165 #endif /* !_NETSMB_NETBIOS_H_ */