X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=package%2Fnetwork%2Fservices%2Fhostapd%2Fpatches%2F350-nl80211_del_beacon_bss.patch;h=92e6ae9ae066740e0601f4137b863f945db422e3;hb=bbda81ce3077dfade2a43a39f772cfec2e82a9a5;hp=e6f6cf3b5d62c018821bcc8c7ad035bb69355a22;hpb=5758b210e3ae37fe949a528281746cdab33b3138;p=openwrt%2Fstaging%2Fjow.git diff --git a/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch b/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch index e6f6cf3b5d..92e6ae9ae0 100644 --- a/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch +++ b/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch @@ -1,49 +1,53 @@ --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -4817,18 +4817,20 @@ wpa_driver_nl80211_finish_drv_init(struc - } - - --static int wpa_driver_nl80211_del_beacon(struct wpa_driver_nl80211_data *drv) -+static int wpa_driver_nl80211_del_bss_beacon(struct i802_bss *bss) - { -+ struct wpa_driver_nl80211_data *drv = bss->drv; +@@ -2536,10 +2536,15 @@ static int wpa_driver_nl80211_del_beacon struct nl_msg *msg; + struct wpa_driver_nl80211_data *drv = bss->drv; - msg = nlmsg_alloc(); - if (!msg) - return -ENOMEM; - ++ if (!bss->beacon_set) ++ return 0; ++ + bss->beacon_set = 0; ++ wpa_printf(MSG_DEBUG, "nl80211: Remove beacon (ifindex=%d)", - drv->ifindex); + bss->ifindex); - nl80211_cmd(drv, msg, 0, NL80211_CMD_DEL_BEACON); -- NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, drv->ifindex); -+ NLA_PUT_U32(msg, NL80211_ATTR_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); - nla_put_failure: -@@ -4836,6 +4838,15 @@ static int wpa_driver_nl80211_del_beacon - return -ENOBUFS; } -+static int wpa_driver_nl80211_del_beacon(struct wpa_driver_nl80211_data *drv) -+{ -+ struct i802_bss *bss; -+ -+ for (bss = drv->first_bss; bss; bss = bss->next) -+ wpa_driver_nl80211_del_bss_beacon(bss); -+ -+ return 0; -+} +@@ -4753,7 +4758,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); + } + + +@@ -6853,8 +6858,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); +@@ -7225,7 +7228,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; - /** - * wpa_driver_nl80211_deinit - Deinitialize nl80211 driver interface -@@ -10617,7 +10628,6 @@ static int wpa_driver_nl80211_stop_ap(vo + /* + * If the P2P GO interface was dynamically added, then it is +@@ -7245,7 +7247,6 @@ static int wpa_driver_nl80211_stop_ap(vo if (!is_ap_interface(drv->nlmode)) return -1; - wpa_driver_nl80211_del_beacon(drv); + wpa_driver_nl80211_del_beacon(bss); - bss->beacon_set = 0; return 0; }