Fresh pull from upstream
[librecmc/librecmc.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 @@ -2490,13 +2490,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 @@ -2548,7 +2553,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 @@ -4703,8 +4708,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 @@ -6728,8 +6732,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 @@ -7091,8 +7093,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 @@ -7111,8 +7112,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