diff --git a/components/bt/Kconfig b/components/bt/Kconfig index f052ed64f..a0f63c84e 100644 --- a/components/bt/Kconfig +++ b/components/bt/Kconfig @@ -1992,6 +1992,29 @@ if BLE_MESH introduce message replay attacks and system security will be in a vulnerable state. + config BLE_MESH_SETTINGS_BACKWARD_COMPATIBILITY + bool "A specific option for settings backward compatibility" + depends on BLE_MESH_NODE + default n + help + This option is created to solve the issue of failure in recovering + node information after mesh stack updates. In the old version mesh + stack, there is no key of "mesh/role" in nvs. In the new version + mesh stack, key of "mesh/role" is added in nvs, recovering node + information needs to check "mesh/role" key in nvs and implements + selective recovery of mesh node information. Therefore, there may + be failure in recovering node information during node restarting + after OTA. + + The new version mesh stack adds the option of "mesh/role" because + we have added the support of storing Provisioner information, while + the old version only supports storing node information. + + If users are updating their nodes from old version to new version, + we recommend enabling this option, so that system could set the flag + in advance before recovering node information and make sure the node + information recovering could work as expected. + endif # if BLE_MESH_SETTINGS config BLE_MESH_SUBNET_COUNT diff --git a/components/bt/esp_ble_mesh/mesh_core/settings.c b/components/bt/esp_ble_mesh/mesh_core/settings.c index 0af74a4b0..ea15e02a9 100644 --- a/components/bt/esp_ble_mesh/mesh_core/settings.c +++ b/components/bt/esp_ble_mesh/mesh_core/settings.c @@ -183,7 +183,14 @@ static int role_set(const char *name) } if (exist == false) { +#if CONFIG_BLE_MESH_SETTINGS_BACKWARD_COMPATIBILITY + if (IS_ENABLED(CONFIG_BLE_MESH_NODE) && + !IS_ENABLED(CONFIG_BLE_MESH_PROVISIONER)) { + bt_mesh_atomic_set_bit(bt_mesh.flags, BLE_MESH_NODE); + } +#else return 0; +#endif } return 0;