void nl80211_update_active_links(struct i802_bss *bss, int link_id)
{
- struct i802_link *link = &bss->links[link_id];
- size_t i;
-
wpa_printf(MSG_DEBUG, "nl80211: Update link (ifindex=%d link_id=%u)",
bss->ifindex, link_id);
wpa_driver_nl80211_del_beacon(bss, link_id);
bss->active_links &= ~BIT(link_id);
-
- /* Choose new deflink if we are removing that link */
- if (bss->flink == link) {
- for_each_link(bss->active_links, i) {
- bss->flink = &bss->links[i];
- break;
- }
- }
}
struct nl_msg *msg;
int ret;
u8 link_addr[ETH_ALEN];
+ size_t i;
wpa_printf(MSG_DEBUG, "nl80211: Remove link (ifindex=%d link_id=%u)",
bss->ifindex, link_id);
if (bss->scan_link == link)
bss->scan_link = NULL;
+ /* Choose new deflink if we are removing that link */
+ if (bss->flink == link) {
+ for_each_link(bss->valid_links, i) {
+ bss->flink = &bss->links[i];
+ break;
+ }
+ }
+
/* If this was the last link, reset default link */
if (!bss->valid_links) {
/* TODO: Does keeping freq/bandwidth make sense? */
nl80211_remove_link(bss, link_id);
- bss->ctx = bss->flink->ctx;
-
- if (drv->first_bss == bss && bss->valid_links)
+ if (drv->ctx == bss->ctx) {
+ eloop_cancel_timeout(wpa_driver_nl80211_send_rfkill,
+ drv, drv->ctx);
+ bss->ctx = bss->flink->ctx;
drv->ctx = bss->ctx;
+ } else {
+ bss->ctx = bss->flink->ctx;
+ }
if (!bss->valid_links) {
void *ctx = bss->ctx;