From: Ivan Pavlov Date: Fri, 7 Aug 2026 07:04:50 +0000 (+0300) Subject: hostapd: update to 2.12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4abffae9b4e82604716cdcb30886469a435fe8bc;p=thirdparty%2Fopenwrt.git hostapd: update to 2.12 Update on 2.12 release tag Manually edit patches: - 601-ucode_support.patch Remove upstreamed patches: - 060-nl80211-fix-reporting-spurious-frame-events.patch https://git.w1.fi/cgit/hostap/commit/?id=d6cda78252b4daefaab3f045fb5ae11fb7189939 All other patches refreshed automatically Signed-off-by: Ivan Pavlov Link: https://github.com/openwrt/openwrt/pull/24599 Signed-off-by: Hauke Mehrtens --- diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile index 03bf891229f..e2cdc1096ff 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:=2026-07-09 -PKG_SOURCE_VERSION:=f08f2749aa696c4e47c5c0f591dda99951bf9fac -PKG_MIRROR_HASH:=c1a978092c8a6e43a9e1bd47e1f334637b9c4969ca741c30ff45c24539132ca4 +PKG_SOURCE_DATE:=2026-08-07 +PKG_SOURCE_VERSION:=831364bf02710ad09c2f27d3efa92abeeb5634c0 +PKG_MIRROR_HASH:=d1b9ca0e6aaaba928fc5d5b02c0084083e745a38ae1214d0e2dc5d1ea6d50393 PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=BSD-3-Clause 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 76c2581c863..3abd5f9ea38 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 -@@ -3062,7 +3062,7 @@ static int drv_supports_vht(struct wpa_s +@@ -3086,7 +3086,7 @@ static int drv_supports_vht(struct wpa_s } @@ -23,7 +23,7 @@ Signed-off-by: Peter Oh { int i; -@@ -3071,7 +3071,10 @@ static bool ibss_mesh_is_80mhz_avail(int +@@ -3095,7 +3095,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; } -@@ -3198,7 +3201,7 @@ static void ibss_mesh_select_40mhz(struc +@@ -3222,7 +3225,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; -@@ -3229,8 +3232,11 @@ static void ibss_mesh_select_40mhz(struc +@@ -3253,8 +3256,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) -@@ -3265,8 +3271,11 @@ static void ibss_mesh_select_40mhz(struc +@@ -3289,8 +3295,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) { -@@ -3344,7 +3353,7 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3368,7 +3377,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, -@@ -3397,7 +3406,7 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3421,7 +3430,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; -@@ -3439,7 +3448,7 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3463,7 +3472,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; -@@ -3462,11 +3471,11 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3486,11 +3495,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]) { -@@ -3495,10 +3504,12 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3519,10 +3528,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; -@@ -3553,6 +3564,7 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3577,6 +3588,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; -@@ -3596,9 +3608,9 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3620,9 +3632,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 37f13f0512d..cc70c6aeb17 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 @@ -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 -@@ -12349,6 +12349,10 @@ static int nl80211_switch_channel(void * +@@ -12389,6 +12389,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 9de53dd10c3..6b2c0437887 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 -@@ -6511,6 +6511,13 @@ static int add_associated_sta(struct hos +@@ -6525,6 +6525,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)", -@@ -6524,7 +6531,8 @@ static int add_associated_sta(struct hos +@@ -6538,7 +6545,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/050-Fix-OpenWrt-13156.patch b/package/network/services/hostapd/patches/050-Fix-OpenWrt-13156.patch index 9b6f96191a4..93d76722aae 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 -@@ -4126,6 +4126,8 @@ int hostapd_remove_iface(struct hapd_int +@@ -4173,6 +4173,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); -@@ -4133,10 +4135,16 @@ void hostapd_new_assoc_sta(struct hostap +@@ -4180,10 +4182,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 -@@ -1742,9 +1742,6 @@ bool ap_sta_set_authorized_flag(struct h +@@ -1757,9 +1757,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 7dd22edcd38..e5d789eaf7f 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 -@@ -2595,6 +2595,9 @@ struct wpa_driver_capa { +@@ -2601,6 +2601,9 @@ struct wpa_driver_capa { /** Maximum number of iterations in a single scan plan */ u32 max_sched_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 60f168f2da5..22dc46f946b 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 -@@ -498,7 +498,7 @@ void hostapd_free_hapd_data(struct hosta +@@ -535,7 +535,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 2640150c51c..00000000000 --- 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 -@@ -2874,7 +2874,7 @@ static void nl80211_spurious_frame(struc - event.rx_from_unknown.link_id = tb[NL80211_ATTR_MLO_LINK_ID] ? - nla_get_u8(tb[NL80211_ATTR_MLO_LINK_ID]) : -1; - -- 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 7e7664e1c21..63e29e50350 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 -@@ -774,6 +774,40 @@ endif +@@ -782,6 +782,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 -@@ -953,9 +987,11 @@ endif +@@ -961,9 +995,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 -@@ -965,38 +1001,48 @@ AESOBJS += ../src/crypto/aes-siv.o +@@ -973,38 +1009,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 -@@ -1011,12 +1057,16 @@ ifneq ($(CONFIG_TLS), openssl) +@@ -1019,12 +1065,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 -@@ -1025,16 +1075,22 @@ endif +@@ -1033,16 +1083,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) -@@ -1044,11 +1100,13 @@ ifneq ($(CONFIG_TLS), openssl) +@@ -1052,11 +1108,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 -@@ -1101,56 +1159,81 @@ ifneq ($(CONFIG_TLS), openssl) +@@ -1109,56 +1167,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 -@@ -1195,11 +1278,13 @@ HOBJS += $(SHA1OBJS) +@@ -1203,11 +1286,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 -@@ -1379,7 +1464,9 @@ NOBJS += ../src/utils/trace.o +@@ -1387,7 +1472,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 -@@ -1402,6 +1489,7 @@ SOBJS += ../src/common/sae.o +@@ -1410,6 +1497,7 @@ SOBJS += ../src/common/sae.o SOBJS += ../src/common/sae_pk.o SOBJS += ../src/common/dragonfly.o SOBJS += $(AESOBJS) @@ -291,7 +291,7 @@ Signed-off-by: Glenn Strauss ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), linux) ifneq ($(CONFIG_TLS), gnutls) -@@ -1415,17 +1503,22 @@ endif +@@ -1423,17 +1511,22 @@ endif SOBJS += ../src/crypto/sha256-prf.o SOBJS += ../src/crypto/sha384-prf.o SOBJS += ../src/crypto/sha512-prf.o 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 db67c442e33..759a71e97f4 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 -@@ -788,10 +788,6 @@ endif +@@ -796,10 +796,6 @@ endif OBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o HOBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o SOBJS += ../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 1cdba474f42..323e173f412 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 -@@ -724,6 +724,7 @@ CFLAGS += -DCONFIG_TLSV12 +@@ -732,6 +732,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 -@@ -745,6 +746,7 @@ endif +@@ -753,6 +754,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 -@@ -775,6 +777,7 @@ CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONF +@@ -783,6 +785,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 -@@ -805,6 +808,7 @@ endif +@@ -813,6 +816,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 -@@ -835,6 +839,7 @@ endif +@@ -843,6 +847,7 @@ endif endif ifeq ($(CONFIG_TLS), internal) @@ -101,7 +101,7 @@ Signed-off-by: Glenn Strauss ifndef CONFIG_CRYPTO CONFIG_CRYPTO=internal endif -@@ -913,6 +918,7 @@ endif +@@ -921,6 +926,7 @@ endif endif ifeq ($(CONFIG_TLS), linux) 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 ca8c3c1c709..b078d62049a 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 -@@ -5135,7 +5135,10 @@ static void wpas_dpp_chirp_start(struct +@@ -5136,7 +5136,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/180-fix_owe_ssid_update.patch b/package/network/services/hostapd/patches/180-fix_owe_ssid_update.patch index 333b1587d9c..e3178439fbc 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 -@@ -2476,7 +2476,11 @@ static int hostapd_owe_iface_iter(struct +@@ -2521,7 +2521,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, -@@ -2493,10 +2497,6 @@ static int hostapd_owe_iface_iter(struct +@@ -2538,10 +2542,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/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 d43a2d02fca..a2e8ca02180 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 -@@ -4974,6 +4974,8 @@ static int hostapd_config_fill(struct ho +@@ -5209,6 +5209,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); @@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau bss->pmksa_caching_privacy = 0; --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h -@@ -991,6 +991,8 @@ struct hostapd_bss_config { +@@ -1002,6 +1002,8 @@ struct hostapd_bss_config { /* The AP's MLD MAC address within the AP MLD */ u8 mld_addr[ETH_ALEN]; @@ -43,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 -@@ -3119,7 +3119,10 @@ struct hostapd_iface * hostapd_alloc_ifa +@@ -3180,7 +3180,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/200-multicall.patch b/package/network/services/hostapd/patches/200-multicall.patch index b1461a58997..33264857cd4 100644 --- a/package/network/services/hostapd/patches/200-multicall.patch +++ b/package/network/services/hostapd/patches/200-multicall.patch @@ -25,7 +25,7 @@ This allows building both hostapd and wpa_supplicant as a single binary OBJS += ../src/ap/vlan_init.o OBJS += ../src/ap/vlan_ifconfig.o OBJS += ../src/ap/vlan.o -@@ -360,10 +362,14 @@ CFLAGS += -DCONFIG_MBO +@@ -368,10 +370,14 @@ CFLAGS += -DCONFIG_MBO OBJS += ../src/ap/mbo_ap.o endif @@ -43,7 +43,7 @@ This allows building both hostapd and wpa_supplicant as a single binary LIBS += $(DRV_AP_LIBS) ifdef CONFIG_L2_PACKET -@@ -1430,6 +1436,12 @@ install: $(addprefix $(DESTDIR)$(BINDIR) +@@ -1438,6 +1444,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 " $@ -@@ -1530,6 +1542,12 @@ include ../src/objs.mk +@@ -1538,6 +1550,12 @@ include ../src/objs.mk _OBJS_VAR := SOBJS include ../src/objs.mk @@ -94,7 +94,7 @@ This allows building both hostapd and wpa_supplicant as a single binary if (c < 0) --- a/src/ap/drv_callbacks.c +++ b/src/ap/drv_callbacks.c -@@ -2599,8 +2599,8 @@ static void hostapd_mld_iface_disable(st +@@ -2610,8 +2610,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; -@@ -2970,7 +2970,7 @@ void wpa_supplicant_event(void *ctx, enu +@@ -2981,7 +2981,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 -@@ -7804,8 +7804,8 @@ union wpa_event_data { +@@ -7815,8 +7815,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 -@@ -7817,7 +7817,7 @@ void wpa_supplicant_event(void *ctx, enu +@@ -7828,7 +7828,7 @@ void wpa_supplicant_event(void *ctx, enu * Same as wpa_supplicant_event(), but we search for the interface in * wpa_global. */ @@ -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 -@@ -6703,8 +6703,8 @@ static int wpas_pasn_auth(struct wpa_sup +@@ -6770,8 +6770,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; -@@ -7742,7 +7742,7 @@ void wpa_supplicant_event(void *ctx, enu +@@ -7813,7 +7813,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 -@@ -8303,7 +8303,6 @@ struct wpa_interface * wpa_supplicant_ma +@@ -8454,7 +8454,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() -@@ -8338,6 +8337,11 @@ static int wpa_supplicant_match_existing +@@ -8489,6 +8488,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 -@@ -8594,6 +8598,8 @@ struct wpa_global * wpa_supplicant_init( +@@ -8745,6 +8749,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 0e175c82ac8..0f83e93ba61 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 -@@ -1443,7 +1443,7 @@ hostapd_multi.a: $(BCHECK) $(OBJS) +@@ -1451,7 +1451,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 -@@ -1454,7 +1454,7 @@ _OBJS_VAR := OBJS_c +@@ -1462,7 +1462,7 @@ _OBJS_VAR := OBJS_c include ../src/objs.mk hostapd_cli: $(OBJS_c) 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 373df0da738..624098bae24 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, -@@ -1717,13 +1713,10 @@ static const struct hostapd_cli_cmd host +@@ -1751,13 +1747,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, -@@ -1748,7 +1741,6 @@ static const struct hostapd_cli_cmd host +@@ -1782,7 +1775,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 5cd89e73d34..9201c4947b9 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 -@@ -3987,6 +3987,7 @@ static int hostapd_ctrl_iface_receive_pr +@@ -4089,6 +4089,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) { -@@ -4028,6 +4029,7 @@ static int hostapd_ctrl_iface_receive_pr +@@ -4130,6 +4131,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); @@ -121,7 +121,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality int ieee802_1x_get_mib(struct hostapd_data *hapd, char *buf, size_t buflen) { -@@ -3049,6 +3050,7 @@ int ieee802_1x_get_mib_sta(struct hostap +@@ -3052,6 +3053,7 @@ int ieee802_1x_get_mib_sta(struct hostap return len; } @@ -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 -@@ -6548,6 +6548,7 @@ static const char * wpa_bool_txt(int val +@@ -6552,6 +6552,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) \ -@@ -6700,7 +6701,7 @@ int wpa_get_mib_sta(struct wpa_state_mac +@@ -6704,7 +6705,7 @@ int wpa_get_mib_sta(struct wpa_state_mac return len; } diff --git a/package/network/services/hostapd/patches/300-noscan.patch b/package/network/services/hostapd/patches/300-noscan.patch index ea71a12c1b8..aa17921cddb 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 -@@ -3530,6 +3530,10 @@ static int hostapd_config_fill(struct ho +@@ -3666,6 +3666,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 -@@ -1131,6 +1131,8 @@ struct hostapd_config { +@@ -1142,6 +1142,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 -@@ -619,7 +619,8 @@ static int ieee80211n_check_40mhz(struct +@@ -621,7 +621,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 500a8ca6afd..c8d9bfec1aa 100644 --- a/package/network/services/hostapd/patches/301-mesh-noscan.patch +++ b/package/network/services/hostapd/patches/301-mesh-noscan.patch @@ -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 -@@ -885,6 +885,7 @@ static void wpa_config_write_network(FIL +@@ -883,6 +883,7 @@ static void wpa_config_write_network(FIL INT(mode); #ifdef CONFIG_MESH INT(no_auto_peer); @@ -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 -@@ -3134,7 +3134,7 @@ static bool ibss_mesh_can_use_vht(struct +@@ -3158,7 +3158,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)) -@@ -3208,7 +3208,7 @@ static void ibss_mesh_select_40mhz(struc +@@ -3232,7 +3232,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[] = { -@@ -3561,7 +3561,7 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3585,7 +3585,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); -@@ -3605,6 +3605,8 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3629,6 +3629,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 7a32e1d2fde..d346375549b 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 -@@ -6519,7 +6519,7 @@ wpa_supplicant_alloc(struct wpa_supplica +@@ -6661,7 +6661,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/370-preserve_radio_mask.patch b/package/network/services/hostapd/patches/370-preserve_radio_mask.patch index 81725f8e66b..a4420cc9612 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 -@@ -99,6 +99,7 @@ struct i802_bss { +@@ -101,6 +101,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; -@@ -354,7 +355,7 @@ send_and_recv_resp(struct wpa_driver_nl8 +@@ -356,7 +357,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 -@@ -894,6 +894,7 @@ struct wiphy_idx_data { +@@ -909,6 +909,7 @@ struct wiphy_idx_data { u8 use_4addr; u64 wdev_id; bool wdev_id_set; @@ -27,7 +27,7 @@ }; -@@ -924,6 +925,9 @@ static int netdev_info_handler(struct nl +@@ -939,6 +940,9 @@ static int netdev_info_handler(struct nl info->wdev_id_set = true; } @@ -37,7 +37,7 @@ return NL_SKIP; } -@@ -990,6 +994,20 @@ static int nl80211_get_4addr(struct i802 +@@ -1005,6 +1009,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) { -@@ -2608,6 +2626,8 @@ static void * wpa_driver_nl80211_drv_ini +@@ -2623,6 +2641,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; -@@ -6797,7 +6817,7 @@ const char * nl80211_iftype_str(enum nl8 +@@ -6812,7 +6832,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) { -@@ -6817,6 +6837,10 @@ static int nl80211_create_iface_once(str +@@ -6832,6 +6852,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. -@@ -6910,14 +6934,14 @@ static int nl80211_create_iface_once(str +@@ -6943,7 +6967,7 @@ static int nl80211_use_existing_iface(st int nl80211_create_iface(struct wpa_driver_nl80211_data *drv, const char *ifname, enum nl80211_iftype iftype, @@ -96,7 +96,9 @@ int (*handler)(struct nl_msg *, void *), void *arg, int use_existing) { - int ret; +@@ -6952,8 +6976,8 @@ int nl80211_create_iface(struct wpa_driv + if (use_existing && if_nametoindex(ifname)) + return nl80211_use_existing_iface(drv, ifname, iftype, addr); - ret = nl80211_create_iface_once(drv, ifname, iftype, addr, wds, handler, - arg); @@ -105,7 +107,7 @@ /* if error occurred and interface exists already */ if (ret < 0 && if_nametoindex(ifname)) { -@@ -6943,7 +6967,7 @@ int nl80211_create_iface(struct wpa_driv +@@ -6968,7 +6992,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 +116,7 @@ } if (ret >= 0 && is_p2p_net_interface(iftype)) { -@@ -9308,8 +9332,8 @@ static int i802_set_wds_sta(void *priv, +@@ -9335,8 +9359,8 @@ static int i802_set_wds_sta(void *priv, if (!if_nametoindex(name)) { if (nl80211_create_iface(drv, name, NL80211_IFTYPE_AP_VLAN, @@ -125,7 +127,7 @@ return -1; if (bridge_ifname) -@@ -9686,7 +9710,8 @@ static int wpa_driver_nl80211_if_add(voi +@@ -9713,7 +9737,8 @@ static int wpa_driver_nl80211_if_add(voi os_memset(&nonnetdev_info, 0, sizeof(nonnetdev_info)); ifidx = nl80211_create_iface(drv, ifname, nlmode, addr, @@ -135,7 +137,7 @@ &nonnetdev_info, use_existing); if (!nonnetdev_info.wdev_id_set || ifidx != 0) { wpa_printf(MSG_ERROR, -@@ -9705,7 +9730,8 @@ static int wpa_driver_nl80211_if_add(voi +@@ -9732,7 +9757,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, @@ -145,7 +147,7 @@ if (use_existing && ifidx == -ENFILE) { added = 0; ifidx = if_nametoindex(ifname); -@@ -9775,6 +9801,8 @@ static int wpa_driver_nl80211_if_add(voi +@@ -9802,6 +9828,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 4762b6a9a5f..69d7cf50357 100644 --- a/package/network/services/hostapd/patches/410-limit_debug_messages.patch +++ b/package/network/services/hostapd/patches/410-limit_debug_messages.patch @@ -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 -@@ -76,6 +76,17 @@ void wpa_debug_close_file(void); +@@ -81,6 +81,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 * -@@ -96,9 +107,15 @@ void wpa_debug_print_timestamp(void); +@@ -101,9 +112,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 -@@ -110,7 +127,13 @@ PRINTF_FORMAT(2, 3); +@@ -115,7 +132,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) -@@ -132,7 +155,13 @@ static inline void wpa_hexdump_buf(int l +@@ -137,7 +160,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) -@@ -154,8 +183,14 @@ static inline void wpa_hexdump_buf_key(i +@@ -159,8 +188,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. */ @@ -165,9 +165,9 @@ Subject: [PATCH] hostapd: add configurable debug message minimum priority to + _wpa_hexdump_ascii(level, title, buf, len, 1); +} - /** - * wpa_hexdump_ascii_key - conditional hex dump, hide keys -@@ -171,8 +206,14 @@ void wpa_hexdump_ascii(int level, const + static inline void wpa_hexdump_ascii_buf(int level, const char *title, + const struct wpabuf *buf) +@@ -183,8 +218,14 @@ static inline void wpa_hexdump_ascii_buf * 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 -@@ -209,7 +250,12 @@ void wpa_hexdump_ascii_key(int level, co +@@ -221,7 +262,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 -@@ -223,8 +269,13 @@ void wpa_msg(void *ctx, int level, const +@@ -235,8 +281,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 144fd54ccdb..89253768c37 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 @@ -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 -@@ -4784,6 +4784,12 @@ static void wpas_start_assoc_cb(struct w +@@ -4939,6 +4939,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 ea506f509af..6e34b8c6b98 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 -@@ -1975,6 +1975,7 @@ struct wpa_driver_mesh_join_params { +@@ -1981,6 +1981,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 -@@ -13055,6 +13055,18 @@ static int nl80211_put_mesh_id(struct nl +@@ -13095,6 +13095,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) { -@@ -13116,6 +13128,7 @@ static int nl80211_join_mesh(struct i802 +@@ -13156,6 +13168,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) || 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 bb75ca2ea13..97ed624b054 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 -@@ -3568,6 +3568,10 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3592,6 +3592,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 fbaed04418a..0d2069dae0c 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 -@@ -3584,6 +3584,8 @@ static int hostapd_config_fill(struct ho +@@ -3720,6 +3720,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/600-ubus_support.patch b/package/network/services/hostapd/patches/600-ubus_support.patch index 38151ea422f..1980fe168d5 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 -@@ -1471,6 +1471,12 @@ void handle_probe_req(struct hostapd_dat +@@ -1479,6 +1479,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) -@@ -1678,6 +1684,12 @@ void handle_probe_req(struct hostapd_dat +@@ -1686,6 +1692,12 @@ void handle_probe_req(struct hostapd_dat } #endif /* CONFIG_P2P */ @@ -116,7 +116,7 @@ probe/assoc/auth requests via object subscribe. #ifdef CONFIG_P2P if (elems.p2p) { wpabuf_free(sta->p2p_ie); -@@ -1428,6 +1438,7 @@ void hostapd_event_ch_switch(struct host +@@ -1434,6 +1444,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 -@@ -488,6 +488,7 @@ void hostapd_free_hapd_data(struct hosta +@@ -525,6 +525,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); -@@ -1338,6 +1339,8 @@ static int hostapd_start_beacon(struct h +@@ -1383,6 +1384,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; } -@@ -2581,6 +2584,7 @@ static int hostapd_setup_interface_compl +@@ -2626,6 +2629,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 -@@ -2795,6 +2799,7 @@ dfs_offload: +@@ -2855,6 +2859,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); -@@ -3544,6 +3549,7 @@ void hostapd_interface_deinit_free(struc +@@ -3605,6 +3610,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; @@ -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; -@@ -793,6 +795,7 @@ hostapd_alloc_bss_data(struct hostapd_if +@@ -822,6 +824,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 -@@ -2026,6 +2026,7 @@ static void handle_auth_sae(struct hosta +@@ -2027,6 +2027,7 @@ static void handle_auth_sae(struct hosta if (sae_check_confirm(sta->sae, var, var_len, NULL) < 0) { @@ -203,7 +203,7 @@ probe/assoc/auth requests via object subscribe. if (sae_password_track_fail(hapd, sta)) { wpa_printf(MSG_DEBUG, "SAE: Reject mismatching Confirm so that another password can be attempted by " -@@ -4218,7 +4219,7 @@ static void handle_auth(struct hostapd_d +@@ -4222,7 +4223,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; @@ -212,7 +212,7 @@ probe/assoc/auth requests via object subscribe. u16 fc; const u8 *challenge = NULL; u8 resp_ies[2 + WLAN_AUTH_CHALLENGE_LEN]; -@@ -4257,6 +4258,11 @@ static void handle_auth(struct hostapd_d +@@ -4261,6 +4262,11 @@ static void handle_auth(struct hostapd_d else sa = mgmt->sa; #endif /* CONFIG_IEEE80211BE */ @@ -224,7 +224,7 @@ probe/assoc/auth requests via object subscribe. auth_alg = le_to_host16(mgmt->u.auth.auth_alg); auth_transaction = le_to_host16(mgmt->u.auth.auth_transaction); -@@ -4447,6 +4453,13 @@ static void handle_auth(struct hostapd_d +@@ -4453,6 +4459,13 @@ static void handle_auth(struct hostapd_d resp = WLAN_STATUS_UNSPECIFIED_FAILURE; goto fail; } @@ -238,7 +238,7 @@ probe/assoc/auth requests via object subscribe. if (res == HOSTAPD_ACL_PENDING) return; -@@ -7190,7 +7203,7 @@ static void handle_assoc(struct hostapd_ +@@ -7204,7 +7217,7 @@ static void handle_assoc(struct hostapd_ int resp = WLAN_STATUS_SUCCESS; u16 reply_res = WLAN_STATUS_UNSPECIFIED_FAILURE; const u8 *pos; @@ -247,7 +247,7 @@ probe/assoc/auth requests via object subscribe. struct sta_info *sta; u8 *tmp = NULL; #ifdef CONFIG_FILS -@@ -7446,6 +7459,11 @@ static void handle_assoc(struct hostapd_ +@@ -7460,6 +7473,11 @@ static void handle_assoc(struct hostapd_ left = res; } #endif /* CONFIG_FILS */ @@ -259,7 +259,7 @@ probe/assoc/auth requests via object subscribe. /* followed by SSID and Supported rates; and HT capabilities if 802.11n * is used */ -@@ -7538,6 +7556,7 @@ static void handle_assoc(struct hostapd_ +@@ -7552,6 +7570,7 @@ static void handle_assoc(struct hostapd_ #ifdef CONFIG_TAXONOMY taxonomy_sta_info_assoc_req(hapd, sta, pos, left); @@ -267,7 +267,7 @@ probe/assoc/auth requests via object subscribe. #endif /* CONFIG_TAXONOMY */ sta->pending_wds_enable = 0; -@@ -7551,6 +7570,13 @@ static void handle_assoc(struct hostapd_ +@@ -7565,6 +7584,13 @@ static void handle_assoc(struct hostapd_ } #endif /* CONFIG_FILS */ @@ -281,7 +281,7 @@ probe/assoc/auth requests via object subscribe. fail: /* -@@ -7798,6 +7824,7 @@ static void handle_disassoc(struct hosta +@@ -7812,6 +7838,7 @@ static void handle_disassoc(struct hosta (unsigned long) len); return; } @@ -289,7 +289,7 @@ probe/assoc/auth requests via object subscribe. sta = ap_get_sta(hapd, mgmt->sa); if (!sta) { -@@ -7829,6 +7856,8 @@ static void handle_deauth(struct hostapd +@@ -7843,6 +7870,8 @@ static void handle_deauth(struct hostapd /* Clear the PTKSA cache entries for PASN */ ptksa_cache_flush(hapd->ptksa, mgmt->sa, WPA_CIPHER_NONE); @@ -321,7 +321,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 -@@ -609,6 +609,7 @@ void ap_handle_timer(void *eloop_ctx, vo +@@ -621,6 +621,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"); @@ -329,7 +329,7 @@ probe/assoc/auth requests via object subscribe. ap_free_sta(hapd, sta); return; } -@@ -777,6 +778,7 @@ skip_poll: +@@ -789,6 +790,7 @@ skip_poll: mlme_deauthenticate_indication( hapd, sta, WLAN_REASON_PREV_AUTH_NOT_VALID); @@ -337,7 +337,7 @@ probe/assoc/auth requests via object subscribe. ap_free_sta(hapd, sta); break; } -@@ -1778,17 +1780,30 @@ void ap_sta_set_authorized_event(struct +@@ -1793,17 +1795,30 @@ void ap_sta_set_authorized_event(struct os_snprintf(buf, sizeof(buf), MACSTR, MAC2STR(sta->addr)); if (authorized) { @@ -368,7 +368,7 @@ probe/assoc/auth requests via object subscribe. #ifdef CONFIG_P2P if (wpa_auth_get_ip_addr(sta->wpa_sm, ip_addr_buf) == 0) { -@@ -1800,6 +1815,13 @@ void ap_sta_set_authorized_event(struct +@@ -1815,6 +1830,13 @@ void ap_sta_set_authorized_event(struct } #endif /* CONFIG_P2P */ @@ -382,7 +382,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), -@@ -1824,17 +1846,19 @@ void ap_sta_set_authorized_event(struct +@@ -1839,17 +1861,19 @@ void ap_sta_set_authorized_event(struct " vlanid=%u", sta->vlan_id); #endif /* CONFIG_NO_VLAN */ @@ -504,7 +504,7 @@ probe/assoc/auth requests via object subscribe. } --- a/src/ap/wpa_auth_glue.c +++ b/src/ap/wpa_auth_glue.c -@@ -415,6 +415,7 @@ static void hostapd_wpa_auth_psk_failure +@@ -416,6 +416,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)); diff --git a/package/network/services/hostapd/patches/601-ucode_support.patch b/package/network/services/hostapd/patches/601-ucode_support.patch index 0d40eda49de..348e5c5eacc 100644 --- a/package/network/services/hostapd/patches/601-ucode_support.patch +++ b/package/network/services/hostapd/patches/601-ucode_support.patch @@ -8,15 +8,15 @@ as adding/removing interfaces. --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -1276,6 +1276,7 @@ void wpa_supplicant_set_state(struct wpa +@@ -1292,6 +1292,7 @@ void wpa_supplicant_set_state(struct wpa sme_sched_obss_scan(wpa_s, 0); } wpa_s->wpa_state = state; + wpas_ucode_update_state(wpa_s); - #ifndef CONFIG_NO_ROBUST_AV - if (state == WPA_COMPLETED && dl_list_len(&wpa_s->active_scs_ids) && -@@ -8436,6 +8437,8 @@ struct wpa_supplicant * wpa_supplicant_a + if (state == WPA_COMPLETED && new_connection && + wpa_s->conf->wfa_gen_capa == WFA_GEN_CAPA_PROTECTED && +@@ -8587,6 +8588,8 @@ struct wpa_supplicant * wpa_supplicant_a } #endif /* CONFIG_P2P */ @@ -25,7 +25,7 @@ as adding/removing interfaces. return wpa_s; } -@@ -8462,6 +8465,8 @@ int wpa_supplicant_remove_iface(struct w +@@ -8613,6 +8616,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) { -@@ -8781,6 +8786,7 @@ struct wpa_global * wpa_supplicant_init( +@@ -8932,6 +8937,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; } -@@ -8853,6 +8859,8 @@ void wpa_supplicant_deinit(struct wpa_gl +@@ -9004,6 +9010,8 @@ void wpa_supplicant_deinit(struct wpa_gl wpas_notify_supplicant_deinitialized(global); @@ -165,7 +165,7 @@ as adding/removing interfaces. ifdef CONFIG_CODE_COVERAGE --- a/hostapd/ctrl_iface.c +++ b/hostapd/ctrl_iface.c -@@ -5960,6 +5960,7 @@ try_again: +@@ -6076,6 +6076,7 @@ try_again: return -1; } @@ -173,7 +173,7 @@ as adding/removing interfaces. wpa_msg_register_cb(hostapd_ctrl_iface_msg_cb); return 0; -@@ -6061,6 +6062,7 @@ fail: +@@ -6177,6 +6178,7 @@ fail: os_free(fname); interface->global_ctrl_sock = s; @@ -227,7 +227,16 @@ as adding/removing interfaces. { --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -263,6 +263,8 @@ int hostapd_reload_config(struct hostapd +@@ -66,7 +66,7 @@ static int hostapd_broadcast_wep_clear(s + #endif /* CONFIG_WEP */ + static int setup_interface2(struct hostapd_iface *iface); + static void channel_list_update_timeout(void *eloop_ctx, void *timeout_ctx); +-static void hostapd_cleanup_unused_mlds(struct hapd_interfaces *interfaces); ++void hostapd_cleanup_unused_mlds(struct hapd_interfaces *interfaces); + static void hostapd_interface_setup_failure_handler(void *eloop_ctx, + void *timeout_ctx); + +@@ -295,6 +295,8 @@ int hostapd_reload_config(struct hostapd struct hostapd_config *newconf, *oldconf; size_t j; @@ -236,7 +245,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); -@@ -488,6 +490,7 @@ void hostapd_free_hapd_data(struct hosta +@@ -525,6 +527,7 @@ void hostapd_free_hapd_data(struct hosta hapd->beacon_set_done = 0; wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface); @@ -244,7 +253,7 @@ as adding/removing interfaces. hostapd_ubus_free_bss(hapd); accounting_deinit(hapd); hostapd_deinit_wpa(hapd); -@@ -649,7 +652,7 @@ static void hostapd_mld_move_vlan_list(s +@@ -686,7 +689,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. */ @@ -253,15 +262,15 @@ as adding/removing interfaces. { #ifdef CONFIG_IEEE80211BE int i; -@@ -757,6 +760,7 @@ void hostapd_cleanup_iface_partial(struc +@@ -795,6 +798,7 @@ void hostapd_cleanup_iface_partial(struc static void hostapd_cleanup_iface(struct hostapd_iface *iface) { wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface); + hostapd_ucode_free_iface(iface); + hostapd_afc_stop(iface); eloop_cancel_timeout(hostapd_interface_setup_failure_handler, iface, NULL); - -@@ -1340,6 +1344,7 @@ static int hostapd_start_beacon(struct h +@@ -1385,6 +1389,7 @@ static int hostapd_start_beacon(struct h hapd->driver->set_operstate(hapd->drv_priv, 1); hostapd_ubus_add_bss(hapd); @@ -269,7 +278,7 @@ as adding/removing interfaces. return 0; } -@@ -1415,7 +1420,7 @@ static int hostapd_bss_radius_init(struc +@@ -1460,7 +1465,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 +287,7 @@ as adding/removing interfaces. bool start_beacon) { struct hostapd_bss_config *conf = hapd->conf; -@@ -1458,12 +1463,17 @@ static int hostapd_setup_bss(struct host +@@ -1503,12 +1508,17 @@ static int hostapd_setup_bss(struct host if (!first) { u8 *addr = hapd->own_addr; @@ -297,7 +306,7 @@ as adding/removing interfaces. hapd->iface->bss[0]->own_addr) == 0) { wpa_printf(MSG_ERROR, "BSS '%s' may not have " -@@ -1493,6 +1503,7 @@ static int hostapd_setup_bss(struct host +@@ -1538,6 +1548,7 @@ static int hostapd_setup_bss(struct host hapd->mld_link_id, hapd->conf->iface); goto setup_mld; } @@ -305,7 +314,7 @@ as adding/removing interfaces. } #endif /* CONFIG_IEEE80211BE */ -@@ -1501,7 +1512,7 @@ static int hostapd_setup_bss(struct host +@@ -1546,7 +1557,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 +323,7 @@ as adding/removing interfaces. wpa_printf(MSG_ERROR, "Failed to add BSS (BSSID=" MACSTR ")", MAC2STR(hapd->own_addr)); hapd->interface_added = 0; -@@ -1542,6 +1553,8 @@ setup_mld: +@@ -1587,6 +1598,8 @@ setup_mld: } #endif /* CONFIG_IEEE80211BE */ @@ -323,7 +332,7 @@ as adding/removing interfaces. if (conf->wmm_enabled < 0) conf->wmm_enabled = hapd->iconf->ieee80211n | hapd->iconf->ieee80211ax; -@@ -1870,7 +1883,7 @@ int hostapd_set_acl(struct hostapd_data +@@ -1915,7 +1928,7 @@ int hostapd_set_acl(struct hostapd_data } @@ -332,7 +341,7 @@ as adding/removing interfaces. { #ifdef CONFIG_IEEE80211BE int ret; -@@ -2543,7 +2556,7 @@ static int hostapd_owe_iface_iter2(struc +@@ -2588,7 +2601,7 @@ static int hostapd_owe_iface_iter2(struc #endif /* CONFIG_OWE */ @@ -341,7 +350,7 @@ as adding/removing interfaces. { #ifdef CONFIG_OWE /* Check whether the enabled BSS can complete OWE transition mode -@@ -3000,7 +3013,7 @@ hostapd_alloc_bss_data(struct hostapd_if +@@ -3060,7 +3073,7 @@ hostapd_alloc_bss_data(struct hostapd_if } @@ -350,7 +359,7 @@ as adding/removing interfaces. { if (!hapd) return; -@@ -3208,7 +3221,7 @@ fail: +@@ -3269,7 +3282,7 @@ fail: } @@ -359,7 +368,7 @@ as adding/removing interfaces. { #ifdef CONFIG_IEEE80211BE struct hostapd_mld *mld, **all_mld; -@@ -4089,7 +4102,8 @@ int hostapd_remove_iface(struct hapd_int +@@ -4150,7 +4163,8 @@ int hostapd_remove_iface(struct hapd_int hapd_iface = interfaces->iface[i]; if (hapd_iface == NULL) return -1; @@ -367,8 +376,8 @@ as adding/removing interfaces. + if (!os_strcmp(hapd_iface->phy, buf) || + !os_strcmp(hapd_iface->conf->bss[0]->iface, buf)) { wpa_printf(MSG_INFO, "Remove interface '%s'", buf); - hapd_iface->driver_ap_teardown = - !!(hapd_iface->drv_flags & + return hostapd_remove_hapd_iface(hapd_iface); + } --- a/src/ap/hostapd.h +++ b/src/ap/hostapd.h @@ -19,6 +19,7 @@ @@ -406,7 +415,7 @@ as adding/removing interfaces. void *owner; char *config_fname; struct hostapd_config *conf; -@@ -804,11 +811,16 @@ struct hostapd_iface * hostapd_init(stru +@@ -833,11 +840,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); @@ -423,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); -@@ -834,6 +846,7 @@ hostapd_switch_channel_fallback(struct h +@@ -863,6 +875,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); @@ -433,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 -@@ -763,12 +763,17 @@ const char * sae_get_password(struct hos +@@ -764,12 +764,17 @@ const char * sae_get_password(struct hos struct sae_pt **s_pt, const struct sae_pk **s_pk) { @@ -452,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 -@@ -830,12 +835,30 @@ const char * sae_get_password(struct hos +@@ -831,12 +836,30 @@ const char * sae_get_password(struct hos pt = hapd->conf->ssid.pt; } @@ -485,7 +494,7 @@ as adding/removing interfaces. } } -@@ -4608,6 +4631,12 @@ static void handle_auth(struct hostapd_d +@@ -4614,6 +4637,12 @@ static void handle_auth(struct hostapd_d goto fail; } @@ -500,7 +509,7 @@ as adding/removing interfaces. --- a/src/ap/sta_info.c +++ b/src/ap/sta_info.c -@@ -541,6 +541,11 @@ void ap_free_sta(struct hostapd_data *ha +@@ -553,6 +553,11 @@ void ap_free_sta(struct hostapd_data *ha os_free(sta->eap_auth_data.rsnxe); #endif /* CONFIG_IEEE8021X_AUTH */ @@ -512,7 +521,7 @@ as adding/removing interfaces. os_free(sta); } -@@ -1764,6 +1769,8 @@ void ap_sta_set_authorized_event(struct +@@ -1779,6 +1784,8 @@ void ap_sta_set_authorized_event(struct #endif /* CONFIG_P2P */ const u8 *ip_ptr = NULL; @@ -535,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 -@@ -487,6 +487,7 @@ static const u8 * hostapd_wpa_auth_get_p +@@ -488,6 +488,7 @@ static const u8 * hostapd_wpa_auth_get_p struct sta_info *sta = ap_get_sta(hapd, addr); const u8 *psk; @@ -543,7 +552,7 @@ as adding/removing interfaces. if (vlan_id) *vlan_id = 0; if (psk_len) -@@ -537,13 +538,18 @@ static const u8 * hostapd_wpa_auth_get_p +@@ -538,13 +539,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) */ @@ -563,7 +572,7 @@ as adding/removing interfaces. if (pos->is_passphrase) { if (pbkdf2_sha1(pos->passphrase, hapd->conf->ssid.ssid, -@@ -557,9 +563,13 @@ static const u8 * hostapd_wpa_auth_get_p +@@ -558,9 +564,13 @@ static const u8 * hostapd_wpa_auth_get_p } if (pos->psk == prev_psk) { psk = pos->next ? pos->next->psk : NULL; @@ -579,7 +588,7 @@ as adding/removing interfaces. } --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -4429,6 +4429,25 @@ struct wpa_driver_ops { +@@ -4440,6 +4440,25 @@ struct wpa_driver_ops { const char *ifname); /** @@ -605,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) -@@ -7424,6 +7443,7 @@ union wpa_event_data { +@@ -7435,6 +7454,7 @@ union wpa_event_data { /** * struct ch_switch @@ -613,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 -@@ -7434,6 +7454,7 @@ union wpa_event_data { +@@ -7445,6 +7465,7 @@ union wpa_event_data { * @punct_bitmap: Puncturing bitmap */ struct ch_switch { @@ -652,7 +661,7 @@ as adding/removing interfaces. static void nl80211_nlmsg_clear(struct nl_msg *msg) { -@@ -638,6 +653,8 @@ int send_and_recv_glb(struct nl80211_glo +@@ -653,6 +668,8 @@ int send_and_recv_glb(struct nl80211_glo if (!msg) return -ENOMEM; @@ -661,7 +670,7 @@ as adding/removing interfaces. err.err = -ENOMEM; s_nl_cb = nl_socket_get_cb(nl_handle); -@@ -682,6 +699,7 @@ int send_and_recv_glb(struct nl80211_glo +@@ -697,6 +714,7 @@ int send_and_recv_glb(struct nl80211_glo err.err_info = err_info; err.drv = drv; @@ -669,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) { -@@ -1117,6 +1135,7 @@ nl80211_get_wiphy_data_ap(struct i802_bs +@@ -1132,6 +1150,7 @@ nl80211_get_wiphy_data_ap(struct i802_bs os_free(w); return NULL; } @@ -677,7 +686,7 @@ 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, -@@ -2224,6 +2243,7 @@ static int wpa_driver_nl80211_init_nl_gl +@@ -2239,6 +2258,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. */ @@ -685,7 +694,7 @@ as adding/removing interfaces. 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, -@@ -2469,6 +2489,7 @@ static int nl80211_init_bss(struct i802_ +@@ -2484,6 +2504,7 @@ static int nl80211_init_bss(struct i802_ if (!bss->nl_cb) return -1; @@ -693,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, -@@ -9476,6 +9497,7 @@ static void *i802_init(struct hostapd_da +@@ -9503,6 +9524,7 @@ static void *i802_init(struct hostapd_da char master_ifname[IFNAMSIZ]; int ifindex, br_ifindex = 0; int br_added = 0; @@ -701,7 +710,7 @@ as adding/removing interfaces. bss = wpa_driver_nl80211_drv_init(hapd, params->ifname, params->global_priv, 1, -@@ -9536,21 +9558,17 @@ static void *i802_init(struct hostapd_da +@@ -9563,21 +9585,17 @@ static void *i802_init(struct hostapd_da (params->num_bridge == 0 || !params->bridge[0])) add_ifidx(drv, br_ifindex, drv->ifindex); @@ -733,7 +742,7 @@ as adding/removing interfaces. } if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) { -@@ -9941,6 +9959,50 @@ static int wpa_driver_nl80211_if_remove( +@@ -9968,6 +9986,50 @@ static int wpa_driver_nl80211_if_remove( return 0; } @@ -784,7 +793,7 @@ as adding/removing interfaces. static int cookie_handler(struct nl_msg *msg, void *arg) { -@@ -11877,6 +11939,37 @@ static bool nl80211_is_drv_shared(void * +@@ -11917,6 +11979,37 @@ static bool nl80211_is_drv_shared(void * #endif /* CONFIG_IEEE80211BE */ @@ -822,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, -@@ -16705,6 +16798,8 @@ const struct wpa_driver_ops wpa_driver_n +@@ -16753,6 +16846,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, @@ -965,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)) -@@ -3139,8 +3146,8 @@ fail: +@@ -3161,8 +3168,8 @@ fail: static void multi_ap_process_assoc_resp(struct wpa_supplicant *wpa_s, const u8 *ies, size_t ies_len) { @@ -975,7 +984,7 @@ as adding/removing interfaces. u16 status; wpa_s->multi_ap_ie = 0; -@@ -3151,13 +3158,13 @@ static void multi_ap_process_assoc_resp( +@@ -3173,13 +3180,13 @@ static void multi_ap_process_assoc_resp( return; status = check_multi_ap_ie(elems.multi_ap + 4, elems.multi_ap_len - 4, @@ -992,7 +1001,7 @@ as adding/removing interfaces. MULTI_AP_FRONTHAUL_BSS); wpa_s->multi_ap_ie = 1; } -@@ -5916,6 +5923,13 @@ static void wpas_event_rx_mgmt_action(st +@@ -5983,6 +5990,13 @@ static void wpas_event_rx_mgmt_action(st } #endif /* CONFIG_WNM */ @@ -1006,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) && -@@ -6739,6 +6753,7 @@ void supplicant_event(void *ctx, enum wp +@@ -6806,6 +6820,7 @@ void supplicant_event(void *ctx, enum wp event_to_string(event), event); #endif /* CONFIG_NO_STDOUT_DEBUG */ @@ -1086,7 +1095,7 @@ as adding/removing interfaces. int hostapd_dpp_configurator_add(struct hostapd_data *hapd, const char *cmd); --- a/src/ap/gas_serv.c +++ b/src/ap/gas_serv.c -@@ -1402,8 +1402,8 @@ static void gas_serv_rx_gas_initial_req( +@@ -1733,8 +1733,8 @@ static void gas_serv_rx_gas_initial_req( if (dpp) { struct wpabuf *msg; @@ -1107,7 +1116,7 @@ as adding/removing interfaces. static int wpas_dpp_listen_start(struct wpa_supplicant *wpa_s, -@@ -4122,6 +4123,9 @@ void wpas_dpp_rx_action(struct wpa_suppl +@@ -4123,6 +4124,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 006b9a333ed..61d8473f940 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 -@@ -5027,7 +5027,14 @@ struct hostapd_config * hostapd_config_r +@@ -5262,7 +5262,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 -@@ -391,8 +391,13 @@ struct wpa_config * wpa_config_read(cons +@@ -389,8 +389,13 @@ struct wpa_config * wpa_config_read(cons while (identity_tail && identity_tail->next) identity_tail = identity_tail->next; @@ -58,7 +58,7 @@ as adding/removing interfaces. return NULL; --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -3414,8 +3414,13 @@ hostapd_interface_init_bss(struct hapd_i +@@ -3475,8 +3475,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 a450dbed3fa..f8918c720d8 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 -@@ -3427,6 +3427,8 @@ static int hostapd_config_fill(struct ho +@@ -3563,6 +3563,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); 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 51107d3173a..77b9e1a5c68 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 -@@ -2245,6 +2245,8 @@ static int hostapd_config_fill(struct ho +@@ -2379,6 +2379,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)); 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 8719afe9508..43d268df611 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 -@@ -2861,6 +2861,14 @@ static int hostapd_config_fill(struct ho +@@ -2995,6 +2995,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 -@@ -1095,6 +1095,8 @@ struct hostapd_config { +@@ -1106,6 +1106,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 -@@ -1708,7 +1708,7 @@ void handle_probe_req(struct hostapd_dat +@@ -1716,7 +1716,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 -@@ -255,6 +255,29 @@ static int hostapd_iface_conf_changed(st +@@ -287,6 +287,29 @@ static int hostapd_remove_hapd_iface(str 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 -@@ -848,6 +848,7 @@ void hostapd_periodic_iface(struct hosta +@@ -877,6 +877,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 e1ce995119b..62b6a9cfbbe 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 -@@ -3066,6 +3066,8 @@ static int hostapd_config_fill(struct ho +@@ -3202,6 +3202,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 -@@ -1928,8 +1928,12 @@ int hostapd_setup_wpa(struct hostapd_dat +@@ -1929,8 +1929,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 a8f07d6c228..71268ea0ad8 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 -@@ -2249,6 +2249,8 @@ static int hostapd_config_fill(struct ho +@@ -2383,6 +2383,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); @@ -112,7 +112,7 @@ untagged DHCP packets hapd->x_snoop_initialized = false; --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -4849,7 +4849,7 @@ struct wpa_driver_ops { +@@ -4860,7 +4860,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 -@@ -13575,7 +13575,7 @@ static const char * drv_br_net_param_str +@@ -13615,7 +13615,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]; -@@ -13601,8 +13601,11 @@ static int wpa_driver_br_set_net_param(v +@@ -13641,8 +13641,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 91a16d0e561..2696321e783 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 -@@ -2636,6 +2636,8 @@ static int hostapd_config_fill(struct ho +@@ -2770,6 +2770,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 */ 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 16afbe7acf3..84585beab61 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 -@@ -1401,6 +1401,7 @@ static int hostapd_bss_radius_init(struc +@@ -1446,6 +1446,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 a605ab308e0..4aa1345d054 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 -@@ -1530,7 +1530,7 @@ void handle_probe_req(struct hostapd_dat +@@ -1538,7 +1538,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/780-Implement-APuP-Access-Point-Micro-Peering.patch b/package/network/services/hostapd/patches/780-Implement-APuP-Access-Point-Micro-Peering.patch index 7d051d9eb0b..217e1c062c7 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,7 +39,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 --- a/hostapd/Makefile +++ b/hostapd/Makefile -@@ -1454,6 +1454,11 @@ CFLAGS += -DCONFIG_PROCESS_COORDINATION +@@ -1462,6 +1462,11 @@ CFLAGS += -DCONFIG_PROCESS_COORDINATION OBJS += ../src/common/proc_coord.o endif @@ -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 -@@ -5020,6 +5020,15 @@ static int hostapd_config_fill(struct ho +@@ -5255,6 +5255,15 @@ static int hostapd_config_fill(struct ho #endif /* CONFIG_IEEE80211BE */ } else if (os_strcmp(buf, "i2r_lmr_policy") == 0) { conf->i2r_lmr_policy = atoi(pos); @@ -71,7 +71,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 "Line %d: unknown configuration item '%s'", --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h -@@ -1013,6 +1013,35 @@ struct hostapd_bss_config { +@@ -1024,6 +1024,35 @@ struct hostapd_bss_config { unsigned int pmksa_caching_privacy:1; unsigned int eap_using_authentication_frames:1; #endif /* CONFIG_ENC_ASSOC */ @@ -373,7 +373,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 #ifdef CONFIG_FILS static struct wpabuf * -@@ -5010,8 +5013,8 @@ static u16 check_multi_ap(struct hostapd +@@ -5016,8 +5019,8 @@ static u16 check_multi_ap(struct hostapd } @@ -384,7 +384,7 @@ 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 && -@@ -5479,7 +5482,7 @@ static int __check_assoc_ies(struct host +@@ -5485,7 +5488,7 @@ static int __check_assoc_ies(struct host elems->ext_capab_len); if (resp != WLAN_STATUS_SUCCESS) goto out; @@ -393,7 +393,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 if (resp != WLAN_STATUS_SUCCESS) goto out; -@@ -7920,6 +7923,11 @@ static void handle_beacon(struct hostapd +@@ -7934,6 +7937,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 -@@ -4537,7 +4537,7 @@ struct wpa_driver_ops { +@@ -4548,7 +4548,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 -@@ -9328,25 +9328,15 @@ int nl80211_has_ifidx(struct wpa_driver_ +@@ -9355,25 +9355,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 e3ad5ee40c5..1fccc9e237a 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 -@@ -2172,3 +2172,22 @@ void ap_sta_free_sta_profile(struct mld_ +@@ -2187,3 +2187,22 @@ void ap_sta_free_sta_profile(struct mld_ } } #endif /* CONFIG_IEEE80211BE */