mirror of
https://github.com/espressif/esp-nimble.git
synced 2026-11-05 20:12:47 +00:00
Merge pull request #641 from michal-narajowski/mesh-iv-update-fix
mesh: Fix and clean up iv update procedure X-Original-Commit: e4e9097ee3899be58c06cbfbcf0cf2ece61fc493
This commit is contained in:
+38
-23
@@ -556,35 +556,50 @@ void bt_mesh_iv_update(u32_t iv_index, bool iv_update)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (iv_index < bt_mesh.iv_index || iv_index > bt_mesh.iv_index + 42) {
|
||||
BT_ERR("IV Index completely out of sync: 0x%08x != 0x%08x",
|
||||
iv_index, bt_mesh.iv_index);
|
||||
return;
|
||||
}
|
||||
|
||||
if (iv_index > bt_mesh.iv_index + 1) {
|
||||
BT_WARN("Performing IV Index Recovery");
|
||||
memset(bt_mesh.rpl, 0, sizeof(bt_mesh.rpl));
|
||||
bt_mesh.iv_index = iv_index;
|
||||
bt_mesh.seq = 0;
|
||||
goto do_update;
|
||||
}
|
||||
|
||||
if (iv_update == bt_mesh.iv_update) {
|
||||
if (iv_index != bt_mesh.iv_index) {
|
||||
BT_WARN("No update, but IV Index 0x%08x != 0x%08x",
|
||||
iv_index, bt_mesh.iv_index);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (bt_mesh.iv_update) {
|
||||
/* We're currently in IV Update mode */
|
||||
|
||||
if (iv_index != bt_mesh.iv_index) {
|
||||
BT_WARN("IV Index mismatch: 0x%08x != 0x%08x",
|
||||
iv_index, bt_mesh.iv_index);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
|
||||
if (iv_update) {
|
||||
/* Nothing to do */
|
||||
BT_DBG("Already in IV Update in Progress state");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
/* We're currently in Normal mode */
|
||||
|
||||
if (iv_index < bt_mesh.iv_index ||
|
||||
iv_index > bt_mesh.iv_index + 42) {
|
||||
BT_ERR("IV Index out of sync: " "0x%08x != 0x%08x",
|
||||
iv_index, bt_mesh.iv_index);
|
||||
return;
|
||||
}
|
||||
|
||||
if (iv_index > bt_mesh.iv_index + 1) {
|
||||
BT_WARN("Performing IV Index Recovery");
|
||||
memset(bt_mesh.rpl, 0, sizeof(bt_mesh.rpl));
|
||||
bt_mesh.iv_index = iv_index;
|
||||
bt_mesh.seq = 0;
|
||||
goto do_update;
|
||||
}
|
||||
|
||||
if (iv_index == bt_mesh.iv_index + 1 && !iv_update) {
|
||||
BT_WARN("Ignoring new index in normal mode",
|
||||
iv_index, bt_mesh.iv_index);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!iv_update) {
|
||||
/* Nothing to do */
|
||||
BT_DBG("Already in Normal mode");
|
||||
return;
|
||||
}
|
||||
|
||||
if (iv_index != bt_mesh.iv_index + 1) {
|
||||
BT_WARN("Wrong new IV Index: 0x%08x != 0x%08x + 1",
|
||||
iv_index, bt_mesh.iv_index);
|
||||
|
||||
Reference in New Issue
Block a user