mesh: fix after sync part 2
diff --git a/apps/bttester/syscfg.yml b/apps/bttester/syscfg.yml
index 066eaea..e2439d2 100644
--- a/apps/bttester/syscfg.yml
+++ b/apps/bttester/syscfg.yml
@@ -80,7 +80,7 @@
SHELL_TASK: 0
SHELL_NEWTMGR: 0
LOG_LEVEL: 12
- MSYS_1_BLOCK_COUNT: 48
+ MSYS_1_BLOCK_COUNT: 80
BLE_MONITOR_RTT: 1
CONSOLE_RTT: 0
diff --git a/nimble/host/mesh/include/mesh/glue.h b/nimble/host/mesh/include/mesh/glue.h
index 84f2fbb..abe3dd5 100644
--- a/nimble/host/mesh/include/mesh/glue.h
+++ b/nimble/host/mesh/include/mesh/glue.h
@@ -420,8 +420,8 @@
#define CONFIG_BT_MAX_CONN MYNEWT_VAL(BLE_MAX_CONNECTIONS)
#define CONFIG_BT_MESH_SEQ_STORE_RATE MYNEWT_VAL(BLE_MESH_SEQ_STORE_RATE)
#define CONFIG_BT_MESH_RPL_STORE_TIMEOUT MYNEWT_VAL(BLE_MESH_RPL_STORE_TIMEOUT)
-#define CONFIG_BT_MESH_APP_KEY_COUNT MYNEWT_VAL(BLE_MESH_CDB_APP_KEY_COUNT)
-#define CONFIG_BT_MESH_SUBNET_COUNT MYNEWT_VAL(BLE_MESH_CDB_SUBNET_COUNT)
+#define CONFIG_BT_MESH_APP_KEY_COUNT MYNEWT_VAL(BLE_MESH_APP_KEY_COUNT)
+#define CONFIG_BT_MESH_SUBNET_COUNT MYNEWT_VAL(BLE_MESH_SUBNET_COUNT)
#define CONFIG_BT_MESH_STORE_TIMEOUT MYNEWT_VAL(BLE_MESH_STORE_TIMEOUT)
#define CONFIG_BT_MESH_IVU_DIVIDER MYNEWT_VAL(BLE_MESH_IVU_DIVIDER)
#define CONFIG_BT_DEVICE_NAME MYNEWT_VAL(BLE_MESH_DEVICE_NAME)
diff --git a/nimble/host/mesh/src/app_keys.c b/nimble/host/mesh/src/app_keys.c
index f986174..a6c32bf 100644
--- a/nimble/host/mesh/src/app_keys.c
+++ b/nimble/host/mesh/src/app_keys.c
@@ -36,7 +36,10 @@
int i;
for (i = 0; i < (sizeof(bt_mesh_app_key_cb_list)/sizeof(void *)); i++) {
- bt_mesh_app_key_cb_list[i] (app->app_idx, app->net_idx, evt);
+ if (bt_mesh_app_key_cb_list[i]) {
+ BT_DBG("app_key_evt %d", i);
+ bt_mesh_app_key_cb_list[i] (app->app_idx, app->net_idx, evt);
+ }
}
}
@@ -101,9 +104,42 @@
app_key_evt(app, BT_MESH_KEY_REVOKED);
}
+
+static void subnet_evt(struct bt_mesh_subnet *sub, enum bt_mesh_key_evt evt)
+{
+ if (evt == BT_MESH_KEY_UPDATED || evt == BT_MESH_KEY_ADDED) {
+ return;
+ }
+
+ for (int i = 0; i < ARRAY_SIZE(apps); i++) {
+ struct bt_mesh_app_key *app = &apps[i];
+
+ if (app->app_idx == BT_MESH_KEY_UNUSED) {
+ continue;
+ }
+
+ if (app->net_idx != sub->net_idx) {
+ continue;
+ }
+
+ if (evt == BT_MESH_KEY_DELETED) {
+ app_key_del(app);
+ } else if (evt == BT_MESH_KEY_REVOKED) {
+ app_key_revoke(app);
+ } else if (evt == BT_MESH_KEY_SWAPPED && app->updated) {
+ app_key_evt(app, BT_MESH_KEY_SWAPPED);
+ }
+ }
+}
+
+
uint8_t bt_mesh_app_key_add(uint16_t app_idx, uint16_t net_idx,
const uint8_t key[16])
{
+ if (!bt_mesh_subnet_cb_list[0]) {
+ bt_mesh_subnet_cb_list[0] = subnet_evt;
+ }
+
struct bt_mesh_app_key *app;
BT_DBG("net_idx 0x%04x app_idx %04x val %s", net_idx, app_idx,
@@ -249,37 +285,9 @@
return STATUS_SUCCESS;
}
-static void subnet_evt(struct bt_mesh_subnet *sub, enum bt_mesh_key_evt evt)
-{
- if (evt == BT_MESH_KEY_UPDATED || evt == BT_MESH_KEY_ADDED) {
- return;
- }
-
- for (int i = 0; i < ARRAY_SIZE(apps); i++) {
- struct bt_mesh_app_key *app = &apps[i];
-
- if (app->app_idx == BT_MESH_KEY_UNUSED) {
- continue;
- }
-
- if (app->net_idx != sub->net_idx) {
- continue;
- }
-
- if (evt == BT_MESH_KEY_DELETED) {
- app_key_del(app);
- } else if (evt == BT_MESH_KEY_REVOKED) {
- app_key_revoke(app);
- } else if (evt == BT_MESH_KEY_SWAPPED && app->updated) {
- app_key_evt(app, BT_MESH_KEY_SWAPPED);
- }
- }
-}
-
int bt_mesh_app_key_set(uint16_t app_idx, uint16_t net_idx,
const uint8_t old_key[16], const uint8_t new_key[16])
{
- bt_mesh_subnet_cb_list[0] = subnet_evt;
struct bt_mesh_app_key *app;
app = app_key_alloc(app_idx);
diff --git a/nimble/host/mesh/src/beacon.c b/nimble/host/mesh/src/beacon.c
index bea1c89..a79e520 100644
--- a/nimble/host/mesh/src/beacon.c
+++ b/nimble/host/mesh/src/beacon.c
@@ -419,14 +419,16 @@
static void subnet_evt(struct bt_mesh_subnet *sub, enum bt_mesh_key_evt evt)
{
- if (evt == BT_MESH_KEY_ADDED || evt == BT_MESH_KEY_SWAPPED) {
+ if (evt != BT_MESH_KEY_DELETED) {
bt_mesh_beacon_update(sub);
}
}
void bt_mesh_beacon_init(void)
{
- bt_mesh_subnet_cb_list[1] = subnet_evt;
+ if (!bt_mesh_subnet_cb_list[1]) {
+ bt_mesh_subnet_cb_list[1] = subnet_evt;
+ }
k_delayed_work_init(&beacon_timer, beacon_send);
}
diff --git a/nimble/host/mesh/src/cfg_cli.c b/nimble/host/mesh/src/cfg_cli.c
index b6db5ea..5e8f53c 100644
--- a/nimble/host/mesh/src/cfg_cli.c
+++ b/nimble/host/mesh/src/cfg_cli.c
@@ -1111,7 +1111,7 @@
err = cli_prepare(¶m, OP_NET_KEY_STATUS);
if (err) {
- return err;
+ goto done;
}
bt_mesh_model_msg_init(msg, OP_NET_KEY_DEL);
@@ -1121,16 +1121,18 @@
if (err) {
BT_ERR("model_send() failed (err %d)", err);
cli_reset();
- return err;
+ goto done;
}
if (!status) {
cli_reset();
- return 0;
+ goto done;
}
+ err = cli_wait();
+done:
os_mbuf_free_chain(msg);
- return cli_wait();
+ return err;
}
int bt_mesh_cfg_app_key_add(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
@@ -1196,7 +1198,7 @@
err = cli_prepare(status, OP_NODE_RESET_STATUS);
if (err) {
- return err;
+ goto done;
}
bt_mesh_model_msg_init(msg, OP_NODE_RESET);
@@ -1205,15 +1207,22 @@
if (err) {
BT_ERR("model_send() failed (err %d)", err);
cli_reset();
- return err;
+ goto done;
}
if (!status) {
cli_reset();
- return 0;
+ goto done;
}
- return cli_wait();
+ err = cli_wait();
+done:
+ os_mbuf_free_chain(msg);
+ if (err) {
+ return err;
+ } else {
+ return 0;
+ }
}
int bt_mesh_cfg_app_key_get(uint16_t net_idx, uint16_t addr, uint16_t key_net_idx,
@@ -1236,6 +1245,7 @@
err = cli_prepare(¶m, OP_APP_KEY_LIST);
if (err) {
+ os_mbuf_free_chain(msg);
return err;
}
@@ -1245,6 +1255,7 @@
err = bt_mesh_model_send(cli->model, &ctx, msg, NULL, NULL);
if (err) {
BT_ERR("model_send() failed (err %d)", err);
+ os_mbuf_free_chain(msg);
cli_reset();
return err;
}
@@ -1272,6 +1283,7 @@
err = cli_prepare(¶m, OP_APP_KEY_STATUS);
if (err) {
+ os_mbuf_free_chain(msg);
return err;
}
@@ -1281,12 +1293,14 @@
err = bt_mesh_model_send(cli->model, &ctx, msg, NULL, NULL);
if (err) {
BT_ERR("model_send() failed (err %d)", err);
+ os_mbuf_free_chain(msg);
cli_reset();
return err;
}
if (!status) {
cli_reset();
+ os_mbuf_free_chain(msg);
return 0;
}
@@ -1388,7 +1402,7 @@
err = cli_prepare(¶m, OP_MOD_APP_STATUS);
if (err) {
- return err;
+ goto done;
}
bt_mesh_model_msg_init(msg, OP_MOD_APP_UNBIND);
@@ -1405,16 +1419,22 @@
if (err) {
BT_ERR("model_send() failed (err %d)", err);
cli_reset();
- return err;
+ goto done;
}
if (!status) {
cli_reset();
- return 0;
+ err = 0;
+ goto done;
}
+done:
os_mbuf_free_chain(msg);
- return cli_wait();
+ if (err) {
+ return err;
+ } else {
+ return cli_wait();
+ }
}
int bt_mesh_cfg_mod_app_unbind(uint16_t net_idx, uint16_t addr,
@@ -1461,7 +1481,7 @@
err = cli_prepare(¶m, expect_op);
if (err) {
- return err;
+ goto done;
}
BT_DBG("net_idx 0x%04x addr 0x%04x elem_addr 0x%04x",
@@ -1481,11 +1501,13 @@
if (err) {
BT_ERR("model_send() failed (err %d)", err);
cli_reset();
- return err;
+ goto done;
}
+ err = cli_wait();
+done:
os_mbuf_free_chain(msg);
- return cli_wait();
+ return err;
}
int bt_mesh_cfg_mod_app_get(uint16_t net_idx, uint16_t addr, uint16_t elem_addr,
diff --git a/nimble/host/mesh/src/cfg_srv.c b/nimble/host/mesh/src/cfg_srv.c
index 0c2f5d2..f82abd6 100644
--- a/nimble/host/mesh/src/cfg_srv.c
+++ b/nimble/host/mesh/src/cfg_srv.c
@@ -237,7 +237,7 @@
period_ms = bt_mesh_model_pub_period_get(model);
BT_DBG("period %u ms", (unsigned) period_ms);
- if (period_ms) {
+ if (period_ms > 0) {
k_delayed_work_submit(&model->pub->timer, period_ms);
} else {
k_delayed_work_cancel(&model->pub->timer);
@@ -1731,7 +1731,7 @@
uint8_t status,
uint16_t net_idx, uint8_t node_id)
{
- struct os_mbuf *msg = NET_BUF_SIMPLE(4);
+ struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_NODE_IDENTITY_STATUS, 4);
bt_mesh_model_msg_init(msg, OP_NODE_IDENTITY_STATUS);
net_buf_simple_add_u8(msg, status);
diff --git a/nimble/host/mesh/src/friend.c b/nimble/host/mesh/src/friend.c
index 4cef2c5..41a1702 100644
--- a/nimble/host/mesh/src/friend.c
+++ b/nimble/host/mesh/src/friend.c
@@ -1267,9 +1267,9 @@
BT_ERR("Failed updating friend cred for 0x%04x",
frnd->lpn);
friend_clear(frnd);
- break;
}
-
+ break;
+ case BT_MESH_KEY_SWAPPED:
enqueue_update(frnd, 0);
break;
case BT_MESH_KEY_REVOKED:
@@ -1287,7 +1287,9 @@
int bt_mesh_friend_init(void)
{
- bt_mesh_subnet_cb_list[3] = subnet_evt;
+ if (!bt_mesh_subnet_cb_list[3]) {
+ bt_mesh_subnet_cb_list[3] = subnet_evt;
+ }
int rc;
int i;
diff --git a/nimble/host/mesh/src/lpn.c b/nimble/host/mesh/src/lpn.c
index 947d20f..7919e95 100644
--- a/nimble/host/mesh/src/lpn.c
+++ b/nimble/host/mesh/src/lpn.c
@@ -1051,7 +1051,9 @@
{
struct bt_mesh_lpn *lpn = &bt_mesh.lpn;
- bt_mesh_subnet_cb_list[2] = subnet_evt;
+ if (!bt_mesh_subnet_cb_list[2]) {
+ bt_mesh_subnet_cb_list[2] = subnet_evt;
+ }
BT_DBG("");
diff --git a/nimble/host/mesh/src/net.c b/nimble/host/mesh/src/net.c
index 5cba092..e802f53 100644
--- a/nimble/host/mesh/src/net.c
+++ b/nimble/host/mesh/src/net.c
@@ -68,12 +68,11 @@
.local_queue = STAILQ_HEAD_INITIALIZER(bt_mesh.local_queue),
};
-static struct os_mempool loopback_buf_mempool;
static struct os_mbuf_pool loopback_os_mbuf_pool;
-
-static os_membuf_t loopback_buf_mem[OS_MEMPOOL_SIZE(
- MYNEWT_VAL(BLE_MESH_LOOPBACK_BUFS),
- LOOPBACK_MAX_PDU_LEN + BT_MESH_MBUF_HEADER_SIZE)];
+static struct os_mempool loopback_buf_mempool;
+os_membuf_t loopback_mbuf_membuf[
+ OS_MEMPOOL_SIZE(LOOPBACK_MAX_PDU_LEN + BT_MESH_MBUF_HEADER_SIZE,
+ MYNEWT_VAL(BLE_MESH_LOOPBACK_BUFS))];
static uint32_t dup_cache[MYNEWT_VAL(BLE_MESH_MSG_CACHE_SIZE)];
static int dup_cache_next;
@@ -429,7 +428,7 @@
{
struct os_mbuf *buf;
- buf = os_mbuf_get(&loopback_os_mbuf_pool, 0);
+ buf = os_mbuf_get_pkthdr(&loopback_os_mbuf_pool, 0);
if (!buf) {
BT_WARN("Unable to allocate loopback");
return -ENOMEM;
@@ -851,6 +850,11 @@
rc = os_mempool_init(&loopback_buf_mempool, MYNEWT_VAL(BLE_MESH_LOOPBACK_BUFS),
LOOPBACK_MAX_PDU_LEN + BT_MESH_MBUF_HEADER_SIZE,
- loopback_buf_mem, "loopback_buf_pool");
+ &loopback_mbuf_membuf[0], "loopback_buf_pool");
+ assert(rc == 0);
+
+ rc = os_mbuf_pool_init(&loopback_os_mbuf_pool, &loopback_buf_mempool,
+ LOOPBACK_MAX_PDU_LEN + BT_MESH_MBUF_HEADER_SIZE,
+ MYNEWT_VAL(BLE_MESH_LOOPBACK_BUFS));
assert(rc == 0);
}
diff --git a/nimble/host/mesh/src/proxy.c b/nimble/host/mesh/src/proxy.c
index 7110e7b..1a4dda3 100644
--- a/nimble/host/mesh/src/proxy.c
+++ b/nimble/host/mesh/src/proxy.c
@@ -1527,7 +1527,9 @@
int i;
#if (MYNEWT_VAL(BLE_MESH_GATT_PROXY))
- bt_mesh_subnet_cb_list[4] = subnet_evt;
+ if (!bt_mesh_subnet_cb_list[4]) {
+ bt_mesh_subnet_cb_list[4] = subnet_evt;
+ }
#endif
for (i = 0; i < MYNEWT_VAL(BLE_MAX_CONNECTIONS); ++i) {