You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by an...@apache.org on 2022/02/24 14:33:13 UTC

[mynewt-nimble] 03/10: nimble/ll: Update peer RPA during scan

This is an automated email from the ASF dual-hosted git repository.

andk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git

commit 0a680598f0c7c20dd626bf3689c5fa35554cbd51
Author: Andrzej Kaczmarek <an...@codecoup.pl>
AuthorDate: Tue Feb 22 18:02:39 2022 +0100

    nimble/ll: Update peer RPA during scan
    
    We need to keep track of peer RPA during scan so it can be retrieved by
    host using LE Read Peer Resolvable Address at any time.
---
 nimble/controller/src/ble_ll_scan.c     | 7 +++++++
 nimble/controller/src/ble_ll_scan_aux.c | 7 +++++++
 2 files changed, 14 insertions(+)

diff --git a/nimble/controller/src/ble_ll_scan.c b/nimble/controller/src/ble_ll_scan.c
index b04138d..46e1cb6 100644
--- a/nimble/controller/src/ble_ll_scan.c
+++ b/nimble/controller/src/ble_ll_scan.c
@@ -1931,6 +1931,13 @@ ble_ll_scan_rx_pkt_in_on_legacy(uint8_t pdu_type, struct os_mbuf *om,
     ble_ll_scan_get_addr_data_from_legacy(pdu_type, rxbuf, addrd);
     ble_ll_scan_rx_pkt_in_restore_addr_data(hdr, addrd);
 
+#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PRIVACY)
+    if (addrd->adva_resolved) {
+        BLE_LL_ASSERT(addrd->rpa_index >= 0);
+        ble_ll_resolv_set_peer_rpa(addrd->rpa_index, addrd->adva);
+    }
+#endif
+
     send_hci_report = !scansm->scan_filt_dups ||
                       !ble_ll_scan_dup_check_legacy(addrd->adv_addr_type,
                                                     addrd->adv_addr,
diff --git a/nimble/controller/src/ble_ll_scan_aux.c b/nimble/controller/src/ble_ll_scan_aux.c
index 9504771..933c3f7 100644
--- a/nimble/controller/src/ble_ll_scan_aux.c
+++ b/nimble/controller/src/ble_ll_scan_aux.c
@@ -1669,6 +1669,13 @@ ble_ll_scan_aux_rx_pkt_in(struct os_mbuf *rxpdu, struct ble_mbuf_hdr *rxhdr)
     }
 #endif
 
+#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PRIVACY)
+    if (addrd.adva_resolved) {
+        BLE_LL_ASSERT(addrd.rpa_index >= 0);
+        ble_ll_resolv_set_peer_rpa(addrd.rpa_index, addrd.adva);
+    }
+#endif
+
     scan_duplicate = ble_ll_scan_get_filt_dups() &&
                      ble_ll_scan_dup_check_ext(addrd.adv_addr_type,
                                                addrd.adv_addr, true, aux->adi);