Skip to content

Commit b76e60f

Browse files
alxelaxPavelVPV
authored andcommitted
[nrf fromtree] Bluetooth: Mesh: to not set valid state if mesh is not valid yet
Commit sets valid state when mesh is actualy provisioned. Signed-off-by: Aleksandr Khromykh <[email protected]> (cherry picked from commit 928208c) Signed-off-by: Pavel Vasilyev <[email protected]>
1 parent bab4b2a commit b76e60f

File tree

1 file changed

+21
-20
lines changed

1 file changed

+21
-20
lines changed

subsys/bluetooth/mesh/main.c

+21-20
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ int bt_mesh_provision(const uint8_t net_key[16], uint16_t net_idx,
6262
LOG_INF("Primary Element: 0x%04x", addr);
6363
LOG_DBG("net_idx 0x%04x flags 0x%02x iv_index 0x%04x", net_idx, flags, iv_index);
6464

65-
if (atomic_test_and_set_bit(bt_mesh.flags, BT_MESH_VALID)) {
65+
if (atomic_test_bit(bt_mesh.flags, BT_MESH_VALID)) {
6666
return -EALREADY;
6767
}
6868

@@ -74,14 +74,12 @@ int bt_mesh_provision(const uint8_t net_key[16], uint16_t net_idx,
7474
comp = bt_mesh_comp_get();
7575
if (comp == NULL) {
7676
LOG_ERR("Failed to get node composition");
77-
atomic_clear_bit(bt_mesh.flags, BT_MESH_VALID);
7877
return -EINVAL;
7978
}
8079

8180
subnet = bt_mesh_cdb_subnet_get(net_idx);
8281
if (!subnet) {
8382
LOG_ERR("No subnet with idx %d", net_idx);
84-
atomic_clear_bit(bt_mesh.flags, BT_MESH_VALID);
8583
return -ENOENT;
8684
}
8785

@@ -90,7 +88,6 @@ int bt_mesh_provision(const uint8_t net_key[16], uint16_t net_idx,
9088
comp->elem_count, net_idx);
9189
if (node == NULL) {
9290
LOG_ERR("Failed to allocate database node");
93-
atomic_clear_bit(bt_mesh.flags, BT_MESH_VALID);
9491
return -ENOMEM;
9592
}
9693

@@ -108,42 +105,43 @@ int bt_mesh_provision(const uint8_t net_key[16], uint16_t net_idx,
108105
net_key);
109106
if (err) {
110107
LOG_ERR("Failed to import cdb network key");
111-
goto end;
108+
goto error_exit;
112109
}
113-
bt_mesh_cdb_subnet_store(subnet);
114110

115111
addr = node->addr;
116112
bt_mesh_cdb_iv_update(iv_index, BT_MESH_IV_UPDATE(flags));
117113

118114
err = bt_mesh_cdb_node_key_import(node, dev_key);
119115
if (err) {
120116
LOG_ERR("Failed to import cdb device key");
121-
goto end;
122-
}
123-
124-
if (IS_ENABLED(CONFIG_BT_SETTINGS)) {
125-
bt_mesh_cdb_node_store(node);
117+
goto error_exit;
126118
}
127119
}
128120

129121
err = bt_mesh_key_import(BT_MESH_KEY_TYPE_DEV, dev_key, &mesh_dev_key);
130122
if (err) {
131123
LOG_ERR("Failed to import device key");
132-
goto end;
124+
goto error_exit;
133125
}
134126
is_dev_key_valid = true;
135127

136128
err = bt_mesh_key_import(BT_MESH_KEY_TYPE_NET, net_key, &mesh_net_key);
137129
if (err) {
138130
LOG_ERR("Failed to import network key");
139-
goto end;
131+
goto error_exit;
140132
}
141133
is_net_key_valid = true;
142134

143135
err = bt_mesh_net_create(net_idx, flags, &mesh_net_key, iv_index);
144136
if (err) {
145-
atomic_clear_bit(bt_mesh.flags, BT_MESH_VALID);
146-
goto end;
137+
LOG_ERR("Failed to create network");
138+
goto error_exit;
139+
}
140+
141+
if (IS_ENABLED(CONFIG_BT_MESH_CDB) &&
142+
atomic_test_bit(bt_mesh_cdb.flags, BT_MESH_CDB_VALID)) {
143+
bt_mesh_cdb_subnet_store(subnet);
144+
bt_mesh_cdb_node_store(node);
147145
}
148146

149147
bt_mesh_net_settings_commit();
@@ -163,18 +161,21 @@ int bt_mesh_provision(const uint8_t net_key[16], uint16_t net_idx,
163161
bt_mesh_net_store();
164162
}
165163

164+
atomic_set_bit(bt_mesh.flags, BT_MESH_VALID);
166165
bt_mesh_start();
167166

168-
end:
169-
if (err && node != NULL && IS_ENABLED(CONFIG_BT_MESH_CDB)) {
170-
bt_mesh_cdb_node_del(node, true);
167+
return 0;
168+
169+
error_exit:
170+
if (node != NULL && IS_ENABLED(CONFIG_BT_MESH_CDB)) {
171+
bt_mesh_cdb_node_del(node, false);
171172
}
172173

173-
if (err && is_dev_key_valid) {
174+
if (is_dev_key_valid) {
174175
bt_mesh_key_destroy(&mesh_dev_key);
175176
}
176177

177-
if (err && is_net_key_valid) {
178+
if (is_net_key_valid) {
178179
bt_mesh_key_destroy(&mesh_net_key);
179180
}
180181

0 commit comments

Comments
 (0)