feat(ble_mesh): Miscellaneous updates for mesh kconfig, relay related

release/v5.0
luoxu 2023-12-20 15:41:59 +08:00 zatwierdzone przez BOT
rodzic d6933bd3c7
commit e138aae301
4 zmienionych plików z 35 dodań i 3 usunięć

Wyświetl plik

@ -545,6 +545,20 @@ if BLE_MESH
Provisioner can provision up to 20 nodes and each node contains two elements,
then the replay protection list size of Provisioner should be at least 40.
config BLE_MESH_NOT_RELAY_REPLAY_MSG
bool "Not relay replayed messages in a mesh network"
depends on BLE_MESH_EXPERIMENTAL
default n
help
There may be many expired messages in a complex mesh network that would be
considered replayed messages.
Enable this option will refuse to relay such messages, which could help to
reduce invalid packets in the mesh network.
However, it should be noted that enabling this option may result in packet
loss in certain environments.
Therefore, users need to decide whether to enable this option according to
the actual usage situation.
config BLE_MESH_MSG_CACHE_SIZE
int "Network message cache size"
default 10
@ -1248,4 +1262,12 @@ if BLE_MESH
endmenu
config BLE_MESH_EXPERIMENTAL
bool "Make BLE Mesh experimental features visible"
default n
help
Make BLE Mesh Experimental features visible.
Experimental features list:
- CONFIG_BLE_MESH_NOT_RELAY_REPLAY_MSG
endif # BLE_MESH

Wyświetl plik

@ -2,7 +2,7 @@
/*
* SPDX-FileCopyrightText: 2017 Intel Corporation
* SPDX-FileContributor: 2018-2021 Espressif Systems (Shanghai) CO LTD
* SPDX-FileContributor: 2018-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@ -1265,7 +1265,7 @@ static void bt_mesh_net_relay(struct net_buf_simple *sbuf,
#endif
if (!buf) {
BT_ERR("Out of relay buffers");
BT_INFO("Out of relay buffers");
return;
}
@ -1509,7 +1509,11 @@ void bt_mesh_net_recv(struct net_buf_simple *data, int8_t rssi,
* was neither a local element nor an LPN we're Friends for.
*/
if (!BLE_MESH_ADDR_IS_UNICAST(rx.ctx.recv_dst) ||
(!rx.local_match && !rx.friend_match)) {
(!rx.local_match && !rx.friend_match
#if CONFIG_BLE_MESH_NOT_RELAY_REPLAY_MSG
&& !rx.replay_msg
#endif
)) {
net_buf_simple_restore(&buf, &state);
bt_mesh_net_relay(&buf, &rx);
}

Wyświetl plik

@ -294,6 +294,9 @@ struct bt_mesh_net_rx {
ctl:1, /* Network Control */
net_if:2, /* Network interface */
local_match:1, /* Matched a local element */
#if CONFIG_BLE_MESH_NOT_RELAY_REPLAY_MSG
replay_msg:1, /* Replayed messages */
#endif
friend_match:1; /* Matched an LPN we're friends for */
uint16_t msg_cache_idx; /* Index of entry in message cache */
};

Wyświetl plik

@ -711,6 +711,9 @@ bool bt_mesh_rpl_check(struct bt_mesh_net_rx *rx, struct bt_mesh_rpl **match)
return false;
} else {
#if CONFIG_BLE_MESH_NOT_RELAY_REPLAY_MSG
rx->replay_msg = 1;
#endif
return true;
}
}