2bcf49a7c62e221b6c913b0008b324ea34346de0
[openwrt/openwrt.git] / package / network / services / hostapd / patches / 350-nl80211_del_beacon_bss.patch
1 --- a/src/drivers/driver_nl80211.c
2 +++ b/src/drivers/driver_nl80211.c
3 @@ -2324,13 +2324,18 @@ wpa_driver_nl80211_finish_drv_init(struc
4 }
5
6
7 -static int wpa_driver_nl80211_del_beacon(struct wpa_driver_nl80211_data *drv)
8 +static int wpa_driver_nl80211_del_beacon(struct i802_bss *bss)
9 {
10 + struct wpa_driver_nl80211_data *drv = bss->drv;
11 struct nl_msg *msg;
12
13 + if (!bss->beacon_set)
14 + return 0;
15 +
16 + bss->beacon_set = 0;
17 wpa_printf(MSG_DEBUG, "nl80211: Remove beacon (ifindex=%d)",
18 - drv->ifindex);
19 - msg = nl80211_drv_msg(drv, 0, NL80211_CMD_DEL_BEACON);
20 + bss->ifindex);
21 + msg = nl80211_bss_msg(bss, 0, NL80211_CMD_DEL_BEACON);
22 return send_and_recv_msgs(drv, msg, NULL, NULL);
23 }
24
25 @@ -2381,7 +2386,7 @@ static void wpa_driver_nl80211_deinit(st
26 nl80211_remove_monitor_interface(drv);
27
28 if (is_ap_interface(drv->nlmode))
29 - wpa_driver_nl80211_del_beacon(drv);
30 + wpa_driver_nl80211_del_beacon(bss);
31
32 if (drv->eapol_sock >= 0) {
33 eloop_unregister_read_sock(drv->eapol_sock);
34 @@ -4233,8 +4238,7 @@ static void nl80211_teardown_ap(struct i
35 nl80211_remove_monitor_interface(drv);
36 else
37 nl80211_mgmt_unsubscribe(bss, "AP teardown");
38 -
39 - bss->beacon_set = 0;
40 + wpa_driver_nl80211_del_beacon(bss);
41 }
42
43
44 @@ -6165,8 +6169,6 @@ static int wpa_driver_nl80211_if_remove(
45 } else {
46 wpa_printf(MSG_DEBUG, "nl80211: First BSS - reassign context");
47 nl80211_teardown_ap(bss);
48 - if (!bss->added_if && !drv->first_bss->next)
49 - wpa_driver_nl80211_del_beacon(drv);
50 nl80211_destroy_bss(bss);
51 if (!bss->added_if)
52 i802_set_iface_flags(bss, 0);
53 @@ -6528,8 +6530,7 @@ static int wpa_driver_nl80211_deinit_ap(
54 struct wpa_driver_nl80211_data *drv = bss->drv;
55 if (!is_ap_interface(drv->nlmode))
56 return -1;
57 - wpa_driver_nl80211_del_beacon(drv);
58 - bss->beacon_set = 0;
59 + wpa_driver_nl80211_del_beacon(bss);
60
61 /*
62 * If the P2P GO interface was dynamically added, then it is
63 @@ -6548,8 +6549,7 @@ static int wpa_driver_nl80211_stop_ap(vo
64 struct wpa_driver_nl80211_data *drv = bss->drv;
65 if (!is_ap_interface(drv->nlmode))
66 return -1;
67 - wpa_driver_nl80211_del_beacon(drv);
68 - bss->beacon_set = 0;
69 + wpa_driver_nl80211_del_beacon(bss);
70 return 0;
71 }
72