| /* | 
 |  * Copyright (c) 2024 Nordic Semiconductor ASA | 
 |  * | 
 |  * SPDX-License-Identifier: Apache-2.0 | 
 |  */ | 
 |  | 
 | #ifndef ZEPHYR_SUBSYS_BLUETOOTH_MESH_BRG_CFG_H_ | 
 | #define ZEPHYR_SUBSYS_BLUETOOTH_MESH_BRG_CFG_H_ | 
 |  | 
 | /** These are internal APIs. They do not sanitize input params. */ | 
 |  | 
 | #define BT_MESH_BRG_CFG_KEY_INDEX_MAX 0x0FFF | 
 |  | 
 | #define BT_MESH_BRG_CFG_NKEY_PRHB_FLT_MASK 0x000C | 
 |  | 
 | #define BT_MESH_BRG_CFG_NETIDX_NOMATCH 0xFFFF | 
 |  | 
 | /* One row of the bridging table */ | 
 | struct bt_mesh_brg_cfg_row { | 
 | 	/* Direction of the entry in the bridging table | 
 | 	 * 0 - no entry, | 
 | 	 * 1 - bridge messages with src as addr1 and dst as addr2 | 
 | 	 * 2 - bridge messages with src as addr1 and dst as addr2 and vice-versa | 
 | 	 */ | 
 | 	uint32_t direction: 8; | 
 | 	uint32_t net_idx1: 12; | 
 | 	uint32_t net_idx2: 12; | 
 | 	uint16_t addr1; | 
 | 	uint16_t addr2; | 
 | }; | 
 |  | 
 | bool bt_mesh_brg_cfg_enable_get(void); | 
 |  | 
 | int bt_mesh_brg_cfg_enable_set(bool enable); | 
 |  | 
 | void bt_mesh_brg_cfg_pending_store(void); | 
 |  | 
 | int bt_mesh_brg_cfg_tbl_reset(void); | 
 |  | 
 | int bt_mesh_brg_cfg_tbl_get(const struct bt_mesh_brg_cfg_row **rows); | 
 |  | 
 | int bt_mesh_brg_cfg_tbl_add(uint8_t direction, uint16_t net_idx1, uint16_t net_idx2, uint16_t addr1, | 
 | 			    uint16_t addr2, uint8_t *status); | 
 |  | 
 | int bt_mesh_brg_cfg_tbl_remove(uint16_t net_idx1, uint16_t net_idx2, uint16_t addr1, uint16_t addr2, | 
 | 			       uint8_t *status); | 
 |  | 
 | typedef void (*bt_mesh_brg_cfg_cb_t)(uint16_t new_netidx, void *user_data); | 
 |  | 
 | /** | 
 |  * @brief Iterate over the bridging table to find a matching entry for the given SRC, DST, and | 
 |  * NetKey Index. | 
 |  * | 
 |  * This function iterates over the bridging table and checks if there is a match for the provided | 
 |  * parameters. If a match is found, the callback function specified by the 'cb' parameter is | 
 |  * invoked with the NetKey Index of each matching entry (there can be several). Relaying operation | 
 |  * can then happen inside this callback. | 
 |  * | 
 |  * @param src The source address to match. | 
 |  * @param dst The destination address to match. | 
 |  * @param net_idx The NetKey Index to match. | 
 |  * @param cb The callback function to be invoked for each matching entry. | 
 |  * @param user_data User data to be passed to the callback function. | 
 |  */ | 
 | void bt_mesh_brg_cfg_tbl_foreach_subnet(uint16_t src, uint16_t dst, uint16_t net_idx, | 
 | 					bt_mesh_brg_cfg_cb_t cb, void *user_data); | 
 |  | 
 | #endif /* ZEPHYR_SUBSYS_BLUETOOTH_MESH_BRG_CFG_H_ */ |