summaryrefslogtreecommitdiff
path: root/emulator
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2021-10-21 14:35:21 -0700
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2021-10-21 15:34:33 -0700
commit329b910babccebb2bc5db5592dd652695aba72fa (patch)
tree4d98c9f42c82b79af780c988964459bbf86835ff /emulator
parent8ab3b9e3ecc03447171ff9feb8c2815b8d89f9db (diff)
downloadbluez-329b910babccebb2bc5db5592dd652695aba72fa.tar.gz
btdev: Set Local RPA when own_addr_type is 0x03
This enables the emulator to properly emulate the generation of a Local RPA so it always set the random_addr when Create Connection sets 0x03 as own_addr_type 0x03: < HCI Command: LE Extended.. (0x08|0x0043) plen 26 Filter policy: Accept list is not used (0x00) Own address type: Random (0x03) Peer address type: Public (0x00) Peer address: 00:AA:01:01:00:00 (Intel Corporation) Initiating PHYs: 0x01 Entry 0: LE 1M Scan interval: 60.000 msec (0x0060) Scan window: 60.000 msec (0x0060) Min connection interval: 30.00 msec (0x0018) Max connection interval: 50.00 msec (0x0028) Connection latency: 0 (0x0000) Supervision timeout: 420 msec (0x002a) Min connection length: 0.000 msec (0x0000) Max connection length: 0.000 msec (0x0000) > HCI Event: Command Status (0x0f) plen 4 LE Extended Create Connection (0x08|0x0043) ncmd 1 Status: Success (0x00) > HCI Event: LE Meta Event (0x3e) plen 31 LE Enhanced Connection Complete (0x0a) Status: Success (0x00) Handle: 42 Role: Central (0x00) Peer address type: Public (0x00) Peer address: 00:AA:01:01:00:00 (Intel Corporation) Local resolvable private address: 60:0C:C5:B9:10:5D (Resolvable) Peer resolvable private address: 00:00:00:00:00:00 (Non-Resolvable) Connection interval: 50.00 msec (0x0028) Connection latency: 0 (0x0000) Supervision timeout: 420 msec (0x002a) Central clock accuracy: 0x00
Diffstat (limited to 'emulator')
-rw-r--r--emulator/btdev.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/emulator/btdev.c b/emulator/btdev.c
index 956dcee7f..03003d949 100644
--- a/emulator/btdev.c
+++ b/emulator/btdev.c
@@ -5124,9 +5124,10 @@ static void le_ext_conn_complete(struct btdev *btdev,
ev.status = status;
ev.peer_addr_type = btdev->le_scan_own_addr_type;
- if (ev.peer_addr_type == 0x01)
+ if (ev.peer_addr_type == 0x01 || ev.peer_addr_type == 0x03) {
+ ev.peer_addr_type = 0x01;
memcpy(ev.peer_addr, btdev->random_addr, 6);
- else
+ } else
memcpy(ev.peer_addr, btdev->bdaddr, 6);
ev.role = 0x01;
@@ -5135,6 +5136,11 @@ static void le_ext_conn_complete(struct btdev *btdev,
ev.latency = lecc->latency;
ev.supv_timeout = lecc->supv_timeout;
+ /* Set Local RPA if an RPA was generated for the advertising */
+ if (ext_adv->rpa)
+ memcpy(ev.local_rpa, ext_adv->random_addr,
+ sizeof(ev.local_rpa));
+
le_meta_event(conn->link->dev,
BT_HCI_EVT_LE_ENHANCED_CONN_COMPLETE, &ev,
sizeof(ev));
@@ -5148,10 +5154,13 @@ static void le_ext_conn_complete(struct btdev *btdev,
memcpy(ev.peer_addr, cmd->peer_addr, 6);
ev.role = 0x00;
- /* Set Local RPA if an RPA was generated for the advertising */
- if (ext_adv->rpa)
- memcpy(ev.local_rpa, ext_adv->random_addr,
- sizeof(ev.local_rpa));
+ /* Use random address as Local RPA if Create Connection own_addr_type
+ * is 0x03 since that expects the controller to generate the RPA.
+ */
+ if (btdev->le_scan_own_addr_type == 0x03)
+ memcpy(ev.local_rpa, btdev->random_addr, 6);
+ else
+ memset(ev.local_rpa, 0, sizeof(ev.local_rpa));
le_meta_event(btdev, BT_HCI_EVT_LE_ENHANCED_CONN_COMPLETE, &ev,
sizeof(ev));