aboutsummaryrefslogtreecommitdiffstats
path: root/package/network/services/hostapd/patches/300-nl80211_multicall_fixes.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/network/services/hostapd/patches/300-nl80211_multicall_fixes.patch')
-rw-r--r--package/network/services/hostapd/patches/300-nl80211_multicall_fixes.patch73
1 files changed, 57 insertions, 16 deletions
diff --git a/package/network/services/hostapd/patches/300-nl80211_multicall_fixes.patch b/package/network/services/hostapd/patches/300-nl80211_multicall_fixes.patch
index be68ed1d44..c34b440e83 100644
--- a/package/network/services/hostapd/patches/300-nl80211_multicall_fixes.patch
+++ b/package/network/services/hostapd/patches/300-nl80211_multicall_fixes.patch
@@ -1,6 +1,22 @@
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
-@@ -3290,6 +3290,7 @@ static void * wpa_driver_nl80211_init(vo
+@@ -751,7 +751,6 @@ nla_put_failure:
+ }
+
+
+-#ifndef HOSTAPD
+ static int nl80211_get_macaddr(struct i802_bss *bss)
+ {
+ struct nl_msg *msg;
+@@ -773,7 +772,6 @@ nla_put_failure:
+ nlmsg_free(msg);
+ return NL80211_IFTYPE_UNSPECIFIED;
+ }
+-#endif /* HOSTAPD */
+
+
+ static int nl80211_register_beacons(struct wpa_driver_nl80211_data *drv,
+@@ -3592,6 +3590,7 @@ static void * wpa_driver_nl80211_init(vo
drv->monitor_sock = -1;
drv->eapol_tx_sock = -1;
drv->ap_scan_as_station = NL80211_IFTYPE_UNSPECIFIED;
@@ -8,27 +24,41 @@
if (wpa_driver_nl80211_init_nl(drv)) {
os_free(drv);
-@@ -3607,17 +3608,12 @@ static void wpa_driver_nl80211_send_rfki
- wpa_supplicant_event(timeout_ctx, EVENT_INTERFACE_DISABLED, NULL);
- }
+@@ -3982,31 +3981,16 @@ static int i802_set_iface_flags(struct i
+
--
static int
-wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv)
+wpa_driver_nl80211_finish_drv_init_sta(struct wpa_driver_nl80211_data *drv,
+ int *send_rfkill_event)
{
+-#ifndef HOSTAPD
+ enum nl80211_iftype nlmode = NL80211_IFTYPE_STATION;
+-#endif /* HOSTAPD */
struct i802_bss *bss = &drv->first_bss;
- int send_rfkill_event = 0;
+ int dynamic_if;
- drv->ifindex = if_nametoindex(bss->ifname);
-- drv->first_bss.ifindex = drv->ifindex;
+- bss->ifindex = drv->ifindex;
+- bss->wdev_id = drv->global->if_add_wdevid;
+- bss->wdev_id_set = drv->global->if_add_wdevid_set;
+-
+ dynamic_if = drv->ifindex == drv->global->if_add_ifindex;
+ dynamic_if = dynamic_if || drv->global->if_add_wdevid_set;
+- drv->global->if_add_wdevid_set = 0;
+
+- if (wpa_driver_nl80211_capa(drv))
+- return -1;
+-
+- wpa_printf(MSG_DEBUG, "nl80211: interface %s in phy %s",
+- bss->ifname, drv->phyname);
-
-#ifndef HOSTAPD
- /*
- * Make sure the interface starts up in station mode unless this is a
- * dynamically added interface (e.g., P2P) that was already configured
-@@ -3636,7 +3632,7 @@ wpa_driver_nl80211_finish_drv_init(struc
+ if (dynamic_if)
+ nlmode = nl80211_get_ifmode(bss);
+
+@@ -4035,7 +4019,7 @@ wpa_driver_nl80211_finish_drv_init(struc
"interface '%s' due to rfkill",
bss->ifname);
drv->if_disabled = 1;
@@ -37,11 +67,12 @@
} else {
wpa_printf(MSG_ERROR, "nl80211: Could not set "
"interface '%s' UP", bss->ifname);
-@@ -3646,7 +3642,19 @@ wpa_driver_nl80211_finish_drv_init(struc
+@@ -4045,7 +4029,30 @@ wpa_driver_nl80211_finish_drv_init(struc
netlink_send_oper_ifla(drv->global->netlink, drv->ifindex,
1, IF_OPER_DORMANT);
-#endif /* HOSTAPD */
++ return 0;
+}
+
+static int
@@ -51,10 +82,20 @@
+ int send_rfkill_event = 0;
+
+ drv->ifindex = if_nametoindex(bss->ifname);
-+ drv->first_bss.ifindex = drv->ifindex;
++ bss->ifindex = drv->ifindex;
++ bss->wdev_id = drv->global->if_add_wdevid;
++ bss->wdev_id_set = drv->global->if_add_wdevid_set;
++ drv->global->if_add_wdevid_set = 0;
++
++ if (wpa_driver_nl80211_capa(drv))
++ return -1;
++
++ wpa_printf(MSG_DEBUG, "nl80211: interface %s in phy %s",
++ bss->ifname, drv->phyname);
+
-+ if (drv->nlmode == NL80211_IFTYPE_STATION)
-+ wpa_driver_nl80211_finish_drv_init_sta(drv, &send_rfkill_event);
++ if (drv->nlmode == NL80211_IFTYPE_STATION &&
++ wpa_driver_nl80211_finish_drv_init_sta(drv, &send_rfkill_event))
++ return -1;
- if (wpa_driver_nl80211_capa(drv))
- return -1;
+ if (linux_get_ifhwaddr(drv->global->ioctl_sock, bss->ifname,
+ bss->addr))