nimble/ll: Add api for resolving peer RPA to any IRK on list

This is needed to properly report periodic sync transfers received
since address in LL_SYNC_TRANSFER_IND is always RPA.
This commit is contained in:
Szymon Janc
2019-12-03 23:37:08 +01:00
parent 914e044327
commit 1e0b0948c3
2 changed files with 21 additions and 4 deletions
@@ -98,7 +98,10 @@ int ble_ll_resolve_set_priv_mode(const uint8_t *cmdbuf, uint8_t len);
uint32_t ble_ll_resolv_get_rpa_tmo(void);
/* Resolve a resolvable private address */
int ble_ll_resolv_rpa(uint8_t *rpa, uint8_t *irk);
int ble_ll_resolv_rpa(const uint8_t *rpa, const uint8_t *irk);
/* Try to resolve peer RPA and return index on RL if matched */
int ble_ll_resolv_peer_rpa_any(const uint8_t *rpa);
/* Initialize resolv*/
void ble_ll_resolv_init(void);
+17 -3
View File
@@ -641,15 +641,15 @@ ble_ll_resolv_gen_rpa(uint8_t *addr, uint8_t addr_type, uint8_t *rpa, int local)
* @return int
*/
int
ble_ll_resolv_rpa(uint8_t *rpa, uint8_t *irk)
ble_ll_resolv_rpa(const uint8_t *rpa, const uint8_t *irk)
{
int rc;
uint32_t *irk32;
const uint32_t *irk32;
uint32_t *key32;
uint32_t *pt32;
struct ble_encryption_block ecb;
irk32 = (uint32_t *)irk;
irk32 = (const uint32_t *)irk;
key32 = (uint32_t *)&ecb.key[0];
key32[0] = irk32[0];
@@ -678,6 +678,20 @@ ble_ll_resolv_rpa(uint8_t *rpa, uint8_t *irk)
return rc;
}
int
ble_ll_resolv_peer_rpa_any(const uint8_t *rpa)
{
int i;
for (i = 0; i < g_ble_ll_resolv_data.rl_cnt_hw; i++) {
if (ble_ll_resolv_rpa(rpa, g_ble_ll_resolv_list[i].rl_peer_irk)) {
return i;
}
}
return -1;
}
/**
* Returns whether or not address resolution is enabled.
*