Provided by: libbluetooth-dev_5.79-2ubuntu1.3_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 - default) │ Unauthenticated │ Desired │
├────────────────────┼──────────────────────┼────────────────────────┼──────────────┤
│ BT_SECURITY_HIGH │ 3 (High) │ Authenticated │ Required │
├────────────────────┼──────────────────────┼────────────────────────┼──────────────┤
│ BT_SECURITY_FIPS │ 4 (Secure Only) │ Authenticated (P-256 │ Required │
│ (since Linux 3.15) │ │ 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).
BlueZ May 2024 RFCOMM(7)