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 $ 2672f00208SRuslan Ermilov.\" 27c60bda17SJoel Dahl.Dd November 13, 2012 28878ed226SJulian Elischer.Dt NG_BTSOCKET 4 29878ed226SJulian Elischer.Os 30878ed226SJulian Elischer.Sh NAME 31f393f498SRuslan Ermilov.Nm ng_btsocket 32878ed226SJulian Elischer.Nd Bluetooth sockets layer 33878ed226SJulian Elischer.Sh SYNOPSIS 34878ed226SJulian Elischer.In sys/types.h 35878ed226SJulian Elischer.In sys/socket.h 363a08bb88SMaksim Yevmenkin.In sys/bitstring.h 373a08bb88SMaksim Yevmenkin.In netgraph/bluetooth/include/ng_hci.h 383a08bb88SMaksim Yevmenkin.In netgraph/bluetooth/include/ng_l2cap.h 393a08bb88SMaksim Yevmenkin.In netgraph/bluetooth/include/ng_btsocket.h 40878ed226SJulian Elischer.Sh DESCRIPTION 41878ed226SJulian ElischerThe 42878ed226SJulian Elischer.Nm 4372f00208SRuslan Ermilovmodule implements three Netgraph node types. 4472f00208SRuslan ErmilovEach type in its turn implements one protocol within 45878ed226SJulian Elischer.Dv PF_BLUETOOTH 46878ed226SJulian Elischerdomain. 47*548afe2bSChristian Brueffer.Sh Dv BLUETOOTH_PROTO_HCI protocol 48*548afe2bSChristian Brueffer.Ss Dv SOCK_RAW HCI sockets 49878ed226SJulian ElischerImplemented by 5072f00208SRuslan Ermilov.Nm btsock_hci_raw 5172f00208SRuslan ErmilovNetgraph type. 5272f00208SRuslan ErmilovRaw HCI sockets allow sending of raw HCI command datagrams 53878ed226SJulian Elischeronly to correspondents named in 54878ed226SJulian Elischer.Xr send 2 5572f00208SRuslan Ermilovcalls. 5672f00208SRuslan ErmilovRaw HCI datagrams (HCI commands, events and data) are generally received with 57878ed226SJulian Elischer.Xr recvfrom 2 , 5872f00208SRuslan Ermilovwhich returns the next datagram with its return address. 5972f00208SRuslan ErmilovRaw HCI sockets can also be used to control HCI nodes. 60878ed226SJulian Elischer.Pp 61878ed226SJulian ElischerThe Bluetooth raw HCI socket address is defined as follows: 62878ed226SJulian Elischer.Bd -literal -offset indent 63878ed226SJulian Elischer/* Bluetooth version of struct sockaddr for raw HCI sockets */ 64878ed226SJulian Elischerstruct sockaddr_hci { 65878ed226SJulian Elischer u_char hci_len; /* total length */ 66878ed226SJulian Elischer u_char hci_family; /* address family */ 67c60bda17SJoel Dahl char hci_node[32]; /* address (size == NG_NODESIZ ) */ 68878ed226SJulian Elischer}; 69878ed226SJulian Elischer.Ed 70878ed226SJulian Elischer.Pp 71c2025a76SJoel DahlRaw HCI sockets support a number of 72878ed226SJulian Elischer.Xr ioctl 2 73878ed226SJulian Elischerrequests such as: 74c60bda17SJoel Dahl.Bl -tag -width foo 75878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_STATE 76878ed226SJulian ElischerReturns current state for the HCI node. 77878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_INIT 78878ed226SJulian ElischerTurn on 79878ed226SJulian Elischer.Dq inited 80878ed226SJulian Elischerbit for the HCI node. 81878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_DEBUG 82878ed226SJulian ElischerReturns current debug level for the HCI node. 83878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_SET_DEBUG 84878ed226SJulian ElischerSets current debug level for the HCI node. 85878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_BUFFER 86878ed226SJulian ElischerReturns current state of data buffers for the HCI node. 87878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_BDADDR 88878ed226SJulian ElischerReturns BD_ADDR for the HCI node. 89878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_FEATURES 90878ed226SJulian ElischerReturns the list of features supported by hardware for the HCI node. 91878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_STAT 92878ed226SJulian ElischerReturns various statistic counters for the HCI node. 93878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_RESET_STAT 94878ed226SJulian ElischerResets all statistic counters for the HCI node to zero. 95878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_FLUSH_NEIGHBOR_CACHE 96878ed226SJulian ElischerRemove all neighbor cache entries for the HCI node. 97878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_NEIGHBOR_CACHE 98878ed226SJulian ElischerReturns content of the neighbor cache for the HCI node. 99878ed226SJulian Elischer.It Dv SIOC_HCI_RAW_NODE_GET_CON_LIST 1005203edcdSRuslan ErmilovReturns list of active baseband connections (i.e., ACL and SCO links) for 101878ed226SJulian Elischerthe HCI node. 102878ed226SJulian Elischer.It SIOC_HCI_RAW_NODE_GET_LINK_POLICY_MASK 103878ed226SJulian ElischerReturns current link policy settings mask for the HCI node. 104878ed226SJulian Elischer.It SIOC_HCI_RAW_NODE_SET_LINK_POLICY_MASK 105878ed226SJulian ElischerSets current link policy settings mask for the HCI node. 106878ed226SJulian Elischer.It SIOC_HCI_RAW_NODE_GET_PACKET_MASK 107878ed226SJulian ElischerReturns current packet mask for the HCI node. 108878ed226SJulian Elischer.It SIOC_HCI_RAW_NODE_SET_PACKET_MASK 109878ed226SJulian ElischerSets current packet mask for the HCI node. 110f2bb1caeSJulian Elischer.It SIOC_HCI_RAW_NODE_GET_ROLE_SWITCH 111f2bb1caeSJulian ElischerReturns current value of the role switch parameter for the HCI node. 112f2bb1caeSJulian Elischer.It SIOC_HCI_RAW_NODE_SET_ROLE_SWITCH 113f2bb1caeSJulian ElischerSets new value of the role switch parameter for the HCI node. 114878ed226SJulian Elischer.El 115878ed226SJulian Elischer.Pp 116f2bb1caeSJulian ElischerThe 11772f00208SRuslan Ermilov.Va net.bluetooth.hci.sockets.raw.ioctl_timeout 118f2bb1caeSJulian Elischervariable, that can be examined and set via 119f2bb1caeSJulian Elischer.Xr sysctl 8 , 120f2bb1caeSJulian Elischercontrols the control request timeout (in seconds) for raw HCI sockets. 121f2bb1caeSJulian Elischer.Pp 12272f00208SRuslan ErmilovRaw HCI sockets support filters. 12372f00208SRuslan ErmilovThe application can filter certain HCI datagram types. 12472f00208SRuslan ErmilovFor HCI event datagrams the application can set additional filter. 12572f00208SRuslan ErmilovThe raw HCI socket filter defined as follows: 126878ed226SJulian Elischer.Bd -literal -offset indent 127878ed226SJulian Elischer/* 128878ed226SJulian Elischer * Raw HCI socket filter. 129878ed226SJulian Elischer * 130878ed226SJulian Elischer * For packet mask use (1 << (HCI packet indicator - 1)) 131878ed226SJulian Elischer * For event mask use (1 << (Event - 1)) 132878ed226SJulian Elischer */ 133878ed226SJulian Elischer 134878ed226SJulian Elischerstruct ng_btsocket_hci_raw_filter { 135878ed226SJulian Elischer bitstr_t bit_decl(packet_mask, 32); 136878ed226SJulian Elischer bitstr_t bit_decl(event_mask, (NG_HCI_EVENT_MASK_SIZE * 8)); 137878ed226SJulian Elischer}; 138878ed226SJulian Elischer.Ed 139878ed226SJulian Elischer.Pp 140878ed226SJulian ElischerThe 141878ed226SJulian Elischer.Dv SO_HCI_RAW_FILTER 142878ed226SJulian Elischeroption defined at 143878ed226SJulian Elischer.Dv SOL_HCI_RAW 144878ed226SJulian Elischerlevel can be used to obtain via 145878ed226SJulian Elischer.Xr getsockopt 2 146878ed226SJulian Elischeror change via 147878ed226SJulian Elischer.Xr setsockopt 2 148878ed226SJulian Elischerraw HCI socket's filter. 149*548afe2bSChristian Brueffer.Sh Dv BLUETOOTH_PROTO_L2CAP protocol 150878ed226SJulian ElischerThe Bluetooth L2CAP socket address is defined as follows: 151878ed226SJulian Elischer.Bd -literal -offset indent 152878ed226SJulian Elischer/* Bluetooth version of struct sockaddr for L2CAP sockets */ 153878ed226SJulian Elischerstruct sockaddr_l2cap { 154878ed226SJulian Elischer u_char l2cap_len; /* total length */ 155878ed226SJulian Elischer u_char l2cap_family; /* address family */ 1566b99842aSEd Schouten uint16_t l2cap_psm; /* Protocol/Service Multiplexor */ 157878ed226SJulian Elischer bdaddr_t l2cap_bdaddr; /* address */ 158878ed226SJulian Elischer}; 159878ed226SJulian Elischer.Ed 160*548afe2bSChristian Brueffer.Ss Dv SOCK_RAW L2CAP sockets 161878ed226SJulian ElischerImplemented by 16272f00208SRuslan Ermilov.Nm btsock_l2c_raw 163878ed226SJulian ElischerNetgraph type. 16472f00208SRuslan ErmilovRaw L2CAP sockets do not provide access to raw L2CAP datagrams. 16572f00208SRuslan ErmilovThese 166878ed226SJulian Elischersockets used to control L2CAP nodes and to issue special L2CAP requests 16772f00208SRuslan Ermilovsuch as 16872f00208SRuslan Ermilov.Dv ECHO_REQUEST 16972f00208SRuslan Ermilovand 17072f00208SRuslan Ermilov.Dv GET_INFO 17172f00208SRuslan Ermilovrequest. 172878ed226SJulian Elischer.Pp 173878ed226SJulian ElischerRaw L2CAP sockets support number of 174878ed226SJulian Elischer.Xr ioctl 2 175878ed226SJulian Elischerrequests such as: 176c60bda17SJoel Dahl.Bl -tag -width foo 177878ed226SJulian Elischer.It Dv SIOC_L2CAP_NODE_GET_FLAGS 178878ed226SJulian ElischerReturns current state for the L2CAP node. 179878ed226SJulian Elischer.It Dv SIOC_L2CAP_NODE_GET_DEBUG 180878ed226SJulian ElischerReturns current debug level for the L2CAP node. 181878ed226SJulian Elischer.It Dv SIOC_L2CAP_NODE_SET_DEBUG 182878ed226SJulian ElischerSets current debug level for the L2CAP node. 183878ed226SJulian Elischer.It Dv SIOC_L2CAP_NODE_GET_CON_LIST 1845203edcdSRuslan ErmilovReturns list of active baseband connections (i.e., ACL links) for the L2CAP 185878ed226SJulian Elischernode. 186878ed226SJulian Elischer.It Dv SIOC_L2CAP_NODE_GET_CHAN_LIST 187878ed226SJulian ElischerReturns list of active channels for the L2CAP node. 1880986ab12SMaksim Yevmenkin.It Dv SIOC_L2CAP_NODE_GET_AUTO_DISCON_TIMO 1890986ab12SMaksim YevmenkinReturns current value of the auto disconnect timeout for the L2CAP node. 1900986ab12SMaksim Yevmenkin.It Dv SIOC_L2CAP_NODE_SET_AUTO_DISCON_TIMO 1910986ab12SMaksim YevmenkinSets current value of the auto disconnect timeout for the L2CAP node. 192878ed226SJulian Elischer.It Dv SIOC_L2CAP_L2CA_PING 19372f00208SRuslan ErmilovIssues L2CAP 19472f00208SRuslan Ermilov.Dv ECHO_REQUEST . 195878ed226SJulian Elischer.It Dv SIOC_L2CAP_L2CA_GET_INFO 19672f00208SRuslan ErmilovIssues L2CAP 19772f00208SRuslan Ermilov.Dv GET_INFO 19872f00208SRuslan Ermilovrequest. 199878ed226SJulian Elischer.El 200f2bb1caeSJulian Elischer.Pp 201f2bb1caeSJulian ElischerThe 20272f00208SRuslan Ermilov.Va net.bluetooth.l2cap.sockets.raw.ioctl_timeout 203f2bb1caeSJulian Elischervariable, that can be examined and set via 204f2bb1caeSJulian Elischer.Xr sysctl 8 , 205f2bb1caeSJulian Elischercontrols the control request timeout (in seconds) for raw L2CAP sockets. 206*548afe2bSChristian Brueffer.Ss Dv SOCK_SEQPACKET L2CAP sockets 207878ed226SJulian ElischerImplemented by 20872f00208SRuslan Ermilov.Nm btsock_l2c 209878ed226SJulian ElischerNetgraph type. 210878ed226SJulian ElischerL2CAP sockets are either 211878ed226SJulian Elischer.Dq active 212878ed226SJulian Elischeror 213878ed226SJulian Elischer.Dq passive . 21472f00208SRuslan ErmilovActive sockets initiate connections to passive sockets. 21572f00208SRuslan ErmilovBy default, L2CAP sockets are created active; to create a passive socket, the 216878ed226SJulian Elischer.Xr listen 2 217878ed226SJulian Elischersystem call must be used after binding the socket with the 218878ed226SJulian Elischer.Xr bind 2 21972f00208SRuslan Ermilovsystem call. 22072f00208SRuslan ErmilovOnly passive sockets may use the 221878ed226SJulian Elischer.Xr accept 2 22272f00208SRuslan Ermilovcall to accept incoming connections. 22372f00208SRuslan ErmilovOnly active sockets may use the 224878ed226SJulian Elischer.Xr connect 2 225878ed226SJulian Elischercall to initiate connections. 226878ed226SJulian Elischer.Pp 227f393f498SRuslan ErmilovL2CAP sockets support 22872f00208SRuslan Ermilov.Dq "wildcard addressing" . 22972f00208SRuslan ErmilovIn this case, socket must be bound to 230878ed226SJulian Elischer.Dv NG_HCI_BDADDR_ANY 23172f00208SRuslan Ermilovaddress. 23272f00208SRuslan ErmilovNote that PSM (Protocol/Service Multiplexor) field is always required. 23372f00208SRuslan ErmilovOnce a connection has been established, the socket's address is 23472f00208SRuslan Ermilovfixed by the peer entity's location. 23572f00208SRuslan ErmilovThe address assigned to the socket is 236878ed226SJulian Elischerthe address associated with the Bluetooth device through which packets are 237878ed226SJulian Elischerbeing transmitted and received, and PSM (Protocol/Service Multiplexor). 238878ed226SJulian Elischer.Pp 239878ed226SJulian ElischerL2CAP sockets support number of options defined at 240878ed226SJulian Elischer.Dv SOL_L2CAP 241878ed226SJulian Elischerlevel which can be set with 242878ed226SJulian Elischer.Xr setsockopt 2 243878ed226SJulian Elischerand tested with 244878ed226SJulian Elischer.Xr getsockopt 2 : 245c60bda17SJoel Dahl.Bl -tag -width foo 246878ed226SJulian Elischer.It Dv SO_L2CAP_IMTU 247878ed226SJulian ElischerGet (set) maximum payload size the local socket is capable of accepting. 248878ed226SJulian Elischer.It Dv SO_L2CAP_OMTU 249878ed226SJulian ElischerGet maximum payload size the remote socket is capable of accepting. 250878ed226SJulian Elischer.It Dv SO_L2CAP_IFLOW 251878ed226SJulian ElischerGet incoming flow specification for the socket. 25272f00208SRuslan Ermilov.Bf -emphasis 25372f00208SRuslan ErmilovNot implemented. 25472f00208SRuslan Ermilov.Ef 255878ed226SJulian Elischer.It Dv SO_L2CAP_OFLOW 256878ed226SJulian ElischerGet (set) outgoing flow specification for the socket. 25772f00208SRuslan Ermilov.Bf -emphasis 25872f00208SRuslan ErmilovNot implemented. 25972f00208SRuslan Ermilov.Ef 260878ed226SJulian Elischer.It Dv SO_L2CAP_FLUSH 261878ed226SJulian ElischerGet (set) value of the flush timeout. 26272f00208SRuslan Ermilov.Bf -emphasis 26372f00208SRuslan ErmilovNot implemented. 26472f00208SRuslan Ermilov.Ef 265878ed226SJulian Elischer.El 266*548afe2bSChristian Brueffer.Sh Dv BLUETOOTH_PROTO_RFCOMM protocol 267f2bb1caeSJulian ElischerThe Bluetooth RFCOMM socket address is defined as follows: 268f2bb1caeSJulian Elischer.Bd -literal -offset indent 269f2bb1caeSJulian Elischer/* Bluetooth version of struct sockaddr for RFCOMM sockets */ 270f2bb1caeSJulian Elischerstruct sockaddr_rfcomm { 271f2bb1caeSJulian Elischer u_char rfcomm_len; /* total length */ 272f2bb1caeSJulian Elischer u_char rfcomm_family; /* address family */ 273f2bb1caeSJulian Elischer bdaddr_t rfcomm_bdaddr; /* address */ 2746b99842aSEd Schouten uint8_t rfcomm_channel; /* channel */ 275f2bb1caeSJulian Elischer}; 276f2bb1caeSJulian Elischer.Ed 277*548afe2bSChristian Brueffer.Ss Dv SOCK_STREAM RFCOMM sockets 27872f00208SRuslan ErmilovNote that RFCOMM sockets do not have associated Netgraph node type. 27972f00208SRuslan ErmilovRFCOMM sockets are implemented as additional layer on top of L2CAP sockets. 28072f00208SRuslan ErmilovRFCOMM sockets are either 281f2bb1caeSJulian Elischer.Dq active 282f2bb1caeSJulian Elischeror 283f2bb1caeSJulian Elischer.Dq passive . 28472f00208SRuslan ErmilovActive sockets initiate connections to passive sockets. 28572f00208SRuslan ErmilovBy default, RFCOMM sockets are created active; to create a passive socket, the 286f2bb1caeSJulian Elischer.Xr listen 2 287f2bb1caeSJulian Elischersystem call must be used after binding the socket with the 288f2bb1caeSJulian Elischer.Xr bind 2 28972f00208SRuslan Ermilovsystem call. 29072f00208SRuslan ErmilovOnly passive sockets may use the 291f2bb1caeSJulian Elischer.Xr accept 2 29272f00208SRuslan Ermilovcall to accept incoming connections. 29372f00208SRuslan ErmilovOnly active sockets may use the 294f2bb1caeSJulian Elischer.Xr connect 2 295f2bb1caeSJulian Elischercall to initiate connections. 296f2bb1caeSJulian Elischer.Pp 297f2bb1caeSJulian ElischerRFCOMM sockets support 29872f00208SRuslan Ermilov.Dq "wildcard addressing" . 29972f00208SRuslan ErmilovIn this case, socket must be bound to 300f2bb1caeSJulian Elischer.Dv NG_HCI_BDADDR_ANY 30172f00208SRuslan Ermilovaddress. 30272f00208SRuslan ErmilovNote that RFCOMM channel field is always required. 30372f00208SRuslan ErmilovOnce a connection has been established, the socket's address is fixed by the 30472f00208SRuslan Ermilovpeer entity's location. 30572f00208SRuslan ErmilovThe address assigned to the socket is the address associated with the 306f2bb1caeSJulian ElischerBluetooth device through which packets are being transmitted and received, 307f2bb1caeSJulian Elischerand RFCOMM channel. 308f2bb1caeSJulian Elischer.Pp 309f2bb1caeSJulian ElischerThe following options, which can be tested with 310f2bb1caeSJulian Elischer.Xr getsockopt 2 311f2bb1caeSJulian Elischercall, are defined at 312f2bb1caeSJulian Elischer.Dv SOL_RFCOMM 313f2bb1caeSJulian Elischerlevel for RFCOMM sockets: 314c60bda17SJoel Dahl.Bl -tag -width foo 31572f00208SRuslan Ermilov.It Dv SO_RFCOMM_MTU 316f2bb1caeSJulian ElischerReturns the maximum transfer unit size (in bytes) for the underlying RFCOMM 31772f00208SRuslan Ermilovchannel. 31872f00208SRuslan ErmilovNote that application still can write/read bigger chunks to/from the socket. 31972f00208SRuslan Ermilov.It Dv SO_RFCOMM_FC_INFO 320f2bb1caeSJulian ElischerReturn the flow control information for the underlying RFCOMM channel. 321f2bb1caeSJulian Elischer.El 322f2bb1caeSJulian Elischer.Pp 323f2bb1caeSJulian ElischerThe 32472f00208SRuslan Ermilov.Va net.bluetooth.rfcomm.sockets.stream.timeout 325f2bb1caeSJulian Elischervariable, that can be examined and set via 326f2bb1caeSJulian Elischer.Xr sysctl 8 , 327f2bb1caeSJulian Elischercontrols the connection timeout (in seconds) for RFCOMM sockets. 328878ed226SJulian Elischer.Sh HOOKS 329f2bb1caeSJulian ElischerThese node types support hooks with arbitrary names (as long as they are 330f2bb1caeSJulian Elischerunique) and always accept hook connection requests. 331878ed226SJulian Elischer.Sh NETGRAPH CONTROL MESSAGES 332f2bb1caeSJulian ElischerThese node types support the generic control messages. 333878ed226SJulian Elischer.Sh SHUTDOWN 334878ed226SJulian ElischerThese nodes are persistent and cannot be shut down. 335878ed226SJulian Elischer.Sh SEE ALSO 33672f00208SRuslan Ermilov.Xr btsockstat 1 , 337878ed226SJulian Elischer.Xr socket 2 , 338878ed226SJulian Elischer.Xr netgraph 4 , 339f2bb1caeSJulian Elischer.Xr ng_bluetooth 4 , 340878ed226SJulian Elischer.Xr ng_hci 4 , 341878ed226SJulian Elischer.Xr ng_l2cap 4 , 34272f00208SRuslan Ermilov.Xr ngctl 8 , 34372f00208SRuslan Ermilov.Xr sysctl 8 344878ed226SJulian Elischer.Sh HISTORY 345878ed226SJulian ElischerThe 346f2bb1caeSJulian Elischer.Nm 347f2bb1caeSJulian Elischermodule was implemented in 348878ed226SJulian Elischer.Fx 5.0 . 349878ed226SJulian Elischer.Sh AUTHORS 3506c899950SBaptiste Daroussin.An Maksim Yevmenkin Aq Mt m_evmenkin@yahoo.com 3519cbda590SRuslan Ermilov.Sh BUGS 3529cbda590SRuslan ErmilovMost likely. 3539cbda590SRuslan ErmilovPlease report if found. 354