diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2021-10-21 14:35:21 -0700 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2021-10-21 15:34:33 -0700 |
commit | 329b910babccebb2bc5db5592dd652695aba72fa (patch) | |
tree | 4d98c9f42c82b79af780c988964459bbf86835ff /emulator | |
parent | 8ab3b9e3ecc03447171ff9feb8c2815b8d89f9db (diff) | |
download | bluez-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.c | 21 |
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)); |