Skip to content

Commit 631cc82

Browse files
cvinayakcfriedt
authored andcommitted
Bluetooth: Controller: Add same peer connection check to initiator
Add implementation to initiator to check and reject connection requests to already connected peer. Signed-off-by: Vinayak Kariappa Chettimada <[email protected]>
1 parent 1c564e7 commit 631cc82

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

subsys/bluetooth/controller/ll_sw/ull_master.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,18 @@ uint8_t ll_create_connection(uint16_t scan_interval, uint16_t scan_window,
9393
return BT_HCI_ERR_CMD_DISALLOWED;
9494
}
9595

96+
#if defined(CONFIG_BT_CTLR_CHECK_SAME_PEER_CONN)
97+
const uint8_t own_id_addr_type = (own_addr_type & 0x01);
98+
const uint8_t *own_id_addr;
99+
100+
/* Do not connect twice to the same peer */
101+
own_id_addr = ll_addr_get(own_id_addr_type, NULL);
102+
if (ull_conn_peer_connected(own_id_addr_type, own_id_addr,
103+
peer_addr_type, peer_addr)) {
104+
return BT_HCI_ERR_CONN_ALREADY_EXISTS;
105+
}
106+
#endif /* CONFIG_BT_CTLR_CHECK_SAME_PEER_CONN */
107+
96108
#if defined(CONFIG_BT_CTLR_ADV_EXT)
97109
#if defined(CONFIG_BT_CTLR_PHY_CODED)
98110
struct ll_scan_set *scan_coded;
@@ -323,6 +335,14 @@ uint8_t ll_create_connection(uint16_t scan_interval, uint16_t scan_window,
323335
conn->ull.ticks_preempt_to_start =
324336
HAL_TICKER_US_TO_TICKS(EVENT_OVERHEAD_PREEMPT_MIN_US);
325337

338+
#if defined(CONFIG_BT_CTLR_CHECK_SAME_PEER_CONN)
339+
/* Remember peer and own identity address */
340+
conn->peer_id_addr_type = peer_addr_type;
341+
(void)memcpy(conn->peer_id_addr, peer_addr, sizeof(conn->peer_id_addr));
342+
conn->own_id_addr_type = own_id_addr_type;
343+
(void)memcpy(conn->own_id_addr, own_id_addr, sizeof(conn->own_id_addr));
344+
#endif /* CONFIG_BT_CTLR_CHECK_SAME_PEER_CONN */
345+
326346
lll->conn = conn_lll;
327347

328348
ull_hdr_init(&conn->ull);

0 commit comments

Comments
 (0)