OpenWrt – Rev 3

Subversion Repositories:
Rev:
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -2566,10 +2566,15 @@ static int wpa_driver_nl80211_del_beacon
        struct nl_msg *msg;
        struct wpa_driver_nl80211_data *drv = bss->drv;
 
+       if (!bss->beacon_set)
+               return 0;
+
+       bss->beacon_set = 0;
+
        wpa_printf(MSG_DEBUG, "nl80211: Remove beacon (ifindex=%d)",
-                  drv->ifindex);
+                  bss->ifindex);
        nl80211_put_wiphy_data_ap(bss);
-       msg = nl80211_drv_msg(drv, 0, NL80211_CMD_DEL_BEACON);
+       msg = nl80211_bss_msg(bss, 0, NL80211_CMD_DEL_BEACON);
        return send_and_recv_msgs(drv, msg, NULL, NULL);
 }
 
@@ -4835,7 +4840,7 @@ static void nl80211_teardown_ap(struct i
                nl80211_mgmt_unsubscribe(bss, "AP teardown");
 
        nl80211_put_wiphy_data_ap(bss);
-       bss->beacon_set = 0;
+       wpa_driver_nl80211_del_beacon(bss);
 }
 
 
@@ -7040,8 +7045,6 @@ static int wpa_driver_nl80211_if_remove(
        } else {
                wpa_printf(MSG_DEBUG, "nl80211: First BSS - reassign context");
                nl80211_teardown_ap(bss);
-               if (!bss->added_if && !drv->first_bss->next)
-                       wpa_driver_nl80211_del_beacon(bss);
                nl80211_destroy_bss(bss);
                if (!bss->added_if)
                        i802_set_iface_flags(bss, 0);
@@ -7415,7 +7418,6 @@ static int wpa_driver_nl80211_deinit_ap(
        if (!is_ap_interface(drv->nlmode))
                return -1;
        wpa_driver_nl80211_del_beacon(bss);
-       bss->beacon_set = 0;
 
        /*
         * If the P2P GO interface was dynamically added, then it is
@@ -7435,7 +7437,6 @@ static int wpa_driver_nl80211_stop_ap(vo
        if (!is_ap_interface(drv->nlmode))
                return -1;
        wpa_driver_nl80211_del_beacon(bss);
-       bss->beacon_set = 0;
        return 0;
 }