From 39edab10132efae7b2af62d731ffa90ff91af66d Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Wed, 14 Aug 2019 13:03:59 +0300 Subject: [PATCH] Bluetooth: Mesh: Fix checking for active heartbeat publication When sending heartbeat messages triggered by feature changes the code was trying to look up the configured publication subnet, in an apparent attempt to figure out if publication is enabled or not. A more appropriate way is to check for the heartbeat publication destination address, and since we have a helper function this can be done in a single place. Signed-off-by: Johan Hedberg --- subsys/bluetooth/mesh/cfg_srv.c | 12 +++--------- subsys/bluetooth/mesh/transport.c | 5 +++++ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/subsys/bluetooth/mesh/cfg_srv.c b/subsys/bluetooth/mesh/cfg_srv.c index 176bdc1b6bc..ce0b3b06b1b 100644 --- a/subsys/bluetooth/mesh/cfg_srv.c +++ b/subsys/bluetooth/mesh/cfg_srv.c @@ -763,7 +763,6 @@ static void gatt_proxy_set(struct bt_mesh_model *model, struct net_buf_simple *buf) { struct bt_mesh_cfg_srv *cfg = model->user_data; - struct bt_mesh_subnet *sub; BT_DBG("net_idx 0x%04x app_idx 0x%04x src 0x%04x len %u: %s", ctx->net_idx, ctx->app_idx, ctx->addr, buf->len, @@ -820,8 +819,7 @@ static void gatt_proxy_set(struct bt_mesh_model *model, bt_mesh_adv_update(); - sub = bt_mesh_subnet_get(cfg->hb_pub.net_idx); - if ((cfg->hb_pub.feat & BT_MESH_FEAT_PROXY) && sub) { + if (cfg->hb_pub.feat & BT_MESH_FEAT_PROXY) { bt_mesh_heartbeat_send(); } @@ -917,7 +915,6 @@ static void relay_set(struct bt_mesh_model *model, if (!cfg) { BT_WARN("No Configuration Server context available"); } else if (buf->data[0] == 0x00 || buf->data[0] == 0x01) { - struct bt_mesh_subnet *sub; bool change; if (cfg->relay == BT_MESH_RELAY_NOT_SUPPORTED) { @@ -938,8 +935,7 @@ static void relay_set(struct bt_mesh_model *model, BT_MESH_TRANSMIT_COUNT(cfg->relay_retransmit), BT_MESH_TRANSMIT_INT(cfg->relay_retransmit)); - sub = bt_mesh_subnet_get(cfg->hb_pub.net_idx); - if ((cfg->hb_pub.feat & BT_MESH_FEAT_RELAY) && sub && change) { + if ((cfg->hb_pub.feat & BT_MESH_FEAT_RELAY) && change) { bt_mesh_heartbeat_send(); } } else { @@ -2660,7 +2656,6 @@ static void friend_set(struct bt_mesh_model *model, struct net_buf_simple *buf) { struct bt_mesh_cfg_srv *cfg = model->user_data; - struct bt_mesh_subnet *sub; BT_DBG("net_idx 0x%04x app_idx 0x%04x src 0x%04x len %u: %s", ctx->net_idx, ctx->app_idx, ctx->addr, buf->len, @@ -2694,8 +2689,7 @@ static void friend_set(struct bt_mesh_model *model, } } - sub = bt_mesh_subnet_get(cfg->hb_pub.net_idx); - if ((cfg->hb_pub.feat & BT_MESH_FEAT_FRIEND) && sub) { + if (cfg->hb_pub.feat & BT_MESH_FEAT_FRIEND) { bt_mesh_heartbeat_send(); } diff --git a/subsys/bluetooth/mesh/transport.c b/subsys/bluetooth/mesh/transport.c index 54cf10f737a..0fa647ee773 100644 --- a/subsys/bluetooth/mesh/transport.c +++ b/subsys/bluetooth/mesh/transport.c @@ -1528,6 +1528,11 @@ void bt_mesh_heartbeat_send(void) .xmit = bt_mesh_net_transmit_get(), }; + /* Do nothing if heartbeat publication is not enabled */ + if (cfg->hb_pub.dst == BT_MESH_ADDR_UNASSIGNED) { + return; + } + hb.init_ttl = cfg->hb_pub.ttl; if (bt_mesh_relay_get() == BT_MESH_RELAY_ENABLED) {