You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by GitBox <gi...@apache.org> on 2019/01/15 01:32:27 UTC

[mynewt-nimble] Diff for: [GitHub] rymanluk merged pull request #293: nimble//ll: Certification fixes

diff --git a/nimble/controller/include/controller/ble_ll_resolv.h b/nimble/controller/include/controller/ble_ll_resolv.h
index 5401a70f..e28e6e56 100644
--- a/nimble/controller/include/controller/ble_ll_resolv.h
+++ b/nimble/controller/include/controller/ble_ll_resolv.h
@@ -81,6 +81,7 @@ void ble_ll_resolv_get_priv_addr(struct ble_ll_resolv_entry *rl, int local,
                                  uint8_t *addr);
 
 void ble_ll_resolv_set_peer_rpa(int index, uint8_t *rpa);
+void ble_ll_resolv_set_local_rpa(int index, uint8_t *rpa);
 
 /* Generate a resolvable private address. */
 int ble_ll_resolv_gen_rpa(uint8_t *addr, uint8_t addr_type, uint8_t *rpa,
diff --git a/nimble/controller/src/ble_ll_conn.c b/nimble/controller/src/ble_ll_conn.c
index 8aab5c11..992b6ab7 100644
--- a/nimble/controller/src/ble_ll_conn.c
+++ b/nimble/controller/src/ble_ll_conn.c
@@ -2952,6 +2952,8 @@ ble_ll_init_rx_pkt_in(uint8_t pdu_type, uint8_t *rxbuf,
     uint8_t addr_type;
     uint8_t *addr;
     uint8_t *adv_addr;
+    uint8_t *inita;
+    uint8_t inita_type;
     struct ble_ll_conn_sm *connsm;
     int ext_adv_mode = -1;
 #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV)
@@ -3008,7 +3010,7 @@ ble_ll_init_rx_pkt_in(uint8_t pdu_type, uint8_t *rxbuf,
 
         if (ble_ll_scan_adv_decode_addr(pdu_type, rxbuf, ble_hdr,
                                         &adv_addr, &addr_type,
-                                        NULL, NULL, &ext_adv_mode)) {
+                                        &inita, &inita_type, &ext_adv_mode)) {
             /* Something got wrong, keep trying to connect */
             goto scan_continue;
         }
@@ -3042,6 +3044,10 @@ ble_ll_init_rx_pkt_in(uint8_t pdu_type, uint8_t *rxbuf,
 #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PRIVACY)
             /* Update resolving list with current peer RPA */
             ble_ll_resolv_set_peer_rpa(connsm->rpa_index, rxbuf + BLE_LL_PDU_HDR_LEN);
+            if (ble_ll_is_rpa(inita, inita_type)) {
+                ble_ll_resolv_set_local_rpa(connsm->rpa_index, inita);
+            }
+
 #endif
         }
 
@@ -3984,7 +3990,8 @@ ble_ll_conn_rx_isr_end(uint8_t *rxbuf, struct ble_mbuf_hdr *rxhdr)
             /* A slave always replies */
             reply = 1;
 #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_ENCRYPTION)
-            if (is_ctrl && (opcode == BLE_LL_CTRL_PAUSE_ENC_RSP)) {
+            if (is_ctrl && (opcode == BLE_LL_CTRL_PAUSE_ENC_REQ)
+                        && (rx_pyld_len == (1 + BLE_LL_CTRL_PAUSE_ENC_REQ_LEN))) {
                 connsm->enc_data.enc_state = CONN_ENC_S_PAUSED;
             }
 #endif
diff --git a/nimble/controller/src/ble_ll_resolv.c b/nimble/controller/src/ble_ll_resolv.c
index cc0dbfc1..068a3254 100644
--- a/nimble/controller/src/ble_ll_resolv.c
+++ b/nimble/controller/src/ble_ll_resolv.c
@@ -542,6 +542,18 @@ ble_ll_resolv_set_peer_rpa(int index, uint8_t *rpa)
     OS_EXIT_CRITICAL(sr);
 }
 
+void
+ble_ll_resolv_set_local_rpa(int index, uint8_t *rpa)
+{
+    os_sr_t sr;
+    struct ble_ll_resolv_entry *rl;
+
+    OS_ENTER_CRITICAL(sr);
+    rl = &g_ble_ll_resolv_list[index];
+    memcpy(rl->rl_local_rpa, rpa, BLE_DEV_ADDR_LEN);
+    OS_EXIT_CRITICAL(sr);
+}
+
 /**
  * Generate a resolvable private address.
  *


With regards,
Apache Git Services