1878ed226SJulian Elischer.\" Copyright (c) 2001-2002 Maksim Yevmenkin <m_evmenkin@yahoo.com> 2878ed226SJulian Elischer.\" All rights reserved. 3878ed226SJulian Elischer.\" 4878ed226SJulian Elischer.\" Redistribution and use in source and binary forms, with or without 5878ed226SJulian Elischer.\" modification, are permitted provided that the following conditions 6878ed226SJulian Elischer.\" are met: 7878ed226SJulian Elischer.\" 1. Redistributions of source code must retain the above copyright 8878ed226SJulian Elischer.\" notice, this list of conditions and the following disclaimer. 9878ed226SJulian Elischer.\" 2. Redistributions in binary form must reproduce the above copyright 10878ed226SJulian Elischer.\" notice, this list of conditions and the following disclaimer in the 11878ed226SJulian Elischer.\" documentation and/or other materials provided with the distribution. 12878ed226SJulian Elischer.\" 13878ed226SJulian Elischer.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14878ed226SJulian Elischer.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15878ed226SJulian Elischer.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16878ed226SJulian Elischer.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17878ed226SJulian Elischer.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18878ed226SJulian Elischer.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19878ed226SJulian Elischer.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20878ed226SJulian Elischer.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21878ed226SJulian Elischer.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22878ed226SJulian Elischer.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23878ed226SJulian Elischer.\" SUCH DAMAGE. 24878ed226SJulian Elischer.\" 250986ab12SMaksim Yevmenkin.\" $Id: ng_btsocket.4,v 1.7 2003/05/21 19:37:35 max Exp $ 26878ed226SJulian Elischer.\" $FreeBSD$ 2772f00208SRuslan Ermilov.\" 28878ed226SJulian Elischer.Dd July 8, 2002 29878ed226SJulian Elischer.Dt NG_BTSOCKET 4 30878ed226SJulian Elischer.Os 31878ed226SJulian Elischer.Sh NAME 32f393f498SRuslan Ermilov.Nm ng_btsocket 33878ed226SJulian Elischer.Nd Bluetooth sockets layer 34878ed226SJulian Elischer.Sh SYNOPSIS 35878ed226SJulian Elischer.In sys/types.h 36878ed226SJulian Elischer.In sys/socket.h 373a08bb88SMaksim Yevmenkin.In sys/bitstring.h 383a08bb88SMaksim Yevmenkin.In netgraph/bluetooth/include/ng_hci.h 393a08bb88SMaksim Yevmenkin.In netgraph/bluetooth/include/ng_l2cap.h 403a08bb88SMaksim Yevmenkin.In netgraph/bluetooth/include/ng_btsocket.h 41878ed226SJulian Elischer.Sh DESCRIPTION 42878ed226SJulian ElischerThe 43878ed226SJulian Elischer.Nm 4472f00208SRuslan Ermilovmodule implements three Netgraph node types. 4572f00208SRuslan ErmilovEach type in its turn implements one protocol within 46878ed226SJulian Elischer.Dv PF_BLUETOOTH 47878ed226SJulian Elischerdomain. 4872f00208SRuslan Ermilov.Sh Dv BLUETOOTH_PROTO_HCI Sh protocol 4972f00208SRuslan Ermilov.Ss Dv SOCK_RAW Ss HCI sockets 50878ed226SJulian ElischerImplemented by 5172f00208SRuslan Ermilov.Nm btsock_hci_raw 5272f00208SRuslan ErmilovNetgraph type. 5372f00208SRuslan ErmilovRaw HCI sockets allow sending of raw HCI command datagrams 54878ed226SJulian Elischeronly to correspondents named in 55878ed226SJulian Elischer.Xr send 2 5672f00208SRuslan Ermilovcalls. 5772f00208SRuslan ErmilovRaw HCI datagrams (HCI commands, events and data) are generally received with 58878ed226SJulian Elischer.Xr recvfrom 2 , 5972f00208SRuslan Ermilovwhich returns the next datagram with its return address. 6072f00208SRuslan ErmilovRaw HCI sockets can also be used to control HCI nodes. 61878ed226SJulian Elischer.Pp 62878ed226SJulian ElischerThe Bluetooth raw HCI socket address is defined as follows: 63878ed226SJulian Elischer.Bd -literal -offset indent 64878ed226SJulian Elischer/* Bluetooth version of struct sockaddr for raw HCI sockets */ 65878ed226SJulian Elischerstruct sockaddr_hci { 66878ed226SJulian Elischer u_char hci_len; /* total length */ 67878ed226SJulian Elischer u_char hci_family; /* address family */ 68878ed226SJulian Elischer char hci_node[16]; /* HCI node name */ 69878ed226SJulian Elischer}; 70878ed226SJulian Elischer.Ed 71878ed226SJulian Elischer.Pp 72c2025a76SJoel DahlRaw HCI sockets support a number of 73878ed226SJulian Elischer.Xr ioctl 2 74878ed226SJulian Elischerrequests such as: 7572f00208SRuslan Ermilov.Bl -tag -width indent 76878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_STATE 77878ed226SJulian ElischerReturns current state for the HCI node. 78878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_INIT 79878ed226SJulian ElischerTurn on 80878ed226SJulian Elischer.Dq inited 81878ed226SJulian Elischerbit for the HCI node. 82878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_DEBUG 83878ed226SJulian ElischerReturns current debug level for the HCI node. 84878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_SET_DEBUG 85878ed226SJulian ElischerSets current debug level for the HCI node. 86878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_BUFFER 87878ed226SJulian ElischerReturns current state of data buffers for the HCI node. 88878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_BDADDR 89878ed226SJulian ElischerReturns BD_ADDR for the HCI node. 90878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_FEATURES 91878ed226SJulian ElischerReturns the list of features supported by hardware for the HCI node. 92878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_STAT 93878ed226SJulian ElischerReturns various statistic counters for the HCI node. 94878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_RESET_STAT 95878ed226SJulian ElischerResets all statistic counters for the HCI node to zero. 96878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_FLUSH_NEIGHBOR_CACHE 97878ed226SJulian ElischerRemove all neighbor cache entries for the HCI node. 98878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_NEIGHBOR_CACHE 99878ed226SJulian ElischerReturns content of the neighbor cache for the HCI node. 100878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_CON_LIST 1015203edcdSRuslan ErmilovReturns list of active baseband connections (i.e., ACL and SCO links) for 102878ed226SJulian Elischerthe HCI node. 103878ed226SJulian Elischer.It SIOC_HCI_RAW_NODE_GET_LINK_POLICY_MASK 104878ed226SJulian ElischerReturns current link policy settings mask for the HCI node. 105878ed226SJulian Elischer.It SIOC_HCI_RAW_NODE_SET_LINK_POLICY_MASK 106878ed226SJulian ElischerSets current link policy settings mask for the HCI node. 107878ed226SJulian Elischer.It SIOC_HCI_RAW_NODE_GET_PACKET_MASK 108878ed226SJulian ElischerReturns current packet mask for the HCI node. 109878ed226SJulian Elischer.It SIOC_HCI_RAW_NODE_SET_PACKET_MASK 110878ed226SJulian ElischerSets current packet mask for the HCI node. 111f2bb1caeSJulian Elischer.It SIOC_HCI_RAW_NODE_GET_ROLE_SWITCH 112f2bb1caeSJulian ElischerReturns current value of the role switch parameter for the HCI node. 113f2bb1caeSJulian Elischer.It SIOC_HCI_RAW_NODE_SET_ROLE_SWITCH 114f2bb1caeSJulian ElischerSets new value of the role switch parameter for the HCI node. 115878ed226SJulian Elischer.El 116878ed226SJulian Elischer.Pp 117f2bb1caeSJulian ElischerThe 11872f00208SRuslan Ermilov.Va net.bluetooth.hci.sockets.raw.ioctl_timeout 119f2bb1caeSJulian Elischervariable, that can be examined and set via 120f2bb1caeSJulian Elischer.Xr sysctl 8 , 121f2bb1caeSJulian Elischercontrols the control request timeout (in seconds) for raw HCI sockets. 122f2bb1caeSJulian Elischer.Pp 12372f00208SRuslan ErmilovRaw HCI sockets support filters. 12472f00208SRuslan ErmilovThe application can filter certain HCI datagram types. 12572f00208SRuslan ErmilovFor HCI event datagrams the application can set additional filter. 12672f00208SRuslan ErmilovThe raw HCI socket filter defined as follows: 127878ed226SJulian Elischer.Bd -literal -offset indent 128878ed226SJulian Elischer/* 129878ed226SJulian Elischer * Raw HCI socket filter. 130878ed226SJulian Elischer * 131878ed226SJulian Elischer * For packet mask use (1 << (HCI packet indicator - 1)) 132878ed226SJulian Elischer * For event mask use (1 << (Event - 1)) 133878ed226SJulian Elischer */ 134878ed226SJulian Elischer 135878ed226SJulian Elischerstruct ng_btsocket_hci_raw_filter { 136878ed226SJulian Elischer bitstr_t bit_decl(packet_mask, 32); 137878ed226SJulian Elischer bitstr_t bit_decl(event_mask, (NG_HCI_EVENT_MASK_SIZE * 8)); 138878ed226SJulian Elischer}; 139878ed226SJulian Elischer.Ed 140878ed226SJulian Elischer.Pp 141878ed226SJulian ElischerThe 142878ed226SJulian Elischer.Dv SO_HCI_RAW_FILTER 143878ed226SJulian Elischeroption defined at 144878ed226SJulian Elischer.Dv SOL_HCI_RAW 145878ed226SJulian Elischerlevel can be used to obtain via 146878ed226SJulian Elischer.Xr getsockopt 2 147878ed226SJulian Elischeror change via 148878ed226SJulian Elischer.Xr setsockopt 2 149878ed226SJulian Elischerraw HCI socket's filter. 15072f00208SRuslan Ermilov.Sh Dv BLUETOOTH_PROTO_L2CAP Sh protocol 151878ed226SJulian ElischerThe Bluetooth L2CAP socket address is defined as follows: 152878ed226SJulian Elischer.Bd -literal -offset indent 153878ed226SJulian Elischer/* Bluetooth version of struct sockaddr for L2CAP sockets */ 154878ed226SJulian Elischerstruct sockaddr_l2cap { 155878ed226SJulian Elischer u_char l2cap_len; /* total length */ 156878ed226SJulian Elischer u_char l2cap_family; /* address family */ 157*6b99842aSEd Schouten uint16_t l2cap_psm; /* Protocol/Service Multiplexor */ 158878ed226SJulian Elischer bdaddr_t l2cap_bdaddr; /* address */ 159878ed226SJulian Elischer}; 160878ed226SJulian Elischer.Ed 16172f00208SRuslan Ermilov.Ss Dv SOCK_RAW Ss L2CAP sockets 162878ed226SJulian ElischerImplemented by 16372f00208SRuslan Ermilov.Nm btsock_l2c_raw 164878ed226SJulian ElischerNetgraph type. 16572f00208SRuslan ErmilovRaw L2CAP sockets do not provide access to raw L2CAP datagrams. 16672f00208SRuslan ErmilovThese 167878ed226SJulian Elischersockets used to control L2CAP nodes and to issue special L2CAP requests 16872f00208SRuslan Ermilovsuch as 16972f00208SRuslan Ermilov.Dv ECHO_REQUEST 17072f00208SRuslan Ermilovand 17172f00208SRuslan Ermilov.Dv GET_INFO 17272f00208SRuslan Ermilovrequest. 173878ed226SJulian Elischer.Pp 174878ed226SJulian ElischerRaw L2CAP sockets support number of 175878ed226SJulian Elischer.Xr ioctl 2 176878ed226SJulian Elischerrequests such as: 17772f00208SRuslan Ermilov.Bl -tag -width indent 178878ed226SJulian Elischer.It Dv SIOC_L2CAP_NODE_GET_FLAGS 179878ed226SJulian ElischerReturns current state for the L2CAP node. 180878ed226SJulian Elischer.It Dv SIOC_L2CAP_NODE_GET_DEBUG 181878ed226SJulian ElischerReturns current debug level for the L2CAP node. 182878ed226SJulian Elischer.It Dv SIOC_L2CAP_NODE_SET_DEBUG 183878ed226SJulian ElischerSets current debug level for the L2CAP node. 184878ed226SJulian Elischer.It Dv SIOC_L2CAP_NODE_GET_CON_LIST 1855203edcdSRuslan ErmilovReturns list of active baseband connections (i.e., ACL links) for the L2CAP 186878ed226SJulian Elischernode. 187878ed226SJulian Elischer.It Dv SIOC_L2CAP_NODE_GET_CHAN_LIST 188878ed226SJulian ElischerReturns list of active channels for the L2CAP node. 1890986ab12SMaksim Yevmenkin.It Dv SIOC_L2CAP_NODE_GET_AUTO_DISCON_TIMO 1900986ab12SMaksim YevmenkinReturns current value of the auto disconnect timeout for the L2CAP node. 1910986ab12SMaksim Yevmenkin.It Dv SIOC_L2CAP_NODE_SET_AUTO_DISCON_TIMO 1920986ab12SMaksim YevmenkinSets current value of the auto disconnect timeout for the L2CAP node. 193878ed226SJulian Elischer.It Dv SIOC_L2CAP_L2CA_PING 19472f00208SRuslan ErmilovIssues L2CAP 19572f00208SRuslan Ermilov.Dv ECHO_REQUEST . 196878ed226SJulian Elischer.It Dv SIOC_L2CAP_L2CA_GET_INFO 19772f00208SRuslan ErmilovIssues L2CAP 19872f00208SRuslan Ermilov.Dv GET_INFO 19972f00208SRuslan Ermilovrequest. 200878ed226SJulian Elischer.El 201f2bb1caeSJulian Elischer.Pp 202f2bb1caeSJulian ElischerThe 20372f00208SRuslan Ermilov.Va net.bluetooth.l2cap.sockets.raw.ioctl_timeout 204f2bb1caeSJulian Elischervariable, that can be examined and set via 205f2bb1caeSJulian Elischer.Xr sysctl 8 , 206f2bb1caeSJulian Elischercontrols the control request timeout (in seconds) for raw L2CAP sockets. 20772f00208SRuslan Ermilov.Ss Dv SOCK_SEQPACKET Ss L2CAP sockets 208878ed226SJulian ElischerImplemented by 20972f00208SRuslan Ermilov.Nm btsock_l2c 210878ed226SJulian ElischerNetgraph type. 211878ed226SJulian ElischerL2CAP sockets are either 212878ed226SJulian Elischer.Dq active 213878ed226SJulian Elischeror 214878ed226SJulian Elischer.Dq passive . 21572f00208SRuslan ErmilovActive sockets initiate connections to passive sockets. 21672f00208SRuslan ErmilovBy default, L2CAP sockets are created active; to create a passive socket, the 217878ed226SJulian Elischer.Xr listen 2 218878ed226SJulian Elischersystem call must be used after binding the socket with the 219878ed226SJulian Elischer.Xr bind 2 22072f00208SRuslan Ermilovsystem call. 22172f00208SRuslan ErmilovOnly passive sockets may use the 222878ed226SJulian Elischer.Xr accept 2 22372f00208SRuslan Ermilovcall to accept incoming connections. 22472f00208SRuslan ErmilovOnly active sockets may use the 225878ed226SJulian Elischer.Xr connect 2 226878ed226SJulian Elischercall to initiate connections. 227878ed226SJulian Elischer.Pp 228f393f498SRuslan ErmilovL2CAP sockets support 22972f00208SRuslan Ermilov.Dq "wildcard addressing" . 23072f00208SRuslan ErmilovIn this case, socket must be bound to 231878ed226SJulian Elischer.Dv NG_HCI_BDADDR_ANY 23272f00208SRuslan Ermilovaddress. 23372f00208SRuslan ErmilovNote that PSM (Protocol/Service Multiplexor) field is always required. 23472f00208SRuslan ErmilovOnce a connection has been established, the socket's address is 23572f00208SRuslan Ermilovfixed by the peer entity's location. 23672f00208SRuslan ErmilovThe address assigned to the socket is 237878ed226SJulian Elischerthe address associated with the Bluetooth device through which packets are 238878ed226SJulian Elischerbeing transmitted and received, and PSM (Protocol/Service Multiplexor). 239878ed226SJulian Elischer.Pp 240878ed226SJulian ElischerL2CAP sockets support number of options defined at 241878ed226SJulian Elischer.Dv SOL_L2CAP 242878ed226SJulian Elischerlevel which can be set with 243878ed226SJulian Elischer.Xr setsockopt 2 244878ed226SJulian Elischerand tested with 245878ed226SJulian Elischer.Xr getsockopt 2 : 24672f00208SRuslan Ermilov.Bl -tag -width indent 247878ed226SJulian Elischer.It Dv SO_L2CAP_IMTU 248878ed226SJulian ElischerGet (set) maximum payload size the local socket is capable of accepting. 249878ed226SJulian Elischer.It Dv SO_L2CAP_OMTU 250878ed226SJulian ElischerGet maximum payload size the remote socket is capable of accepting. 251878ed226SJulian Elischer.It Dv SO_L2CAP_IFLOW 252878ed226SJulian ElischerGet incoming flow specification for the socket. 25372f00208SRuslan Ermilov.Bf -emphasis 25472f00208SRuslan ErmilovNot implemented. 25572f00208SRuslan Ermilov.Ef 256878ed226SJulian Elischer.It Dv SO_L2CAP_OFLOW 257878ed226SJulian ElischerGet (set) outgoing flow specification for the socket. 25872f00208SRuslan Ermilov.Bf -emphasis 25972f00208SRuslan ErmilovNot implemented. 26072f00208SRuslan Ermilov.Ef 261878ed226SJulian Elischer.It Dv SO_L2CAP_FLUSH 262878ed226SJulian ElischerGet (set) value of the flush timeout. 26372f00208SRuslan Ermilov.Bf -emphasis 26472f00208SRuslan ErmilovNot implemented. 26572f00208SRuslan Ermilov.Ef 266878ed226SJulian Elischer.El 26772f00208SRuslan Ermilov.Sh Dv BLUETOOTH_PROTO_RFCOMM Sh protocol 268f2bb1caeSJulian ElischerThe Bluetooth RFCOMM socket address is defined as follows: 269f2bb1caeSJulian Elischer.Bd -literal -offset indent 270f2bb1caeSJulian Elischer/* Bluetooth version of struct sockaddr for RFCOMM sockets */ 271f2bb1caeSJulian Elischerstruct sockaddr_rfcomm { 272f2bb1caeSJulian Elischer u_char rfcomm_len; /* total length */ 273f2bb1caeSJulian Elischer u_char rfcomm_family; /* address family */ 274f2bb1caeSJulian Elischer bdaddr_t rfcomm_bdaddr; /* address */ 275*6b99842aSEd Schouten uint8_t rfcomm_channel; /* channel */ 276f2bb1caeSJulian Elischer}; 277f2bb1caeSJulian Elischer.Ed 27872f00208SRuslan Ermilov.Ss Dv SOCK_STREAM Ss RFCOMM sockets 27972f00208SRuslan ErmilovNote that RFCOMM sockets do not have associated Netgraph node type. 28072f00208SRuslan ErmilovRFCOMM sockets are implemented as additional layer on top of L2CAP sockets. 28172f00208SRuslan ErmilovRFCOMM sockets are either 282f2bb1caeSJulian Elischer.Dq active 283f2bb1caeSJulian Elischeror 284f2bb1caeSJulian Elischer.Dq passive . 28572f00208SRuslan ErmilovActive sockets initiate connections to passive sockets. 28672f00208SRuslan ErmilovBy default, RFCOMM sockets are created active; to create a passive socket, the 287f2bb1caeSJulian Elischer.Xr listen 2 288f2bb1caeSJulian Elischersystem call must be used after binding the socket with the 289f2bb1caeSJulian Elischer.Xr bind 2 29072f00208SRuslan Ermilovsystem call. 29172f00208SRuslan ErmilovOnly passive sockets may use the 292f2bb1caeSJulian Elischer.Xr accept 2 29372f00208SRuslan Ermilovcall to accept incoming connections. 29472f00208SRuslan ErmilovOnly active sockets may use the 295f2bb1caeSJulian Elischer.Xr connect 2 296f2bb1caeSJulian Elischercall to initiate connections. 297f2bb1caeSJulian Elischer.Pp 298f2bb1caeSJulian ElischerRFCOMM sockets support 29972f00208SRuslan Ermilov.Dq "wildcard addressing" . 30072f00208SRuslan ErmilovIn this case, socket must be bound to 301f2bb1caeSJulian Elischer.Dv NG_HCI_BDADDR_ANY 30272f00208SRuslan Ermilovaddress. 30372f00208SRuslan ErmilovNote that RFCOMM channel field is always required. 30472f00208SRuslan ErmilovOnce a connection has been established, the socket's address is fixed by the 30572f00208SRuslan Ermilovpeer entity's location. 30672f00208SRuslan ErmilovThe address assigned to the socket is the address associated with the 307f2bb1caeSJulian ElischerBluetooth device through which packets are being transmitted and received, 308f2bb1caeSJulian Elischerand RFCOMM channel. 309f2bb1caeSJulian Elischer.Pp 310f2bb1caeSJulian ElischerThe following options, which can be tested with 311f2bb1caeSJulian Elischer.Xr getsockopt 2 312f2bb1caeSJulian Elischercall, are defined at 313f2bb1caeSJulian Elischer.Dv SOL_RFCOMM 314f2bb1caeSJulian Elischerlevel for RFCOMM sockets: 31572f00208SRuslan Ermilov.Bl -tag -width indent 31672f00208SRuslan Ermilov.It Dv SO_RFCOMM_MTU 317f2bb1caeSJulian ElischerReturns the maximum transfer unit size (in bytes) for the underlying RFCOMM 31872f00208SRuslan Ermilovchannel. 31972f00208SRuslan ErmilovNote that application still can write/read bigger chunks to/from the socket. 32072f00208SRuslan Ermilov.It Dv SO_RFCOMM_FC_INFO 321f2bb1caeSJulian ElischerReturn the flow control information for the underlying RFCOMM channel. 322f2bb1caeSJulian Elischer.El 323f2bb1caeSJulian Elischer.Pp 324f2bb1caeSJulian ElischerThe 32572f00208SRuslan Ermilov.Va net.bluetooth.rfcomm.sockets.stream.timeout 326f2bb1caeSJulian Elischervariable, that can be examined and set via 327f2bb1caeSJulian Elischer.Xr sysctl 8 , 328f2bb1caeSJulian Elischercontrols the connection timeout (in seconds) for RFCOMM sockets. 329878ed226SJulian Elischer.Sh HOOKS 330f2bb1caeSJulian ElischerThese node types support hooks with arbitrary names (as long as they are 331f2bb1caeSJulian Elischerunique) and always accept hook connection requests. 332878ed226SJulian Elischer.Sh NETGRAPH CONTROL MESSAGES 333f2bb1caeSJulian ElischerThese node types support the generic control messages. 334878ed226SJulian Elischer.Sh SHUTDOWN 335878ed226SJulian ElischerThese nodes are persistent and cannot be shut down. 336878ed226SJulian Elischer.Sh SEE ALSO 33772f00208SRuslan Ermilov.Xr btsockstat 1 , 338878ed226SJulian Elischer.Xr socket 2 , 339878ed226SJulian Elischer.Xr netgraph 4 , 340f2bb1caeSJulian Elischer.Xr ng_bluetooth 4 , 341878ed226SJulian Elischer.Xr ng_hci 4 , 342878ed226SJulian Elischer.Xr ng_l2cap 4 , 34372f00208SRuslan Ermilov.Xr ngctl 8 , 34472f00208SRuslan Ermilov.Xr sysctl 8 345878ed226SJulian Elischer.Sh HISTORY 346878ed226SJulian ElischerThe 347f2bb1caeSJulian Elischer.Nm 348f2bb1caeSJulian Elischermodule was implemented in 349878ed226SJulian Elischer.Fx 5.0 . 350878ed226SJulian Elischer.Sh AUTHORS 351878ed226SJulian Elischer.An Maksim Yevmenkin Aq m_evmenkin@yahoo.com 3529cbda590SRuslan Ermilov.Sh BUGS 3539cbda590SRuslan ErmilovMost likely. 3549cbda590SRuslan ErmilovPlease report if found. 355