kopia lustrzana https://github.com/espressif/esp-idf
Merge branch 'feature/Add_IVI_recovery_option' into 'master'
ble_mesh: stack: Add IV index recovery option when device missed the whole IV update See merge request espressif/esp-idf!20500pull/9839/head
commit
7ddbaae318
|
@ -585,6 +585,21 @@ if BLE_MESH
|
|||
stored to flash. E.g. the default value of 4 means that the
|
||||
state is saved every 24 hours (96 / 4).
|
||||
|
||||
config BLE_MESH_IVU_RECOVERY_IVI
|
||||
bool "Recovery the IV index when the latest whole IV update procedure is missed"
|
||||
default n
|
||||
help
|
||||
According to Section 3.10.5 of Mesh Specification v1.0.1.
|
||||
If a node in Normal Operation receives a Secure Network beacon with an IV index
|
||||
equal to the last known IV index+1 and the IV Update Flag set to 0, the node may
|
||||
update its IV without going to the IV Update in Progress state, or it may initiate
|
||||
an IV Index Recovery procedure (Section 3.10.6), or it may ignore the Secure
|
||||
Network beacon. The node makes the choice depending on the time since last IV
|
||||
update and the likelihood that the node has missed the Secure Network beacons
|
||||
with the IV update Flag.
|
||||
When the above situation is encountered, this option can be used to decide whether
|
||||
to perform the IV index recovery procedure.
|
||||
|
||||
config BLE_MESH_TX_SEG_MSG_COUNT
|
||||
int "Maximum number of simultaneous outgoing segmented messages"
|
||||
default 1
|
||||
|
|
|
@ -673,7 +673,11 @@ bool bt_mesh_net_iv_update(uint32_t iv_index, bool iv_update)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (iv_index > bt_mesh.iv_index + 1) {
|
||||
if ((iv_index > bt_mesh.iv_index + 1)
|
||||
#if CONFIG_BLE_MESH_IVU_RECOVERY_IVI
|
||||
|| (iv_index == bt_mesh.iv_index + 1 && !iv_update)
|
||||
#endif
|
||||
) {
|
||||
BT_WARN("Performing IV Index Recovery");
|
||||
(void)memset(bt_mesh.rpl, 0, sizeof(bt_mesh.rpl));
|
||||
bt_mesh.iv_index = iv_index;
|
||||
|
@ -681,10 +685,12 @@ bool bt_mesh_net_iv_update(uint32_t iv_index, bool iv_update)
|
|||
goto do_update;
|
||||
}
|
||||
|
||||
#if !CONFIG_BLE_MESH_IVU_RECOVERY_IVI
|
||||
if (iv_index == bt_mesh.iv_index + 1 && !iv_update) {
|
||||
BT_WARN("Ignoring new index in normal mode");
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!iv_update) {
|
||||
/* Nothing to do */
|
||||
|
|
Ładowanie…
Reference in New Issue