Closed JesseRiemens closed 1 year ago
Note: Upstream, this is done in the following way:
if ((iv_index > bt_mesh.iv_index + 1) ||
(iv_index == bt_mesh.iv_index + 1 && !iv_update))
{
if (ivi_was_recovered)
{
BT_ERR("IV Index Recovery before minimum delay");
return false;
}
/* The Mesh profile specification allows to initiate an
* IV Index Recovery procedure if previous IV update has
* been missed. This allows the node to remain
* functional.
*/
BT_WARN("Performing IV Index Recovery");
ivi_was_recovered = true;
bt_mesh_rpl_clear();
bt_mesh.iv_index = iv_index;
bt_mesh.seq = 0;
goto do_update;
}
Hi @JesseRiemens ,
ESP-IDF nimble codebase is currently synced to nimble-1.4.0-idf. We are internally working on syncing to latest codebase ( nimble-1.5.0 ) that upstream mynewt nimble currently points to. Once migration is done, the newer code would then be part of IDF.
Thanks, Rahul
Change is now available on master branch.
net.c Line 232, states that when the IV of the network is one further than its current IV, it will ignore the messages and will not update to the newer IV. Only when the IV of the network is more than one higher, it will update to the newer IV.
That means that when a device has missed the IV update procedures, it will not be able to join the network again until the IV is updated once more.
This is not strictly compliant with what the mesh profile spec (by the Bluetooth SIG) states about this:
Source: Mesh Profile - Bluetooth® Specification - Revision: v1.0.1 - page 132
Currently no choice is made, but it is alway ignored, according to the third option given. What should be done about this to make this compliant with the bluetooth spec?
A neater way to solve this is by always going into recovery mode, so a node doesn't 'fall off' the newtork.