Bluetooth: controller: SW deferred privacy IRK size define

Replaced symbolic constants with a define for the size of IRKs.

Signed-off-by: Asger Munk Nielsen <asmk@oticon.com>
This commit is contained in:
Asger Munk Nielsen 2019-12-13 12:10:48 +01:00 committed by Carles Cufí
commit 612984e09c

View file

@ -45,6 +45,8 @@
static struct lll_filter wl_filter; static struct lll_filter wl_filter;
u8_t wl_anon; u8_t wl_anon;
#define IRK_SIZE 16
#if defined(CONFIG_BT_CTLR_PRIVACY) #if defined(CONFIG_BT_CTLR_PRIVACY)
#include "common/rpa.h" #include "common/rpa.h"
@ -69,7 +71,7 @@ static struct rl_dev {
u8_t id_addr_type:1; u8_t id_addr_type:1;
bt_addr_t id_addr; bt_addr_t id_addr;
u8_t local_irk[16]; u8_t local_irk[IRK_SIZE];
u8_t pirk_idx; u8_t pirk_idx;
bt_addr_t curr_rpa; bt_addr_t curr_rpa;
bt_addr_t peer_rpa; bt_addr_t peer_rpa;
@ -101,7 +103,7 @@ struct target_resolve_work {
}; };
#endif /* CONFIG_BT_CTLR_SW_DEFERRED_PRIVACY */ #endif /* CONFIG_BT_CTLR_SW_DEFERRED_PRIVACY */
static u8_t peer_irks[CONFIG_BT_CTLR_RL_SIZE][16]; static u8_t peer_irks[CONFIG_BT_CTLR_RL_SIZE][IRK_SIZE];
static u8_t peer_irk_rl_ids[CONFIG_BT_CTLR_RL_SIZE]; static u8_t peer_irk_rl_ids[CONFIG_BT_CTLR_RL_SIZE];
static u8_t peer_irk_count; static u8_t peer_irk_count;
@ -273,7 +275,8 @@ u8_t ll_rl_clear(void)
return 0; return 0;
} }
u8_t ll_rl_add(bt_addr_le_t *id_addr, const u8_t pirk[16], const u8_t lirk[16]) u8_t ll_rl_add(bt_addr_le_t *id_addr, const u8_t pirk[IRK_SIZE],
const u8_t lirk[IRK_SIZE])
{ {
u8_t i, j; u8_t i, j;
@ -295,21 +298,21 @@ u8_t ll_rl_add(bt_addr_le_t *id_addr, const u8_t pirk[16], const u8_t lirk[16])
bt_addr_copy(&rl[i].id_addr, &id_addr->a); bt_addr_copy(&rl[i].id_addr, &id_addr->a);
rl[i].id_addr_type = id_addr->type & 0x1; rl[i].id_addr_type = id_addr->type & 0x1;
rl[i].pirk = mem_nz((u8_t *)pirk, 16); rl[i].pirk = mem_nz((u8_t *)pirk, IRK_SIZE);
rl[i].lirk = mem_nz((u8_t *)lirk, 16); rl[i].lirk = mem_nz((u8_t *)lirk, IRK_SIZE);
if (rl[i].pirk) { if (rl[i].pirk) {
/* cross-reference */ /* cross-reference */
rl[i].pirk_idx = peer_irk_count; rl[i].pirk_idx = peer_irk_count;
peer_irk_rl_ids[peer_irk_count] = i; peer_irk_rl_ids[peer_irk_count] = i;
/* AAR requires big-endian IRKs */ /* AAR requires big-endian IRKs */
sys_memcpy_swap(peer_irks[peer_irk_count++], pirk, 16); sys_memcpy_swap(peer_irks[peer_irk_count++], pirk, IRK_SIZE);
#if defined(CONFIG_BT_CTLR_SW_DEFERRED_PRIVACY) #if defined(CONFIG_BT_CTLR_SW_DEFERRED_PRIVACY)
/* a new key was added, invalidate the known/unknown list */ /* a new key was added, invalidate the known/unknown list */
prpa_cache_clear(); prpa_cache_clear();
#endif #endif
} }
if (rl[i].lirk) { if (rl[i].lirk) {
memcpy(rl[i].local_irk, lirk, 16); memcpy(rl[i].local_irk, lirk, IRK_SIZE);
rl[i].local_rpa = NULL; rl[i].local_rpa = NULL;
} }
memset(rl[i].curr_rpa.val, 0x00, sizeof(rl[i].curr_rpa)); memset(rl[i].curr_rpa.val, 0x00, sizeof(rl[i].curr_rpa));
@ -350,7 +353,7 @@ u8_t ll_rl_remove(bt_addr_le_t *id_addr)
u8_t pi = rl[i].pirk_idx, pj = peer_irk_count - 1; u8_t pi = rl[i].pirk_idx, pj = peer_irk_count - 1;
if (pj && pi != pj) { if (pj && pi != pj) {
memcpy(peer_irks[pi], peer_irks[pj], 16); memcpy(peer_irks[pi], peer_irks[pj], IRK_SIZE);
for (k = 0U; for (k = 0U;
k < CONFIG_BT_CTLR_RL_SIZE; k < CONFIG_BT_CTLR_RL_SIZE;
k++) { k++) {
@ -542,11 +545,11 @@ void ull_filter_rpa_update(bool timeout)
if ((rl[i].taken) && (all || !rl[i].rpas_ready)) { if ((rl[i].taken) && (all || !rl[i].rpas_ready)) {
if (rl[i].pirk) { if (rl[i].pirk) {
u8_t irk[16]; u8_t irk[IRK_SIZE];
/* TODO: move this swap to the driver level */ /* TODO: move this swap to the driver level */
sys_memcpy_swap(irk, peer_irks[rl[i].pirk_idx], sys_memcpy_swap(irk, peer_irks[rl[i].pirk_idx],
16); IRK_SIZE);
err = bt_rpa_create(irk, &rl[i].peer_rpa); err = bt_rpa_create(irk, &rl[i].peer_rpa);
LL_ASSERT(!err); LL_ASSERT(!err);
#if defined(CONFIG_BT_CTLR_SW_DEFERRED_PRIVACY) #if defined(CONFIG_BT_CTLR_SW_DEFERRED_PRIVACY)
@ -1138,12 +1141,12 @@ static void target_resolve(struct k_work *work)
static u8_t prpa_cache_try_resolve(bt_addr_t *rpa) static u8_t prpa_cache_try_resolve(bt_addr_t *rpa)
{ {
u8_t pi; u8_t pi;
u8_t lpirk[16]; u8_t lpirk[IRK_SIZE];
for (u8_t i = 0U; i < CONFIG_BT_CTLR_RL_SIZE; i++) { for (u8_t i = 0U; i < CONFIG_BT_CTLR_RL_SIZE; i++) {
if (rl[i].taken && rl[i].pirk) { if (rl[i].taken && rl[i].pirk) {
pi = rl[i].pirk_idx; pi = rl[i].pirk_idx;
sys_memcpy_swap(lpirk, peer_irks[pi], 16); sys_memcpy_swap(lpirk, peer_irks[pi], IRK_SIZE);
if (bt_rpa_irk_matches(lpirk, rpa)) { if (bt_rpa_irk_matches(lpirk, rpa)) {
return i; return i;
} }