Merge branch 'bugfix/ble_mesh_node_old_version_to_new' into 'master'

ble_mesh: Fix mesh node device role restore

Closes BLEMESH-188

See merge request espressif/esp-idf!8314
This commit is contained in:
Island 2020-05-12 20:36:55 +08:00
commit c946ca8b45
2 changed files with 30 additions and 0 deletions

View File

@ -285,6 +285,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

View File

@ -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;