diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile index d46be1c6cb..f3a4dafd85 100644 --- a/package/network/services/hostapd/Makefile +++ b/package/network/services/hostapd/Makefile @@ -9,9 +9,9 @@ PKG_RELEASE:=1 PKG_SOURCE_URL:=https://w1.fi/hostap.git PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2025-08-26 -PKG_SOURCE_VERSION:=ca266cc24d8705eb1a2a0857ad326e48b1408b20 -PKG_MIRROR_HASH:=59ac677093f524ff98588abd9f33805a336a6e929d6814222f0d784c854f2343 +PKG_SOURCE_DATE:=2026-02-27 +PKG_SOURCE_VERSION:=8dbef087e65833dc173a9cfd7e9f980f84a1adf2 +PKG_MIRROR_HASH:=e3ac2746e603af3dd2e5f733270d889c5bdc1fd09f290e33c6c2b79443ba0f61 PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=BSD-3-Clause diff --git a/package/network/services/hostapd/patches/001-PASN-Fix-the-compilation-errors-without-CONFIG_PASN.patch b/package/network/services/hostapd/patches/001-PASN-Fix-the-compilation-errors-without-CONFIG_PASN.patch new file mode 100644 index 0000000000..09d39d6e4b --- /dev/null +++ b/package/network/services/hostapd/patches/001-PASN-Fix-the-compilation-errors-without-CONFIG_PASN.patch @@ -0,0 +1,26 @@ +From ede0dd6448fc9e58d913cc4e57d2d5f531af899f Mon Sep 17 00:00:00 2001 +From: Nick Hainke +Date: Sun, 1 Mar 2026 17:31:14 +0100 +Subject: [PATCH] PASN: Fix the compilation errors without CONFIG_PASN + +Fix the compilation errors by protecting the access to pasn in +wpas_request_connection for the CONFIG_PASN disabled case. + +Fixes: 5f3a47346be5 ("EPPKE: EPPKE authentication for SME-in-wpa_supplicant case") +Signed-off-by: Nick Hainke +--- + wpa_supplicant/wpa_supplicant.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/wpa_supplicant/wpa_supplicant.c ++++ b/wpa_supplicant/wpa_supplicant.c +@@ -9516,7 +9516,9 @@ void wpas_request_connection(struct wpa_ + wpa_s->disconnected = 0; + wpa_s->reassociate = 1; + wpa_s->last_owe_group = 0; ++#ifdef CONFIG_PASN + wpa_pasn_reset(&wpa_s->pasn); ++#endif /* CONFIG_PASN */ + + if (wpa_supplicant_fast_associate(wpa_s) != 1) + wpa_supplicant_req_scan(wpa_s, 0, 0); diff --git a/package/network/services/hostapd/patches/010-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch b/package/network/services/hostapd/patches/010-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch index 1b43b1df2b..599dc7a15a 100644 --- a/package/network/services/hostapd/patches/010-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch +++ b/package/network/services/hostapd/patches/010-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch @@ -14,7 +14,7 @@ Signed-off-by: Peter Oh --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -2976,7 +2976,7 @@ static int drv_supports_vht(struct wpa_s +@@ -3045,7 +3045,7 @@ static int drv_supports_vht(struct wpa_s } @@ -23,7 +23,7 @@ Signed-off-by: Peter Oh { int i; -@@ -2985,7 +2985,10 @@ static bool ibss_mesh_is_80mhz_avail(int +@@ -3054,7 +3054,10 @@ static bool ibss_mesh_is_80mhz_avail(int chan = hw_get_channel_chan(mode, i, NULL); if (!chan || @@ -35,7 +35,7 @@ Signed-off-by: Peter Oh return false; } -@@ -3112,7 +3115,7 @@ static void ibss_mesh_select_40mhz(struc +@@ -3181,7 +3184,7 @@ static void ibss_mesh_select_40mhz(struc const struct wpa_ssid *ssid, struct hostapd_hw_modes *mode, struct hostapd_freq_params *freq, @@ -44,7 +44,7 @@ Signed-off-by: Peter Oh { int chan_idx; struct hostapd_channel_data *pri_chan = NULL, *sec_chan = NULL; -@@ -3143,8 +3146,11 @@ static void ibss_mesh_select_40mhz(struc +@@ -3212,8 +3215,11 @@ static void ibss_mesh_select_40mhz(struc return; /* Check primary channel flags */ @@ -58,7 +58,7 @@ Signed-off-by: Peter Oh #ifdef CONFIG_HT_OVERRIDES if (ssid->disable_ht40) -@@ -3179,8 +3185,11 @@ static void ibss_mesh_select_40mhz(struc +@@ -3248,8 +3254,11 @@ static void ibss_mesh_select_40mhz(struc return; /* Check secondary channel flags */ @@ -72,7 +72,7 @@ Signed-off-by: Peter Oh if (freq->ht_enabled) { if (ht40 == -1) { -@@ -3258,7 +3267,7 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3327,7 +3336,7 @@ static bool ibss_mesh_select_80_160mhz(s const struct wpa_ssid *ssid, struct hostapd_hw_modes *mode, struct hostapd_freq_params *freq, @@ -81,7 +81,7 @@ Signed-off-by: Peter Oh static const int bw80[] = { 5180, 5260, 5500, 5580, 5660, 5745, 5825, 5955, 6035, 6115, 6195, 6275, 6355, 6435, -@@ -3311,7 +3320,7 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3380,7 +3389,7 @@ static bool ibss_mesh_select_80_160mhz(s goto skip_80mhz; /* Use 40 MHz if channel not usable */ @@ -90,7 +90,7 @@ Signed-off-by: Peter Oh goto skip_80mhz; chwidth = CONF_OPER_CHWIDTH_80MHZ; -@@ -3353,7 +3362,7 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3422,7 +3431,7 @@ static bool ibss_mesh_select_80_160mhz(s HE_PHYCAP_CHANNEL_WIDTH_SET_160MHZ_IN_5G) && (ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_160MHZ || ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_320MHZ) && @@ -99,7 +99,7 @@ Signed-off-by: Peter Oh for (j = 0; j < ARRAY_SIZE(bw160); j++) { u8 start_chan; -@@ -3376,11 +3385,11 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3445,11 +3454,11 @@ static bool ibss_mesh_select_80_160mhz(s EHT_PHYCAP_320MHZ_IN_6GHZ_SUPPORT_MASK) && is_6ghz && ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_320MHZ && ibss_mesh_is_80mhz_avail(channel + 16 - @@ -114,7 +114,7 @@ Signed-off-by: Peter Oh for (j = 0; j < ARRAY_SIZE(bw320); j += 2) { if (freq->freq >= bw320[j] && freq->freq <= bw320[j + 1]) { -@@ -3409,10 +3418,12 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3478,10 +3487,12 @@ static bool ibss_mesh_select_80_160mhz(s if (!chan) continue; @@ -131,7 +131,7 @@ Signed-off-by: Peter Oh /* Found a suitable second segment for 80+80 */ chwidth = CONF_OPER_CHWIDTH_80P80MHZ; -@@ -3467,6 +3478,7 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3536,6 +3547,7 @@ void ibss_mesh_setup_freq(struct wpa_sup int obss_scan = 1; u8 channel; bool is_6ghz, is_24ghz; @@ -139,7 +139,7 @@ Signed-off-by: Peter Oh freq->freq = ssid->frequency; -@@ -3510,9 +3522,9 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3579,9 +3591,9 @@ void ibss_mesh_setup_freq(struct wpa_sup /* Setup higher BW only for 5 and 6 GHz */ if (mode->mode == HOSTAPD_MODE_IEEE80211A) { ibss_mesh_select_40mhz(wpa_s, ssid, mode, freq, obss_scan, diff --git a/package/network/services/hostapd/patches/011-mesh-use-deterministic-channel-on-channel-switch.patch b/package/network/services/hostapd/patches/011-mesh-use-deterministic-channel-on-channel-switch.patch index f1cf715b69..751bca8b8e 100644 --- a/package/network/services/hostapd/patches/011-mesh-use-deterministic-channel-on-channel-switch.patch +++ b/package/network/services/hostapd/patches/011-mesh-use-deterministic-channel-on-channel-switch.patch @@ -21,7 +21,7 @@ Signed-off-by: Markus Theil --- a/src/ap/dfs.c +++ b/src/ap/dfs.c -@@ -18,6 +18,7 @@ +@@ -19,6 +19,7 @@ #include "ap_drv_ops.h" #include "drivers/driver.h" #include "dfs.h" @@ -29,7 +29,7 @@ Signed-off-by: Markus Theil enum dfs_channel_type { -@@ -534,9 +535,14 @@ dfs_get_valid_channel(struct hostapd_ifa +@@ -535,9 +536,14 @@ dfs_get_valid_channel(struct hostapd_ifa int num_available_chandefs; int chan_idx, chan_idx2; int sec_chan_idx_80p80 = -1; @@ -44,7 +44,7 @@ Signed-off-by: Markus Theil wpa_printf(MSG_DEBUG, "DFS: Selecting random channel"); *secondary_channel = 0; *oper_centr_freq_seg0_idx = 0; -@@ -556,8 +562,20 @@ dfs_get_valid_channel(struct hostapd_ifa +@@ -557,8 +563,20 @@ dfs_get_valid_channel(struct hostapd_ifa if (num_available_chandefs == 0) return NULL; @@ -68,7 +68,7 @@ Signed-off-by: Markus Theil chan_idx, num_available_chandefs); --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -11668,6 +11668,10 @@ static int nl80211_switch_channel(void * +@@ -12007,6 +12007,10 @@ static int nl80211_switch_channel(void * if (ret) goto error; diff --git a/package/network/services/hostapd/patches/021-fix-sta-add-after-previous-connection.patch b/package/network/services/hostapd/patches/021-fix-sta-add-after-previous-connection.patch index b23e6a4ca2..0698f03ebc 100644 --- a/package/network/services/hostapd/patches/021-fix-sta-add-after-previous-connection.patch +++ b/package/network/services/hostapd/patches/021-fix-sta-add-after-previous-connection.patch @@ -4,7 +4,7 @@ Subject: [PATCH] fix adding back stations after a missed deauth/disassoc --- a/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c -@@ -5136,6 +5136,13 @@ static int add_associated_sta(struct hos +@@ -5429,6 +5429,13 @@ static int add_associated_sta(struct hos * drivers to accept the STA parameter configuration. Since this is * after a new FT-over-DS exchange, a new TK has been derived, so key * reinstallation is not a concern for this case. @@ -18,7 +18,7 @@ Subject: [PATCH] fix adding back stations after a missed deauth/disassoc */ wpa_printf(MSG_DEBUG, "Add associated STA " MACSTR " (added_unassoc=%d auth_alg=%u ft_over_ds=%u reassoc=%d authorized=%d ft_tk=%d fils_tk=%d)", -@@ -5149,7 +5156,8 @@ static int add_associated_sta(struct hos +@@ -5442,7 +5449,8 @@ static int add_associated_sta(struct hos (!(sta->flags & WLAN_STA_AUTHORIZED) || (reassoc && sta->ft_over_ds && sta->auth_alg == WLAN_AUTH_FT) || (!wpa_auth_sta_ft_tk_already_set(sta->wpa_sm) && diff --git a/package/network/services/hostapd/patches/030-Revert-nl80211-Accept-a-global-nl80211-event-to-a-br.patch b/package/network/services/hostapd/patches/030-Revert-nl80211-Accept-a-global-nl80211-event-to-a-br.patch deleted file mode 100644 index 24647a5c46..0000000000 --- a/package/network/services/hostapd/patches/030-Revert-nl80211-Accept-a-global-nl80211-event-to-a-br.patch +++ /dev/null @@ -1,77 +0,0 @@ -From: Felix Fietkau -Date: Sun, 6 Jul 2025 18:41:52 +0200 -Subject: [PATCH] Revert "nl80211: Accept a global nl80211 event to a bridged - interface" - -This reverts commit 1c994da117ad795766270cf04bc923971e27412f. ---- - ---- a/src/drivers/driver_nl80211_event.c -+++ b/src/drivers/driver_nl80211_event.c -@@ -4482,8 +4482,6 @@ int process_global_event(struct nl_msg * - wiphy_idx = nl80211_get_wiphy_index(bss); - if ((ifidx == -1 && !wiphy_idx_set && !wdev_id_set) || - ifidx == bss->ifindex || -- (bss->br_ifindex > 0 && -- nl80211_has_ifidx(drv, bss->br_ifindex, ifidx)) || - (wiphy_idx_set && wiphy_idx == wiphy_idx_rx) || - (wdev_id_set && bss->wdev_id_set && - wdev_id == bss->wdev_id)) { ---- a/src/drivers/driver_nl80211.c -+++ b/src/drivers/driver_nl80211.c -@@ -182,6 +182,8 @@ static void add_ifidx(struct wpa_driver_ - int ifidx_reason); - static void del_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx, - int ifidx_reason); -+static int have_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx, -+ int ifidx_reason); - - static int nl80211_set_channel(struct i802_bss *bss, - struct hostapd_freq_params *freq, int set_chan); -@@ -1270,7 +1272,7 @@ nl80211_find_drv(struct nl80211_global * - *init_failed = 1; - return drv; - } -- if (res > 0 || nl80211_has_ifidx(drv, idx, IFIDX_ANY)) -+ if (res > 0 || have_ifidx(drv, idx, IFIDX_ANY)) - return drv; - } - return NULL; -@@ -8586,7 +8588,7 @@ static void add_ifidx(struct wpa_driver_ - wpa_printf(MSG_DEBUG, - "nl80211: Add own interface ifindex %d (ifidx_reason %d)", - ifidx, ifidx_reason); -- if (nl80211_has_ifidx(drv, ifidx, ifidx_reason)) { -+ if (have_ifidx(drv, ifidx, ifidx_reason)) { - wpa_printf(MSG_DEBUG, "nl80211: ifindex %d already in the list", - ifidx); - return; -@@ -8646,7 +8648,7 @@ static void del_ifidx(struct wpa_driver_ - } - - --int nl80211_has_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx, -+static int have_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx, - int ifidx_reason) - { - int i; -@@ -8753,7 +8755,7 @@ static void handle_eapol(int sock, void - return; - } - -- if (nl80211_has_ifidx(drv, lladdr.sll_ifindex, IFIDX_ANY)) { -+ if (have_ifidx(drv, lladdr.sll_ifindex, IFIDX_ANY)) { - for (bss = drv->first_bss; bss; bss = bss->next) - drv_event_eapol_rx(bss->ctx, lladdr.sll_addr, buf, len); - } ---- a/src/drivers/driver_nl80211.h -+++ b/src/drivers/driver_nl80211.h -@@ -371,8 +371,6 @@ struct i802_link * nl80211_get_link(stru - u8 nl80211_get_link_id_from_link(struct i802_bss *bss, struct i802_link *link); - int nl80211_remove_link(struct i802_bss *bss, int link_id); - void nl80211_update_active_links(struct i802_bss *bss, int link_id); --int nl80211_has_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx, -- int ifidx_reason); - - static inline bool nl80211_link_valid(u16 links, s8 link_id) - { diff --git a/package/network/services/hostapd/patches/050-Fix-OpenWrt-13156.patch b/package/network/services/hostapd/patches/050-Fix-OpenWrt-13156.patch index d06558256a..b6ba10f333 100644 --- a/package/network/services/hostapd/patches/050-Fix-OpenWrt-13156.patch +++ b/package/network/services/hostapd/patches/050-Fix-OpenWrt-13156.patch @@ -20,7 +20,7 @@ Signed-off-by: Stijn Tintel --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -4110,6 +4110,8 @@ int hostapd_remove_iface(struct hapd_int +@@ -4127,6 +4127,8 @@ int hostapd_remove_iface(struct hapd_int void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta, int reassoc) { @@ -29,7 +29,7 @@ Signed-off-by: Stijn Tintel if (hapd->tkip_countermeasures) { hostapd_drv_sta_deauth(hapd, sta->addr, WLAN_REASON_MICHAEL_MIC_FAILURE); -@@ -4117,10 +4119,16 @@ void hostapd_new_assoc_sta(struct hostap +@@ -4134,10 +4136,16 @@ void hostapd_new_assoc_sta(struct hostap } #ifdef CONFIG_IEEE80211BE @@ -51,7 +51,7 @@ Signed-off-by: Stijn Tintel ap_sta_clear_assoc_timeout(hapd, sta); --- a/src/ap/sta_info.c +++ b/src/ap/sta_info.c -@@ -1554,9 +1554,6 @@ bool ap_sta_set_authorized_flag(struct h +@@ -1736,9 +1736,6 @@ bool ap_sta_set_authorized_flag(struct h mld_assoc_link_id = -2; } #endif /* CONFIG_IEEE80211BE */ diff --git a/package/network/services/hostapd/patches/051-nl80211-add-extra-ies-only-if-allowed-by-driver.patch b/package/network/services/hostapd/patches/051-nl80211-add-extra-ies-only-if-allowed-by-driver.patch index 1b6c71c720..471a36aaa9 100644 --- a/package/network/services/hostapd/patches/051-nl80211-add-extra-ies-only-if-allowed-by-driver.patch +++ b/package/network/services/hostapd/patches/051-nl80211-add-extra-ies-only-if-allowed-by-driver.patch @@ -26,7 +26,7 @@ Signed-off-by: David Bauer --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -2447,6 +2447,9 @@ struct wpa_driver_capa { +@@ -2466,6 +2466,9 @@ struct wpa_driver_capa { /** Maximum number of iterations in a single scan plan */ u32 max_sched_scan_plan_iterations; @@ -38,7 +38,7 @@ Signed-off-by: David Bauer --- a/src/drivers/driver_nl80211_capa.c +++ b/src/drivers/driver_nl80211_capa.c -@@ -981,6 +981,10 @@ static int wiphy_info_handler(struct nl_ +@@ -1000,6 +1000,10 @@ static int wiphy_info_handler(struct nl_ nla_get_u32(tb[NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS]); } diff --git a/package/network/services/hostapd/patches/052-AP-add-missing-null-pointer-check-in-hostapd_free_ha.patch b/package/network/services/hostapd/patches/052-AP-add-missing-null-pointer-check-in-hostapd_free_ha.patch index 350411be54..85d5127f60 100644 --- a/package/network/services/hostapd/patches/052-AP-add-missing-null-pointer-check-in-hostapd_free_ha.patch +++ b/package/network/services/hostapd/patches/052-AP-add-missing-null-pointer-check-in-hostapd_free_ha.patch @@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -489,7 +489,7 @@ void hostapd_free_hapd_data(struct hosta +@@ -502,7 +502,7 @@ void hostapd_free_hapd_data(struct hosta struct hapd_interfaces *ifaces = hapd->iface->interfaces; size_t i; diff --git a/package/network/services/hostapd/patches/060-nl80211-fix-reporting-spurious-frame-events.patch b/package/network/services/hostapd/patches/060-nl80211-fix-reporting-spurious-frame-events.patch deleted file mode 100644 index 902fd4726e..0000000000 --- a/package/network/services/hostapd/patches/060-nl80211-fix-reporting-spurious-frame-events.patch +++ /dev/null @@ -1,22 +0,0 @@ -From: Felix Fietkau -Date: Tue, 26 Aug 2025 22:04:57 +0200 -Subject: [PATCH] nl80211: fix reporting spurious frame events - -When the nl80211 driver is shared across multiple interfaces (on the same -wiphy), nl80211_spurious_frame can send the event to the wrong interface by -using drv->ctx. Fix this by using bss->ctx instead. - -Signed-off-by: Felix Fietkau ---- - ---- a/src/drivers/driver_nl80211_event.c -+++ b/src/drivers/driver_nl80211_event.c -@@ -2789,7 +2789,7 @@ static void nl80211_spurious_frame(struc - event.rx_from_unknown.addr = nla_data(tb[NL80211_ATTR_MAC]); - event.rx_from_unknown.wds = wds; - -- wpa_supplicant_event(drv->ctx, EVENT_RX_FROM_UNKNOWN, &event); -+ wpa_supplicant_event(bss->ctx, EVENT_RX_FROM_UNKNOWN, &event); - } - - diff --git a/package/network/services/hostapd/patches/110-mbedtls-TLS-crypto-option-initial-port.patch b/package/network/services/hostapd/patches/110-mbedtls-TLS-crypto-option-initial-port.patch index d90298c97d..320090f9da 100644 --- a/package/network/services/hostapd/patches/110-mbedtls-TLS-crypto-option-initial-port.patch +++ b/package/network/services/hostapd/patches/110-mbedtls-TLS-crypto-option-initial-port.patch @@ -21,7 +21,7 @@ Signed-off-by: Glenn Strauss --- a/hostapd/Makefile +++ b/hostapd/Makefile -@@ -759,6 +759,40 @@ endif +@@ -764,6 +764,40 @@ endif CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONFIG_TLS_DEFAULT_CIPHERS)\" endif @@ -62,7 +62,7 @@ Signed-off-by: Glenn Strauss ifeq ($(CONFIG_TLS), gnutls) ifndef CONFIG_CRYPTO # default to libgcrypt -@@ -938,9 +972,11 @@ endif +@@ -943,9 +977,11 @@ endif ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), wolfssl) @@ -74,7 +74,7 @@ Signed-off-by: Glenn Strauss ifdef NEED_AES_EAX AESOBJS += ../src/crypto/aes-eax.o NEED_AES_CTR=y -@@ -950,38 +986,48 @@ AESOBJS += ../src/crypto/aes-siv.o +@@ -955,38 +991,48 @@ AESOBJS += ../src/crypto/aes-siv.o NEED_AES_CTR=y endif ifdef NEED_AES_CTR @@ -123,7 +123,7 @@ Signed-off-by: Glenn Strauss ifdef NEED_AES_DEC ifdef CONFIG_INTERNAL_AES AESOBJS += ../src/crypto/aes-internal-dec.o -@@ -996,12 +1042,16 @@ ifneq ($(CONFIG_TLS), openssl) +@@ -1001,12 +1047,16 @@ ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), linux) ifneq ($(CONFIG_TLS), gnutls) ifneq ($(CONFIG_TLS), wolfssl) @@ -140,7 +140,7 @@ Signed-off-by: Glenn Strauss ifdef CONFIG_INTERNAL_SHA1 SHA1OBJS += ../src/crypto/sha1-internal.o ifdef NEED_FIPS186_2_PRF -@@ -1010,16 +1060,22 @@ endif +@@ -1015,16 +1065,22 @@ endif endif ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), wolfssl) @@ -163,7 +163,7 @@ Signed-off-by: Glenn Strauss ifdef NEED_SHA1 OBJS += $(SHA1OBJS) -@@ -1029,11 +1085,13 @@ ifneq ($(CONFIG_TLS), openssl) +@@ -1034,11 +1090,13 @@ ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), linux) ifneq ($(CONFIG_TLS), gnutls) ifneq ($(CONFIG_TLS), wolfssl) @@ -177,7 +177,7 @@ Signed-off-by: Glenn Strauss ifdef NEED_MD5 ifdef CONFIG_INTERNAL_MD5 -@@ -1083,56 +1141,81 @@ ifneq ($(CONFIG_TLS), openssl) +@@ -1088,56 +1146,81 @@ ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), linux) ifneq ($(CONFIG_TLS), gnutls) ifneq ($(CONFIG_TLS), wolfssl) @@ -259,7 +259,7 @@ Signed-off-by: Glenn Strauss ifdef CONFIG_INTERNAL_SHA384 CFLAGS += -DCONFIG_INTERNAL_SHA384 -@@ -1177,11 +1260,13 @@ HOBJS += $(SHA1OBJS) +@@ -1182,11 +1265,13 @@ HOBJS += $(SHA1OBJS) ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), linux) ifneq ($(CONFIG_TLS), wolfssl) @@ -273,7 +273,7 @@ Signed-off-by: Glenn Strauss ifdef CONFIG_RADIUS_SERVER CFLAGS += -DRADIUS_SERVER -@@ -1355,7 +1440,9 @@ NOBJS += ../src/utils/trace.o +@@ -1365,7 +1450,9 @@ NOBJS += ../src/utils/trace.o endif HOBJS += hlr_auc_gw.o ../src/utils/common.o ../src/utils/wpa_debug.o ../src/utils/os_$(CONFIG_OS).o ../src/utils/wpabuf.o ../src/crypto/milenage.o @@ -283,7 +283,7 @@ Signed-off-by: Glenn Strauss ifdef CONFIG_INTERNAL_AES HOBJS += ../src/crypto/aes-internal.o HOBJS += ../src/crypto/aes-internal-enc.o -@@ -1378,18 +1465,24 @@ SOBJS += ../src/common/sae.o +@@ -1388,18 +1475,24 @@ SOBJS += ../src/common/sae.o SOBJS += ../src/common/sae_pk.o SOBJS += ../src/common/dragonfly.o SOBJS += $(AESOBJS) @@ -310,7 +310,7 @@ Signed-off-by: Glenn Strauss _OBJS_VAR := NOBJS --- a/hostapd/defconfig +++ b/hostapd/defconfig -@@ -6,9 +6,21 @@ +@@ -6,9 +6,19 @@ # just setting VARIABLE=n is not disabling that variable. # # This file is included in Makefile, so variables like CFLAGS and LIBS can also @@ -318,7 +318,6 @@ Signed-off-by: Glenn Strauss +# be modified from here. In most cases, these lines should use += in order not # to override previous values of the variables. -+ +# Uncomment following two lines and fix the paths if you have installed TLS +# libraries in a non-default location +#CFLAGS += -I/usr/local/openssl/include @@ -329,11 +328,10 @@ Signed-off-by: Glenn Strauss +# used to fix build issues on such systems (krb5.h not found). +#CFLAGS += -I/usr/include/kerberos + -+ - # Driver interface for Host AP driver - CONFIG_DRIVER_HOSTAP=y + # Driver interface for wired authenticator + #CONFIG_DRIVER_WIRED=y -@@ -281,6 +293,7 @@ CONFIG_IPV6=y +@@ -274,6 +284,7 @@ CONFIG_IPV6=y # openssl = OpenSSL (default) # gnutls = GnuTLS # internal = Internal TLSv1 implementation (experimental) @@ -7772,7 +7770,7 @@ Signed-off-by: Glenn Strauss CONFIG_SIM_SIMULATOR=y --- a/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile -@@ -1234,6 +1234,29 @@ endif +@@ -1256,6 +1256,29 @@ endif CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONFIG_TLS_DEFAULT_CIPHERS)\" endif @@ -7802,7 +7800,7 @@ Signed-off-by: Glenn Strauss ifeq ($(CONFIG_TLS), gnutls) ifndef CONFIG_CRYPTO # default to libgcrypt -@@ -1426,9 +1449,11 @@ endif +@@ -1448,9 +1471,11 @@ endif ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), wolfssl) @@ -7814,7 +7812,7 @@ Signed-off-by: Glenn Strauss ifdef CONFIG_OPENSSL_INTERNAL_AES_WRAP # Seems to be needed at least with BoringSSL NEED_INTERNAL_AES_WRAP=y -@@ -1442,9 +1467,11 @@ endif +@@ -1464,9 +1489,11 @@ endif ifdef NEED_INTERNAL_AES_WRAP ifneq ($(CONFIG_TLS), linux) @@ -7826,7 +7824,7 @@ Signed-off-by: Glenn Strauss ifdef NEED_AES_EAX AESOBJS += ../src/crypto/aes-eax.o NEED_AES_CTR=y -@@ -1454,35 +1481,45 @@ AESOBJS += ../src/crypto/aes-siv.o +@@ -1476,35 +1503,45 @@ AESOBJS += ../src/crypto/aes-siv.o NEED_AES_CTR=y endif ifdef NEED_AES_CTR @@ -7872,7 +7870,7 @@ Signed-off-by: Glenn Strauss ifdef NEED_AES_ENC ifdef CONFIG_INTERNAL_AES AESOBJS += ../src/crypto/aes-internal-enc.o -@@ -1497,12 +1534,16 @@ ifneq ($(CONFIG_TLS), openssl) +@@ -1519,12 +1556,16 @@ ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), linux) ifneq ($(CONFIG_TLS), gnutls) ifneq ($(CONFIG_TLS), wolfssl) @@ -7889,7 +7887,7 @@ Signed-off-by: Glenn Strauss ifdef CONFIG_INTERNAL_SHA1 SHA1OBJS += ../src/crypto/sha1-internal.o ifdef NEED_FIPS186_2_PRF -@@ -1514,29 +1555,37 @@ CFLAGS += -DCONFIG_NO_PBKDF2 +@@ -1536,29 +1577,37 @@ CFLAGS += -DCONFIG_NO_PBKDF2 else ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), wolfssl) @@ -7927,7 +7925,7 @@ Signed-off-by: Glenn Strauss ifdef NEED_MD5 ifdef CONFIG_INTERNAL_MD5 MD5OBJS += ../src/crypto/md5-internal.o -@@ -1591,12 +1640,17 @@ ifneq ($(CONFIG_TLS), openssl) +@@ -1613,12 +1662,17 @@ ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), linux) ifneq ($(CONFIG_TLS), gnutls) ifneq ($(CONFIG_TLS), wolfssl) @@ -7945,7 +7943,7 @@ Signed-off-by: Glenn Strauss ifdef CONFIG_INTERNAL_SHA256 SHA256OBJS += ../src/crypto/sha256-internal.o endif -@@ -1609,50 +1663,68 @@ CFLAGS += -DCONFIG_INTERNAL_SHA512 +@@ -1631,50 +1685,68 @@ CFLAGS += -DCONFIG_INTERNAL_SHA512 SHA256OBJS += ../src/crypto/sha512-internal.o endif ifdef NEED_TLS_PRF_SHA256 @@ -8014,7 +8012,7 @@ Signed-off-by: Glenn Strauss ifdef NEED_ASN1 OBJS += ../src/tls/asn1.o -@@ -1827,10 +1899,12 @@ ifdef CONFIG_FIPS +@@ -1849,10 +1921,12 @@ ifdef CONFIG_FIPS CFLAGS += -DCONFIG_FIPS ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), wolfssl) diff --git a/package/network/services/hostapd/patches/120-mbedtls-fips186_2_prf.patch b/package/network/services/hostapd/patches/120-mbedtls-fips186_2_prf.patch index 71b06401cd..0661900f36 100644 --- a/package/network/services/hostapd/patches/120-mbedtls-fips186_2_prf.patch +++ b/package/network/services/hostapd/patches/120-mbedtls-fips186_2_prf.patch @@ -12,7 +12,7 @@ Signed-off-by: Glenn Strauss --- a/hostapd/Makefile +++ b/hostapd/Makefile -@@ -773,10 +773,6 @@ endif +@@ -778,10 +778,6 @@ endif OBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o HOBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o SOBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o @@ -101,7 +101,7 @@ Signed-off-by: Glenn Strauss --- a/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile -@@ -1245,10 +1245,6 @@ endif +@@ -1267,10 +1267,6 @@ endif OBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o OBJS_p += ../src/crypto/crypto_$(CONFIG_CRYPTO).o OBJS_priv += ../src/crypto/crypto_$(CONFIG_CRYPTO).o diff --git a/package/network/services/hostapd/patches/140-tests-Makefile-make-run-tests-with-CONFIG_TLS.patch b/package/network/services/hostapd/patches/140-tests-Makefile-make-run-tests-with-CONFIG_TLS.patch index 733b2a74db..9e3d490ef8 100644 --- a/package/network/services/hostapd/patches/140-tests-Makefile-make-run-tests-with-CONFIG_TLS.patch +++ b/package/network/services/hostapd/patches/140-tests-Makefile-make-run-tests-with-CONFIG_TLS.patch @@ -61,7 +61,7 @@ Signed-off-by: Glenn Strauss --- a/hostapd/Makefile +++ b/hostapd/Makefile -@@ -709,6 +709,7 @@ CFLAGS += -DCONFIG_TLSV12 +@@ -714,6 +714,7 @@ CFLAGS += -DCONFIG_TLSV12 endif ifeq ($(CONFIG_TLS), wolfssl) @@ -69,7 +69,7 @@ Signed-off-by: Glenn Strauss CFLAGS += -DCRYPTO_RSA_OAEP_SHA256 CONFIG_CRYPTO=wolfssl ifdef TLS_FUNCS -@@ -730,6 +731,7 @@ endif +@@ -735,6 +736,7 @@ endif endif ifeq ($(CONFIG_TLS), openssl) @@ -77,7 +77,7 @@ Signed-off-by: Glenn Strauss CFLAGS += -DCRYPTO_RSA_OAEP_SHA256 CONFIG_CRYPTO=openssl ifdef TLS_FUNCS -@@ -760,6 +762,7 @@ CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONF +@@ -765,6 +767,7 @@ CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONF endif ifeq ($(CONFIG_TLS), mbedtls) @@ -85,7 +85,7 @@ Signed-off-by: Glenn Strauss ifndef CONFIG_CRYPTO CONFIG_CRYPTO=mbedtls endif -@@ -790,6 +793,7 @@ endif +@@ -795,6 +798,7 @@ endif endif ifeq ($(CONFIG_TLS), gnutls) @@ -93,7 +93,7 @@ Signed-off-by: Glenn Strauss ifndef CONFIG_CRYPTO # default to libgcrypt CONFIG_CRYPTO=gnutls -@@ -820,6 +824,7 @@ endif +@@ -825,6 +829,7 @@ endif endif ifeq ($(CONFIG_TLS), internal) @@ -101,7 +101,7 @@ Signed-off-by: Glenn Strauss ifndef CONFIG_CRYPTO CONFIG_CRYPTO=internal endif -@@ -898,6 +903,7 @@ endif +@@ -903,6 +908,7 @@ endif endif ifeq ($(CONFIG_TLS), linux) @@ -979,7 +979,7 @@ Signed-off-by: Glenn Strauss raise HwsimSkip("Crypto library does not support Brainpool curves: " + tls) capa = dev.request("GET_CAPABILITY dpp") ver = 1 -@@ -3925,6 +3926,9 @@ def test_dpp_proto_auth_req_no_i_proto_k +@@ -3940,6 +3941,9 @@ def test_dpp_proto_auth_req_no_i_proto_k def test_dpp_proto_auth_req_invalid_i_proto_key(dev, apdev): """DPP protocol testing - invalid I-proto key in Auth Req""" @@ -989,7 +989,7 @@ Signed-off-by: Glenn Strauss run_dpp_proto_auth_req_missing(dev, 66, "Invalid Initiator Protocol Key") def test_dpp_proto_auth_req_no_i_nonce(dev, apdev): -@@ -4020,7 +4024,12 @@ def test_dpp_proto_auth_resp_no_r_proto_ +@@ -4035,7 +4039,12 @@ def test_dpp_proto_auth_resp_no_r_proto_ def test_dpp_proto_auth_resp_invalid_r_proto_key(dev, apdev): """DPP protocol testing - invalid R-Proto Key in Auth Resp""" @@ -1003,7 +1003,7 @@ Signed-off-by: Glenn Strauss def test_dpp_proto_auth_resp_no_r_nonce(dev, apdev): """DPP protocol testing - no R-nonce in Auth Resp""" -@@ -4382,11 +4391,17 @@ def test_dpp_proto_pkex_exchange_resp_in +@@ -4397,11 +4406,17 @@ def test_dpp_proto_pkex_exchange_resp_in def test_dpp_proto_pkex_cr_req_invalid_bootstrap_key(dev, apdev): """DPP protocol testing - invalid Bootstrap Key in PKEX Commit-Reveal Request""" @@ -1124,7 +1124,7 @@ Signed-off-by: Glenn Strauss heavy_groups = [14, 15, 16] suitable_groups = [15, 16, 17, 18, 19, 20, 21] groups = [str(g) for g in sae_groups] -@@ -2387,6 +2392,8 @@ def run_sae_pwe_group(dev, apdev, group) +@@ -2561,6 +2566,8 @@ def run_sae_pwe_group(dev, apdev, group) logger.info("Add Brainpool EC groups since OpenSSL is new enough") elif tls.startswith("wolfSSL"): logger.info("Make sure Brainpool EC groups were enabled when compiling wolfSSL") @@ -1289,7 +1289,7 @@ Signed-off-by: Glenn Strauss if (need_more_data) { --- a/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile -@@ -1192,6 +1192,7 @@ TLS_FUNCS=y +@@ -1214,6 +1214,7 @@ TLS_FUNCS=y endif ifeq ($(CONFIG_TLS), wolfssl) @@ -1297,7 +1297,7 @@ Signed-off-by: Glenn Strauss CFLAGS += -DCRYPTO_RSA_OAEP_SHA256 ifdef TLS_FUNCS CFLAGS += -DWOLFSSL_DER_LOAD -@@ -1208,6 +1209,7 @@ LIBS_p += -lwolfssl -lm +@@ -1230,6 +1231,7 @@ LIBS_p += -lwolfssl -lm endif ifeq ($(CONFIG_TLS), openssl) @@ -1305,7 +1305,7 @@ Signed-off-by: Glenn Strauss CFLAGS += -DCRYPTO_RSA_OAEP_SHA256 ifdef TLS_FUNCS CFLAGS += -DEAP_TLS_OPENSSL -@@ -1235,6 +1237,7 @@ CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONF +@@ -1257,6 +1259,7 @@ CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONF endif ifeq ($(CONFIG_TLS), mbedtls) @@ -1313,7 +1313,7 @@ Signed-off-by: Glenn Strauss ifndef CONFIG_CRYPTO CONFIG_CRYPTO=mbedtls endif -@@ -1254,6 +1257,7 @@ endif +@@ -1276,6 +1279,7 @@ endif endif ifeq ($(CONFIG_TLS), gnutls) @@ -1321,7 +1321,7 @@ Signed-off-by: Glenn Strauss ifndef CONFIG_CRYPTO # default to libgcrypt CONFIG_CRYPTO=gnutls -@@ -1284,6 +1288,7 @@ endif +@@ -1306,6 +1310,7 @@ endif endif ifeq ($(CONFIG_TLS), internal) @@ -1329,7 +1329,7 @@ Signed-off-by: Glenn Strauss ifndef CONFIG_CRYPTO CONFIG_CRYPTO=internal endif -@@ -1364,6 +1369,7 @@ endif +@@ -1386,6 +1391,7 @@ endif endif ifeq ($(CONFIG_TLS), linux) diff --git a/package/network/services/hostapd/patches/150-add-NULL-checks-encountered-during-tests-hwsim.patch b/package/network/services/hostapd/patches/150-add-NULL-checks-encountered-during-tests-hwsim.patch index 0b0737e760..6b80577a70 100644 --- a/package/network/services/hostapd/patches/150-add-NULL-checks-encountered-during-tests-hwsim.patch +++ b/package/network/services/hostapd/patches/150-add-NULL-checks-encountered-during-tests-hwsim.patch @@ -29,7 +29,7 @@ Signed-off-by: Glenn Strauss wpa_printf(MSG_DEBUG, "DPP: Generating a keypair"); --- a/src/common/sae.c +++ b/src/common/sae.c -@@ -1287,6 +1287,13 @@ void sae_deinit_pt(struct sae_pt *pt) +@@ -1298,6 +1298,13 @@ void sae_deinit_pt(struct sae_pt *pt) static int sae_derive_commit_element_ecc(struct sae_data *sae, struct crypto_bignum *mask) { diff --git a/package/network/services/hostapd/patches/161-wpa_supplicant-avoid-stopping-DPP-chirp-when-offchan.patch b/package/network/services/hostapd/patches/161-wpa_supplicant-avoid-stopping-DPP-chirp-when-offchan.patch index 4b6ed646f5..45eaa0e59b 100644 --- a/package/network/services/hostapd/patches/161-wpa_supplicant-avoid-stopping-DPP-chirp-when-offchan.patch +++ b/package/network/services/hostapd/patches/161-wpa_supplicant-avoid-stopping-DPP-chirp-when-offchan.patch @@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau --- a/wpa_supplicant/dpp_supplicant.c +++ b/wpa_supplicant/dpp_supplicant.c -@@ -5131,7 +5131,10 @@ static void wpas_dpp_chirp_start(struct +@@ -5132,7 +5132,10 @@ static void wpas_dpp_chirp_start(struct wpa_s->own_addr, broadcast, wpabuf_head(msg), wpabuf_len(msg), 2000, wpas_dpp_chirp_tx_status, 0) < 0) diff --git a/package/network/services/hostapd/patches/170-hostapd-update-cfs0-and-cfs1-for-160MHz.patch b/package/network/services/hostapd/patches/170-hostapd-update-cfs0-and-cfs1-for-160MHz.patch index d344a006b1..81d36f47b5 100644 --- a/package/network/services/hostapd/patches/170-hostapd-update-cfs0-and-cfs1-for-160MHz.patch +++ b/package/network/services/hostapd/patches/170-hostapd-update-cfs0-and-cfs1-for-160MHz.patch @@ -29,7 +29,7 @@ Signed-off-by: P Praneesh --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -1225,6 +1225,8 @@ static int hostapd_config_vht_capab(stru +@@ -1229,6 +1229,8 @@ static int hostapd_config_vht_capab(stru conf->vht_capab |= VHT_CAP_RX_ANTENNA_PATTERN; if (os_strstr(capab, "[TX-ANTENNA-PATTERN]")) conf->vht_capab |= VHT_CAP_TX_ANTENNA_PATTERN; @@ -48,7 +48,7 @@ Signed-off-by: P Praneesh u8 *pos = eid; + u8 chwidth; - if (!hapd->iconf->ieee80211n || hapd->conf->disable_11n || + if (!hostapd_is_ht_enabled(hapd) || is_6ghz_op_class(hapd->iconf->op_class)) @@ -143,6 +145,13 @@ u8 * hostapd_eid_ht_operation(struct hos oper->operation_mode = host_to_le16(hapd->iface->ht_op_mode); @@ -66,7 +66,7 @@ Signed-off-by: P Praneesh return pos; --- a/src/ap/ieee802_11_vht.c +++ b/src/ap/ieee802_11_vht.c -@@ -26,6 +26,7 @@ u8 * hostapd_eid_vht_capabilities(struct +@@ -44,6 +44,7 @@ u8 * hostapd_eid_vht_capabilities(struct struct ieee80211_vht_capabilities *cap; struct hostapd_hw_modes *mode = hapd->iface->current_mode; u8 *pos = eid; @@ -74,7 +74,7 @@ Signed-off-by: P Praneesh if (!mode || is_6ghz_op_class(hapd->iconf->op_class)) return eid; -@@ -63,6 +64,17 @@ u8 * hostapd_eid_vht_capabilities(struct +@@ -70,6 +71,17 @@ u8 * hostapd_eid_vht_capabilities(struct host_to_le32(nsts << VHT_CAP_BEAMFORMEE_STS_OFFSET); } @@ -92,7 +92,7 @@ Signed-off-by: P Praneesh /* Supported MCS set comes from hw */ os_memcpy(&cap->vht_supported_mcs_set, mode->vht_mcs_set, 8); -@@ -75,6 +87,7 @@ u8 * hostapd_eid_vht_capabilities(struct +@@ -82,6 +94,7 @@ u8 * hostapd_eid_vht_capabilities(struct u8 * hostapd_eid_vht_operation(struct hostapd_data *hapd, u8 *eid) { struct ieee80211_vht_operation *oper; @@ -100,7 +100,7 @@ Signed-off-by: P Praneesh u8 *pos = eid; enum oper_chan_width oper_chwidth = hostapd_get_oper_chwidth(hapd->iconf); -@@ -113,6 +126,7 @@ u8 * hostapd_eid_vht_operation(struct ho +@@ -120,6 +133,7 @@ u8 * hostapd_eid_vht_operation(struct ho oper->vht_op_info_chan_center_freq_seg1_idx = seg1; oper->vht_op_info_chwidth = oper_chwidth; @@ -108,7 +108,7 @@ Signed-off-by: P Praneesh if (oper_chwidth == CONF_OPER_CHWIDTH_160MHZ) { /* * Convert 160 MHz channel width to new style as interop -@@ -126,6 +140,9 @@ u8 * hostapd_eid_vht_operation(struct ho +@@ -133,6 +147,9 @@ u8 * hostapd_eid_vht_operation(struct ho oper->vht_op_info_chan_center_freq_seg0_idx -= 8; else oper->vht_op_info_chan_center_freq_seg0_idx += 8; @@ -120,7 +120,7 @@ Signed-off-by: P Praneesh * Convert 80+80 MHz channel width to new style as interop --- a/src/common/hw_features_common.c +++ b/src/common/hw_features_common.c -@@ -924,6 +924,7 @@ int ieee80211ac_cap_check(u32 hw, u32 co +@@ -925,6 +925,7 @@ int ieee80211ac_cap_check(u32 hw, u32 co VHT_CAP_CHECK(VHT_CAP_VHT_LINK_ADAPTATION_VHT_MRQ_MFB); VHT_CAP_CHECK(VHT_CAP_RX_ANTENNA_PATTERN); VHT_CAP_CHECK(VHT_CAP_TX_ANTENNA_PATTERN); @@ -130,7 +130,7 @@ Signed-off-by: P Praneesh #undef VHT_CAP_CHECK_MAX --- a/src/common/ieee802_11_defs.h +++ b/src/common/ieee802_11_defs.h -@@ -1438,6 +1438,8 @@ struct ieee80211_ampe_ie { +@@ -1467,6 +1467,8 @@ struct ieee80211_ampe_ie { #define VHT_CAP_VHT_LINK_ADAPTATION_VHT_MRQ_MFB ((u32) BIT(26) | BIT(27)) #define VHT_CAP_RX_ANTENNA_PATTERN ((u32) BIT(28)) #define VHT_CAP_TX_ANTENNA_PATTERN ((u32) BIT(29)) diff --git a/package/network/services/hostapd/patches/180-fix_owe_ssid_update.patch b/package/network/services/hostapd/patches/180-fix_owe_ssid_update.patch index 02ed2dedf1..c2cf98bef4 100644 --- a/package/network/services/hostapd/patches/180-fix_owe_ssid_update.patch +++ b/package/network/services/hostapd/patches/180-fix_owe_ssid_update.patch @@ -1,6 +1,6 @@ --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -2449,7 +2449,11 @@ static int hostapd_owe_iface_iter(struct +@@ -2477,7 +2477,11 @@ static int hostapd_owe_iface_iter(struct if (!bss->conf->ssid.ssid_set || !bss->conf->ssid.ssid_len || is_zero_ether_addr(bss->own_addr)) continue; @@ -13,7 +13,7 @@ os_memcpy(hapd->conf->owe_transition_bssid, bss->own_addr, ETH_ALEN); os_memcpy(hapd->conf->owe_transition_ssid, -@@ -2466,10 +2470,6 @@ static int hostapd_owe_iface_iter(struct +@@ -2494,10 +2498,6 @@ static int hostapd_owe_iface_iter(struct int hostapd_owe_trans_get_info(struct hostapd_data *hapd) { diff --git a/package/network/services/hostapd/patches/190-hostapd-Fix-hostapd-crash-if-setup-a-iface-with-.patch b/package/network/services/hostapd/patches/190-hostapd-Fix-hostapd-crash-if-setup-a-iface-with-.patch deleted file mode 100644 index d05f272afe..0000000000 --- a/package/network/services/hostapd/patches/190-hostapd-Fix-hostapd-crash-if-setup-a-iface-with-.patch +++ /dev/null @@ -1,46 +0,0 @@ -From c14e53ea013415a29e9c493e9dacafb6dc5b31ee Mon Sep 17 00:00:00 2001 -From: Michael-CY Lee -Date: Fri, 8 Nov 2024 10:20:03 +0800 -Subject: [PATCH] hostapd: Fix hostapd crash if setup a iface with a link bss failed - -The crash occurs while some link bsses is traversing all the links by using -for_each_mld_link(), and hostapd access to the link bss which is already -been freed. - -If hostapd setup a link bss failed, the link should be removed from -its hostapd_mld. However, the function hostapd_bss_link_deinit -doesn't remove the link bss correctly if it is the first bss and -hapd->drv_priv is null. Therefore we should refator the remove iface flow -as hostapd_remove_iface (used in wifi down cmd). - -There are some cases that setup a bss may fail (e.g. afc query failed) or -trigger channel switch while hostapd is setting up other links. -The failed link would be add into hostapd_mld while driver_init(). - -Signed-off-by: Allen Ye -Signed-off-by: Michael-CY Lee -Signed-off-by: Felix Fietkau ---- - src/ap/hostapd.c | 5 +++++ - 1 file changed, 5 insertions(+) - ---- a/src/ap/hostapd.c -+++ b/src/ap/hostapd.c -@@ -3878,6 +3878,7 @@ int hostapd_add_iface(struct hapd_interf - } - - if (hostapd_setup_interface(hapd_iface)) { -+ hostapd_bss_link_deinit(hapd_iface->bss[0]); - hostapd_deinit_driver( - hapd_iface->bss[0]->driver, - hapd_iface->bss[0]->drv_priv, -@@ -5135,6 +5136,9 @@ int hostapd_mld_remove_link(struct hosta - if (!mld) - return -1; - -+ if (!hapd->link.next) -+ return 0; -+ - dl_list_del(&hapd->link); - mld->num_links--; - diff --git a/package/network/services/hostapd/patches/191-hostapd-add-support-for-specifying-the-link-id-in-th.patch b/package/network/services/hostapd/patches/191-hostapd-add-support-for-specifying-the-link-id-in-th.patch index fa44875aa6..e60206bc94 100644 --- a/package/network/services/hostapd/patches/191-hostapd-add-support-for-specifying-the-link-id-in-th.patch +++ b/package/network/services/hostapd/patches/191-hostapd-add-support-for-specifying-the-link-id-in-th.patch @@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -4934,6 +4934,8 @@ static int hostapd_config_fill(struct ho +@@ -4957,6 +4957,8 @@ static int hostapd_config_fill(struct ho conf->punct_acs_threshold = val; } else if (os_strcmp(buf, "mld_ap") == 0) { bss->mld_ap = !!atoi(pos); @@ -20,20 +20,19 @@ Signed-off-by: Felix Fietkau wpa_printf(MSG_ERROR, "Line %d: Invalid mld_addr", --- a/src/ap/ap_config.c +++ b/src/ap/ap_config.c -@@ -177,6 +177,10 @@ void hostapd_config_defaults_bss(struct - bss->pasn_comeback_after = 10; - bss->pasn_noauth = 1; +@@ -179,6 +179,9 @@ void hostapd_config_defaults_bss(struct #endif /* CONFIG_PASN */ -+ + bss->urnm_mfpr_x20 = -1; + bss->urnm_mfpr = -1; +#ifdef CONFIG_IEEE80211BE + bss->mld_link_id = -1; +#endif - } - - + #ifdef CONFIG_ENC_ASSOC + bss->assoc_frame_encryption = 0; + bss->pmksa_caching_privacy = 0; --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h -@@ -967,6 +967,8 @@ struct hostapd_bss_config { +@@ -979,6 +979,8 @@ struct hostapd_bss_config { /* The AP's MLD MAC address within the AP MLD */ u8 mld_addr[ETH_ALEN]; @@ -44,7 +43,7 @@ Signed-off-by: Felix Fietkau * If set indicate the AP as disabled in the RNR element included in the --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -3105,7 +3105,10 @@ struct hostapd_iface * hostapd_alloc_ifa +@@ -3120,7 +3120,10 @@ struct hostapd_iface * hostapd_alloc_ifa #ifdef CONFIG_IEEE80211BE static void hostapd_bss_alloc_link_id(struct hostapd_data *hapd) { diff --git a/package/network/services/hostapd/patches/192-nl80211-cancel-scans-whenever-the-first-bss-is-remov.patch b/package/network/services/hostapd/patches/192-nl80211-cancel-scans-whenever-the-first-bss-is-remov.patch deleted file mode 100644 index 24ddf5bcc0..0000000000 --- a/package/network/services/hostapd/patches/192-nl80211-cancel-scans-whenever-the-first-bss-is-remov.patch +++ /dev/null @@ -1,22 +0,0 @@ -From: Felix Fietkau -Date: Tue, 21 Oct 2025 10:19:41 +0200 -Subject: [PATCH] nl80211: cancel scans whenever the first bss is removed - -Whenever the first bss is removed, any pending scan still keeps a reference -to it. Cancel it in order to prevent use-after-free bugs. - -Signed-off-by: Felix Fietkau ---- - ---- a/src/drivers/driver_nl80211.c -+++ b/src/drivers/driver_nl80211.c -@@ -9261,6 +9261,9 @@ static int wpa_driver_nl80211_if_remove( - wpa_printf(MSG_INFO, "nl80211: %s - could not find " - "BSS %p in the list", __func__, bss); - } else { -+ if (eloop_cancel_timeout(wpa_driver_nl80211_scan_timeout, drv, bss->ctx)) -+ wpa_driver_nl80211_scan_timeout(drv, bss->ctx); -+ - wpa_printf(MSG_DEBUG, "nl80211: First BSS - reassign context"); - nl80211_teardown_ap(bss); - nl80211_remove_links(bss); diff --git a/package/network/services/hostapd/patches/200-multicall.patch b/package/network/services/hostapd/patches/200-multicall.patch index 53d89ef89b..299f029af9 100644 --- a/package/network/services/hostapd/patches/200-multicall.patch +++ b/package/network/services/hostapd/patches/200-multicall.patch @@ -43,7 +43,7 @@ This allows building both hostapd and wpa_supplicant as a single binary LIBS += $(DRV_AP_LIBS) ifdef CONFIG_L2_PACKET -@@ -1406,6 +1412,12 @@ install: $(addprefix $(DESTDIR)$(BINDIR) +@@ -1416,6 +1422,12 @@ install: $(addprefix $(DESTDIR)$(BINDIR) _OBJS_VAR := OBJS include ../src/objs.mk @@ -56,7 +56,7 @@ This allows building both hostapd and wpa_supplicant as a single binary hostapd: $(OBJS) $(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS) @$(E) " LD " $@ -@@ -1494,6 +1506,12 @@ include ../src/objs.mk +@@ -1504,6 +1516,12 @@ include ../src/objs.mk _OBJS_VAR := SOBJS include ../src/objs.mk @@ -71,7 +71,7 @@ This allows building both hostapd and wpa_supplicant as a single binary @$(E) " LD " $@ --- a/hostapd/main.c +++ b/hostapd/main.c -@@ -737,6 +737,11 @@ fail: +@@ -744,6 +744,11 @@ fail: return -1; } @@ -83,18 +83,18 @@ This allows building both hostapd and wpa_supplicant as a single binary #ifdef CONFIG_WPS static int gen_uuid(const char *txt_addr) -@@ -858,6 +863,8 @@ int main(int argc, char *argv[]) +@@ -868,6 +873,8 @@ int main(int argc, char *argv[]) return -1; #endif /* CONFIG_DPP */ + wpa_supplicant_event = hostapd_wpa_event; + wpa_supplicant_event_global = hostapd_wpa_event_global; for (;;) { - c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:q"); + c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:qz:"); if (c < 0) --- a/src/ap/drv_callbacks.c +++ b/src/ap/drv_callbacks.c -@@ -2561,8 +2561,8 @@ static void hostapd_mld_iface_disable(st +@@ -2580,8 +2580,8 @@ static void hostapd_mld_iface_disable(st #endif /* CONFIG_IEEE80211BE */ @@ -105,7 +105,7 @@ This allows building both hostapd and wpa_supplicant as a single binary { struct hostapd_data *hapd = ctx; struct sta_info *sta; -@@ -2920,7 +2920,7 @@ void wpa_supplicant_event(void *ctx, enu +@@ -2943,7 +2943,7 @@ void wpa_supplicant_event(void *ctx, enu } @@ -116,7 +116,7 @@ This allows building both hostapd and wpa_supplicant as a single binary struct hapd_interfaces *interfaces = ctx; --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -7166,8 +7166,8 @@ union wpa_event_data { +@@ -7290,8 +7290,8 @@ union wpa_event_data { * Driver wrapper code should call this function whenever an event is received * from the driver. */ @@ -127,7 +127,7 @@ This allows building both hostapd and wpa_supplicant as a single binary /** * wpa_supplicant_event_global - Report a driver event for wpa_supplicant -@@ -7179,7 +7179,7 @@ void wpa_supplicant_event(void *ctx, enu +@@ -7303,7 +7303,7 @@ void wpa_supplicant_event(void *ctx, enu * Same as wpa_supplicant_event(), but we search for the interface in * wpa_global. */ @@ -159,7 +159,7 @@ This allows building both hostapd and wpa_supplicant as a single binary include ../src/build.rules ifdef CONFIG_BUILD_PASN_SO -@@ -390,7 +391,9 @@ endif +@@ -407,7 +408,9 @@ endif ifdef CONFIG_IBSS_RSN NEED_RSN_AUTHENTICATOR=y CFLAGS += -DCONFIG_IBSS_RSN @@ -169,7 +169,7 @@ This allows building both hostapd and wpa_supplicant as a single binary OBJS += ibss_rsn.o endif -@@ -984,6 +987,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS +@@ -1006,6 +1009,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS LIBS += -ldl -rdynamic endif @@ -180,7 +180,7 @@ This allows building both hostapd and wpa_supplicant as a single binary endif ifdef CONFIG_AP -@@ -991,9 +998,11 @@ NEED_EAP_COMMON=y +@@ -1013,9 +1020,11 @@ NEED_EAP_COMMON=y NEED_RSN_AUTHENTICATOR=y CFLAGS += -DCONFIG_AP OBJS += ap.o @@ -192,7 +192,7 @@ This allows building both hostapd and wpa_supplicant as a single binary OBJS += ../src/ap/hostapd.o OBJS += ../src/ap/wpa_auth_glue.o OBJS += ../src/ap/utils.o -@@ -1084,6 +1093,12 @@ endif +@@ -1106,6 +1115,12 @@ endif ifdef CONFIG_HS20 OBJS += ../src/ap/hs20.o endif @@ -205,7 +205,7 @@ This allows building both hostapd and wpa_supplicant as a single binary endif ifdef CONFIG_MBO -@@ -1093,7 +1108,9 @@ NEED_GAS=y +@@ -1115,7 +1130,9 @@ NEED_GAS=y endif ifdef NEED_RSN_AUTHENTICATOR @@ -215,7 +215,7 @@ This allows building both hostapd and wpa_supplicant as a single binary NEED_AES_WRAP=y OBJS += ../src/ap/wpa_auth.o OBJS += ../src/ap/wpa_auth_ie.o -@@ -2084,6 +2101,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv) +@@ -2111,6 +2128,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv) _OBJS_VAR := OBJS include ../src/objs.mk @@ -228,7 +228,7 @@ This allows building both hostapd and wpa_supplicant as a single binary wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs) $(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS) @$(E) " LD " $@ -@@ -2216,6 +2239,12 @@ eap_gpsk.so: $(SRC_EAP_GPSK) +@@ -2243,6 +2266,12 @@ eap_gpsk.so: $(SRC_EAP_GPSK) $(Q)sed -e 's|\@BINDIR\@|$(BINDIR)|g' $< >$@ @$(E) " sed" $< @@ -278,7 +278,7 @@ This allows building both hostapd and wpa_supplicant as a single binary os_memset(&eapol_test, 0, sizeof(eapol_test)); --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c -@@ -6257,8 +6257,8 @@ static int wpas_pasn_auth(struct wpa_sup +@@ -6519,8 +6519,8 @@ static int wpas_pasn_auth(struct wpa_sup #endif /* CONFIG_PASN */ @@ -289,7 +289,7 @@ This allows building both hostapd and wpa_supplicant as a single binary { struct wpa_supplicant *wpa_s = ctx; int resched; -@@ -7232,7 +7232,7 @@ void wpa_supplicant_event(void *ctx, enu +@@ -7514,7 +7514,7 @@ void wpa_supplicant_event(void *ctx, enu } @@ -331,7 +331,7 @@ This allows building both hostapd and wpa_supplicant as a single binary os_memset(&global, 0, sizeof(global)); --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -8156,7 +8156,6 @@ struct wpa_interface * wpa_supplicant_ma +@@ -8262,7 +8262,6 @@ struct wpa_interface * wpa_supplicant_ma return NULL; } @@ -339,7 +339,7 @@ This allows building both hostapd and wpa_supplicant as a single binary /** * wpa_supplicant_match_existing - Match existing interfaces * @global: Pointer to global data from wpa_supplicant_init() -@@ -8191,6 +8190,11 @@ static int wpa_supplicant_match_existing +@@ -8297,6 +8296,11 @@ static int wpa_supplicant_match_existing #endif /* CONFIG_MATCH_IFACE */ @@ -351,7 +351,7 @@ This allows building both hostapd and wpa_supplicant as a single binary /** * wpa_supplicant_add_iface - Add a new network interface -@@ -8447,6 +8451,8 @@ struct wpa_global * wpa_supplicant_init( +@@ -8553,6 +8557,8 @@ struct wpa_global * wpa_supplicant_init( #ifndef CONFIG_NO_WPA_MSG wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb); #endif /* CONFIG_NO_WPA_MSG */ diff --git a/package/network/services/hostapd/patches/201-lto-jobserver-support.patch b/package/network/services/hostapd/patches/201-lto-jobserver-support.patch index 531852cf21..4de7e7a590 100644 --- a/package/network/services/hostapd/patches/201-lto-jobserver-support.patch +++ b/package/network/services/hostapd/patches/201-lto-jobserver-support.patch @@ -5,7 +5,7 @@ Subject: [PATCH] hostapd: build with LTO enabled (using jobserver for parallel --- a/hostapd/Makefile +++ b/hostapd/Makefile -@@ -1419,7 +1419,7 @@ hostapd_multi.a: $(BCHECK) $(OBJS) +@@ -1429,7 +1429,7 @@ hostapd_multi.a: $(BCHECK) $(OBJS) @$(AR) cr $@ hostapd_multi.o $(OBJS) hostapd: $(OBJS) @@ -14,7 +14,7 @@ Subject: [PATCH] hostapd: build with LTO enabled (using jobserver for parallel @$(E) " LD " $@ ifdef CONFIG_WPA_TRACE -@@ -1430,7 +1430,7 @@ _OBJS_VAR := OBJS_c +@@ -1440,7 +1440,7 @@ _OBJS_VAR := OBJS_c include ../src/objs.mk hostapd_cli: $(OBJS_c) @@ -25,7 +25,7 @@ Subject: [PATCH] hostapd: build with LTO enabled (using jobserver for parallel NOBJS = nt_password_hash.o ../src/crypto/ms_funcs.o $(SHA1OBJS) --- a/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile -@@ -2108,31 +2108,31 @@ wpa_supplicant_multi.a: .config $(BCHECK +@@ -2135,31 +2135,31 @@ wpa_supplicant_multi.a: .config $(BCHECK @$(AR) cr $@ wpa_supplicant_multi.o $(OBJS) wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs) diff --git a/package/network/services/hostapd/patches/211-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch b/package/network/services/hostapd/patches/211-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch index b3ac512e4c..5dcd22160c 100644 --- a/package/network/services/hostapd/patches/211-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch +++ b/package/network/services/hostapd/patches/211-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch @@ -13,7 +13,7 @@ Signed-off-by: David Bauer --- a/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c -@@ -13676,7 +13676,7 @@ char * wpa_supplicant_ctrl_iface_process +@@ -13989,7 +13989,7 @@ char * wpa_supplicant_ctrl_iface_process if (wpas_ctrl_iface_coloc_intf_report(wpa_s, buf + 18)) reply_len = -1; #endif /* CONFIG_WNM */ @@ -22,7 +22,7 @@ Signed-off-by: David Bauer } else if (os_strncmp(buf, "DISASSOC_IMMINENT ", 18) == 0) { if (ap_ctrl_iface_disassoc_imminent(wpa_s, buf + 18)) reply_len = -1; -@@ -13686,7 +13686,7 @@ char * wpa_supplicant_ctrl_iface_process +@@ -13999,7 +13999,7 @@ char * wpa_supplicant_ctrl_iface_process } else if (os_strncmp(buf, "BSS_TM_REQ ", 11) == 0) { if (ap_ctrl_iface_bss_tm_req(wpa_s, buf + 11)) reply_len = -1; diff --git a/package/network/services/hostapd/patches/212-Move-definition-of-WLAN_SUPP_RATES_MAX-to-defs.h.patch b/package/network/services/hostapd/patches/212-Move-definition-of-WLAN_SUPP_RATES_MAX-to-defs.h.patch index cb3bea7771..2961749c39 100644 --- a/package/network/services/hostapd/patches/212-Move-definition-of-WLAN_SUPP_RATES_MAX-to-defs.h.patch +++ b/package/network/services/hostapd/patches/212-Move-definition-of-WLAN_SUPP_RATES_MAX-to-defs.h.patch @@ -43,7 +43,7 @@ Signed-off-by: Eneas U de Queiroz struct mbo_non_pref_chan_info { --- a/src/common/defs.h +++ b/src/common/defs.h -@@ -62,6 +62,10 @@ +@@ -63,6 +63,10 @@ WPA_KEY_MGMT_FT_FILS_SHA256 | \ WPA_KEY_MGMT_FT_FILS_SHA384) diff --git a/package/network/services/hostapd/patches/220-indicate-features.patch b/package/network/services/hostapd/patches/220-indicate-features.patch index e6456c6338..a3a1786402 100644 --- a/package/network/services/hostapd/patches/220-indicate-features.patch +++ b/package/network/services/hostapd/patches/220-indicate-features.patch @@ -6,7 +6,7 @@ Subject: [PATCH] hostapd: support optional argument for the -v switch of --- a/hostapd/main.c +++ b/hostapd/main.c -@@ -31,7 +31,7 @@ +@@ -32,7 +32,7 @@ #include "config_file.h" #include "eap_register.h" #include "ctrl_iface.h" @@ -15,16 +15,16 @@ Subject: [PATCH] hostapd: support optional argument for the -v switch of struct hapd_global { void **drv_priv; -@@ -866,7 +866,7 @@ int main(int argc, char *argv[]) +@@ -876,7 +876,7 @@ int main(int argc, char *argv[]) wpa_supplicant_event = hostapd_wpa_event; wpa_supplicant_event_global = hostapd_wpa_event_global; for (;;) { -- c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:q"); -+ c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:g:G:qv::"); +- c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:vg:G:qz:"); ++ c = getopt(argc, argv, "b:Bde:f:hi:KP:sSTtu:v::g:G:qz:"); if (c < 0) break; switch (c) { -@@ -903,6 +903,8 @@ int main(int argc, char *argv[]) +@@ -913,6 +913,8 @@ int main(int argc, char *argv[]) break; #endif /* CONFIG_DEBUG_LINUX_TRACING */ case 'v': @@ -43,16 +43,16 @@ Subject: [PATCH] hostapd: support optional argument for the -v switch of #include "crypto/crypto.h" #include "fst/fst.h" #include "wpa_supplicant_i.h" -@@ -202,7 +203,7 @@ int main(int argc, char *argv[]) +@@ -213,7 +214,7 @@ int main(int argc, char *argv[]) for (;;) { c = getopt(argc, argv, -- "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuvW"); -+ "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuv::W"); +- "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuvWyz:"); ++ "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuv::Wyz:"); if (c < 0) break; switch (c) { -@@ -302,8 +303,12 @@ int main(int argc, char *argv[]) +@@ -313,8 +314,12 @@ int main(int argc, char *argv[]) break; #endif /* CONFIG_CTRL_IFACE_DBUS_NEW */ case 'v': diff --git a/package/network/services/hostapd/patches/250-hostapd_cli_ifdef.patch b/package/network/services/hostapd/patches/250-hostapd_cli_ifdef.patch index 90737b2ac0..8cb7ef601b 100644 --- a/package/network/services/hostapd/patches/250-hostapd_cli_ifdef.patch +++ b/package/network/services/hostapd/patches/250-hostapd_cli_ifdef.patch @@ -37,7 +37,7 @@ Subject: [PATCH] hostapd: support wps in hostapd_cli even when built from the static int hostapd_cli_cmd_disassoc_imminent(struct wpa_ctrl *ctrl, int argc, -@@ -1694,13 +1690,10 @@ static const struct hostapd_cli_cmd host +@@ -1715,13 +1711,10 @@ static const struct hostapd_cli_cmd host { "disassociate", hostapd_cli_cmd_disassociate, hostapd_complete_stations, " = disassociate a station" }, @@ -51,7 +51,7 @@ Subject: [PATCH] hostapd: support wps in hostapd_cli even when built from the { "wps_pin", hostapd_cli_cmd_wps_pin, NULL, " [timeout] [addr] = add WPS Enrollee PIN" }, { "wps_check_pin", hostapd_cli_cmd_wps_check_pin, NULL, -@@ -1725,7 +1718,6 @@ static const struct hostapd_cli_cmd host +@@ -1746,7 +1739,6 @@ static const struct hostapd_cli_cmd host " = configure AP" }, { "wps_get_status", hostapd_cli_cmd_wps_get_status, NULL, "= show current WPS status" }, diff --git a/package/network/services/hostapd/patches/252-disable_ctrl_iface_mib.patch b/package/network/services/hostapd/patches/252-disable_ctrl_iface_mib.patch index 387a19b2bf..5dbad411ca 100644 --- a/package/network/services/hostapd/patches/252-disable_ctrl_iface_mib.patch +++ b/package/network/services/hostapd/patches/252-disable_ctrl_iface_mib.patch @@ -16,7 +16,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality else --- a/hostapd/ctrl_iface.c +++ b/hostapd/ctrl_iface.c -@@ -4115,6 +4115,7 @@ static int hostapd_ctrl_iface_receive_pr +@@ -3977,6 +3977,7 @@ static int hostapd_ctrl_iface_receive_pr reply_size); } else if (os_strcmp(buf, "STATUS-DRIVER") == 0) { reply_len = hostapd_drv_status(hapd, reply, reply_size); @@ -24,7 +24,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality } else if (os_strcmp(buf, "MIB") == 0) { reply_len = ieee802_11_get_mib(hapd, reply, reply_size); if (reply_len >= 0) { -@@ -4156,6 +4157,7 @@ static int hostapd_ctrl_iface_receive_pr +@@ -4018,6 +4019,7 @@ static int hostapd_ctrl_iface_receive_pr } else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) { reply_len = hostapd_ctrl_iface_sta_next(hapd, buf + 9, reply, reply_size); @@ -34,7 +34,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality reply_len = -1; --- a/src/ap/ctrl_iface_ap.c +++ b/src/ap/ctrl_iface_ap.c -@@ -26,6 +26,26 @@ +@@ -27,6 +27,26 @@ #include "taxonomy.h" #include "wnm_ap.h" @@ -61,7 +61,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality static size_t hostapd_write_ht_mcs_bitmask(char *buf, size_t buflen, size_t curr_len, const u8 *mcs_set) -@@ -212,26 +232,6 @@ static const char * timeout_next_str(int +@@ -213,26 +233,6 @@ static const char * timeout_next_str(int } @@ -88,7 +88,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality static int hostapd_ctrl_iface_sta_mib(struct hostapd_data *hapd, struct sta_info *sta, char *buf, size_t buflen) -@@ -571,6 +571,7 @@ int hostapd_ctrl_iface_sta_next(struct h +@@ -572,6 +572,7 @@ int hostapd_ctrl_iface_sta_next(struct h return hostapd_ctrl_iface_sta_mib(hapd, sta->next, buf, buflen); } @@ -96,19 +96,19 @@ Subject: [PATCH] Remove some unnecessary control interface functionality #ifdef CONFIG_P2P_MANAGER static int p2p_manager_disconnect(struct hostapd_data *hapd, u16 stype, -@@ -1043,12 +1044,12 @@ int hostapd_ctrl_iface_status(struct hos +@@ -1041,12 +1042,12 @@ int hostapd_ctrl_iface_status(struct hos return len; len += ret; } - +#ifdef CONFIG_CTRL_IFACE_MIB - if (iface->conf->ieee80211n && !hapd->conf->disable_11n && mode) { + if (hostapd_is_ht_enabled(hapd) && mode) { len = hostapd_write_ht_mcs_bitmask(buf, buflen, len, mode->mcs_set); } - +#endif /* CONFIG_CTRL_IFACE_MIB */ - if (iface->current_rates && iface->num_rates) { + if (hapd->current_rates && hapd->num_rates) { ret = os_snprintf(buf + len, buflen - len, "supported_rates="); if (os_snprintf_error(buflen - len, ret)) --- a/src/ap/ieee802_1x.c @@ -131,7 +131,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality static void ieee802_1x_wnm_notif_send(void *eloop_ctx, void *timeout_ctx) --- a/src/ap/wpa_auth.c +++ b/src/ap/wpa_auth.c -@@ -6238,6 +6238,7 @@ static const char * wpa_bool_txt(int val +@@ -6483,6 +6483,7 @@ static const char * wpa_bool_txt(int val return val ? "TRUE" : "FALSE"; } @@ -139,7 +139,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality #define RSN_SUITE "%02x-%02x-%02x-%d" #define RSN_SUITE_ARG(s) \ -@@ -6390,7 +6391,7 @@ int wpa_get_mib_sta(struct wpa_state_mac +@@ -6635,7 +6636,7 @@ int wpa_get_mib_sta(struct wpa_state_mac return len; } @@ -150,7 +150,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality { --- a/src/rsn_supp/wpa.c +++ b/src/rsn_supp/wpa.c -@@ -4189,6 +4189,8 @@ static u32 wpa_key_mgmt_suite(struct wpa +@@ -4251,6 +4251,8 @@ static u32 wpa_key_mgmt_suite(struct wpa } @@ -159,7 +159,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality #define RSN_SUITE "%02x-%02x-%02x-%d" #define RSN_SUITE_ARG(s) \ ((s) >> 24) & 0xff, ((s) >> 16) & 0xff, ((s) >> 8) & 0xff, (s) & 0xff -@@ -4270,6 +4272,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch +@@ -4332,6 +4334,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch return (int) len; } @@ -169,7 +169,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality --- a/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile -@@ -1042,6 +1042,9 @@ ifdef CONFIG_FILS +@@ -1064,6 +1064,9 @@ ifdef CONFIG_FILS OBJS += ../src/ap/fils_hlp.o endif ifdef CONFIG_CTRL_IFACE @@ -181,7 +181,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality --- a/wpa_supplicant/ap.c +++ b/wpa_supplicant/ap.c -@@ -1525,7 +1525,7 @@ int wpas_ap_wps_nfc_report_handover(stru +@@ -1527,7 +1527,7 @@ int wpas_ap_wps_nfc_report_handover(stru #endif /* CONFIG_WPS */ @@ -192,7 +192,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality char *buf, size_t buflen) --- a/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c -@@ -2375,7 +2375,7 @@ static int wpa_supplicant_ctrl_iface_sta +@@ -2404,7 +2404,7 @@ static int wpa_supplicant_ctrl_iface_sta pos += ret; } @@ -201,15 +201,15 @@ Subject: [PATCH] Remove some unnecessary control interface functionality if (wpa_s->ap_iface) { pos += ap_ctrl_iface_wpa_get_status(wpa_s, pos, end - pos, -@@ -13005,6 +13005,7 @@ char * wpa_supplicant_ctrl_iface_process - reply_len = -1; +@@ -13318,6 +13318,7 @@ char * wpa_supplicant_ctrl_iface_process } else if (os_strncmp(buf, "NOTE ", 5) == 0) { wpa_printf(MSG_INFO, "NOTE: %s", buf + 5); + wpa_trace_set_context(buf + 5); +#ifdef CONFIG_CTRL_IFACE_MIB } else if (os_strcmp(buf, "MIB") == 0) { reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size); if (reply_len >= 0) { -@@ -13017,6 +13018,7 @@ char * wpa_supplicant_ctrl_iface_process +@@ -13330,6 +13331,7 @@ char * wpa_supplicant_ctrl_iface_process reply_size - reply_len); #endif /* CONFIG_MACSEC */ } @@ -217,7 +217,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality } else if (os_strncmp(buf, "STATUS", 6) == 0) { reply_len = wpa_supplicant_ctrl_iface_status( wpa_s, buf + 6, reply, reply_size); -@@ -13504,6 +13506,7 @@ char * wpa_supplicant_ctrl_iface_process +@@ -13817,6 +13819,7 @@ char * wpa_supplicant_ctrl_iface_process reply_len = wpa_supplicant_ctrl_iface_bss( wpa_s, buf + 4, reply, reply_size); #ifdef CONFIG_AP @@ -225,7 +225,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality } else if (os_strcmp(buf, "STA-FIRST") == 0) { reply_len = ap_ctrl_iface_sta_first(wpa_s, reply, reply_size); } else if (os_strncmp(buf, "STA ", 4) == 0) { -@@ -13512,12 +13515,15 @@ char * wpa_supplicant_ctrl_iface_process +@@ -13825,12 +13828,15 @@ char * wpa_supplicant_ctrl_iface_process } else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) { reply_len = ap_ctrl_iface_sta_next(wpa_s, buf + 9, reply, reply_size); diff --git a/package/network/services/hostapd/patches/300-noscan.patch b/package/network/services/hostapd/patches/300-noscan.patch index 314f0eff1b..ab3df7c1b4 100644 --- a/package/network/services/hostapd/patches/300-noscan.patch +++ b/package/network/services/hostapd/patches/300-noscan.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add noscan, no_ht_coex config options --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -3518,6 +3518,10 @@ static int hostapd_config_fill(struct ho +@@ -3530,6 +3530,10 @@ static int hostapd_config_fill(struct ho if (bss->ocv && !bss->ieee80211w) bss->ieee80211w = 1; #endif /* CONFIG_OCV */ @@ -18,7 +18,7 @@ Subject: [PATCH] Add noscan, no_ht_coex config options } else if (os_strcmp(buf, "ht_capab") == 0) { --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h -@@ -1107,6 +1107,8 @@ struct hostapd_config { +@@ -1119,6 +1119,8 @@ struct hostapd_config { int ht_op_mode_fixed; u16 ht_capab; @@ -29,7 +29,7 @@ Subject: [PATCH] Add noscan, no_ht_coex config options int no_pri_sec_switch; --- a/src/ap/hw_features.c +++ b/src/ap/hw_features.c -@@ -567,7 +567,8 @@ static int ieee80211n_check_40mhz(struct +@@ -619,7 +619,8 @@ static int ieee80211n_check_40mhz(struct int ret; /* Check that HT40 is used and PRI / SEC switch is allowed */ diff --git a/package/network/services/hostapd/patches/301-mesh-noscan.patch b/package/network/services/hostapd/patches/301-mesh-noscan.patch index 7e4aed800d..44af6f4502 100644 --- a/package/network/services/hostapd/patches/301-mesh-noscan.patch +++ b/package/network/services/hostapd/patches/301-mesh-noscan.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also --- a/wpa_supplicant/config.c +++ b/wpa_supplicant/config.c -@@ -2642,6 +2642,7 @@ static const struct parse_data ssid_fiel +@@ -2718,6 +2718,7 @@ static const struct parse_data ssid_fiel #else /* CONFIG_MESH */ { INT_RANGE(mode, 0, 4) }, #endif /* CONFIG_MESH */ @@ -15,7 +15,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also { STR(id_str) }, --- a/wpa_supplicant/config_file.c +++ b/wpa_supplicant/config_file.c -@@ -869,6 +869,7 @@ static void wpa_config_write_network(FIL +@@ -885,6 +885,7 @@ static void wpa_config_write_network(FIL INT(mode); #ifdef CONFIG_MESH INT(no_auto_peer); @@ -25,7 +25,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also INT(frequency); --- a/wpa_supplicant/config_ssid.h +++ b/wpa_supplicant/config_ssid.h -@@ -1071,6 +1071,8 @@ struct wpa_ssid { +@@ -1075,6 +1075,8 @@ struct wpa_ssid { */ int no_auto_peer; @@ -36,7 +36,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also * --- a/wpa_supplicant/mesh.c +++ b/wpa_supplicant/mesh.c -@@ -538,6 +538,8 @@ static int wpa_supplicant_mesh_init(stru +@@ -517,6 +517,8 @@ static int wpa_supplicant_mesh_init(stru frequency); goto out_free; } @@ -47,7 +47,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also /* --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -3048,7 +3048,7 @@ static bool ibss_mesh_can_use_vht(struct +@@ -3117,7 +3117,7 @@ static bool ibss_mesh_can_use_vht(struct const struct wpa_ssid *ssid, struct hostapd_hw_modes *mode) { @@ -56,7 +56,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also return false; if (!drv_supports_vht(wpa_s, ssid)) -@@ -3122,7 +3122,7 @@ static void ibss_mesh_select_40mhz(struc +@@ -3191,7 +3191,7 @@ static void ibss_mesh_select_40mhz(struc int i, res; unsigned int j; static const int ht40plus_5ghz[] = { @@ -65,7 +65,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also 149, 157, 165, 173, 184, 192 }; static const int ht40plus_6ghz[] = { -@@ -3475,7 +3475,7 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3544,7 +3544,7 @@ void ibss_mesh_setup_freq(struct wpa_sup int ieee80211_mode = wpas_mode_to_ieee80211_mode(ssid->mode); enum hostapd_hw_mode hw_mode; struct hostapd_hw_modes *mode = NULL; @@ -74,7 +74,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also u8 channel; bool is_6ghz, is_24ghz; bool dfs_enabled = wpa_s->conf->country[0] && (wpa_s->drv_flags & WPA_DRIVER_FLAGS_RADAR); -@@ -3519,6 +3519,8 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3588,6 +3588,8 @@ void ibss_mesh_setup_freq(struct wpa_sup freq->he_enabled = ibss_mesh_can_use_he(wpa_s, ssid, mode, ieee80211_mode); freq->channel = channel; diff --git a/package/network/services/hostapd/patches/310-rescan_immediately.patch b/package/network/services/hostapd/patches/310-rescan_immediately.patch index c64b2afd32..275db9dd6b 100644 --- a/package/network/services/hostapd/patches/310-rescan_immediately.patch +++ b/package/network/services/hostapd/patches/310-rescan_immediately.patch @@ -5,7 +5,7 @@ Subject: [PATCH] rescan_immediately.patch --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -6404,7 +6404,7 @@ wpa_supplicant_alloc(struct wpa_supplica +@@ -6480,7 +6480,7 @@ wpa_supplicant_alloc(struct wpa_supplica if (wpa_s == NULL) return NULL; wpa_s->scan_req = INITIAL_SCAN_REQ; diff --git a/package/network/services/hostapd/patches/320-optional_rfkill.patch b/package/network/services/hostapd/patches/320-optional_rfkill.patch index dd6fa1d053..aeeaeb4331 100644 --- a/package/network/services/hostapd/patches/320-optional_rfkill.patch +++ b/package/network/services/hostapd/patches/320-optional_rfkill.patch @@ -12,7 +12,7 @@ Subject: [PATCH] hostapd: make rfkill support optional NEED_RADIOTAP=y NEED_LIBNL=y endif -@@ -111,7 +110,6 @@ DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT +@@ -91,7 +90,6 @@ DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT CONFIG_WIRELESS_EXTENSION=y NEED_NETLINK=y NEED_LINUX_IOCTL=y @@ -20,7 +20,7 @@ Subject: [PATCH] hostapd: make rfkill support optional endif ifdef CONFIG_DRIVER_NDIS -@@ -137,7 +135,6 @@ endif +@@ -117,7 +115,6 @@ endif ifdef CONFIG_WIRELESS_EXTENSION DRV_WPA_CFLAGS += -DCONFIG_WIRELESS_EXTENSION DRV_WPA_OBJS += ../src/drivers/driver_wext.o @@ -28,7 +28,7 @@ Subject: [PATCH] hostapd: make rfkill support optional endif ifdef NEED_NETLINK -@@ -146,6 +143,7 @@ endif +@@ -126,6 +123,7 @@ endif ifdef NEED_RFKILL DRV_OBJS += ../src/drivers/rfkill.o diff --git a/package/network/services/hostapd/patches/341-mesh-ctrl-iface-channel-switch.patch b/package/network/services/hostapd/patches/341-mesh-ctrl-iface-channel-switch.patch index cd96dcac74..cbb78fb5c2 100644 --- a/package/network/services/hostapd/patches/341-mesh-ctrl-iface-channel-switch.patch +++ b/package/network/services/hostapd/patches/341-mesh-ctrl-iface-channel-switch.patch @@ -5,7 +5,7 @@ Subject: [PATCH] wpa_supplicant: fix calling channel switch via wpa_cli on --- a/wpa_supplicant/ap.c +++ b/wpa_supplicant/ap.c -@@ -1851,17 +1851,37 @@ int ap_switch_channel(struct wpa_supplic +@@ -1855,6 +1855,21 @@ int ap_switch_channel(struct wpa_supplic #ifdef CONFIG_CTRL_IFACE @@ -27,10 +27,13 @@ Subject: [PATCH] wpa_supplicant: fix calling channel switch via wpa_cli on int ap_ctrl_iface_chanswitch(struct wpa_supplicant *wpa_s, const char *pos) { struct csa_settings settings; - int ret = hostapd_parse_csa_settings(pos, &settings); +@@ -1874,12 +1889,18 @@ int ap_ctrl_iface_chanswitch(struct wpa_ + return -1; + ret = hostapd_parse_csa_settings(iface, pos, &settings); - if (ret) - return ret; ++ + if (!(wpa_s->ap_iface && wpa_s->ap_iface->bss[0]) && + !(wpa_s->ifmsh && wpa_s->ifmsh->bss[0])) + return -1; 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 deleted file mode 100644 index d91aac2f3a..0000000000 --- a/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch +++ /dev/null @@ -1,16 +0,0 @@ -From: Felix Fietkau -Date: Sat, 23 Oct 2010 23:39:54 +0000 -Subject: [PATCH] nl80211_del_beacon_bss.patch - ---- a/src/drivers/driver_nl80211.c -+++ b/src/drivers/driver_nl80211.c -@@ -6405,8 +6405,7 @@ static void nl80211_teardown_ap(struct i - } - - nl80211_put_wiphy_data_ap(bss); -- if (bss->flink) -- bss->flink->beacon_set = 0; -+ wpa_driver_nl80211_del_beacon_all(bss); - } - - diff --git a/package/network/services/hostapd/patches/360-acs_retry.patch b/package/network/services/hostapd/patches/360-acs_retry.patch index e858ac24e7..3f93de342f 100644 --- a/package/network/services/hostapd/patches/360-acs_retry.patch +++ b/package/network/services/hostapd/patches/360-acs_retry.patch @@ -9,15 +9,3 @@ #define ACS_SCAN_RETRY_INTERVAL 5 #else /* CONFIG_ACS */ ---- a/src/drivers/driver_nl80211_scan.c -+++ b/src/drivers/driver_nl80211_scan.c -@@ -455,6 +455,9 @@ int wpa_driver_nl80211_scan(struct i802_ - } - #endif /* CONFIG_IEEE80211BE */ - -+ if (ret == -EBUSY) -+ goto fail; -+ - /* - * mac80211 does not allow scan requests in AP mode, so - * try to do this in station mode. diff --git a/package/network/services/hostapd/patches/370-preserve_radio_mask.patch b/package/network/services/hostapd/patches/370-preserve_radio_mask.patch index bb5e7508f0..7582fe1abe 100644 --- a/package/network/services/hostapd/patches/370-preserve_radio_mask.patch +++ b/package/network/services/hostapd/patches/370-preserve_radio_mask.patch @@ -1,6 +1,6 @@ --- a/src/drivers/driver_nl80211.h +++ b/src/drivers/driver_nl80211.h -@@ -77,6 +77,7 @@ struct i802_bss { +@@ -95,6 +95,7 @@ struct i802_bss { u64 wdev_id; char ifname[IFNAMSIZ + 1]; char brname[IFNAMSIZ]; @@ -8,7 +8,7 @@ unsigned int added_if_into_bridge:1; unsigned int already_in_bridge:1; unsigned int added_bridge:1; -@@ -325,7 +326,7 @@ send_and_recv_resp(struct wpa_driver_nl8 +@@ -346,7 +347,7 @@ send_and_recv_resp(struct wpa_driver_nl8 int nl80211_create_iface(struct wpa_driver_nl80211_data *drv, const char *ifname, enum nl80211_iftype iftype, @@ -19,7 +19,7 @@ void nl80211_remove_iface(struct wpa_driver_nl80211_data *drv, int ifidx); --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -755,6 +755,7 @@ struct wiphy_idx_data { +@@ -887,6 +887,7 @@ struct wiphy_idx_data { enum nl80211_iftype nlmode; u8 *macaddr; u8 use_4addr; @@ -27,7 +27,7 @@ }; -@@ -780,6 +781,9 @@ static int netdev_info_handler(struct nl +@@ -912,6 +913,9 @@ static int netdev_info_handler(struct nl if (tb[NL80211_ATTR_4ADDR]) info->use_4addr = nla_get_u8(tb[NL80211_ATTR_4ADDR]); @@ -37,7 +37,7 @@ return NL_SKIP; } -@@ -846,6 +850,20 @@ static int nl80211_get_4addr(struct i802 +@@ -978,6 +982,20 @@ static int nl80211_get_4addr(struct i802 } @@ -58,7 +58,7 @@ static int nl80211_register_beacons(struct wpa_driver_nl80211_data *drv, struct nl80211_wiphy_data *w) { -@@ -2427,6 +2445,8 @@ static void * wpa_driver_nl80211_drv_ini +@@ -2584,6 +2602,8 @@ static void * wpa_driver_nl80211_drv_ini p2p_mode)) goto failed; @@ -67,7 +67,7 @@ if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_TX_STATUS) { drv->control_port_ap = 1; goto skip_wifi_status; -@@ -6236,7 +6256,7 @@ const char * nl80211_iftype_str(enum nl8 +@@ -6529,7 +6549,7 @@ const char * nl80211_iftype_str(enum nl8 static int nl80211_create_iface_once(struct wpa_driver_nl80211_data *drv, const char *ifname, enum nl80211_iftype iftype, @@ -76,7 +76,7 @@ int (*handler)(struct nl_msg *, void *), void *arg) { -@@ -6256,6 +6276,10 @@ static int nl80211_create_iface_once(str +@@ -6549,6 +6569,10 @@ static int nl80211_create_iface_once(str if (wds && nla_put_u8(msg, NL80211_ATTR_4ADDR, wds)) goto fail; @@ -87,7 +87,7 @@ /* * Tell cfg80211 that the interface belongs to the socket that created * it, and the interface should be deleted when the socket is closed. -@@ -6311,14 +6335,14 @@ static int nl80211_create_iface_once(str +@@ -6641,14 +6665,14 @@ static int nl80211_create_iface_once(str int nl80211_create_iface(struct wpa_driver_nl80211_data *drv, const char *ifname, enum nl80211_iftype iftype, @@ -105,7 +105,7 @@ /* if error occurred and interface exists already */ if (ret < 0 && if_nametoindex(ifname)) { -@@ -6344,7 +6368,7 @@ int nl80211_create_iface(struct wpa_driv +@@ -6674,7 +6698,7 @@ int nl80211_create_iface(struct wpa_driv /* Try to create the interface again */ ret = nl80211_create_iface_once(drv, ifname, iftype, addr, @@ -114,7 +114,7 @@ } if (ret >= 0 && is_p2p_net_interface(iftype)) { -@@ -8688,8 +8712,8 @@ static int i802_set_wds_sta(void *priv, +@@ -9010,8 +9034,8 @@ static int i802_set_wds_sta(void *priv, if (!if_nametoindex(name)) { if (nl80211_create_iface(drv, name, NL80211_IFTYPE_AP_VLAN, @@ -125,18 +125,18 @@ return -1; if (bridge_ifname) -@@ -9060,7 +9084,8 @@ static int wpa_driver_nl80211_if_add(voi +@@ -9384,7 +9408,8 @@ static int wpa_driver_nl80211_if_add(voi - os_memset(&p2pdev_info, 0, sizeof(p2pdev_info)); + os_memset(&nonnetdev_info, 0, sizeof(nonnetdev_info)); ifidx = nl80211_create_iface(drv, ifname, nlmode, addr, - 0, nl80211_wdev_handler, -+ 0, bss->radio_mask, -+ nl80211_wdev_handler, - &p2pdev_info, use_existing); - if (!p2pdev_info.wdev_id_set || ifidx != 0) { - wpa_printf(MSG_ERROR, "nl80211: Failed to create a P2P Device interface %s", -@@ -9077,7 +9102,8 @@ static int wpa_driver_nl80211_if_add(voi - (long long unsigned int) p2pdev_info.wdev_id); ++ 0, bss->radio_mask, ++ nl80211_wdev_handler, + &nonnetdev_info, use_existing); + if (!nonnetdev_info.wdev_id_set || ifidx != 0) { + wpa_printf(MSG_ERROR, +@@ -9403,7 +9428,8 @@ static int wpa_driver_nl80211_if_add(voi + (long long unsigned int) nonnetdev_info.wdev_id); } else { ifidx = nl80211_create_iface(drv, ifname, nlmode, addr, - 0, NULL, NULL, use_existing); @@ -145,7 +145,7 @@ if (use_existing && ifidx == -ENFILE) { added = 0; ifidx = if_nametoindex(ifname); -@@ -9147,6 +9173,8 @@ static int wpa_driver_nl80211_if_add(voi +@@ -9473,6 +9499,8 @@ static int wpa_driver_nl80211_if_add(voi new_bss->ctx = bss_ctx; new_bss->added_if = added; diff --git a/package/network/services/hostapd/patches/410-limit_debug_messages.patch b/package/network/services/hostapd/patches/410-limit_debug_messages.patch index 8f136763ed..4762b6a9a5 100644 --- a/package/network/services/hostapd/patches/410-limit_debug_messages.patch +++ b/package/network/services/hostapd/patches/410-limit_debug_messages.patch @@ -5,7 +5,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to --- a/src/utils/wpa_debug.c +++ b/src/utils/wpa_debug.c -@@ -206,7 +206,7 @@ void wpa_debug_close_linux_tracing(void) +@@ -220,7 +220,7 @@ void wpa_debug_close_linux_tracing(void) * * Note: New line '\n' is added to the end of the text when printing to stdout. */ @@ -14,7 +14,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to { va_list ap; -@@ -255,7 +255,7 @@ void wpa_printf(int level, const char *f +@@ -269,7 +269,7 @@ void wpa_printf(int level, const char *f } @@ -23,7 +23,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to size_t len, int show, int only_syslog) { size_t i; -@@ -382,19 +382,7 @@ static void _wpa_hexdump(int level, cons +@@ -396,19 +396,7 @@ static void _wpa_hexdump(int level, cons #endif /* CONFIG_ANDROID_LOG */ } @@ -44,7 +44,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to size_t len, int show) { size_t i, llen; -@@ -507,20 +495,6 @@ file_done: +@@ -521,20 +509,6 @@ file_done: } @@ -65,7 +65,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to #ifdef CONFIG_DEBUG_FILE static char *last_path = NULL; #endif /* CONFIG_DEBUG_FILE */ -@@ -644,7 +618,7 @@ void wpa_msg_register_ifname_cb(wpa_msg_ +@@ -658,7 +632,7 @@ void wpa_msg_register_ifname_cb(wpa_msg_ } @@ -74,7 +74,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to { va_list ap; char *buf; -@@ -682,7 +656,7 @@ void wpa_msg(void *ctx, int level, const +@@ -696,7 +670,7 @@ void wpa_msg(void *ctx, int level, const } @@ -85,7 +85,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to char *buf; --- a/src/utils/wpa_debug.h +++ b/src/utils/wpa_debug.h -@@ -52,6 +52,17 @@ void wpa_debug_close_file(void); +@@ -76,6 +76,17 @@ void wpa_debug_close_file(void); void wpa_debug_setup_stdout(void); void wpa_debug_stop_log(void); @@ -103,7 +103,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to /** * wpa_debug_printf_timestamp - Print timestamp for debug output * -@@ -72,9 +83,15 @@ void wpa_debug_print_timestamp(void); +@@ -96,9 +107,15 @@ void wpa_debug_print_timestamp(void); * * Note: New line '\n' is added to the end of the text when printing to stdout. */ @@ -120,7 +120,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to /** * wpa_hexdump - conditional hex dump * @level: priority level (MSG_*) of the message -@@ -86,7 +103,13 @@ PRINTF_FORMAT(2, 3); +@@ -110,7 +127,13 @@ PRINTF_FORMAT(2, 3); * output may be directed to stdout, stderr, and/or syslog based on * configuration. The contents of buf is printed out has hex dump. */ @@ -135,7 +135,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to static inline void wpa_hexdump_buf(int level, const char *title, const struct wpabuf *buf) -@@ -108,7 +131,13 @@ static inline void wpa_hexdump_buf(int l +@@ -132,7 +155,13 @@ static inline void wpa_hexdump_buf(int l * like wpa_hexdump(), but by default, does not include secret keys (passwords, * etc.) in debug output. */ @@ -150,7 +150,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to static inline void wpa_hexdump_buf_key(int level, const char *title, const struct wpabuf *buf) -@@ -130,8 +159,14 @@ static inline void wpa_hexdump_buf_key(i +@@ -154,8 +183,14 @@ static inline void wpa_hexdump_buf_key(i * the hex numbers and ASCII characters (for printable range) are shown. 16 * bytes per line will be shown. */ @@ -167,7 +167,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to /** * wpa_hexdump_ascii_key - conditional hex dump, hide keys -@@ -147,8 +182,14 @@ void wpa_hexdump_ascii(int level, const +@@ -171,8 +206,14 @@ void wpa_hexdump_ascii(int level, const * bytes per line will be shown. This works like wpa_hexdump_ascii(), but by * default, does not include secret keys (passwords, etc.) in debug output. */ @@ -184,7 +184,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to /* * wpa_dbg() behaves like wpa_msg(), but it can be removed from build to reduce -@@ -185,7 +226,12 @@ void wpa_hexdump_ascii_key(int level, co +@@ -209,7 +250,12 @@ void wpa_hexdump_ascii_key(int level, co * * Note: New line '\n' is added to the end of the text when printing to stdout. */ @@ -198,7 +198,7 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to /** * wpa_msg_ctrl - Conditional printf for ctrl_iface monitors -@@ -199,8 +245,13 @@ void wpa_msg(void *ctx, int level, const +@@ -223,8 +269,13 @@ void wpa_msg(void *ctx, int level, const * attached ctrl_iface monitors. In other words, it can be used for frequent * events that do not need to be sent to syslog. */ diff --git a/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch b/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch index 11941e3b4e..091698596f 100644 --- a/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch +++ b/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch @@ -14,7 +14,7 @@ Signed-hostap: Antonio Quartulli --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -1019,6 +1019,9 @@ struct wpa_driver_associate_params { +@@ -1022,6 +1022,9 @@ struct wpa_driver_associate_params { * responsible for selecting with which BSS to associate. */ const u8 *bssid; @@ -34,7 +34,7 @@ Signed-hostap: Antonio Quartulli #include "config.h" -@@ -2423,6 +2424,97 @@ static char * wpa_config_write_mac_value +@@ -2498,6 +2499,97 @@ static char * wpa_config_write_mac_value #endif /* NO_CONFIG_WRITE */ @@ -132,7 +132,7 @@ Signed-hostap: Antonio Quartulli /* Helper macros for network block parser */ #ifdef OFFSET -@@ -2718,6 +2810,8 @@ static const struct parse_data ssid_fiel +@@ -2794,6 +2886,8 @@ static const struct parse_data ssid_fiel { INT(ap_max_inactivity) }, { INT(dtim_period) }, { INT(beacon_int) }, @@ -143,7 +143,7 @@ Signed-hostap: Antonio Quartulli { INT_RANGE(macsec_integ_only, 0, 1) }, --- a/wpa_supplicant/config_ssid.h +++ b/wpa_supplicant/config_ssid.h -@@ -907,6 +907,9 @@ struct wpa_ssid { +@@ -911,6 +911,9 @@ struct wpa_ssid { */ void *parent_cred; @@ -155,7 +155,7 @@ Signed-hostap: Antonio Quartulli * macsec_policy - Determines the policy for MACsec secure session --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -4687,6 +4687,12 @@ static void wpas_start_assoc_cb(struct w +@@ -4756,6 +4756,12 @@ static void wpas_start_assoc_cb(struct w params.beacon_int = ssid->beacon_int; else params.beacon_int = wpa_s->conf->beacon_int; diff --git a/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch b/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch index 1811ce30c9..4175c431d0 100644 --- a/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch +++ b/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch @@ -19,7 +19,7 @@ Tested-by: Simon Wunderlich --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -1965,6 +1965,7 @@ struct wpa_driver_mesh_join_params { +@@ -1968,6 +1968,7 @@ struct wpa_driver_mesh_join_params { #define WPA_DRIVER_MESH_FLAG_AMPE 0x00000008 unsigned int flags; bool handle_dfs; @@ -29,7 +29,7 @@ Tested-by: Simon Wunderlich struct wpa_driver_set_key_params { --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -12378,6 +12378,18 @@ static int nl80211_put_mesh_id(struct nl +@@ -12713,6 +12713,18 @@ static int nl80211_put_mesh_id(struct nl } @@ -48,7 +48,7 @@ Tested-by: Simon Wunderlich static int nl80211_put_mesh_config(struct nl_msg *msg, struct wpa_driver_mesh_bss_params *params) { -@@ -12439,6 +12451,7 @@ static int nl80211_join_mesh(struct i802 +@@ -12774,6 +12786,7 @@ static int nl80211_join_mesh(struct i802 nl80211_put_basic_rates(msg, params->basic_rates) || nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) || nl80211_put_beacon_int(msg, params->beacon_int) || @@ -58,7 +58,7 @@ Tested-by: Simon Wunderlich --- a/wpa_supplicant/mesh.c +++ b/wpa_supplicant/mesh.c -@@ -665,6 +665,7 @@ int wpa_supplicant_join_mesh(struct wpa_ +@@ -636,6 +636,7 @@ int wpa_supplicant_join_mesh(struct wpa_ params->meshid = ssid->ssid; params->meshid_len = ssid->ssid_len; diff --git a/package/network/services/hostapd/patches/464-fix-mesh-obss-check.patch b/package/network/services/hostapd/patches/464-fix-mesh-obss-check.patch index 225b6ab296..78c10f811e 100644 --- a/package/network/services/hostapd/patches/464-fix-mesh-obss-check.patch +++ b/package/network/services/hostapd/patches/464-fix-mesh-obss-check.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix issues with disabling obss scan when using fixed_freq on --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -3482,6 +3482,10 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3551,6 +3551,10 @@ void ibss_mesh_setup_freq(struct wpa_sup freq->freq = ssid->frequency; diff --git a/package/network/services/hostapd/patches/465-hostapd-config-support-random-BSS-color.patch b/package/network/services/hostapd/patches/465-hostapd-config-support-random-BSS-color.patch index d14a4c63f7..fbaed04418 100644 --- a/package/network/services/hostapd/patches/465-hostapd-config-support-random-BSS-color.patch +++ b/package/network/services/hostapd/patches/465-hostapd-config-support-random-BSS-color.patch @@ -13,7 +13,7 @@ Signed-off-by: David Bauer --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -3572,6 +3572,8 @@ static int hostapd_config_fill(struct ho +@@ -3584,6 +3584,8 @@ static int hostapd_config_fill(struct ho } else if (os_strcmp(buf, "he_bss_color") == 0) { conf->he_op.he_bss_color = atoi(pos) & 0x3f; conf->he_op.he_bss_color_disabled = 0; diff --git a/package/network/services/hostapd/patches/470-survey_data_fallback.patch b/package/network/services/hostapd/patches/470-survey_data_fallback.patch index 43e30b14e9..394731842d 100644 --- a/package/network/services/hostapd/patches/470-survey_data_fallback.patch +++ b/package/network/services/hostapd/patches/470-survey_data_fallback.patch @@ -4,7 +4,7 @@ Subject: [PATCH] hostapd: implement fallback for incomplete survey data --- a/src/ap/acs.c +++ b/src/ap/acs.c -@@ -471,17 +471,17 @@ static int acs_get_bw_center_chan(int fr +@@ -472,17 +472,17 @@ static int acs_get_bw_center_chan(int fr static int acs_survey_is_sufficient(struct freq_survey *survey) { if (!(survey->filled & SURVEY_HAS_NF)) { @@ -24,7 +24,7 @@ Subject: [PATCH] hostapd: implement fallback for incomplete survey data } if (!(survey->filled & SURVEY_HAS_CHAN_TIME_BUSY) && -@@ -489,7 +489,6 @@ static int acs_survey_is_sufficient(stru +@@ -490,7 +490,6 @@ static int acs_survey_is_sufficient(stru wpa_printf(MSG_INFO, "ACS: Survey for freq %d is missing RX and busy time (at least one is required)", survey->freq); diff --git a/package/network/services/hostapd/patches/590-rrm-wnm-statistics.patch b/package/network/services/hostapd/patches/590-rrm-wnm-statistics.patch index 9b272dfd6d..6c078bd938 100644 --- a/package/network/services/hostapd/patches/590-rrm-wnm-statistics.patch +++ b/package/network/services/hostapd/patches/590-rrm-wnm-statistics.patch @@ -10,7 +10,7 @@ method. --- a/src/ap/hostapd.h +++ b/src/ap/hostapd.h -@@ -185,6 +185,21 @@ struct mld_link_info { +@@ -189,6 +189,21 @@ struct mld_link_info { }; /** @@ -32,7 +32,7 @@ method. * struct hostapd_data - hostapd per-BSS data structure */ struct hostapd_data { -@@ -198,6 +213,9 @@ struct hostapd_data { +@@ -202,6 +217,9 @@ struct hostapd_data { u8 own_addr[ETH_ALEN]; diff --git a/package/network/services/hostapd/patches/600-ubus_support.patch b/package/network/services/hostapd/patches/600-ubus_support.patch index 25f0a504b2..fcfea12dbd 100644 --- a/package/network/services/hostapd/patches/600-ubus_support.patch +++ b/package/network/services/hostapd/patches/600-ubus_support.patch @@ -53,7 +53,7 @@ probe/assoc/auth requests via object subscribe. } --- a/src/ap/beacon.c +++ b/src/ap/beacon.c -@@ -1439,6 +1439,12 @@ void handle_probe_req(struct hostapd_dat +@@ -1464,6 +1464,12 @@ void handle_probe_req(struct hostapd_dat int mld_id; u16 links; #endif /* CONFIG_IEEE80211BE */ @@ -66,7 +66,7 @@ probe/assoc/auth requests via object subscribe. if (hapd->iconf->rssi_ignore_probe_request && ssi_signal && ssi_signal < hapd->iconf->rssi_ignore_probe_request) -@@ -1625,6 +1631,12 @@ void handle_probe_req(struct hostapd_dat +@@ -1671,6 +1677,12 @@ void handle_probe_req(struct hostapd_dat } #endif /* CONFIG_P2P */ @@ -81,7 +81,7 @@ probe/assoc/auth requests via object subscribe. --- a/src/ap/dfs.c +++ b/src/ap/dfs.c -@@ -1243,6 +1243,8 @@ int hostapd_dfs_pre_cac_expired(struct h +@@ -1295,6 +1295,8 @@ int hostapd_dfs_pre_cac_expired(struct h "freq=%d ht_enabled=%d chan_offset=%d chan_width=%d cf1=%d cf2=%d", freq, ht_enabled, chan_offset, chan_width, cf1, cf2); @@ -92,7 +92,7 @@ probe/assoc/auth requests via object subscribe. return 0; --- a/src/ap/drv_callbacks.c +++ b/src/ap/drv_callbacks.c -@@ -331,6 +331,10 @@ int hostapd_notif_assoc(struct hostapd_d +@@ -332,6 +332,10 @@ int hostapd_notif_assoc(struct hostapd_d #endif /* CONFIG_OWE */ bool updated = false; bool driver_acl; @@ -101,9 +101,9 @@ probe/assoc/auth requests via object subscribe. + .addr = addr, + }; - if (addr == NULL) { - /* -@@ -512,6 +516,12 @@ int hostapd_notif_assoc(struct hostapd_d + #ifdef CONFIG_P2P + if (hapd->p2p_group && (!hapd->started || hapd->disabled)) { +@@ -527,6 +531,12 @@ int hostapd_notif_assoc(struct hostapd_d } #endif /* CONFIG_IEEE80211BE */ @@ -116,7 +116,7 @@ probe/assoc/auth requests via object subscribe. #ifdef CONFIG_P2P if (elems.p2p) { wpabuf_free(sta->p2p_ie); -@@ -1409,6 +1419,7 @@ void hostapd_event_ch_switch(struct host +@@ -1424,6 +1434,7 @@ void hostapd_event_ch_switch(struct host wpa_msg(hapd->msg_ctx, MSG_INFO, AP_CSA_FINISHED "freq=%d dfs=%d", freq, is_dfs); @@ -126,7 +126,7 @@ probe/assoc/auth requests via object subscribe. if (is_dfs0 > 0 && --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -479,6 +479,7 @@ void hostapd_free_hapd_data(struct hosta +@@ -492,6 +492,7 @@ void hostapd_free_hapd_data(struct hosta hapd->beacon_set_done = 0; wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface); @@ -134,7 +134,7 @@ probe/assoc/auth requests via object subscribe. accounting_deinit(hapd); hostapd_deinit_wpa(hapd); vlan_deinit(hapd); -@@ -1324,6 +1325,8 @@ static int hostapd_start_beacon(struct h +@@ -1342,6 +1343,8 @@ static int hostapd_start_beacon(struct h if (hapd->driver && hapd->driver->set_operstate) hapd->driver->set_operstate(hapd->drv_priv, 1); @@ -143,7 +143,7 @@ probe/assoc/auth requests via object subscribe. return 0; } -@@ -2554,6 +2557,7 @@ static int hostapd_setup_interface_compl +@@ -2582,6 +2585,7 @@ static int hostapd_setup_interface_compl if (err) goto fail; @@ -151,7 +151,7 @@ probe/assoc/auth requests via object subscribe. wpa_printf(MSG_DEBUG, "Completing interface initialization"); if (iface->freq) { #ifdef NEED_AP_MLME -@@ -2781,6 +2785,7 @@ dfs_offload: +@@ -2796,6 +2800,7 @@ dfs_offload: fail: wpa_printf(MSG_ERROR, "Interface initialization failed"); @@ -159,7 +159,7 @@ probe/assoc/auth requests via object subscribe. if (iface->is_no_ir) { hostapd_set_state(iface, HAPD_IFACE_NO_IR); -@@ -3530,6 +3535,7 @@ void hostapd_interface_deinit_free(struc +@@ -3545,6 +3550,7 @@ void hostapd_interface_deinit_free(struc (unsigned int) iface->conf->num_bss); driver = iface->bss[0]->driver; drv_priv = iface->bss[0]->drv_priv; @@ -177,7 +177,7 @@ probe/assoc/auth requests via object subscribe. #define OCE_STA_CFON_ENABLED(hapd) \ ((hapd->conf->oce & OCE_STA_CFON) && \ -@@ -206,6 +207,7 @@ struct hostapd_data { +@@ -210,6 +211,7 @@ struct hostapd_data { struct hostapd_iface *iface; struct hostapd_config *iconf; struct hostapd_bss_config *conf; @@ -185,7 +185,7 @@ probe/assoc/auth requests via object subscribe. int interface_added; /* virtual interface added for this BSS */ unsigned int started:1; unsigned int disabled:1; -@@ -776,6 +778,7 @@ hostapd_alloc_bss_data(struct hostapd_if +@@ -783,6 +785,7 @@ hostapd_alloc_bss_data(struct hostapd_if struct hostapd_bss_config *bss); int hostapd_setup_interface(struct hostapd_iface *iface); int hostapd_setup_interface_complete(struct hostapd_iface *iface, int err); @@ -195,7 +195,7 @@ probe/assoc/auth requests via object subscribe. struct hostapd_iface * hostapd_alloc_iface(void); --- a/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c -@@ -3134,7 +3134,7 @@ static void handle_auth(struct hostapd_d +@@ -3330,7 +3330,7 @@ static void handle_auth(struct hostapd_d u16 auth_alg, auth_transaction, status_code; u16 resp = WLAN_STATUS_SUCCESS; struct sta_info *sta = NULL; @@ -204,9 +204,9 @@ probe/assoc/auth requests via object subscribe. u16 fc; const u8 *challenge = NULL; u8 resp_ies[2 + WLAN_AUTH_CHALLENGE_LEN]; -@@ -3145,6 +3145,11 @@ static void handle_auth(struct hostapd_d - #ifdef CONFIG_IEEE80211BE - bool mld_sta = false; +@@ -3369,6 +3369,11 @@ static void handle_auth(struct hostapd_d + else + sa = mgmt->sa; #endif /* CONFIG_IEEE80211BE */ + struct hostapd_ubus_request req = { + .type = HOSTAPD_UBUS_AUTH_REQ, @@ -214,9 +214,9 @@ probe/assoc/auth requests via object subscribe. + .ssi_signal = rssi, + }; - if (len < IEEE80211_HDRLEN + sizeof(mgmt->u.auth)) { - wpa_printf(MSG_INFO, "handle_auth - too short payload (len=%lu)", -@@ -3341,6 +3346,13 @@ static void handle_auth(struct hostapd_d + auth_alg = le_to_host16(mgmt->u.auth.auth_alg); + auth_transaction = le_to_host16(mgmt->u.auth.auth_transaction); +@@ -3538,6 +3543,13 @@ static void handle_auth(struct hostapd_d resp = WLAN_STATUS_UNSPECIFIED_FAILURE; goto fail; } @@ -230,7 +230,7 @@ probe/assoc/auth requests via object subscribe. if (res == HOSTAPD_ACL_PENDING) return; -@@ -5723,7 +5735,7 @@ static void handle_assoc(struct hostapd_ +@@ -6029,7 +6041,7 @@ static void handle_assoc(struct hostapd_ int resp = WLAN_STATUS_SUCCESS; u16 reply_res = WLAN_STATUS_UNSPECIFIED_FAILURE; const u8 *pos; @@ -239,7 +239,7 @@ probe/assoc/auth requests via object subscribe. struct sta_info *sta; u8 *tmp = NULL; #ifdef CONFIG_FILS -@@ -5965,6 +5977,11 @@ static void handle_assoc(struct hostapd_ +@@ -6283,6 +6295,11 @@ static void handle_assoc(struct hostapd_ left = res; } #endif /* CONFIG_FILS */ @@ -251,7 +251,7 @@ probe/assoc/auth requests via object subscribe. /* followed by SSID and Supported rates; and HT capabilities if 802.11n * is used */ -@@ -6057,6 +6074,7 @@ static void handle_assoc(struct hostapd_ +@@ -6375,6 +6392,7 @@ static void handle_assoc(struct hostapd_ #ifdef CONFIG_TAXONOMY taxonomy_sta_info_assoc_req(hapd, sta, pos, left); @@ -259,9 +259,9 @@ probe/assoc/auth requests via object subscribe. #endif /* CONFIG_TAXONOMY */ sta->pending_wds_enable = 0; -@@ -6073,6 +6091,13 @@ static void handle_assoc(struct hostapd_ - if (set_beacon) - ieee802_11_update_beacons(hapd->iface); +@@ -6388,6 +6406,13 @@ static void handle_assoc(struct hostapd_ + } + #endif /* CONFIG_FILS */ + ubus_resp = hostapd_ubus_handle_event(hapd, &req); + if (ubus_resp) { @@ -273,7 +273,7 @@ probe/assoc/auth requests via object subscribe. fail: /* -@@ -6302,6 +6327,7 @@ static void handle_disassoc(struct hosta +@@ -6626,6 +6651,7 @@ static void handle_disassoc(struct hosta (unsigned long) len); return; } @@ -281,7 +281,7 @@ probe/assoc/auth requests via object subscribe. sta = ap_get_sta(hapd, mgmt->sa); if (!sta) { -@@ -6333,6 +6359,8 @@ static void handle_deauth(struct hostapd +@@ -6657,6 +6683,8 @@ static void handle_deauth(struct hostapd /* Clear the PTKSA cache entries for PASN */ ptksa_cache_flush(hapd->ptksa, mgmt->sa, WPA_CIPHER_NONE); @@ -313,7 +313,7 @@ probe/assoc/auth requests via object subscribe. wpa_printf(MSG_DEBUG, "RRM action %u is not supported", --- a/src/ap/sta_info.c +++ b/src/ap/sta_info.c -@@ -545,6 +545,7 @@ void ap_handle_timer(void *eloop_ctx, vo +@@ -603,6 +603,7 @@ void ap_handle_timer(void *eloop_ctx, vo hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211, HOSTAPD_LEVEL_INFO, "deauthenticated due to " "local deauth request"); @@ -321,7 +321,7 @@ probe/assoc/auth requests via object subscribe. ap_free_sta(hapd, sta); return; } -@@ -702,6 +703,7 @@ skip_poll: +@@ -771,6 +772,7 @@ skip_poll: mlme_deauthenticate_indication( hapd, sta, WLAN_REASON_PREV_AUTH_NOT_VALID); @@ -329,7 +329,7 @@ probe/assoc/auth requests via object subscribe. ap_free_sta(hapd, sta); break; } -@@ -1590,17 +1592,30 @@ void ap_sta_set_authorized_event(struct +@@ -1772,17 +1774,30 @@ void ap_sta_set_authorized_event(struct os_snprintf(buf, sizeof(buf), MACSTR, MAC2STR(sta->addr)); if (authorized) { @@ -360,7 +360,7 @@ probe/assoc/auth requests via object subscribe. #ifdef CONFIG_P2P if (wpa_auth_get_ip_addr(sta->wpa_sm, ip_addr_buf) == 0) { -@@ -1612,6 +1627,13 @@ void ap_sta_set_authorized_event(struct +@@ -1794,6 +1809,13 @@ void ap_sta_set_authorized_event(struct } #endif /* CONFIG_P2P */ @@ -374,7 +374,7 @@ probe/assoc/auth requests via object subscribe. keyid = ap_sta_wpa_get_keyid(hapd, sta); if (keyid) { os_snprintf(keyid_buf, sizeof(keyid_buf), -@@ -1636,17 +1658,19 @@ void ap_sta_set_authorized_event(struct +@@ -1818,17 +1840,19 @@ void ap_sta_set_authorized_event(struct " vlanid=%u", sta->vlan_id); #endif /* CONFIG_NO_VLAN */ @@ -400,7 +400,7 @@ probe/assoc/auth requests via object subscribe. hapd->msg_ctx_parent != hapd->msg_ctx) --- a/src/ap/sta_info.h +++ b/src/ap/sta_info.h -@@ -255,6 +255,7 @@ struct sta_info { +@@ -258,6 +258,7 @@ struct sta_info { #ifdef CONFIG_TAXONOMY struct wpabuf *probe_ie_taxonomy; struct wpabuf *assoc_ie_taxonomy; @@ -408,7 +408,7 @@ probe/assoc/auth requests via object subscribe. #endif /* CONFIG_TAXONOMY */ #ifdef CONFIG_FILS -@@ -302,6 +303,7 @@ struct sta_info { +@@ -305,6 +306,7 @@ struct sta_info { #endif /* CONFIG_TESTING_OPTIONS */ #ifdef CONFIG_AIRTIME_POLICY unsigned int airtime_weight; @@ -496,7 +496,7 @@ probe/assoc/auth requests via object subscribe. } --- a/src/ap/wpa_auth_glue.c +++ b/src/ap/wpa_auth_glue.c -@@ -320,6 +320,7 @@ static void hostapd_wpa_auth_psk_failure +@@ -412,6 +412,7 @@ static void hostapd_wpa_auth_psk_failure struct hostapd_data *hapd = ctx; wpa_msg(hapd->msg_ctx, MSG_INFO, AP_STA_POSSIBLE_PSK_MISMATCH MACSTR, MAC2STR(addr)); @@ -516,7 +516,7 @@ probe/assoc/auth requests via object subscribe. size_t count; /* sum of all table counts */ #ifdef CONFIG_ELOOP_POLL size_t max_pollfd_map; /* number of pollfds_map currently allocated */ -@@ -1121,6 +1124,12 @@ void eloop_run(void) +@@ -1125,6 +1128,12 @@ void eloop_run(void) os_reltime_sub(&timeout->time, &now, &tv); else tv.sec = tv.usec = 0; @@ -529,7 +529,7 @@ probe/assoc/auth requests via object subscribe. #if defined(CONFIG_ELOOP_POLL) || defined(CONFIG_ELOOP_EPOLL) timeout_ms = tv.sec * 1000 + tv.usec / 1000; #endif /* defined(CONFIG_ELOOP_POLL) || defined(CONFIG_ELOOP_EPOLL) */ -@@ -1190,7 +1199,8 @@ void eloop_run(void) +@@ -1194,7 +1203,8 @@ void eloop_run(void) eloop.exceptions.changed = 0; eloop_process_pending_signals(); @@ -539,7 +539,7 @@ probe/assoc/auth requests via object subscribe. /* check if some registered timeouts have occurred */ timeout = dl_list_first(&eloop.timeout, struct eloop_timeout, -@@ -1252,6 +1262,14 @@ out: +@@ -1256,6 +1266,14 @@ out: return; } @@ -654,16 +654,16 @@ probe/assoc/auth requests via object subscribe. +} --- a/wpa_supplicant/main.c +++ b/wpa_supplicant/main.c -@@ -203,7 +203,7 @@ int main(int argc, char *argv[]) +@@ -214,7 +214,7 @@ int main(int argc, char *argv[]) for (;;) { c = getopt(argc, argv, -- "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuv::W"); -+ "b:Bc:C:D:de:f:g:G:hi:I:KLMm:nNo:O:p:P:qsTtuv::W"); +- "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuv::Wyz:"); ++ "b:Bc:C:D:de:f:g:G:hi:I:KLMm:nNo:O:p:P:qsTtuv::Wyz:"); if (c < 0) break; switch (c) { -@@ -268,6 +268,9 @@ int main(int argc, char *argv[]) +@@ -279,6 +279,9 @@ int main(int argc, char *argv[]) params.conf_p2p_dev = optarg; break; #endif /* CONFIG_P2P */ diff --git a/package/network/services/hostapd/patches/601-ucode_support.patch b/package/network/services/hostapd/patches/601-ucode_support.patch index 10493825bf..6b80e8ced8 100644 --- a/package/network/services/hostapd/patches/601-ucode_support.patch +++ b/package/network/services/hostapd/patches/601-ucode_support.patch @@ -8,7 +8,7 @@ as adding/removing interfaces. --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -1278,6 +1278,7 @@ void wpa_supplicant_set_state(struct wpa +@@ -1268,6 +1268,7 @@ void wpa_supplicant_set_state(struct wpa sme_sched_obss_scan(wpa_s, 0); } wpa_s->wpa_state = state; @@ -16,7 +16,7 @@ as adding/removing interfaces. #ifndef CONFIG_NO_ROBUST_AV if (state == WPA_COMPLETED && dl_list_len(&wpa_s->active_scs_ids) && -@@ -8289,6 +8290,8 @@ struct wpa_supplicant * wpa_supplicant_a +@@ -8395,6 +8396,8 @@ struct wpa_supplicant * wpa_supplicant_a } #endif /* CONFIG_P2P */ @@ -25,7 +25,7 @@ as adding/removing interfaces. return wpa_s; } -@@ -8315,6 +8318,8 @@ int wpa_supplicant_remove_iface(struct w +@@ -8421,6 +8424,8 @@ int wpa_supplicant_remove_iface(struct w struct wpa_supplicant *parent = wpa_s->parent; #endif /* CONFIG_MESH */ @@ -34,7 +34,7 @@ as adding/removing interfaces. /* Remove interface from the global list of interfaces */ prev = global->ifaces; if (prev == wpa_s) { -@@ -8623,6 +8628,7 @@ struct wpa_global * wpa_supplicant_init( +@@ -8740,6 +8745,7 @@ struct wpa_global * wpa_supplicant_init( eloop_register_timeout(WPA_SUPPLICANT_CLEANUP_INTERVAL, 0, wpas_periodic, global, NULL); @@ -42,7 +42,7 @@ as adding/removing interfaces. return global; } -@@ -8695,6 +8701,8 @@ void wpa_supplicant_deinit(struct wpa_gl +@@ -8812,6 +8818,8 @@ void wpa_supplicant_deinit(struct wpa_gl wpas_notify_supplicant_deinitialized(global); @@ -68,15 +68,15 @@ as adding/removing interfaces. extern const char *const wpa_supplicant_version; extern const char *const wpa_supplicant_license; -@@ -697,6 +699,7 @@ struct wpa_supplicant { +@@ -718,6 +720,7 @@ struct wpa_supplicant { unsigned char own_addr[ETH_ALEN]; unsigned char perm_addr[ETH_ALEN]; char ifname[100]; -+ struct wpas_ucode_bss ucode; ++ struct wpas_ucode_bss ucode; + u8 hw_dfs_domain; #ifdef CONFIG_MATCH_IFACE int matched; - #endif /* CONFIG_MATCH_IFACE */ -@@ -1564,6 +1567,8 @@ struct wpa_supplicant { +@@ -1595,6 +1598,8 @@ struct wpa_supplicant { unsigned int enabled_4addr_mode:1; unsigned int multi_bss_support:1; unsigned int drv_authorized_port:1; @@ -164,7 +164,7 @@ as adding/removing interfaces. ifdef CONFIG_CODE_COVERAGE --- a/hostapd/ctrl_iface.c +++ b/hostapd/ctrl_iface.c -@@ -6061,6 +6061,7 @@ try_again: +@@ -5950,6 +5950,7 @@ try_again: return -1; } @@ -172,7 +172,7 @@ as adding/removing interfaces. wpa_msg_register_cb(hostapd_ctrl_iface_msg_cb); return 0; -@@ -6162,6 +6163,7 @@ fail: +@@ -6051,6 +6052,7 @@ fail: os_free(fname); interface->global_ctrl_sock = s; @@ -182,7 +182,7 @@ as adding/removing interfaces. --- a/hostapd/main.c +++ b/hostapd/main.c -@@ -1074,6 +1074,7 @@ int main(int argc, char *argv[]) +@@ -1097,6 +1097,7 @@ int main(int argc, char *argv[]) } hostapd_global_ctrl_iface_init(&interfaces); @@ -190,7 +190,7 @@ as adding/removing interfaces. if (hostapd_global_run(&interfaces, daemonize, pid_file)) { wpa_printf(MSG_ERROR, "Failed to start eloop"); -@@ -1083,6 +1084,7 @@ int main(int argc, char *argv[]) +@@ -1106,6 +1107,7 @@ int main(int argc, char *argv[]) ret = 0; out: @@ -200,8 +200,8 @@ as adding/removing interfaces. for (i = 0; i < interfaces.count; i++) { --- a/src/ap/ap_drv_ops.h +++ b/src/ap/ap_drv_ops.h -@@ -410,6 +410,23 @@ static inline int hostapd_drv_stop_ap(st - return hapd->driver->stop_ap(hapd->drv_priv, link_id); +@@ -405,6 +405,23 @@ static inline int hostapd_drv_stop_ap(st + return 0; } +static inline int hostapd_drv_if_rename(struct hostapd_data *hapd, @@ -226,7 +226,7 @@ as adding/removing interfaces. { --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -259,6 +259,8 @@ int hostapd_reload_config(struct hostapd +@@ -267,6 +267,8 @@ int hostapd_reload_config(struct hostapd struct hostapd_config *newconf, *oldconf; size_t j; @@ -235,7 +235,7 @@ as adding/removing interfaces. if (iface->config_fname == NULL) { /* Only in-memory config in use - assume it has been updated */ hostapd_clear_old(iface); -@@ -479,6 +481,7 @@ void hostapd_free_hapd_data(struct hosta +@@ -492,6 +494,7 @@ void hostapd_free_hapd_data(struct hosta hapd->beacon_set_done = 0; wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface); @@ -243,7 +243,7 @@ as adding/removing interfaces. hostapd_ubus_free_bss(hapd); accounting_deinit(hapd); hostapd_deinit_wpa(hapd); -@@ -625,7 +628,7 @@ void hostapd_free_hapd_data(struct hosta +@@ -653,7 +656,7 @@ static void hostapd_mld_move_vlan_list(s * If the BSS being removed is the first link, the next link becomes the first * link. */ @@ -252,7 +252,7 @@ as adding/removing interfaces. { #ifdef CONFIG_IEEE80211BE int i; -@@ -737,6 +740,7 @@ void hostapd_cleanup_iface_partial(struc +@@ -761,6 +764,7 @@ void hostapd_cleanup_iface_partial(struc static void hostapd_cleanup_iface(struct hostapd_iface *iface) { wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface); @@ -260,7 +260,7 @@ as adding/removing interfaces. eloop_cancel_timeout(hostapd_interface_setup_failure_handler, iface, NULL); -@@ -1326,6 +1330,7 @@ static int hostapd_start_beacon(struct h +@@ -1344,6 +1348,7 @@ static int hostapd_start_beacon(struct h hapd->driver->set_operstate(hapd->drv_priv, 1); hostapd_ubus_add_bss(hapd); @@ -268,7 +268,7 @@ as adding/removing interfaces. return 0; } -@@ -1401,8 +1406,7 @@ static int hostapd_bss_radius_init(struc +@@ -1419,8 +1424,7 @@ static int hostapd_bss_radius_init(struc * initialized. Most of the modules that are initialized here will be * deinitialized in hostapd_cleanup(). */ @@ -278,7 +278,7 @@ as adding/removing interfaces. { struct hostapd_bss_config *conf = hapd->conf; u8 ssid[SSID_MAX_LEN + 1]; -@@ -1434,12 +1438,17 @@ static int hostapd_setup_bss(struct host +@@ -1462,12 +1466,17 @@ static int hostapd_setup_bss(struct host if (!first || first == -1) { u8 *addr = hapd->own_addr; @@ -297,7 +297,7 @@ as adding/removing interfaces. hapd->iface->bss[0]->own_addr) == 0) { wpa_printf(MSG_ERROR, "BSS '%s' may not have " -@@ -1469,6 +1478,7 @@ static int hostapd_setup_bss(struct host +@@ -1497,6 +1506,7 @@ static int hostapd_setup_bss(struct host hapd->mld_link_id, hapd->conf->iface); goto setup_mld; } @@ -305,7 +305,7 @@ as adding/removing interfaces. } #endif /* CONFIG_IEEE80211BE */ -@@ -1477,7 +1487,7 @@ static int hostapd_setup_bss(struct host +@@ -1505,7 +1515,7 @@ static int hostapd_setup_bss(struct host conf->iface, addr, hapd, &hapd->drv_priv, force_ifname, if_addr, conf->bridge[0] ? conf->bridge : NULL, @@ -314,7 +314,7 @@ as adding/removing interfaces. wpa_printf(MSG_ERROR, "Failed to add BSS (BSSID=" MACSTR ")", MAC2STR(hapd->own_addr)); hapd->interface_added = 0; -@@ -1500,7 +1510,7 @@ static int hostapd_setup_bss(struct host +@@ -1528,7 +1538,7 @@ static int hostapd_setup_bss(struct host #ifdef CONFIG_IEEE80211BE setup_mld: @@ -323,7 +323,7 @@ as adding/removing interfaces. wpa_printf(MSG_DEBUG, "MLD: Set link_id=%u, mld_addr=" MACSTR ", own_addr=" MACSTR, -@@ -1518,6 +1528,8 @@ setup_mld: +@@ -1546,6 +1556,8 @@ setup_mld: } #endif /* CONFIG_IEEE80211BE */ @@ -332,7 +332,7 @@ as adding/removing interfaces. if (conf->wmm_enabled < 0) conf->wmm_enabled = hapd->iconf->ieee80211n | hapd->iconf->ieee80211ax; -@@ -1843,7 +1855,7 @@ int hostapd_set_acl(struct hostapd_data +@@ -1871,7 +1883,7 @@ int hostapd_set_acl(struct hostapd_data } @@ -341,7 +341,7 @@ as adding/removing interfaces. { #ifdef CONFIG_IEEE80211BE int ret; -@@ -2516,7 +2528,7 @@ static int hostapd_owe_iface_iter2(struc +@@ -2544,7 +2556,7 @@ static int hostapd_owe_iface_iter2(struc #endif /* CONFIG_OWE */ @@ -350,7 +350,7 @@ as adding/removing interfaces. { #ifdef CONFIG_OWE /* Check whether the enabled BSS can complete OWE transition mode -@@ -2986,7 +2998,7 @@ hostapd_alloc_bss_data(struct hostapd_if +@@ -3001,7 +3013,7 @@ hostapd_alloc_bss_data(struct hostapd_if } @@ -359,7 +359,7 @@ as adding/removing interfaces. { if (!hapd) return; -@@ -3194,7 +3206,7 @@ fail: +@@ -3209,7 +3221,7 @@ fail: } @@ -368,7 +368,7 @@ as adding/removing interfaces. { #ifdef CONFIG_IEEE80211BE struct hostapd_mld *mld, **all_mld; -@@ -4074,7 +4086,8 @@ int hostapd_remove_iface(struct hapd_int +@@ -4090,7 +4102,8 @@ int hostapd_remove_iface(struct hapd_int hapd_iface = interfaces->iface[i]; if (hapd_iface == NULL) return -1; @@ -399,7 +399,7 @@ as adding/removing interfaces. int (*for_each_interface)(struct hapd_interfaces *interfaces, int (*cb)(struct hostapd_iface *iface, void *ctx), void *ctx); -@@ -208,6 +213,7 @@ struct hostapd_data { +@@ -212,6 +217,7 @@ struct hostapd_data { struct hostapd_config *iconf; struct hostapd_bss_config *conf; struct hostapd_ubus_bss ubus; @@ -407,7 +407,7 @@ as adding/removing interfaces. int interface_added; /* virtual interface added for this BSS */ unsigned int started:1; unsigned int disabled:1; -@@ -577,6 +583,7 @@ struct hostapd_mld { +@@ -585,6 +591,7 @@ struct hostapd_mld { */ struct hostapd_iface { struct hapd_interfaces *interfaces; @@ -415,7 +415,7 @@ as adding/removing interfaces. void *owner; char *config_fname; struct hostapd_config *conf; -@@ -787,11 +794,16 @@ struct hostapd_iface * hostapd_init(stru +@@ -794,11 +801,16 @@ struct hostapd_iface * hostapd_init(stru struct hostapd_iface * hostapd_interface_init_bss(struct hapd_interfaces *interfaces, const char *phy, const char *config_fname, int debug); @@ -432,7 +432,7 @@ as adding/removing interfaces. int hostapd_enable_iface(struct hostapd_iface *hapd_iface); int hostapd_reload_iface(struct hostapd_iface *hapd_iface); int hostapd_reload_bss_only(struct hostapd_data *bss); -@@ -817,6 +829,7 @@ hostapd_switch_channel_fallback(struct h +@@ -824,6 +836,7 @@ hostapd_switch_channel_fallback(struct h void hostapd_cleanup_cs_params(struct hostapd_data *hapd); void hostapd_periodic_iface(struct hostapd_iface *iface); int hostapd_owe_trans_get_info(struct hostapd_data *hapd); @@ -442,7 +442,7 @@ as adding/removing interfaces. void hostapd_switch_color(struct hostapd_data *hapd, u64 bitmap); --- a/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c -@@ -659,12 +659,17 @@ const char * sae_get_password(struct hos +@@ -663,12 +663,17 @@ const char * sae_get_password(struct hos struct sae_pt **s_pt, const struct sae_pk **s_pk) { @@ -461,7 +461,7 @@ as adding/removing interfaces. /* With sae_track_password functionality enabled, try to first find the * next viable wildcard-address password if a password identifier was * not used. Select an wildcard-addr entry if the STA is known to have -@@ -725,12 +730,30 @@ const char * sae_get_password(struct hos +@@ -730,12 +735,30 @@ const char * sae_get_password(struct hos pt = hapd->conf->ssid.pt; } @@ -487,14 +487,14 @@ as adding/removing interfaces. + ssid->ssid_len, + (const u8 *) password, + os_strlen(password), -+ NULL); ++ NULL, 0); + sta->sae_pt = pt; + break; +#endif } } -@@ -3489,6 +3512,12 @@ static void handle_auth(struct hostapd_d +@@ -3698,6 +3721,12 @@ static void handle_auth(struct hostapd_d goto fail; } @@ -509,9 +509,9 @@ as adding/removing interfaces. --- a/src/ap/sta_info.c +++ b/src/ap/sta_info.c -@@ -477,6 +477,11 @@ void ap_free_sta(struct hostapd_data *ha - forced_memzero(sta->last_tk, WPA_TK_MAX_LEN); - #endif /* CONFIG_TESTING_OPTIONS */ +@@ -535,6 +535,11 @@ void ap_free_sta(struct hostapd_data *ha + + wpabuf_free(sta->sae_pw_id); +#ifdef CONFIG_SAE + if (sta->sae_pt) @@ -521,7 +521,7 @@ as adding/removing interfaces. os_free(sta); } -@@ -1576,6 +1581,8 @@ void ap_sta_set_authorized_event(struct +@@ -1758,6 +1763,8 @@ void ap_sta_set_authorized_event(struct #endif /* CONFIG_P2P */ const u8 *ip_ptr = NULL; @@ -532,7 +532,7 @@ as adding/removing interfaces. if (sta->p2p_ie != NULL && --- a/src/ap/sta_info.h +++ b/src/ap/sta_info.h -@@ -180,6 +180,9 @@ struct sta_info { +@@ -183,6 +183,9 @@ struct sta_info { int vlan_id_bound; /* updated by ap_sta_bind_vlan() */ /* PSKs from RADIUS authentication server */ struct hostapd_sta_wpa_psk_short *psk; @@ -544,7 +544,7 @@ as adding/removing interfaces. char *radius_cui; /* Chargeable-User-Identity from RADIUS */ --- a/src/ap/wpa_auth_glue.c +++ b/src/ap/wpa_auth_glue.c -@@ -392,6 +392,7 @@ static const u8 * hostapd_wpa_auth_get_p +@@ -484,6 +484,7 @@ static const u8 * hostapd_wpa_auth_get_p struct sta_info *sta = ap_get_sta(hapd, addr); const u8 *psk; @@ -552,7 +552,7 @@ as adding/removing interfaces. if (vlan_id) *vlan_id = 0; if (psk_len) -@@ -442,13 +443,18 @@ static const u8 * hostapd_wpa_auth_get_p +@@ -534,13 +535,18 @@ static const u8 * hostapd_wpa_auth_get_p * returned psk which should not be returned again. * logic list (all hostapd_get_psk; all sta->psk) */ @@ -572,7 +572,7 @@ as adding/removing interfaces. if (pos->is_passphrase) { if (pbkdf2_sha1(pos->passphrase, hapd->conf->ssid.ssid, -@@ -462,9 +468,13 @@ static const u8 * hostapd_wpa_auth_get_p +@@ -554,9 +560,13 @@ static const u8 * hostapd_wpa_auth_get_p } if (pos->psk == prev_psk) { psk = pos->next ? pos->next->psk : NULL; @@ -588,7 +588,7 @@ as adding/removing interfaces. } --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -4072,6 +4072,25 @@ struct wpa_driver_ops { +@@ -4173,6 +4173,25 @@ struct wpa_driver_ops { const char *ifname); /** @@ -614,7 +614,7 @@ as adding/removing interfaces. * set_sta_vlan - Bind a station into a specific interface (AP only) * @priv: Private driver interface data * @ifname: Interface (main or virtual BSS or VLAN) -@@ -6901,6 +6920,7 @@ union wpa_event_data { +@@ -7016,6 +7035,7 @@ union wpa_event_data { /** * struct ch_switch @@ -622,7 +622,7 @@ as adding/removing interfaces. * @freq: Frequency of new channel in MHz * @ht_enabled: Whether this is an HT channel * @ch_offset: Secondary channel offset -@@ -6911,6 +6931,7 @@ union wpa_event_data { +@@ -7026,6 +7046,7 @@ union wpa_event_data { * @punct_bitmap: Puncturing bitmap */ struct ch_switch { @@ -649,7 +649,7 @@ as adding/removing interfaces. static struct nl_sock * nl_create_handle(struct nl_cb *cb, const char *dbg) { -@@ -437,6 +447,11 @@ static int no_seq_check(struct nl_msg *m +@@ -449,6 +459,11 @@ static int no_seq_check(struct nl_msg *m return NL_OK; } @@ -661,7 +661,7 @@ as adding/removing interfaces. static void nl80211_nlmsg_clear(struct nl_msg *msg) { -@@ -511,6 +526,8 @@ int send_and_recv_glb(struct nl80211_glo +@@ -633,6 +648,8 @@ int send_and_recv_glb(struct nl80211_glo if (!msg) return -ENOMEM; @@ -670,7 +670,7 @@ as adding/removing interfaces. err.err = -ENOMEM; s_nl_cb = nl_socket_get_cb(nl_handle); -@@ -552,6 +569,7 @@ int send_and_recv_glb(struct nl80211_glo +@@ -677,6 +694,7 @@ int send_and_recv_glb(struct nl80211_glo err.err_info = err_info; err.drv = drv; @@ -678,7 +678,7 @@ as adding/removing interfaces. nl_cb_err(cb, NL_CB_CUSTOM, error_handler, &err); nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, finish_handler, &err.err); if (ack_handler_custom) { -@@ -973,6 +991,7 @@ nl80211_get_wiphy_data_ap(struct i802_bs +@@ -1105,6 +1123,7 @@ nl80211_get_wiphy_data_ap(struct i802_bs os_free(w); return NULL; } @@ -686,33 +686,15 @@ as adding/removing interfaces. nl_cb_set(w->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL); nl_cb_set(w->nl_cb, NL_CB_VALID, NL_CB_CUSTOM, -@@ -1401,7 +1420,7 @@ static void wpa_driver_nl80211_event_rtm - } - wpa_printf(MSG_DEBUG, "nl80211: Interface down (%s/%s)", - namebuf, ifname); -- if (os_strcmp(drv->first_bss->ifname, ifname) != 0) { -+ if (drv->first_bss->ifindex != ifi->ifi_index) { - wpa_printf(MSG_DEBUG, - "nl80211: Not the main interface (%s) - do not indicate interface down", - drv->first_bss->ifname); -@@ -1437,7 +1456,7 @@ static void wpa_driver_nl80211_event_rtm - } - wpa_printf(MSG_DEBUG, "nl80211: Interface up (%s/%s)", - namebuf, ifname); -- if (os_strcmp(drv->first_bss->ifname, ifname) != 0) { -+ if (drv->first_bss->ifindex != ifi->ifi_index) { - wpa_printf(MSG_DEBUG, - "nl80211: Not the main interface (%s) - do not indicate interface up", - drv->first_bss->ifname); -@@ -2130,6 +2149,7 @@ static int wpa_driver_nl80211_init_nl_gl - genl_family_put(family); - nl_cache_free(cache); - +@@ -2212,6 +2231,7 @@ static int wpa_driver_nl80211_init_nl_gl + /* Needs to be registered early so that process_global_event() calls + * the sync reply handler hook. + */ + nl_cb_set(global->nl_cb, NL_CB_MSG_IN, NL_CB_CUSTOM, debug_handler, NULL); nl_cb_set(global->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL); nl_cb_set(global->nl_cb, NL_CB_VALID, NL_CB_CUSTOM, -@@ -2300,6 +2320,7 @@ static int nl80211_init_bss(struct i802_ +@@ -2445,6 +2465,7 @@ static int nl80211_init_bss(struct i802_ if (!bss->nl_cb) return -1; @@ -720,7 +702,7 @@ as adding/removing interfaces. nl_cb_set(bss->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL); nl_cb_set(bss->nl_cb, NL_CB_VALID, NL_CB_CUSTOM, -@@ -8856,6 +8877,7 @@ static void *i802_init(struct hostapd_da +@@ -9178,6 +9199,7 @@ static void *i802_init(struct hostapd_da char master_ifname[IFNAMSIZ]; int ifindex, br_ifindex = 0; int br_added = 0; @@ -728,7 +710,7 @@ as adding/removing interfaces. bss = wpa_driver_nl80211_drv_init(hapd, params->ifname, params->global_priv, 1, -@@ -8916,21 +8938,17 @@ static void *i802_init(struct hostapd_da +@@ -9238,21 +9260,17 @@ static void *i802_init(struct hostapd_da (params->num_bridge == 0 || !params->bridge[0])) add_ifidx(drv, br_ifindex, drv->ifindex); @@ -760,7 +742,7 @@ as adding/removing interfaces. } if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) { -@@ -9312,6 +9330,50 @@ static int wpa_driver_nl80211_if_remove( +@@ -9636,6 +9654,50 @@ static int wpa_driver_nl80211_if_remove( return 0; } @@ -811,7 +793,7 @@ as adding/removing interfaces. static int cookie_handler(struct nl_msg *msg, void *arg) { -@@ -11197,6 +11259,37 @@ static bool nl80211_is_drv_shared(void * +@@ -11535,6 +11597,37 @@ static bool nl80211_is_drv_shared(void * #endif /* CONFIG_IEEE80211BE */ @@ -849,7 +831,7 @@ as adding/removing interfaces. static int driver_nl80211_send_mlme(void *priv, const u8 *data, size_t data_len, int noack, unsigned int freq, -@@ -15016,6 +15109,8 @@ const struct wpa_driver_ops wpa_driver_n +@@ -15541,6 +15634,8 @@ const struct wpa_driver_ops wpa_driver_n .set_acl = wpa_driver_nl80211_set_acl, .if_add = wpa_driver_nl80211_if_add, .if_remove = driver_nl80211_if_remove, @@ -860,7 +842,7 @@ as adding/removing interfaces. .sta_add = wpa_driver_nl80211_sta_add, --- a/src/drivers/driver_nl80211_event.c +++ b/src/drivers/driver_nl80211_event.c -@@ -1254,6 +1254,7 @@ static void mlme_event_ch_switch(struct +@@ -1260,6 +1260,7 @@ static void mlme_event_ch_switch(struct struct nlattr *bw, struct nlattr *cf1, struct nlattr *cf2, struct nlattr *punct_bitmap, @@ -868,7 +850,7 @@ as adding/removing interfaces. int finished) { struct i802_bss *bss; -@@ -1319,6 +1320,8 @@ static void mlme_event_ch_switch(struct +@@ -1325,6 +1326,8 @@ static void mlme_event_ch_switch(struct data.ch_switch.cf1 = nla_get_u32(cf1); if (cf2) data.ch_switch.cf2 = nla_get_u32(cf2); @@ -877,7 +859,7 @@ as adding/removing interfaces. if (link) { data.ch_switch.link_id = nla_get_u8(link); -@@ -4279,6 +4282,7 @@ static void do_process_drv_event(struct +@@ -4331,6 +4334,7 @@ static void do_process_drv_event(struct tb[NL80211_ATTR_CENTER_FREQ1], tb[NL80211_ATTR_CENTER_FREQ2], tb[NL80211_ATTR_PUNCT_BITMAP], @@ -885,7 +867,7 @@ as adding/removing interfaces. 0); break; case NL80211_CMD_CH_SWITCH_NOTIFY: -@@ -4291,6 +4295,7 @@ static void do_process_drv_event(struct +@@ -4343,6 +4347,7 @@ static void do_process_drv_event(struct tb[NL80211_ATTR_CENTER_FREQ1], tb[NL80211_ATTR_CENTER_FREQ2], tb[NL80211_ATTR_PUNCT_BITMAP], @@ -906,7 +888,7 @@ as adding/removing interfaces. int wpa_debug_level = MSG_INFO; int wpa_debug_show_keys = 0; -@@ -210,6 +214,12 @@ void _wpa_printf(int level, const char * +@@ -224,6 +228,12 @@ void _wpa_printf(int level, const char * { va_list ap; @@ -919,7 +901,7 @@ as adding/removing interfaces. if (level >= wpa_debug_level) { #ifdef CONFIG_ANDROID_LOG va_start(ap, fmt); -@@ -260,6 +270,9 @@ void _wpa_hexdump(int level, const char +@@ -274,6 +284,9 @@ void _wpa_hexdump(int level, const char { size_t i; @@ -959,7 +941,7 @@ as adding/removing interfaces. ifdef CONFIG_CODE_COVERAGE CFLAGS += -O0 -fprofile-arcs -ftest-coverage -U_FORTIFY_SOURCE LIBS += -lgcov -@@ -1046,6 +1054,9 @@ ifdef CONFIG_CTRL_IFACE_MIB +@@ -1068,6 +1076,9 @@ ifdef CONFIG_CTRL_IFACE_MIB CFLAGS += -DCONFIG_CTRL_IFACE_MIB endif OBJS += ../src/ap/ctrl_iface_ap.o @@ -971,15 +953,15 @@ as adding/removing interfaces. CFLAGS += -DEAP_SERVER -DEAP_SERVER_IDENTITY --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c -@@ -53,6 +53,7 @@ - #include "wmm_ac.h" - #include "nan_usd.h" +@@ -54,6 +54,7 @@ #include "dpp_supplicant.h" + #include "pr_supplicant.h" + #include "nan_supplicant.h" +#include "ucode.h" #define MAX_OWE_TRANSITION_BSS_SELECT_COUNT 5 -@@ -1706,6 +1707,12 @@ struct wpa_ssid * wpa_scan_res_match(str +@@ -1717,6 +1718,12 @@ struct wpa_ssid * wpa_scan_res_match(str return NULL; } @@ -992,7 +974,7 @@ as adding/removing interfaces. for (ssid = group; ssid; ssid = only_first_ssid ? NULL : ssid->pnext) { if (wpa_scan_res_ok(wpa_s, ssid, match_ssid, match_ssid_len, bss, bssid_ignore_count, debug_print, link)) -@@ -3117,8 +3124,8 @@ fail: +@@ -3127,8 +3134,8 @@ fail: static void multi_ap_process_assoc_resp(struct wpa_supplicant *wpa_s, const u8 *ies, size_t ies_len) { @@ -1002,7 +984,7 @@ as adding/removing interfaces. u16 status; wpa_s->multi_ap_ie = 0; -@@ -3129,13 +3136,13 @@ static void multi_ap_process_assoc_resp( +@@ -3139,13 +3146,13 @@ static void multi_ap_process_assoc_resp( return; status = check_multi_ap_ie(elems.multi_ap + 4, elems.multi_ap_len - 4, @@ -1019,7 +1001,7 @@ as adding/removing interfaces. MULTI_AP_FRONTHAUL_BSS); wpa_s->multi_ap_ie = 1; } -@@ -5500,6 +5507,13 @@ static void wpas_event_rx_mgmt_action(st +@@ -5749,6 +5756,13 @@ static void wpas_event_rx_mgmt_action(st } #endif /* CONFIG_WNM */ @@ -1033,7 +1015,7 @@ as adding/removing interfaces. #ifdef CONFIG_GAS if ((mgmt->u.action.category == WLAN_ACTION_PUBLIC || mgmt->u.action.category == WLAN_ACTION_PROTECTED_DUAL) && -@@ -6293,6 +6307,7 @@ void supplicant_event(void *ctx, enum wp +@@ -6555,6 +6569,7 @@ void supplicant_event(void *ctx, enum wp event_to_string(event), event); #endif /* CONFIG_NO_STDOUT_DEBUG */ @@ -1134,7 +1116,7 @@ as adding/removing interfaces. static int wpas_dpp_listen_start(struct wpa_supplicant *wpa_s, -@@ -4118,6 +4119,9 @@ void wpas_dpp_rx_action(struct wpa_suppl +@@ -4119,6 +4120,9 @@ void wpas_dpp_rx_action(struct wpa_suppl return; } wpa_hexdump(MSG_MSGDUMP, "DPP: Received message attributes", buf, len); diff --git a/package/network/services/hostapd/patches/701-reload_config_inline.patch b/package/network/services/hostapd/patches/701-reload_config_inline.patch index bb4160edd9..d239f24ac8 100644 --- a/package/network/services/hostapd/patches/701-reload_config_inline.patch +++ b/package/network/services/hostapd/patches/701-reload_config_inline.patch @@ -8,7 +8,7 @@ as adding/removing interfaces. --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -4983,7 +4983,14 @@ struct hostapd_config * hostapd_config_r +@@ -5008,7 +5008,14 @@ struct hostapd_config * hostapd_config_r int errors = 0; size_t i; @@ -26,7 +26,7 @@ as adding/removing interfaces. "for reading.", fname); --- a/wpa_supplicant/config_file.c +++ b/wpa_supplicant/config_file.c -@@ -390,8 +390,13 @@ struct wpa_config * wpa_config_read(cons +@@ -391,8 +391,13 @@ struct wpa_config * wpa_config_read(cons while (identity_tail && identity_tail->next) identity_tail = identity_tail->next; @@ -39,11 +39,11 @@ as adding/removing interfaces. wpa_printf(MSG_DEBUG, "Reading configuration file '%s'", name); - f = fopen(name, "r"); if (f == NULL) { - wpa_printf(MSG_ERROR, "Failed to open config file '%s', " - "error: %s", name, strerror(errno)); + if (show_details) + wpa_printf(MSG_ERROR, --- a/hostapd/main.c +++ b/hostapd/main.c -@@ -406,7 +406,11 @@ hostapd_interface_init(struct hapd_inter +@@ -407,7 +407,11 @@ hostapd_interface_init(struct hapd_inter struct hostapd_iface *iface; int k; @@ -58,7 +58,7 @@ as adding/removing interfaces. return NULL; --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -3399,8 +3399,13 @@ hostapd_interface_init_bss(struct hapd_i +@@ -3414,8 +3414,13 @@ hostapd_interface_init_bss(struct hapd_i } } diff --git a/package/network/services/hostapd/patches/710-vlan_no_bridge.patch b/package/network/services/hostapd/patches/710-vlan_no_bridge.patch index fb0a5d4a95..a450dbed3f 100644 --- a/package/network/services/hostapd/patches/710-vlan_no_bridge.patch +++ b/package/network/services/hostapd/patches/710-vlan_no_bridge.patch @@ -8,7 +8,7 @@ was provided by the config --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -3415,6 +3415,8 @@ static int hostapd_config_fill(struct ho +@@ -3427,6 +3427,8 @@ static int hostapd_config_fill(struct ho #ifndef CONFIG_NO_VLAN } else if (os_strcmp(buf, "dynamic_vlan") == 0) { bss->ssid.dynamic_vlan = atoi(pos); @@ -29,7 +29,7 @@ was provided by the config #define DYNAMIC_VLAN_NAMING_END 2 --- a/src/ap/vlan_full.c +++ b/src/ap/vlan_full.c -@@ -475,6 +475,9 @@ void vlan_newlink(const char *ifname, st +@@ -483,6 +483,9 @@ void vlan_newlink(const char *ifname, st if (!vlan) return; @@ -39,7 +39,7 @@ was provided by the config vlan->configured = 1; notempty = vlan->vlan_desc.notempty; -@@ -506,6 +509,7 @@ void vlan_newlink(const char *ifname, st +@@ -514,6 +517,7 @@ void vlan_newlink(const char *ifname, st ifname, br_name, tagged[i], hapd); } diff --git a/package/network/services/hostapd/patches/711-wds_bridge_force.patch b/package/network/services/hostapd/patches/711-wds_bridge_force.patch index c71318be85..51107d3173 100644 --- a/package/network/services/hostapd/patches/711-wds_bridge_force.patch +++ b/package/network/services/hostapd/patches/711-wds_bridge_force.patch @@ -11,7 +11,7 @@ instead rely entirely on netifd handling this properly --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -2241,6 +2241,8 @@ static int hostapd_config_fill(struct ho +@@ -2245,6 +2245,8 @@ static int hostapd_config_fill(struct ho sizeof(conf->bss[0]->iface)); } else if (os_strcmp(buf, "bridge") == 0) { os_strlcpy(bss->bridge, pos, sizeof(bss->bridge)); @@ -22,7 +22,7 @@ instead rely entirely on netifd handling this properly } else if (os_strcmp(buf, "vlan_bridge") == 0) { --- a/src/ap/ap_drv_ops.c +++ b/src/ap/ap_drv_ops.c -@@ -390,8 +390,6 @@ int hostapd_set_wds_sta(struct hostapd_d +@@ -397,8 +397,6 @@ int hostapd_set_wds_sta(struct hostapd_d return -1; if (hapd->conf->wds_bridge[0]) bridge = hapd->conf->wds_bridge; diff --git a/package/network/services/hostapd/patches/720-iface_max_num_sta.patch b/package/network/services/hostapd/patches/720-iface_max_num_sta.patch index f0e3da9f59..e44b2f1b30 100644 --- a/package/network/services/hostapd/patches/720-iface_max_num_sta.patch +++ b/package/network/services/hostapd/patches/720-iface_max_num_sta.patch @@ -8,7 +8,7 @@ full device, e.g. in order to deal with hardware/driver limitations --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -2857,6 +2857,14 @@ static int hostapd_config_fill(struct ho +@@ -2861,6 +2861,14 @@ static int hostapd_config_fill(struct ho line, bss->max_num_sta, MAX_STA_COUNT); return 1; } @@ -25,7 +25,7 @@ full device, e.g. in order to deal with hardware/driver limitations } else if (os_strcmp(buf, "extended_key_id") == 0) { --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h -@@ -1071,6 +1071,8 @@ struct hostapd_config { +@@ -1083,6 +1083,8 @@ struct hostapd_config { unsigned int track_sta_max_num; unsigned int track_sta_max_age; @@ -36,7 +36,7 @@ full device, e.g. in order to deal with hardware/driver limitations * ' ' (ascii 32): all environments --- a/src/ap/beacon.c +++ b/src/ap/beacon.c -@@ -1655,7 +1655,7 @@ void handle_probe_req(struct hostapd_dat +@@ -1701,7 +1701,7 @@ void handle_probe_req(struct hostapd_dat if (hapd->conf->no_probe_resp_if_max_sta && is_multicast_ether_addr(mgmt->da) && is_multicast_ether_addr(mgmt->bssid) && @@ -47,7 +47,7 @@ full device, e.g. in order to deal with hardware/driver limitations " since no room for additional STA", --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -251,6 +251,29 @@ static int hostapd_iface_conf_changed(st +@@ -259,6 +259,29 @@ static int hostapd_iface_conf_changed(st return 0; } @@ -79,7 +79,7 @@ full device, e.g. in order to deal with hardware/driver limitations { --- a/src/ap/hostapd.h +++ b/src/ap/hostapd.h -@@ -831,6 +831,7 @@ void hostapd_periodic_iface(struct hosta +@@ -838,6 +838,7 @@ void hostapd_periodic_iface(struct hosta int hostapd_owe_trans_get_info(struct hostapd_data *hapd); void hostapd_owe_update_trans(struct hostapd_iface *iface);; void hostapd_ocv_check_csa_sa_query(void *eloop_ctx, void *timeout_ctx); diff --git a/package/network/services/hostapd/patches/730-ft_iface.patch b/package/network/services/hostapd/patches/730-ft_iface.patch index 4f97b923ab..dc0d3d5875 100644 --- a/package/network/services/hostapd/patches/730-ft_iface.patch +++ b/package/network/services/hostapd/patches/730-ft_iface.patch @@ -8,7 +8,7 @@ a VLAN interface on top of the bridge, instead of using the bridge directly --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -3054,6 +3054,8 @@ static int hostapd_config_fill(struct ho +@@ -3066,6 +3066,8 @@ static int hostapd_config_fill(struct ho wpa_printf(MSG_INFO, "Line %d: Obsolete peerkey parameter ignored", line); #ifdef CONFIG_IEEE80211R_AP @@ -29,7 +29,7 @@ a VLAN interface on top of the bridge, instead of using the bridge directly int bridge_hairpin; /* hairpin_mode on bridge members */ --- a/src/ap/wpa_auth_glue.c +++ b/src/ap/wpa_auth_glue.c -@@ -1848,8 +1848,12 @@ int hostapd_setup_wpa(struct hostapd_dat +@@ -1899,8 +1899,12 @@ int hostapd_setup_wpa(struct hostapd_dat wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt)) { const char *ft_iface; diff --git a/package/network/services/hostapd/patches/740-snoop_iface.patch b/package/network/services/hostapd/patches/740-snoop_iface.patch index 440848b743..7c4107320c 100644 --- a/package/network/services/hostapd/patches/740-snoop_iface.patch +++ b/package/network/services/hostapd/patches/740-snoop_iface.patch @@ -8,7 +8,7 @@ untagged DHCP packets --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -2245,6 +2245,8 @@ static int hostapd_config_fill(struct ho +@@ -2249,6 +2249,8 @@ static int hostapd_config_fill(struct ho os_strlcpy(bss->wds_bridge, pos, sizeof(bss->wds_bridge)); } else if (os_strcmp(buf, "bridge_hairpin") == 0) { bss->bridge_hairpin = atoi(pos); @@ -29,7 +29,7 @@ untagged DHCP packets int bridge_hairpin; /* hairpin_mode on bridge members */ --- a/src/ap/ap_drv_ops.h +++ b/src/ap/ap_drv_ops.h -@@ -377,12 +377,12 @@ static inline int hostapd_drv_br_port_se +@@ -366,12 +366,12 @@ static inline int hostapd_drv_br_port_se static inline int hostapd_drv_br_set_net_param(struct hostapd_data *hapd, enum drv_br_net_param param, @@ -112,7 +112,7 @@ untagged DHCP packets hapd->x_snoop_initialized = false; --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -4498,7 +4498,7 @@ struct wpa_driver_ops { +@@ -4587,7 +4587,7 @@ struct wpa_driver_ops { * Returns: 0 on success, negative (<0) on failure */ int (*br_set_net_param)(void *priv, enum drv_br_net_param param, @@ -123,7 +123,7 @@ untagged DHCP packets * get_wowlan - Get wake-on-wireless status --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -12898,7 +12898,7 @@ static const char * drv_br_net_param_str +@@ -13233,7 +13233,7 @@ static const char * drv_br_net_param_str static int wpa_driver_br_set_net_param(void *priv, enum drv_br_net_param param, @@ -132,7 +132,7 @@ untagged DHCP packets { struct i802_bss *bss = priv; char path[128]; -@@ -12924,8 +12924,11 @@ static int wpa_driver_br_set_net_param(v +@@ -13259,8 +13259,11 @@ static int wpa_driver_br_set_net_param(v return -EINVAL; } diff --git a/package/network/services/hostapd/patches/760-dynamic_own_ip.patch b/package/network/services/hostapd/patches/760-dynamic_own_ip.patch index bcdf443dbe..91a16d0e56 100644 --- a/package/network/services/hostapd/patches/760-dynamic_own_ip.patch +++ b/package/network/services/hostapd/patches/760-dynamic_own_ip.patch @@ -7,7 +7,7 @@ Some servers use the NAS-IP-Address attribute as a destination address --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -2632,6 +2632,8 @@ static int hostapd_config_fill(struct ho +@@ -2636,6 +2636,8 @@ static int hostapd_config_fill(struct ho } else if (os_strcmp(buf, "iapp_interface") == 0) { wpa_printf(MSG_INFO, "DEPRECATED: iapp_interface not used"); #endif /* CONFIG_IAPP */ @@ -18,7 +18,7 @@ Some servers use the NAS-IP-Address attribute as a destination address wpa_printf(MSG_ERROR, --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h -@@ -312,6 +312,7 @@ struct hostapd_bss_config { +@@ -315,6 +315,7 @@ struct hostapd_bss_config { unsigned int eap_sim_db_timeout; int eap_server_erp; /* Whether ERP is enabled on internal EAP server */ struct hostapd_ip_addr own_ip_addr; diff --git a/package/network/services/hostapd/patches/761-shared_das_port.patch b/package/network/services/hostapd/patches/761-shared_das_port.patch index 0b52e7d0a9..9021a0d8ef 100644 --- a/package/network/services/hostapd/patches/761-shared_das_port.patch +++ b/package/network/services/hostapd/patches/761-shared_das_port.patch @@ -7,7 +7,7 @@ Use the NAS identifier to find the right receiver context on incoming messages --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -1387,6 +1387,7 @@ static int hostapd_bss_radius_init(struc +@@ -1405,6 +1405,7 @@ static int hostapd_bss_radius_init(struc os_memset(&das_conf, 0, sizeof(das_conf)); das_conf.port = conf->radius_das_port; diff --git a/package/network/services/hostapd/patches/762-AP-don-t-ignore-probe-requests-with-invalid-DSSS-par.patch b/package/network/services/hostapd/patches/762-AP-don-t-ignore-probe-requests-with-invalid-DSSS-par.patch index 0df542e319..9222d977c6 100644 --- a/package/network/services/hostapd/patches/762-AP-don-t-ignore-probe-requests-with-invalid-DSSS-par.patch +++ b/package/network/services/hostapd/patches/762-AP-don-t-ignore-probe-requests-with-invalid-DSSS-par.patch @@ -28,7 +28,7 @@ Signed-off-by: David Bauer --- a/src/ap/beacon.c +++ b/src/ap/beacon.c -@@ -1498,7 +1498,7 @@ void handle_probe_req(struct hostapd_dat +@@ -1523,7 +1523,7 @@ void handle_probe_req(struct hostapd_dat * is less likely to see them (Probe Request frame sent on a * neighboring, but partially overlapping, channel). */ diff --git a/package/network/services/hostapd/patches/763-radius-wispr.patch b/package/network/services/hostapd/patches/763-radius-wispr.patch index c96ef11919..b2fe10d6c8 100644 --- a/package/network/services/hostapd/patches/763-radius-wispr.patch +++ b/package/network/services/hostapd/patches/763-radius-wispr.patch @@ -40,10 +40,10 @@ u8 supported_rates[WLAN_SUPP_RATES_MAX]; int supported_rates_len; u8 qosinfo; /* Valid when WLAN_STA_WMM is set */ -+ u32 bandwidth[2]; - - #ifdef CONFIG_MESH - enum mesh_plink_state plink_state; ++ u32 bandwidth[2]; + #ifdef CONFIG_ENC_ASSOC + bool epp_sta; /* Indicates if the station is an EPP peer */ + #endif /* CONFIG_ENC_ASSOC */ --- a/src/radius/radius.c +++ b/src/radius/radius.c @@ -1377,6 +1377,35 @@ radius_msg_get_cisco_keys(struct radius_ diff --git a/package/network/services/hostapd/patches/770-radius_server.patch b/package/network/services/hostapd/patches/770-radius_server.patch index fdf5fed397..ba1db508b4 100644 --- a/package/network/services/hostapd/patches/770-radius_server.patch +++ b/package/network/services/hostapd/patches/770-radius_server.patch @@ -21,7 +21,7 @@ handle reload. OBJS += ../src/ap/drv_callbacks.o --- a/hostapd/main.c +++ b/hostapd/main.c -@@ -40,6 +40,7 @@ struct hapd_global { +@@ -41,6 +41,7 @@ struct hapd_global { static struct hapd_global global; @@ -29,7 +29,7 @@ handle reload. #ifndef CONFIG_NO_HOSTAPD_LOGGER static void hostapd_logger_cb(void *ctx, const u8 *addr, unsigned int module, -@@ -838,6 +839,11 @@ int main(int argc, char *argv[]) +@@ -848,6 +849,11 @@ int main(int argc, char *argv[]) if (os_program_init()) return -1; @@ -71,9 +71,9 @@ handle reload. os_free(sess->nas_ip); + os_free(sess->accept_attr); os_free(sess); - data->num_sess--; - } -@@ -533,6 +540,36 @@ radius_server_erp_find_key(struct radius + if (data) + data->num_sess--; +@@ -534,6 +541,36 @@ radius_server_erp_find_key(struct radius } #endif /* CONFIG_ERP */ @@ -110,7 +110,7 @@ handle reload. static struct radius_session * radius_server_get_new_session(struct radius_server_data *data, -@@ -586,7 +623,7 @@ radius_server_get_new_session(struct rad +@@ -587,7 +624,7 @@ radius_server_get_new_session(struct rad eap_user_free(tmp); return NULL; } @@ -119,7 +119,7 @@ handle reload. sess->macacl = tmp->macacl; eap_user_free(tmp); -@@ -923,11 +960,10 @@ radius_server_encapsulate_eap(struct rad +@@ -924,11 +961,10 @@ radius_server_encapsulate_eap(struct rad } if (code == RADIUS_CODE_ACCESS_ACCEPT) { @@ -135,7 +135,7 @@ handle reload. wpa_printf(MSG_ERROR, "Could not add RADIUS attribute"); radius_msg_free(msg); return NULL; -@@ -1023,11 +1059,10 @@ radius_server_macacl(struct radius_serve +@@ -1024,11 +1060,10 @@ radius_server_macacl(struct radius_serve } if (code == RADIUS_CODE_ACCESS_ACCEPT) { @@ -151,7 +151,7 @@ handle reload. wpa_printf(MSG_ERROR, "Could not add RADIUS attribute"); radius_msg_free(msg); return NULL; -@@ -2335,7 +2370,7 @@ static int radius_server_get_eap_user(vo +@@ -2336,7 +2371,7 @@ static int radius_server_get_eap_user(vo ret = data->get_eap_user(data->conf_ctx, identity, identity_len, phase2, user); if (ret == 0 && user) { diff --git a/package/network/services/hostapd/patches/780-Implement-APuP-Access-Point-Micro-Peering.patch b/package/network/services/hostapd/patches/780-Implement-APuP-Access-Point-Micro-Peering.patch index b819fea149..8873a14fbb 100644 --- a/package/network/services/hostapd/patches/780-Implement-APuP-Access-Point-Micro-Peering.patch +++ b/package/network/services/hostapd/patches/780-Implement-APuP-Access-Point-Micro-Peering.patch @@ -39,8 +39,8 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 --- a/hostapd/Makefile +++ b/hostapd/Makefile -@@ -1430,6 +1430,11 @@ ifdef CONFIG_NO_TKIP - CFLAGS += -DCONFIG_NO_TKIP +@@ -1440,6 +1440,11 @@ CFLAGS += -DCONFIG_PROCESS_COORDINATION + OBJS += ../src/common/proc_coord.o endif +ifdef CONFIG_APUP @@ -53,7 +53,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -4976,6 +4976,15 @@ static int hostapd_config_fill(struct ho +@@ -4999,6 +4999,15 @@ static int hostapd_config_fill(struct ho bss->mld_indicate_disabled = atoi(pos); #endif /* CONFIG_TESTING_OPTIONS */ #endif /* CONFIG_IEEE80211BE */ @@ -66,16 +66,15 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 + os_strlcpy(bss->apup_peer_ifname_prefix, + pos, sizeof(bss->apup_peer_ifname_prefix)); +#endif // def CONFIG_APUP + } else if (os_strcmp(buf, "i2r_lmr_policy") == 0) { + conf->i2r_lmr_policy = atoi(pos); } else { - wpa_printf(MSG_ERROR, - "Line %d: unknown configuration item '%s'", --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h -@@ -984,6 +984,35 @@ struct hostapd_bss_config { - int mbssid_index; - - bool spp_amsdu; -+ +@@ -1001,6 +1001,34 @@ struct hostapd_bss_config { + unsigned int pmksa_caching_privacy:1; + unsigned int eap_using_authentication_frames:1; + #endif /* CONFIG_ENC_ASSOC */ +#ifdef CONFIG_APUP + /** + * Access Point Micro Peering @@ -109,7 +108,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 /** --- a/src/ap/ap_drv_ops.c +++ b/src/ap/ap_drv_ops.c -@@ -385,13 +385,39 @@ int hostapd_set_wds_sta(struct hostapd_d +@@ -392,13 +392,39 @@ int hostapd_set_wds_sta(struct hostapd_d const u8 *addr, int aid, int val) { const char *bridge = NULL; @@ -164,7 +163,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 int hostapd_sta_add(struct hostapd_data *hapd, --- /dev/null +++ b/src/ap/apup.c -@@ -0,0 +1,169 @@ +@@ -0,0 +1,170 @@ +/* + * hostapd / APuP Access Point Micro Peering + * @@ -228,6 +227,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 + const u8 *mld_link_addr = NULL; + bool mld_link_sta = false; + u16 eml_cap = 0; ++ bool epp_sta = false; + + /* First add the station without more information */ + int aRet = hostapd_sta_add( @@ -235,7 +235,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 + NULL, 0, 0, NULL, NULL, NULL, 0, NULL, 0, NULL, + sta_ret->flags, 0, 0, 0, + 0, // 0 add, 1 set -+ mld_link_addr, mld_link_sta, eml_cap); ++ mld_link_addr, mld_link_sta, eml_cap, epp_sta); + + sta_ret->flags |= WLAN_STA_AUTH; + wpa_auth_sm_event(sta_ret->wpa_sm, WPA_AUTH); @@ -309,7 +309,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 + sta_ret->vht_opmode, + 0, // int supp_p2p_ps + 1, // 0 add, 1 set -+ mld_link_addr, mld_link_sta, eml_cap); ++ mld_link_addr, mld_link_sta, eml_cap, epp_sta); + + ap_sta_set_authorized(hapd, sta_ret, 1); + hostapd_set_sta_flags(hapd, sta_ret); @@ -363,7 +363,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 + const struct ieee802_11_elems *elems ); --- a/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c -@@ -60,6 +60,9 @@ +@@ -63,6 +63,9 @@ #include "nan_usd_ap.h" #include "pasn/pasn_common.h" @@ -373,7 +373,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 #ifdef CONFIG_FILS static struct wpabuf * -@@ -3880,8 +3883,8 @@ static u16 check_multi_ap(struct hostapd +@@ -4092,8 +4095,8 @@ static u16 check_multi_ap(struct hostapd } @@ -384,16 +384,16 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 { /* Supported rates not used in IEEE 802.11ad/DMG */ if (hapd->iface->current_mode && -@@ -4326,7 +4329,7 @@ static int __check_assoc_ies(struct host +@@ -4543,7 +4546,7 @@ static int __check_assoc_ies(struct host elems->ext_capab_len); if (resp != WLAN_STATUS_SUCCESS) - return resp; + goto out; - resp = copy_supp_rates(hapd, sta, elems); + resp = hostapd_copy_supp_rates(hapd, sta, elems); if (resp != WLAN_STATUS_SUCCESS) - return resp; + goto out; -@@ -6423,6 +6426,11 @@ static void handle_beacon(struct hostapd +@@ -6747,6 +6750,11 @@ static void handle_beacon(struct hostapd 0); ap_list_process_beacon(hapd->iface, mgmt, &elems, fi); @@ -418,7 +418,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 u16 copy_sta_vendor_vht(struct hostapd_data *hapd, struct sta_info *sta, --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -4192,7 +4192,7 @@ struct wpa_driver_ops { +@@ -4281,7 +4281,7 @@ struct wpa_driver_ops { * Returns: 0 on success, -1 on failure */ int (*set_wds_sta)(void *priv, const u8 *addr, int aid, int val, @@ -429,7 +429,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 * send_action - Transmit an Action frame --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -8708,25 +8708,15 @@ static int have_ifidx(struct wpa_driver_ +@@ -9030,25 +9030,15 @@ int nl80211_has_ifidx(struct wpa_driver_ static int i802_set_wds_sta(void *priv, const u8 *addr, int aid, int val, diff --git a/package/network/services/hostapd/patches/803-hostapd-fix-80211be-build.patch b/package/network/services/hostapd/patches/803-hostapd-fix-80211be-build.patch index 2a4ec0b755..8988ff6507 100644 --- a/package/network/services/hostapd/patches/803-hostapd-fix-80211be-build.patch +++ b/package/network/services/hostapd/patches/803-hostapd-fix-80211be-build.patch @@ -1,6 +1,6 @@ --- a/src/ap/sta_info.c +++ b/src/ap/sta_info.c -@@ -1981,3 +1981,22 @@ void ap_sta_free_sta_profile(struct mld_ +@@ -2166,3 +2166,22 @@ void ap_sta_free_sta_profile(struct mld_ } } #endif /* CONFIG_IEEE80211BE */ @@ -25,7 +25,7 @@ + --- a/src/ap/sta_info.h +++ b/src/ap/sta_info.h -@@ -413,23 +413,8 @@ int ap_sta_re_add(struct hostapd_data *h +@@ -423,23 +423,8 @@ int ap_sta_re_add(struct hostapd_data *h void ap_free_sta_pasn(struct hostapd_data *hapd, struct sta_info *sta);