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