diff options
Diffstat (limited to 'emulator/btdev.c')
-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)); |