1*a1fd9364Slogwang /*
2*a1fd9364Slogwang  * ng_btsocket.h
3*a1fd9364Slogwang  */
4*a1fd9364Slogwang 
5*a1fd9364Slogwang /*-
6*a1fd9364Slogwang  * Copyright (c) 2001-2002 Maksim Yevmenkin <[email protected]>
7*a1fd9364Slogwang  * All rights reserved.
8*a1fd9364Slogwang  *
9*a1fd9364Slogwang  * Redistribution and use in source and binary forms, with or without
10*a1fd9364Slogwang  * modification, are permitted provided that the following conditions
11*a1fd9364Slogwang  * are met:
12*a1fd9364Slogwang  * 1. Redistributions of source code must retain the above copyright
13*a1fd9364Slogwang  *    notice, this list of conditions and the following disclaimer.
14*a1fd9364Slogwang  * 2. Redistributions in binary form must reproduce the above copyright
15*a1fd9364Slogwang  *    notice, this list of conditions and the following disclaimer in the
16*a1fd9364Slogwang  *    documentation and/or other materials provided with the distribution.
17*a1fd9364Slogwang  *
18*a1fd9364Slogwang  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19*a1fd9364Slogwang  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*a1fd9364Slogwang  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*a1fd9364Slogwang  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22*a1fd9364Slogwang  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23*a1fd9364Slogwang  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24*a1fd9364Slogwang  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25*a1fd9364Slogwang  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26*a1fd9364Slogwang  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27*a1fd9364Slogwang  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28*a1fd9364Slogwang  * SUCH DAMAGE.
29*a1fd9364Slogwang  *
30*a1fd9364Slogwang  * $Id: ng_btsocket.h,v 1.8 2003/04/26 22:32:10 max Exp $
31*a1fd9364Slogwang  * $FreeBSD$
32*a1fd9364Slogwang  */
33*a1fd9364Slogwang 
34*a1fd9364Slogwang #ifndef _NETGRAPH_BTSOCKET_H_
35*a1fd9364Slogwang #define _NETGRAPH_BTSOCKET_H_
36*a1fd9364Slogwang 
37*a1fd9364Slogwang /*
38*a1fd9364Slogwang  * Bluetooth protocols
39*a1fd9364Slogwang  */
40*a1fd9364Slogwang 
41*a1fd9364Slogwang #define BLUETOOTH_PROTO_HCI	134	/* HCI protocol number */
42*a1fd9364Slogwang #define BLUETOOTH_PROTO_L2CAP	135	/* L2CAP protocol number */
43*a1fd9364Slogwang #define BLUETOOTH_PROTO_RFCOMM	136	/* RFCOMM protocol number */
44*a1fd9364Slogwang #define BLUETOOTH_PROTO_SCO	137	/* SCO protocol number */
45*a1fd9364Slogwang 
46*a1fd9364Slogwang /*
47*a1fd9364Slogwang  * Bluetooth version of struct sockaddr for raw HCI sockets
48*a1fd9364Slogwang  */
49*a1fd9364Slogwang 
50*a1fd9364Slogwang struct sockaddr_hci {
51*a1fd9364Slogwang 	u_char		hci_len;	/* total length */
52*a1fd9364Slogwang 	u_char		hci_family;	/* address family */
53*a1fd9364Slogwang 	char		hci_node[32];	/* address (size == NG_NODESIZ ) */
54*a1fd9364Slogwang };
55*a1fd9364Slogwang 
56*a1fd9364Slogwang /* Raw HCI socket options */
57*a1fd9364Slogwang #define SOL_HCI_RAW		0x0802	/* socket options level */
58*a1fd9364Slogwang 
59*a1fd9364Slogwang #define SO_HCI_RAW_FILTER	1	/* get/set filter on socket */
60*a1fd9364Slogwang #define SO_HCI_RAW_DIRECTION	2	/* turn on/off direction info */
61*a1fd9364Slogwang #define SCM_HCI_RAW_DIRECTION	SO_HCI_RAW_DIRECTION /* cmsg_type  */
62*a1fd9364Slogwang 
63*a1fd9364Slogwang /*
64*a1fd9364Slogwang  * Raw HCI socket filter.
65*a1fd9364Slogwang  *
66*a1fd9364Slogwang  * For packet mask use (1 << (HCI packet indicator - 1))
67*a1fd9364Slogwang  * For event mask use (1 << (Event - 1))
68*a1fd9364Slogwang  */
69*a1fd9364Slogwang 
70*a1fd9364Slogwang struct ng_btsocket_hci_raw_filter {
71*a1fd9364Slogwang 	bitstr_t	bit_decl(packet_mask, 32);
72*a1fd9364Slogwang 	bitstr_t	bit_decl(event_mask, (NG_HCI_EVENT_MASK_SIZE * 8));
73*a1fd9364Slogwang };
74*a1fd9364Slogwang 
75*a1fd9364Slogwang /*
76*a1fd9364Slogwang  * Raw HCI sockets ioctl's
77*a1fd9364Slogwang  */
78*a1fd9364Slogwang 
79*a1fd9364Slogwang /* Get state */
80*a1fd9364Slogwang struct ng_btsocket_hci_raw_node_state {
81*a1fd9364Slogwang 	ng_hci_node_state_ep	state;
82*a1fd9364Slogwang };
83*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_GET_STATE \
84*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_GET_STATE, \
85*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_state)
86*a1fd9364Slogwang 
87*a1fd9364Slogwang /* Initialize */
88*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_INIT \
89*a1fd9364Slogwang 	_IO('b', NGM_HCI_NODE_INIT)
90*a1fd9364Slogwang 
91*a1fd9364Slogwang /* Get/Set debug level */
92*a1fd9364Slogwang struct ng_btsocket_hci_raw_node_debug {
93*a1fd9364Slogwang 	ng_hci_node_debug_ep	debug;
94*a1fd9364Slogwang };
95*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_GET_DEBUG \
96*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_GET_DEBUG, \
97*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_debug)
98*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_SET_DEBUG \
99*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_SET_DEBUG, \
100*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_debug)
101*a1fd9364Slogwang 
102*a1fd9364Slogwang /* Get buffer info */
103*a1fd9364Slogwang struct ng_btsocket_hci_raw_node_buffer {
104*a1fd9364Slogwang 	ng_hci_node_buffer_ep	buffer;
105*a1fd9364Slogwang };
106*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_GET_BUFFER \
107*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_GET_BUFFER, \
108*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_buffer)
109*a1fd9364Slogwang 
110*a1fd9364Slogwang /* Get BD_ADDR */
111*a1fd9364Slogwang struct ng_btsocket_hci_raw_node_bdaddr {
112*a1fd9364Slogwang 	bdaddr_t	bdaddr;
113*a1fd9364Slogwang };
114*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_GET_BDADDR \
115*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_GET_BDADDR, \
116*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_bdaddr)
117*a1fd9364Slogwang 
118*a1fd9364Slogwang /* Get features */
119*a1fd9364Slogwang struct ng_btsocket_hci_raw_node_features {
120*a1fd9364Slogwang 	u_int8_t	features[NG_HCI_FEATURES_SIZE];
121*a1fd9364Slogwang };
122*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_GET_FEATURES \
123*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_GET_FEATURES, \
124*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_features)
125*a1fd9364Slogwang 
126*a1fd9364Slogwang /* Get stat */
127*a1fd9364Slogwang struct ng_btsocket_hci_raw_node_stat {
128*a1fd9364Slogwang 	ng_hci_node_stat_ep	stat;
129*a1fd9364Slogwang };
130*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_GET_STAT \
131*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_GET_STAT, \
132*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_stat)
133*a1fd9364Slogwang 
134*a1fd9364Slogwang /* Reset stat */
135*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_RESET_STAT \
136*a1fd9364Slogwang 	_IO('b', NGM_HCI_NODE_RESET_STAT)
137*a1fd9364Slogwang 
138*a1fd9364Slogwang /* Flush neighbor cache */
139*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_FLUSH_NEIGHBOR_CACHE \
140*a1fd9364Slogwang 	_IO('b', NGM_HCI_NODE_FLUSH_NEIGHBOR_CACHE)
141*a1fd9364Slogwang 
142*a1fd9364Slogwang /* Get neighbor cache */
143*a1fd9364Slogwang struct ng_btsocket_hci_raw_node_neighbor_cache {
144*a1fd9364Slogwang 	u_int32_t				 num_entries;
145*a1fd9364Slogwang 	ng_hci_node_neighbor_cache_entry_ep	*entries;
146*a1fd9364Slogwang };
147*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_GET_NEIGHBOR_CACHE \
148*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_GET_NEIGHBOR_CACHE, \
149*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_neighbor_cache)
150*a1fd9364Slogwang 
151*a1fd9364Slogwang /* Get connection list */
152*a1fd9364Slogwang struct ng_btsocket_hci_raw_con_list {
153*a1fd9364Slogwang 	u_int32_t		 num_connections;
154*a1fd9364Slogwang 	ng_hci_node_con_ep	*connections;
155*a1fd9364Slogwang };
156*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_GET_CON_LIST \
157*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_GET_CON_LIST, \
158*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_con_list)
159*a1fd9364Slogwang 
160*a1fd9364Slogwang /* Get/Set link policy settings mask */
161*a1fd9364Slogwang struct ng_btsocket_hci_raw_node_link_policy_mask {
162*a1fd9364Slogwang 	ng_hci_node_link_policy_mask_ep	policy_mask;
163*a1fd9364Slogwang };
164*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_GET_LINK_POLICY_MASK \
165*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_GET_LINK_POLICY_SETTINGS_MASK, \
166*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_link_policy_mask)
167*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_SET_LINK_POLICY_MASK \
168*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_SET_LINK_POLICY_SETTINGS_MASK, \
169*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_link_policy_mask)
170*a1fd9364Slogwang 
171*a1fd9364Slogwang /* Get/Set packet mask */
172*a1fd9364Slogwang struct ng_btsocket_hci_raw_node_packet_mask {
173*a1fd9364Slogwang 	ng_hci_node_packet_mask_ep	packet_mask;
174*a1fd9364Slogwang };
175*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_GET_PACKET_MASK \
176*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_GET_PACKET_MASK, \
177*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_packet_mask)
178*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_SET_PACKET_MASK \
179*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_SET_PACKET_MASK, \
180*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_packet_mask)
181*a1fd9364Slogwang 
182*a1fd9364Slogwang /* Get/Set role switch */
183*a1fd9364Slogwang struct ng_btsocket_hci_raw_node_role_switch {
184*a1fd9364Slogwang 	ng_hci_node_role_switch_ep	role_switch;
185*a1fd9364Slogwang };
186*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_GET_ROLE_SWITCH \
187*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_GET_ROLE_SWITCH, \
188*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_role_switch)
189*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_SET_ROLE_SWITCH \
190*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_SET_ROLE_SWITCH, \
191*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_role_switch)
192*a1fd9364Slogwang 
193*a1fd9364Slogwang /* Get list of HCI node names */
194*a1fd9364Slogwang struct ng_btsocket_hci_raw_node_list_names {
195*a1fd9364Slogwang 	u_int32_t	 num_names;
196*a1fd9364Slogwang 	struct nodeinfo	*names;
197*a1fd9364Slogwang };
198*a1fd9364Slogwang #define SIOC_HCI_RAW_NODE_LIST_NAMES \
199*a1fd9364Slogwang 	_IOWR('b', NGM_HCI_NODE_LIST_NAMES, \
200*a1fd9364Slogwang 		struct ng_btsocket_hci_raw_node_list_names)
201*a1fd9364Slogwang 
202*a1fd9364Slogwang /*
203*a1fd9364Slogwang  * XXX FIXME: probably does not belong here
204*a1fd9364Slogwang  * Bluetooth version of struct sockaddr for SCO sockets (SEQPACKET)
205*a1fd9364Slogwang  */
206*a1fd9364Slogwang 
207*a1fd9364Slogwang struct sockaddr_sco {
208*a1fd9364Slogwang 	u_char		sco_len;	/* total length */
209*a1fd9364Slogwang 	u_char		sco_family;	/* address family */
210*a1fd9364Slogwang 	bdaddr_t	sco_bdaddr;	/* address */
211*a1fd9364Slogwang };
212*a1fd9364Slogwang 
213*a1fd9364Slogwang /* SCO socket options */
214*a1fd9364Slogwang #define SOL_SCO		0x0209		/* socket options level */
215*a1fd9364Slogwang 
216*a1fd9364Slogwang #define SO_SCO_MTU	1		/* get sockets mtu */
217*a1fd9364Slogwang #define SO_SCO_CONNINFO	2		/* get HCI connection handle */
218*a1fd9364Slogwang 
219*a1fd9364Slogwang /*
220*a1fd9364Slogwang  * XXX FIXME: probably does not belong here
221*a1fd9364Slogwang  * Bluetooth version of struct sockaddr for L2CAP sockets (RAW and SEQPACKET)
222*a1fd9364Slogwang  */
223*a1fd9364Slogwang 
224*a1fd9364Slogwang struct sockaddr_l2cap_compat {
225*a1fd9364Slogwang 	u_char		l2cap_len;	/* total length */
226*a1fd9364Slogwang 	u_char		l2cap_family;	/* address family */
227*a1fd9364Slogwang 	u_int16_t	l2cap_psm;	/* PSM (Protocol/Service Multiplexor) */
228*a1fd9364Slogwang 	bdaddr_t	l2cap_bdaddr;	/* address */
229*a1fd9364Slogwang };
230*a1fd9364Slogwang 
231*a1fd9364Slogwang #define BDADDR_BREDR 0
232*a1fd9364Slogwang #define BDADDR_LE_PUBLIC 1
233*a1fd9364Slogwang #define BDADDR_LE_RANDOM 2
234*a1fd9364Slogwang 
235*a1fd9364Slogwang struct sockaddr_l2cap {
236*a1fd9364Slogwang 	u_char		l2cap_len;	/* total length */
237*a1fd9364Slogwang 	u_char		l2cap_family;	/* address family */
238*a1fd9364Slogwang 	u_int16_t	l2cap_psm;	/* PSM (Protocol/Service Multiplexor) */
239*a1fd9364Slogwang 	bdaddr_t	l2cap_bdaddr;	/* address */
240*a1fd9364Slogwang 	u_int16_t	l2cap_cid;      /*cid*/
241*a1fd9364Slogwang 	u_int8_t	l2cap_bdaddr_type; /*address type*/
242*a1fd9364Slogwang };
243*a1fd9364Slogwang 
244*a1fd9364Slogwang 
245*a1fd9364Slogwang #if !defined(L2CAP_SOCKET_CHECKED) && !defined(_KERNEL)
246*a1fd9364Slogwang #warning "Make sure new member of socket address initialized"
247*a1fd9364Slogwang #endif
248*a1fd9364Slogwang 
249*a1fd9364Slogwang 
250*a1fd9364Slogwang /* L2CAP socket options */
251*a1fd9364Slogwang #define SOL_L2CAP		0x1609	/* socket option level */
252*a1fd9364Slogwang 
253*a1fd9364Slogwang #define SO_L2CAP_IMTU		1	/* get/set incoming MTU */
254*a1fd9364Slogwang #define SO_L2CAP_OMTU		2	/* get outgoing (peer incoming) MTU */
255*a1fd9364Slogwang #define SO_L2CAP_IFLOW		3	/* get incoming flow spec. */
256*a1fd9364Slogwang #define SO_L2CAP_OFLOW		4	/* get/set outgoing flow spec. */
257*a1fd9364Slogwang #define SO_L2CAP_FLUSH		5	/* get/set flush timeout */
258*a1fd9364Slogwang #define SO_L2CAP_ENCRYPTED      6      /* get/set whether wait for encryptin on connect */
259*a1fd9364Slogwang /*
260*a1fd9364Slogwang  * Raw L2CAP sockets ioctl's
261*a1fd9364Slogwang  */
262*a1fd9364Slogwang 
263*a1fd9364Slogwang /* Ping */
264*a1fd9364Slogwang struct ng_btsocket_l2cap_raw_ping {
265*a1fd9364Slogwang 	u_int32_t		 result;
266*a1fd9364Slogwang 	u_int32_t		 echo_size;
267*a1fd9364Slogwang 	u_int8_t		*echo_data;
268*a1fd9364Slogwang };
269*a1fd9364Slogwang #define SIOC_L2CAP_L2CA_PING \
270*a1fd9364Slogwang 	_IOWR('b', NGM_L2CAP_L2CA_PING, \
271*a1fd9364Slogwang 		struct ng_btsocket_l2cap_raw_ping)
272*a1fd9364Slogwang 
273*a1fd9364Slogwang /* Get info */
274*a1fd9364Slogwang struct ng_btsocket_l2cap_raw_get_info {
275*a1fd9364Slogwang 	u_int32_t		 result;
276*a1fd9364Slogwang 	u_int32_t		 info_type;
277*a1fd9364Slogwang 	u_int32_t		 info_size;
278*a1fd9364Slogwang 	u_int8_t		*info_data;
279*a1fd9364Slogwang };
280*a1fd9364Slogwang #define SIOC_L2CAP_L2CA_GET_INFO \
281*a1fd9364Slogwang 	_IOWR('b', NGM_L2CAP_L2CA_GET_INFO, \
282*a1fd9364Slogwang 		struct ng_btsocket_l2cap_raw_get_info)
283*a1fd9364Slogwang 
284*a1fd9364Slogwang /* Get flags */
285*a1fd9364Slogwang struct ng_btsocket_l2cap_raw_node_flags {
286*a1fd9364Slogwang 	ng_l2cap_node_flags_ep	flags;
287*a1fd9364Slogwang };
288*a1fd9364Slogwang #define SIOC_L2CAP_NODE_GET_FLAGS \
289*a1fd9364Slogwang 	_IOWR('b', NGM_L2CAP_NODE_GET_FLAGS, \
290*a1fd9364Slogwang 		struct ng_btsocket_l2cap_raw_node_flags)
291*a1fd9364Slogwang 
292*a1fd9364Slogwang /* Get/Set debug level */
293*a1fd9364Slogwang struct ng_btsocket_l2cap_raw_node_debug {
294*a1fd9364Slogwang 	ng_l2cap_node_debug_ep	debug;
295*a1fd9364Slogwang };
296*a1fd9364Slogwang #define SIOC_L2CAP_NODE_GET_DEBUG \
297*a1fd9364Slogwang 	_IOWR('b', NGM_L2CAP_NODE_GET_DEBUG, \
298*a1fd9364Slogwang 		struct ng_btsocket_l2cap_raw_node_debug)
299*a1fd9364Slogwang #define SIOC_L2CAP_NODE_SET_DEBUG \
300*a1fd9364Slogwang 	_IOWR('b', NGM_L2CAP_NODE_SET_DEBUG, \
301*a1fd9364Slogwang 		struct ng_btsocket_l2cap_raw_node_debug)
302*a1fd9364Slogwang 
303*a1fd9364Slogwang /* Get connection list */
304*a1fd9364Slogwang struct ng_btsocket_l2cap_raw_con_list {
305*a1fd9364Slogwang 	u_int32_t		 num_connections;
306*a1fd9364Slogwang 	ng_l2cap_node_con_ep	*connections;
307*a1fd9364Slogwang };
308*a1fd9364Slogwang #define SIOC_L2CAP_NODE_GET_CON_LIST \
309*a1fd9364Slogwang 	_IOWR('b', NGM_L2CAP_NODE_GET_CON_LIST, \
310*a1fd9364Slogwang 		struct ng_btsocket_l2cap_raw_con_list)
311*a1fd9364Slogwang 
312*a1fd9364Slogwang /* Get channel list */
313*a1fd9364Slogwang struct ng_btsocket_l2cap_raw_chan_list {
314*a1fd9364Slogwang 	u_int32_t		 num_channels;
315*a1fd9364Slogwang 	ng_l2cap_node_chan_ep	*channels;
316*a1fd9364Slogwang };
317*a1fd9364Slogwang #define SIOC_L2CAP_NODE_GET_CHAN_LIST \
318*a1fd9364Slogwang 	_IOWR('b', NGM_L2CAP_NODE_GET_CHAN_LIST, \
319*a1fd9364Slogwang 		struct ng_btsocket_l2cap_raw_chan_list)
320*a1fd9364Slogwang 
321*a1fd9364Slogwang /* Get/Set auto disconnect timeout */
322*a1fd9364Slogwang struct ng_btsocket_l2cap_raw_auto_discon_timo
323*a1fd9364Slogwang {
324*a1fd9364Slogwang 	ng_l2cap_node_auto_discon_ep	timeout;
325*a1fd9364Slogwang };
326*a1fd9364Slogwang #define SIOC_L2CAP_NODE_GET_AUTO_DISCON_TIMO \
327*a1fd9364Slogwang 	_IOWR('b', NGM_L2CAP_NODE_GET_AUTO_DISCON_TIMO, \
328*a1fd9364Slogwang 		struct ng_btsocket_l2cap_raw_auto_discon_timo)
329*a1fd9364Slogwang #define SIOC_L2CAP_NODE_SET_AUTO_DISCON_TIMO \
330*a1fd9364Slogwang 	_IOWR('b', NGM_L2CAP_NODE_SET_AUTO_DISCON_TIMO, \
331*a1fd9364Slogwang 		struct ng_btsocket_l2cap_raw_auto_discon_timo)
332*a1fd9364Slogwang 
333*a1fd9364Slogwang /*
334*a1fd9364Slogwang  * XXX FIXME: probably does not belong here
335*a1fd9364Slogwang  * Bluetooth version of struct sockaddr for RFCOMM sockets (STREAM)
336*a1fd9364Slogwang  */
337*a1fd9364Slogwang 
338*a1fd9364Slogwang struct sockaddr_rfcomm {
339*a1fd9364Slogwang 	u_char		rfcomm_len;	/* total length */
340*a1fd9364Slogwang 	u_char		rfcomm_family;	/* address family */
341*a1fd9364Slogwang 	bdaddr_t	rfcomm_bdaddr;	/* address */
342*a1fd9364Slogwang 	u_int8_t	rfcomm_channel;	/* channel */
343*a1fd9364Slogwang };
344*a1fd9364Slogwang 
345*a1fd9364Slogwang /* Flow control information */
346*a1fd9364Slogwang struct ng_btsocket_rfcomm_fc_info {
347*a1fd9364Slogwang 	u_int8_t	lmodem;		/* modem signals (local) */
348*a1fd9364Slogwang 	u_int8_t	rmodem;		/* modem signals (remote) */
349*a1fd9364Slogwang 	u_int8_t	tx_cred;	/* TX credits */
350*a1fd9364Slogwang 	u_int8_t	rx_cred;	/* RX credits */
351*a1fd9364Slogwang 	u_int8_t	cfc;		/* credit flow control */
352*a1fd9364Slogwang 	u_int8_t	reserved;
353*a1fd9364Slogwang };
354*a1fd9364Slogwang 
355*a1fd9364Slogwang /* STREAM RFCOMM socket options */
356*a1fd9364Slogwang #define SOL_RFCOMM		0x0816	/* socket options level */
357*a1fd9364Slogwang 
358*a1fd9364Slogwang #define SO_RFCOMM_MTU		1	/* get channel MTU */
359*a1fd9364Slogwang #define SO_RFCOMM_FC_INFO	2	/* get flow control information */
360*a1fd9364Slogwang 
361*a1fd9364Slogwang /*
362*a1fd9364Slogwang  * Netgraph node type name and cookie
363*a1fd9364Slogwang  */
364*a1fd9364Slogwang 
365*a1fd9364Slogwang #define	NG_BTSOCKET_HCI_RAW_NODE_TYPE	"btsock_hci_raw"
366*a1fd9364Slogwang #define	NG_BTSOCKET_L2CAP_RAW_NODE_TYPE	"btsock_l2c_raw"
367*a1fd9364Slogwang #define	NG_BTSOCKET_L2CAP_NODE_TYPE	"btsock_l2c"
368*a1fd9364Slogwang #define	NG_BTSOCKET_SCO_NODE_TYPE	"btsock_sco"
369*a1fd9364Slogwang 
370*a1fd9364Slogwang /*
371*a1fd9364Slogwang  * Debug levels
372*a1fd9364Slogwang  */
373*a1fd9364Slogwang 
374*a1fd9364Slogwang #define NG_BTSOCKET_ALERT_LEVEL	1
375*a1fd9364Slogwang #define NG_BTSOCKET_ERR_LEVEL	2
376*a1fd9364Slogwang #define NG_BTSOCKET_WARN_LEVEL	3
377*a1fd9364Slogwang #define NG_BTSOCKET_INFO_LEVEL	4
378*a1fd9364Slogwang 
379*a1fd9364Slogwang #endif /* _NETGRAPH_BTSOCKET_H_ */
380*a1fd9364Slogwang 
381