Commit 76bf881e authored by Carles Cufi's avatar Carles Cufi
Browse files

Bluetooth: controller: Replace whitelist with FAL



Replace the old whitelist-related terms with the new filter accept list
one from the Bluetooth spec v5.3.

Signed-off-by: default avatarCarles Cufi <carles.cufi@nordicsemi.no>
parent 456c28eb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -120,7 +120,7 @@ if(CONFIG_BT_LL_SW_SPLIT)
      )
  endif()
  zephyr_library_sources_ifdef(
    CONFIG_BT_CTLR_FILTER
    CONFIG_BT_CTLR_FILTER_ACCEPT_LIST
    ll_sw/ull_filter.c
    )
  zephyr_library_sources_ifdef(
+6 −6
Original line number Diff line number Diff line
@@ -368,25 +368,25 @@ config BT_CTLR_CHECK_SAME_PEER_CONN

endif # BT_CONN

config BT_CTLR_FILTER
	bool "Device Whitelist Support"
config BT_CTLR_FILTER_ACCEPT_LIST
	bool "Filter Accept List Support"
	default y
	help
	  Enable support for controller device whitelist feature
	  Enable support for controller Filter Accept List feature

config BT_CTLR_PRIVACY
	bool "LE Controller-based Privacy"
	depends on BT_CTLR_PRIVACY_SUPPORT
	default y
	select BT_CTLR_FILTER if BT_LL_SW_SPLIT
	select BT_CTLR_FILTER_ACCEPT_LIST if BT_LL_SW_SPLIT
	select BT_RPA
	help
	  Enable support for Bluetooth v4.2 LE Controller-based Privacy feature
	  in the Controller.

config BT_CTLR_WL_SIZE
config BT_CTLR_FAL_SIZE
	int "LE Controller-based Privacy White List size"
	depends on BT_CTLR_FILTER
	depends on BT_CTLR_FILTER_ACCEPT_LIST
	default 8
	range 1 8  if  (SOC_COMPATIBLE_NRF || SOC_OPENISA_RV32M1_RISCV32)
	range 1 16 if !(SOC_COMPATIBLE_NRF || SOC_OPENISA_RV32M1_RISCV32)
+10 −10
Original line number Diff line number Diff line
@@ -663,12 +663,12 @@ static void read_supported_commands(struct net_buf *buf, struct net_buf **evt)
	 */
	rp->commands[25] |= BIT(0) | BIT(1) | BIT(2) | BIT(4);

#if defined(CONFIG_BT_CTLR_FILTER)
#if defined(CONFIG_BT_CTLR_FILTER_ACCEPT_LIST)
	/* LE Read FAL Size, LE Clear FAL */
	rp->commands[26] |= BIT(6) | BIT(7);
	/* LE Add Dev to FAL, LE Remove Dev from FAL */
	rp->commands[27] |= BIT(0) | BIT(1);
#endif /* CONFIG_BT_CTLR_FILTER */
#endif /* CONFIG_BT_CTLR_FILTER_ACCEPT_LIST */

	/* LE Encrypt, LE Rand */
	rp->commands[27] |= BIT(6) | BIT(7);
@@ -1229,7 +1229,7 @@ static void le_set_random_address(struct net_buf *buf, struct net_buf **evt)
	*evt = cmd_complete_status(status);
}

#if defined(CONFIG_BT_CTLR_FILTER)
#if defined(CONFIG_BT_CTLR_FILTER_ACCEPT_LIST)
static void le_read_fal_size(struct net_buf *buf, struct net_buf **evt)
{
	struct bt_hci_rp_le_read_fal_size *rp;
@@ -1237,14 +1237,14 @@ static void le_read_fal_size(struct net_buf *buf, struct net_buf **evt)
	rp = hci_cmd_complete(evt, sizeof(*rp));
	rp->status = 0x00;

	rp->fal_size = ll_wl_size_get();
	rp->fal_size = ll_fal_size_get();
}

static void le_clear_fal(struct net_buf *buf, struct net_buf **evt)
{
	uint8_t status;

	status = ll_wl_clear();
	status = ll_fal_clear();

	*evt = cmd_complete_status(status);
}
@@ -1254,7 +1254,7 @@ static void le_add_dev_to_fal(struct net_buf *buf, struct net_buf **evt)
	struct bt_hci_cp_le_add_dev_to_fal *cmd = (void *)buf->data;
	uint8_t status;

	status = ll_wl_add(&cmd->addr);
	status = ll_fal_add(&cmd->addr);

	*evt = cmd_complete_status(status);
}
@@ -1264,11 +1264,11 @@ static void le_rem_dev_from_fal(struct net_buf *buf, struct net_buf **evt)
	struct bt_hci_cp_le_rem_dev_from_fal *cmd = (void *)buf->data;
	uint8_t status;

	status = ll_wl_remove(&cmd->addr);
	status = ll_fal_remove(&cmd->addr);

	*evt = cmd_complete_status(status);
}
#endif /* CONFIG_BT_CTLR_FILTER */
#endif /* CONFIG_BT_CTLR_FILTER_ACCEPT_LIST */

static void le_encrypt(struct net_buf *buf, struct net_buf **evt)
{
@@ -3554,7 +3554,7 @@ static int controller_cmd_handle(uint16_t ocf, struct net_buf *cmd,
		le_set_random_address(cmd, evt);
		break;

#if defined(CONFIG_BT_CTLR_FILTER)
#if defined(CONFIG_BT_CTLR_FILTER_ACCEPT_LIST)
	case BT_OCF(BT_HCI_OP_LE_READ_FAL_SIZE):
		le_read_fal_size(cmd, evt);
		break;
@@ -3570,7 +3570,7 @@ static int controller_cmd_handle(uint16_t ocf, struct net_buf *cmd,
	case BT_OCF(BT_HCI_OP_LE_REM_DEV_FROM_FAL):
		le_rem_dev_from_fal(cmd, evt);
		break;
#endif /* CONFIG_BT_CTLR_FILTER */
#endif /* CONFIG_BT_CTLR_FILTER_ACCEPT_LIST */

	case BT_OCF(BT_HCI_OP_LE_ENCRYPT):
		le_encrypt(cmd, evt);
+4 −4
Original line number Diff line number Diff line
@@ -213,10 +213,10 @@ void ll_cis_create(uint16_t cis_handle, uint16_t acl_handle);
uint8_t ll_cis_accept(uint16_t handle);
uint8_t ll_cis_reject(uint16_t handle, uint8_t reason);

uint8_t ll_wl_size_get(void);
uint8_t ll_wl_clear(void);
uint8_t ll_wl_add(bt_addr_le_t *addr);
uint8_t ll_wl_remove(bt_addr_le_t *addr);
uint8_t ll_fal_size_get(void);
uint8_t ll_fal_clear(void);
uint8_t ll_fal_add(bt_addr_le_t *addr);
uint8_t ll_fal_remove(bt_addr_le_t *addr);

void ll_rl_id_addr_get(uint8_t rl_idx, uint8_t *id_addr_type, uint8_t *id_addr);
uint8_t ll_rl_size_get(void);
+16 −16
Original line number Diff line number Diff line
@@ -4,30 +4,30 @@
 * SPDX-License-Identifier: Apache-2.0
 */

#if defined(CONFIG_BT_CTLR_WL_SIZE)
#define WL_SIZE CONFIG_BT_CTLR_WL_SIZE
#if defined(CONFIG_BT_CTLR_FAL_SIZE)
#define FAL_SIZE CONFIG_BT_CTLR_FAL_SIZE
#else
#define WL_SIZE 8
#endif /* CONFIG_BT_CTLR_WL_SIZE */
#define FAL_SIZE 8
#endif /* CONFIG_BT_CTLR_FAL_SIZE */

#define FILTER_IDX_NONE        0xFF
#define LLL_FILTER_BITMASK_ALL (BIT(WL_SIZE) - 1)
#define LLL_FILTER_BITMASK_ALL (BIT(FAL_SIZE) - 1)

struct lll_filter {
#if (WL_SIZE <= 8)
#if (FAL_SIZE <= 8)
	uint8_t  enable_bitmask;
	uint8_t  addr_type_bitmask;
#elif (WL_SIZE <= 16)
#elif (FAL_SIZE <= 16)
	uint16_t enable_bitmask;
	uint16_t addr_type_bitmask;
#else
#error WL_SIZE must be <= 16
#error FAL_SIZE must be <= 16
#endif
	uint8_t  bdaddr[WL_SIZE][BDADDR_SIZE];
	uint8_t  bdaddr[FAL_SIZE][BDADDR_SIZE];
};

/* Whitelist peer list */
struct lll_whitelist {
/* Filter Accept List peer list */
struct lll_fal {
	uint8_t      taken:1;
	uint8_t      id_addr_type:1;
	uint8_t      rl_idx;
@@ -40,7 +40,7 @@ struct lll_resolvelist {
	uint8_t      pirk:1;
	uint8_t      lirk:1;
	uint8_t      dev:1;
	uint8_t      wl:1;
	uint8_t      fal:1;

	uint8_t      id_addr_type:1;
	bt_addr_t id_addr;
@@ -58,11 +58,11 @@ struct lll_resolvelist {
bool ull_filter_lll_lrpa_used(uint8_t rl_idx);
extern bt_addr_t *ull_filter_lll_lrpa_get(uint8_t rl_idx);
extern uint8_t *ull_filter_lll_irks_get(uint8_t *count);
extern uint8_t ull_filter_lll_rl_idx(bool whitelist, uint8_t devmatch_id);
extern uint8_t ull_filter_lll_rl_idx(bool fal, uint8_t devmatch_id);
extern uint8_t ull_filter_lll_rl_irk_idx(uint8_t irkmatch_id);
extern bool ull_filter_lll_irk_whitelisted(uint8_t rl_idx);
extern struct lll_filter *ull_filter_lll_get(bool whitelist);
extern struct lll_whitelist *ull_filter_lll_whitelist_get(void);
extern bool ull_filter_lll_irk_in_fal(uint8_t rl_idx);
extern struct lll_filter *ull_filter_lll_get(bool fal);
extern struct lll_fal *ull_filter_lll_fal_get(void);
extern struct lll_resolvelist *ull_filter_lll_resolvelist_get(void);
extern bool ull_filter_lll_rl_idx_allowed(uint8_t irkmatch_ok, uint8_t rl_idx);
extern bool ull_filter_lll_rl_addr_allowed(uint8_t id_addr_type, uint8_t *id_addr,
Loading