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