Provided by: libbluetooth-dev_5.79-1_amd64
NAME
rfcomm - RFCOMM protocol
SYNOPSIS
#include <sys/socket.h> #include <bluetooth/bluetooth.h> #include <bluetooth/rfcomm.h> rfcomm_socket = socket(PF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
DESCRIPTION
The RFCOMM protocol provides emulation of serial ports over the L2CAP(7) protocol. The protocol is based on the ETSI standard TS 07.10. RFCOMM is a simple transport protocol, with additional provisions for emulating the 9 circuits of RS-232 (EIATIA-232-E) serial ports.
SOCKET ADDRESS
struct sockaddr_rc { sa_family_t rc_family; unsigned short rc_bdaddr; unsigned char rc_channel; }; Example: struct sockaddr_rc addr; memset(&addr, 0, sizeof(addr)); addr.rc_family = AF_BLUETOOTH; bacpy(&addr.rc_bdaddr, bdaddr); addr.rc_channel = channel;
SOCKET OPTIONS
The socket options listed below can be set by using setsockopt(2) and read with getsockopt(2) with the socket level set to SOL_BLUETOOTH. BT_SECURITY (since Linux 2.6.30) Channel security level, possible values: ┌───────────────────┬─────────────────────┬─────────────────────┬──────────────┐ │Value │ Security Level │ Link Key Type │ Encryption │ ├───────────────────┼─────────────────────┼─────────────────────┼──────────────┤ │BT_SECURITY_SDP │ 0 (SDP Only) │ None │ Not required │ ├───────────────────┼─────────────────────┼─────────────────────┼──────────────┤ │BT_SECURITY_LOW │ 1 (Low) │ Unauthenticated │ Not required │ ├───────────────────┼─────────────────────┼─────────────────────┼──────────────┤ │BT_SECURITY_MEDIUM │ 2 (Medium - │ Unauthenticated │ Desired │ │ │ default) │ │ │ ├───────────────────┼─────────────────────┼─────────────────────┼──────────────┤ │BT_SECURITY_HIGH │ 3 (High) │ Authenticated │ Required │ ├───────────────────┼─────────────────────┼─────────────────────┼──────────────┤ │BT_SECURITY_FIPS │ 4 (Secure Only) │ Authenticated │ Required │ │(since Linux 3.15) │ │ (P-256 based Secure │ │ │ │ │ Simple Pairing and │ │ │ │ │ Secure │ │ │ │ │ Authentication) │ │ └───────────────────┴─────────────────────┴─────────────────────┴──────────────┘ Example: int level = BT_SECURITY_HIGH; int err = setsockopt(rfcomm_socket, SOL_BLUETOOTH, BT_SECURITY, &level, sizeof(level)); if (err == -1) { perror("setsockopt"); return 1; } BT_DEFER_SETUP (since Linux 2.6.30) Channel defer connection setup, this control if the connection procedure needs to be authorized by userspace before responding which allows authorization at profile level, possible values: ┌──────┬───────────────────┬───────────────┐ │Value │ Description │ Authorization │ ├──────┼───────────────────┼───────────────┤ │0 │ Disable (default) │ Not required │ ├──────┼───────────────────┼───────────────┤ │1 │ Enable │ Required │ └──────┴───────────────────┴───────────────┘ Example: int defer_setup = 1; int err = setsockopt(rfcomm_socket, SOL_BLUETOOTH, BT_DEFER_SETUP, &defer_setup, sizeof(defer_setup)); if (err == -1) { perror("setsockopt"); return err; } err = listen(rfcomm_socket, 5); if (err) { perror("listen"); return err; } struct sockaddr_rc remote_addr = {0}; socklen_t addr_len = sizeof(remote_addr); int new_socket = accept(rfcomm_socket, (struct sockaddr*)&remote_addr, &addr_len); if (new_socket < 0) { perror("accept"); return new_socket; } /* To complete the connection setup of new_socket read 1 byte */ char c; struct pollfd pfd; memset(&pfd, 0, sizeof(pfd)); pfd.fd = new_socket; pfd.events = POLLOUT; err = poll(&pfd, 1, 0); if (err) { perror("poll"); return err; } if (!(pfd.revents & POLLOUT)) { err = read(sk, &c, 1); if (err < 0) { perror("read"); return err; } } BT_FLUSHABLE (since Linux 2.6.39) Channel flushable flag, this control if the channel data can be flushed or not, possible values: ┌─────────────────┬────────────────┬───────────────────┐ │Define │ Value │ Description │ ├─────────────────┼────────────────┼───────────────────┤ │BT_FLUSHABLE_OFF │ 0x00 (default) │ Do not flush data │ ├─────────────────┼────────────────┼───────────────────┤ │BT_FLUSHABLE_ON │ 0x01 │ Flush data │ └─────────────────┴────────────────┴───────────────────┘ BT_POWER (since Linux 3.1) Channel power policy, this control if the channel shall force exit of sniff mode or not, possible values: ┌──────────────────────────┬────────────────┬──────────────────────────┐ │Define │ Value │ Description │ ├──────────────────────────┼────────────────┼──────────────────────────┤ │BT_POWER_FORCE_ACTIVE_OFF │ 0x00 (default) │ Don't force exit of │ │ │ │ sniff mode │ ├──────────────────────────┼────────────────┼──────────────────────────┤ │BT_POWER_FORCE_ACTIVE_ON │ 0x01 │ Force exit of sniff mode │ └──────────────────────────┴────────────────┴──────────────────────────┘ BT_CHANNEL_POLICY (since Linux 3.10) High-speed (AMP) channel policy, possible values: ┌──────────────────────────────────┬─────────────┬──────────────────┐ │Define │ Value │ Description │ ├──────────────────────────────────┼─────────────┼──────────────────┤ │BT_CHANNEL_POLICY_BREDR_ONLY │ 0 (default) │ BR/EDR only │ ├──────────────────────────────────┼─────────────┼──────────────────┤ │BT_CHANNEL_POLICY_BREDR_PREFERRED │ 1 │ BR/EDR Preferred │ ├──────────────────────────────────┼─────────────┼──────────────────┤ │BT_CHANNEL_POLICY_BREDR_PREFERRED │ 2 │ AMP Preferred │ └──────────────────────────────────┴─────────────┴──────────────────┘ BT_PHY (since Linux 5.10) Channel supported PHY(s), possible values: ┌───────────────────┬───────┬─────────────────┐ │Define │ Value │ Description │ ├───────────────────┼───────┼─────────────────┤ │BT_PHY_BR_1M_1SLOT │ BIT 0 │ BR 1Mbps 1SLOT │ ├───────────────────┼───────┼─────────────────┤ │BT_PHY_BR_1M_3SLOT │ BIT 1 │ BR 1Mbps 3SLOT │ ├───────────────────┼───────┼─────────────────┤ │BT_PHY_BR_1M_5SLOT │ BIT 2 │ BR 1Mbps 5SLOT │ ├───────────────────┼───────┼─────────────────┤ │BT_PHY_BR_2M_1SLOT │ BIT 3 │ EDR 2Mbps 1SLOT │ ├───────────────────┼───────┼─────────────────┤ │BT_PHY_BR_2M_3SLOT │ BIT 4 │ EDR 2Mbps 3SLOT │ ├───────────────────┼───────┼─────────────────┤ │BT_PHY_BR_2M_5SLOT │ BIT 5 │ EDR 2Mbps 5SLOT │ ├───────────────────┼───────┼─────────────────┤ │BT_PHY_BR_3M_1SLOT │ BIT 6 │ EDR 3Mbps 1SLOT │ ├───────────────────┼───────┼─────────────────┤ │BT_PHY_BR_3M_3SLOT │ BIT 7 │ EDR 3Mbps 3SLOT │ ├───────────────────┼───────┼─────────────────┤ │BT_PHY_BR_3M_5SLOT │ BIT 8 │ EDR 3Mbps 5SLOT │ └───────────────────┴───────┴─────────────────┘
RESOURCES
<http://www.bluez.org>
REPORTING BUGS
<linux-bluetooth@vger.kernel.org>
SEE ALSO
socket(7), rctest(1)
COPYRIGHT
Free use of this software is granted under ther terms of the GNU Lesser General Public Licenses (LGPL).