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