diff --git a/src/agent.c b/src/agent.c index fdd4a535e0ef6155205bd9bd382991280aa1f382..fdd34ec196d8ab8954798b69db0d2d8957b53bd6 100644 --- a/src/agent.c +++ b/src/agent.c @@ -4690,6 +4690,29 @@ static void wifi_bsta_event_scan_failed(struct agent *a, struct netif_bk *bk) return; } +void agent_handle_bh_lost(struct agent *a, struct netif_bk *bk) +{ + char ul_ifname[16] = {0}; + + if (!bk->cfg->enabled) + return; + + dynbh_handle_bh_lost(a, bk); + + if (agent_get_backhaul_ifname(a, ul_ifname)) { + if (!strncmp(ul_ifname, bk->ifname, IFNAMSIZ)) { + char ev[512] = {0}; + + sprintf(ev, + "{\"action\":\"unset_uplink\"" + ",\"type\":\"wifi\"}"); + + agent_notify_event(a, "map.agent", ev); + agent_exec_platform_scripts("unset_uplink wifi"); + } + } +} + static void wifi_bsta_event_handler(void *agent, struct blob_attr *msg) { char ifname[16] = {0}, event[16] = {0}; @@ -4835,24 +4858,7 @@ static void wifi_bsta_event_handler(void *agent, struct blob_attr *msg) bk->connected = false; /* Handle link loss if this was supposed to be an active bsta */ - if (bk->cfg->enabled) { - char ul_ifname[16] = {0}; - - dynbh_handle_bh_lost(a, bk); - - if (agent_get_backhaul_ifname(a, ul_ifname)) { - if (!strncmp(ul_ifname, bk->ifname, IFNAMSIZ)) { - char ev[512] = {0}; - - sprintf(ev, - "{\"action\":\"unset_uplink\"" - ",\"type\":\"wifi\"}"); - - agent_notify_event(a, "map.agent", ev); - agent_exec_platform_scripts("unset_uplink wifi"); - } - } - } + agent_handle_bh_lost(a, bk); wifi_mod_bridge(a, bk, false); a->connected = agent_is_bsta_connected(a); @@ -5921,16 +5927,7 @@ static void bk_toggle(struct agent *a, struct netif_bk *bk, /* check if part of the bridge */ if (if_isbridge_interface(bk->ifname)) { wifi_mod_bridge(a, bk, false); - - if (bk->cfg->enabled) { - char ul_ifname[16] = {0}; - - dynbh_handle_bh_lost(a, bk); - - if (agent_get_backhaul_ifname(a, ul_ifname) - && !strncmp(ul_ifname, bk->ifname, IFNAMSIZ)) - agent_exec_platform_scripts("unset_uplink wifi"); - } + agent_handle_bh_lost(a, bk); } } } diff --git a/src/agent.h b/src/agent.h index 30a519c38e699cfe8dc4f5b69ff062229a523e1f..e225e7c0105759789f2ba40c02461773b5c6d3e1 100644 --- a/src/agent.h +++ b/src/agent.h @@ -1148,6 +1148,7 @@ void agent_set_post_scan_action_pref(struct agent *agent, struct wifi_radio_elem bool is_channel_supported_by_radio(struct wifi_radio_element *r, uint8_t opclass, uint8_t channel); +void agent_handle_bh_lost(struct agent *a, struct netif_bk *bk); int agent_send_ch_scan_response(struct agent *a, struct wifi_radio_element *ndev, struct wifi_scan_request_radio *req); bool agent_ch_scan_succesful(struct agent *a); diff --git a/src/backhaul.c b/src/backhaul.c index 50beae76e342791eb07d16c381e1927047b15905..ba28f8c81670751754b924bd0083ddbf31cca098 100644 --- a/src/backhaul.c +++ b/src/backhaul.c @@ -619,18 +619,8 @@ void agent_manage_bsta(struct agent *a, struct netif_bk *bk) } else { if (if_isbridge_interface(ifname)) { wifi_mod_bridge(a, bk, false); - /* Handle bk link loss if this is an active bsta */ - if (bk->cfg->enabled) { - char ul_ifname[16] = {0}; - - dynbh_handle_bh_lost(a, bk); - - if (agent_get_backhaul_ifname(a, ul_ifname)) { - if (!strncmp(ul_ifname, bk->ifname, IFNAMSIZ)) - agent_exec_platform_scripts("unset_uplink wifi"); - } - } + agent_handle_bh_lost(a, bk); } } }