[openwrt/openwrt] hostapd: update to version 2025-06-27

LEDE Commits lede-commits at lists.infradead.org
Sat Jul 5 05:44:27 PDT 2025


nbd pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/2ac791e87d3d09f2bb07d99c54f85b34297d8678

commit 2ac791e87d3d09f2bb07d99c54f85b34297d8678
Author: Agustin Lorenzo <agustin.lorenzo at thinco.es>
AuthorDate: Tue Jul 1 22:54:56 2025 +0200

    hostapd: update to version 2025-06-27
    
    Manually refreshed:
    
    140-tests-Makefile-make-run-tests-with-CONFIG_TLS.patch
    601-ucode_support.patch
    
    Fixed in upstream:
    
    804-hostapd-revert-ACS-Validate-6-GHz-AP-criteria-before.patch [1]
    
    Automatically rebased all other patches.
    
    [1] https://w1.fi/cgit/hostap/commit/?id=0b60826a66885bffa2fd709ed5e48cd5fe241b6b
    
    Signed-off-by: Agustin Lorenzo <agustin.lorenzo at thinco.es>
    Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 package/network/services/hostapd/Makefile          |  8 +--
 ...DFS-channels-to-be-selected-if-dfs-is-ena.patch | 24 +++----
 ...e-deterministic-channel-on-channel-switch.patch |  2 +-
 ...021-fix-sta-add-after-previous-connection.patch |  4 +-
 .../hostapd/patches/050-Fix-OpenWrt-13156.patch    |  6 +-
 ...1-add-extra-ies-only-if-allowed-by-driver.patch |  2 +-
 ...s-Makefile-make-run-tests-with-CONFIG_TLS.patch | 16 ++---
 ...0-hostapd-update-cfs0-and-cfs1-for-160MHz.patch |  2 +-
 .../hostapd/patches/180-fix_owe_ssid_update.patch  |  4 +-
 .../services/hostapd/patches/200-multicall.patch   | 18 ++---
 ...e-WNM_AP-functions-dependant-on-CONFIG_AP.patch |  4 +-
 .../patches/252-disable_ctrl_iface_mib.patch       | 18 ++---
 .../services/hostapd/patches/301-mesh-noscan.patch |  8 +--
 .../hostapd/patches/310-rescan_immediately.patch   |  2 +-
 .../patches/350-nl80211_del_beacon_bss.patch       |  2 +-
 .../hostapd/patches/370-preserve_radio_mask.patch  | 26 ++++----
 .../patches/400-wps_single_auth_enc_type.patch     |  4 +-
 ...ant-add-new-config-params-to-be-used-with.patch |  4 +-
 .../patches/463-add-mcast_rate-to-11s.patch        |  6 +-
 .../hostapd/patches/464-fix-mesh-obss-check.patch  |  2 +-
 .../hostapd/patches/590-rrm-wnm-statistics.patch   |  2 +-
 .../hostapd/patches/600-ubus_support.patch         | 48 +++++++-------
 .../hostapd/patches/601-ucode_support.patch        | 76 +++++++++++-----------
 .../hostapd/patches/720-iface_max_num_sta.patch    |  2 +-
 .../services/hostapd/patches/730-ft_iface.patch    |  2 +-
 .../services/hostapd/patches/740-snoop_iface.patch |  6 +-
 ...nore-probe-requests-with-invalid-DSSS-par.patch |  2 +-
 ...Implement-APuP-Access-Point-Micro-Peering.patch | 12 ++--
 .../patches/803-hostapd-fix-80211be-build.patch    |  4 +-
 ...ert-ACS-Validate-6-GHz-AP-criteria-before.patch | 56 ----------------
 30 files changed, 158 insertions(+), 214 deletions(-)

diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile
index b90f4350e9..d3d4dfddc8 100644
--- a/package/network/services/hostapd/Makefile
+++ b/package/network/services/hostapd/Makefile
@@ -5,13 +5,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=hostapd
-PKG_RELEASE:=2
+PKG_RELEASE:=1
 
 PKG_SOURCE_URL:=https://w1.fi/hostap.git
 PKG_SOURCE_PROTO:=git
-PKG_SOURCE_DATE:=2025-05-23
-PKG_SOURCE_VERSION:=4b8ac10cb77c3d4dbf7ccefbe697dc0578da374c
-PKG_MIRROR_HASH:=25a77ae4b26adef9c0d71c3b175445f246a4530e63563e81b8e19c2436934100
+PKG_SOURCE_DATE:=2025-06-27
+PKG_SOURCE_VERSION:=ea08700a762f13c415e319993720bed83ad9aa2c
+PKG_MIRROR_HASH:=8bfd23188058611a7efb3b0064a7601f8073ceedbf1538a99f93abc743608d46
 
 PKG_MAINTAINER:=Felix Fietkau <nbd at nbd.name>
 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 fc54e9d785..aba2ff08bc 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 <peter.oh at bowerswilkins.com>
 
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -2963,7 +2963,7 @@ static int drv_supports_vht(struct wpa_s
+@@ -2974,7 +2974,7 @@ static int drv_supports_vht(struct wpa_s
  }
  
  
@@ -23,7 +23,7 @@ Signed-off-by: Peter Oh <peter.oh at bowerswilkins.com>
  {
  	int i;
  
-@@ -2972,7 +2972,10 @@ static bool ibss_mesh_is_80mhz_avail(int
+@@ -2983,7 +2983,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 <peter.oh at bowerswilkins.com>
  			return false;
  	}
  
-@@ -3099,7 +3102,7 @@ static void ibss_mesh_select_40mhz(struc
+@@ -3110,7 +3113,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 <peter.oh at bowerswilkins.com>
  {
  	int chan_idx;
  	struct hostapd_channel_data *pri_chan = NULL, *sec_chan = NULL;
-@@ -3130,8 +3133,11 @@ static void ibss_mesh_select_40mhz(struc
+@@ -3141,8 +3144,11 @@ static void ibss_mesh_select_40mhz(struc
  		return;
  
  	/* Check primary channel flags */
@@ -58,7 +58,7 @@ Signed-off-by: Peter Oh <peter.oh at bowerswilkins.com>
  
  #ifdef CONFIG_HT_OVERRIDES
  	if (ssid->disable_ht40)
-@@ -3166,8 +3172,11 @@ static void ibss_mesh_select_40mhz(struc
+@@ -3177,8 +3183,11 @@ static void ibss_mesh_select_40mhz(struc
  		return;
  
  	/* Check secondary channel flags */
@@ -72,7 +72,7 @@ Signed-off-by: Peter Oh <peter.oh at bowerswilkins.com>
  
  	if (freq->ht_enabled) {
  		if (ht40 == -1) {
-@@ -3245,7 +3254,7 @@ static bool ibss_mesh_select_80_160mhz(s
+@@ -3256,7 +3265,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 <peter.oh at bowerswilkins.com>
  	static const int bw80[] = {
  		5180, 5260, 5500, 5580, 5660, 5745, 5825,
  		5955, 6035, 6115, 6195, 6275, 6355, 6435,
-@@ -3298,7 +3307,7 @@ static bool ibss_mesh_select_80_160mhz(s
+@@ -3309,7 +3318,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 <peter.oh at bowerswilkins.com>
  		goto skip_80mhz;
  
  	chwidth = CONF_OPER_CHWIDTH_80MHZ;
-@@ -3340,7 +3349,7 @@ static bool ibss_mesh_select_80_160mhz(s
+@@ -3351,7 +3360,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 <peter.oh at bowerswilkins.com>
  		for (j = 0; j < ARRAY_SIZE(bw160); j++) {
  			u8 start_chan;
  
-@@ -3363,11 +3372,11 @@ static bool ibss_mesh_select_80_160mhz(s
+@@ -3374,11 +3383,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 <peter.oh at bowerswilkins.com>
  		for (j = 0; j < ARRAY_SIZE(bw320); j += 2) {
  			if (freq->freq >= bw320[j] &&
  			    freq->freq <= bw320[j + 1]) {
-@@ -3396,10 +3405,12 @@ static bool ibss_mesh_select_80_160mhz(s
+@@ -3407,10 +3416,12 @@ static bool ibss_mesh_select_80_160mhz(s
  				if (!chan)
  					continue;
  
@@ -131,7 +131,7 @@ Signed-off-by: Peter Oh <peter.oh at bowerswilkins.com>
  
  				/* Found a suitable second segment for 80+80 */
  				chwidth = CONF_OPER_CHWIDTH_80P80MHZ;
-@@ -3454,6 +3465,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -3465,6 +3476,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 <peter.oh at bowerswilkins.com>
  
  	freq->freq = ssid->frequency;
  
-@@ -3497,9 +3509,9 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -3508,9 +3520,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 ea67d653a3..6a8bf0773b 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 <markus.theil at tu-ilmenau.de>
  		   chan_idx, num_available_chandefs);
 --- a/src/drivers/driver_nl80211.c
 +++ b/src/drivers/driver_nl80211.c
-@@ -11592,6 +11592,10 @@ static int nl80211_switch_channel(void *
+@@ -11658,6 +11658,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 090df4d5c9..a7cf9a7c5c 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
-@@ -5033,6 +5033,13 @@ static int add_associated_sta(struct hos
+@@ -5076,6 +5076,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)",
-@@ -5046,7 +5053,8 @@ static int add_associated_sta(struct hos
+@@ -5089,7 +5096,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 252929a64d..d06558256a 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 <stijn at linux-ipv6.be>
 
 --- a/src/ap/hostapd.c
 +++ b/src/ap/hostapd.c
-@@ -4091,6 +4091,8 @@ int hostapd_remove_iface(struct hapd_int
+@@ -4110,6 +4110,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 <stijn at linux-ipv6.be>
  	if (hapd->tkip_countermeasures) {
  		hostapd_drv_sta_deauth(hapd, sta->addr,
  				       WLAN_REASON_MICHAEL_MIC_FAILURE);
-@@ -4098,10 +4100,16 @@ void hostapd_new_assoc_sta(struct hostap
+@@ -4117,10 +4119,16 @@ void hostapd_new_assoc_sta(struct hostap
  	}
  
  #ifdef CONFIG_IEEE80211BE
@@ -51,7 +51,7 @@ Signed-off-by: Stijn Tintel <stijn at linux-ipv6.be>
  	ap_sta_clear_assoc_timeout(hapd, sta);
 --- a/src/ap/sta_info.c
 +++ b/src/ap/sta_info.c
-@@ -1553,9 +1553,6 @@ bool ap_sta_set_authorized_flag(struct h
+@@ -1554,9 +1554,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 b4709cf504..45ce573f2c 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 <mail at david-bauer.net>
 
 --- a/src/drivers/driver.h
 +++ b/src/drivers/driver.h
-@@ -2441,6 +2441,9 @@ struct wpa_driver_capa {
+@@ -2442,6 +2442,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/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 548358db38..a6c495cb55 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
@@ -527,17 +527,17 @@ Signed-off-by: Glenn Strauss <gstrauss at gluelogic.com>
  # glibc < 2.17 needs -lrt for clock_gettime()
  LLIBS += -lrt
  
- test-aes: $(call BUILDOBJ,test-aes.o) $(LIBS)
- 	$(LDO) $(LDFLAGS) -o $@ $^ $(LLIBS)
+ TEST=test-aes
+ include test.mk
  
-+test-crypto_module: $(call BUILDOBJ,test-crypto_module.o) $(LIBS)
-+	$(LDO) $(LDFLAGS) -o $@ $< $(LLIBS)
++TEST=test-crypto_module
++include test.mk
 +
- test-base64: $(call BUILDOBJ,test-base64.o) $(LIBS)
- 	$(LDO) $(LDFLAGS) -o $@ $^ $(LLIBS)
+ TEST=test-base64
+ include test.mk
  
-@@ -141,18 +188,11 @@ test-bss: $(call BUILDOBJ,test-bss.o) $(
- 	$(LDO) $(LDFLAGS) -o $@ $< $(LLIBS) $(WPA_CFLAGS) $(WPA_OBJS) $(LIBS)
+@@ -143,18 +190,11 @@ OBJS_test-bss=$(WPA_OBJS)
+ include test.mk
  
  run-tests: $(ALL)
 -	./test-aes
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 8ad4bae33c..d344a006b1 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
@@ -130,7 +130,7 @@ Signed-off-by: P Praneesh <ppranees at codeaurora.org>
  #undef VHT_CAP_CHECK_MAX
 --- a/src/common/ieee802_11_defs.h
 +++ b/src/common/ieee802_11_defs.h
-@@ -1421,6 +1421,8 @@ struct ieee80211_ampe_ie {
+@@ -1438,6 +1438,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 b0557856ce..02ed2dedf1 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
-@@ -2441,7 +2441,11 @@ static int hostapd_owe_iface_iter(struct
+@@ -2449,7 +2449,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,
-@@ -2458,10 +2462,6 @@ static int hostapd_owe_iface_iter(struct
+@@ -2466,10 +2470,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/200-multicall.patch b/package/network/services/hostapd/patches/200-multicall.patch
index 85c9180576..ffa9117288 100644
--- a/package/network/services/hostapd/patches/200-multicall.patch
+++ b/package/network/services/hostapd/patches/200-multicall.patch
@@ -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
-@@ -2523,8 +2523,8 @@ static void hostapd_mld_iface_disable(st
+@@ -2566,8 +2566,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;
-@@ -2882,7 +2882,7 @@ void wpa_supplicant_event(void *ctx, enu
+@@ -2925,7 +2925,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
-@@ -7105,8 +7105,8 @@ union wpa_event_data {
+@@ -7161,8 +7161,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
-@@ -7118,7 +7118,7 @@ void wpa_supplicant_event(void *ctx, enu
+@@ -7174,7 +7174,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
-@@ -6175,8 +6175,8 @@ static int wpas_pasn_auth(struct wpa_sup
+@@ -6255,8 +6255,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;
-@@ -7139,7 +7139,7 @@ void wpa_supplicant_event(void *ctx, enu
+@@ -7228,7 +7228,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
-@@ -8100,7 +8100,6 @@ struct wpa_interface * wpa_supplicant_ma
+@@ -8128,7 +8128,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()
-@@ -8135,6 +8134,11 @@ static int wpa_supplicant_match_existing
+@@ -8163,6 +8162,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
-@@ -8391,6 +8395,8 @@ struct wpa_global * wpa_supplicant_init(
+@@ -8419,6 +8423,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/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 4e67a0a56c..7b77e26c14 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 <mail at david-bauer.net>
 
 --- a/wpa_supplicant/ctrl_iface.c
 +++ b/wpa_supplicant/ctrl_iface.c
-@@ -13513,7 +13513,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -13678,7 +13678,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 <mail at david-bauer.net>
  	} else if (os_strncmp(buf, "DISASSOC_IMMINENT ", 18) == 0) {
  		if (ap_ctrl_iface_disassoc_imminent(wpa_s, buf + 18))
  			reply_len = -1;
-@@ -13523,7 +13523,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -13688,7 +13688,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/252-disable_ctrl_iface_mib.patch b/package/network/services/hostapd/patches/252-disable_ctrl_iface_mib.patch
index eec53455b0..187211731e 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
-@@ -4063,6 +4063,7 @@ static int hostapd_ctrl_iface_receive_pr
+@@ -4096,6 +4096,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) {
-@@ -4104,6 +4105,7 @@ static int hostapd_ctrl_iface_receive_pr
+@@ -4137,6 +4138,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);
@@ -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
-@@ -6233,6 +6233,7 @@ static const char * wpa_bool_txt(int val
+@@ -6238,6 +6238,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) \
-@@ -6385,7 +6386,7 @@ int wpa_get_mib_sta(struct wpa_state_mac
+@@ -6390,7 +6391,7 @@ int wpa_get_mib_sta(struct wpa_state_mac
  
  	return len;
  }
@@ -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
-@@ -2374,7 +2374,7 @@ static int wpa_supplicant_ctrl_iface_sta
+@@ -2375,7 +2375,7 @@ static int wpa_supplicant_ctrl_iface_sta
  			pos += ret;
  		}
  
@@ -201,7 +201,7 @@ 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,
-@@ -12842,6 +12842,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -13007,6 +13007,7 @@ char * wpa_supplicant_ctrl_iface_process
  			reply_len = -1;
  	} else if (os_strncmp(buf, "NOTE ", 5) == 0) {
  		wpa_printf(MSG_INFO, "NOTE: %s", buf + 5);
@@ -209,7 +209,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality
  	} else if (os_strcmp(buf, "MIB") == 0) {
  		reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size);
  		if (reply_len >= 0) {
-@@ -12854,6 +12855,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -13019,6 +13020,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);
-@@ -13341,6 +13343,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -13506,6 +13508,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) {
-@@ -13349,12 +13352,15 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -13514,12 +13517,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/301-mesh-noscan.patch b/package/network/services/hostapd/patches/301-mesh-noscan.patch
index 1c2eedda42..f7a4628bd2 100644
--- a/package/network/services/hostapd/patches/301-mesh-noscan.patch
+++ b/package/network/services/hostapd/patches/301-mesh-noscan.patch
@@ -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
-@@ -3035,7 +3035,7 @@ static bool ibss_mesh_can_use_vht(struct
+@@ -3046,7 +3046,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))
-@@ -3109,7 +3109,7 @@ static void ibss_mesh_select_40mhz(struc
+@@ -3120,7 +3120,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[] = {
-@@ -3462,7 +3462,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -3473,7 +3473,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);
-@@ -3506,6 +3506,8 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -3517,6 +3517,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 15c74a71ae..a3083c4f67 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
-@@ -6381,7 +6381,7 @@ wpa_supplicant_alloc(struct wpa_supplica
+@@ -6401,7 +6401,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/350-nl80211_del_beacon_bss.patch b/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch
index 814b15f819..e3fd6c887a 100644
--- a/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch
+++ b/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch
@@ -4,7 +4,7 @@ Subject: [PATCH] nl80211_del_beacon_bss.patch
 
 --- a/src/drivers/driver_nl80211.c
 +++ b/src/drivers/driver_nl80211.c
-@@ -6340,8 +6340,7 @@ static void nl80211_teardown_ap(struct i
+@@ -6403,8 +6403,7 @@ static void nl80211_teardown_ap(struct i
  	}
  
  	nl80211_put_wiphy_data_ap(bss);
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 77bcfa8dbb..d197b284af 100644
--- a/package/network/services/hostapd/patches/370-preserve_radio_mask.patch
+++ b/package/network/services/hostapd/patches/370-preserve_radio_mask.patch
@@ -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 {
+@@ -753,6 +753,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
+@@ -778,6 +779,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
+@@ -844,6 +848,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)
  {
-@@ -6171,7 +6189,7 @@ const char * nl80211_iftype_str(enum nl8
+@@ -6234,7 +6252,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,
@@ -67,7 +67,7 @@
  				     int (*handler)(struct nl_msg *, void *),
  				     void *arg)
  {
-@@ -6191,6 +6209,10 @@ static int nl80211_create_iface_once(str
+@@ -6254,6 +6272,10 @@ static int nl80211_create_iface_once(str
  	if (wds && nla_put_u8(msg, NL80211_ATTR_4ADDR, wds))
  		goto fail;
  
@@ -78,7 +78,7 @@
  	/*
  	 * Tell cfg80211 that the interface belongs to the socket that created
  	 * it, and the interface should be deleted when the socket is closed.
-@@ -6246,14 +6268,14 @@ static int nl80211_create_iface_once(str
+@@ -6309,14 +6331,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,
@@ -96,7 +96,7 @@
  
  	/* if error occurred and interface exists already */
  	if (ret < 0 && if_nametoindex(ifname)) {
-@@ -6279,7 +6301,7 @@ int nl80211_create_iface(struct wpa_driv
+@@ -6342,7 +6364,7 @@ int nl80211_create_iface(struct wpa_driv
  
  		/* Try to create the interface again */
  		ret = nl80211_create_iface_once(drv, ifname, iftype, addr,
@@ -105,7 +105,7 @@
  	}
  
  	if (ret >= 0 && is_p2p_net_interface(iftype)) {
-@@ -8619,8 +8641,8 @@ static int i802_set_wds_sta(void *priv,
+@@ -8683,8 +8705,8 @@ static int i802_set_wds_sta(void *priv,
  		if (!if_nametoindex(name)) {
  			if (nl80211_create_iface(drv, name,
  						 NL80211_IFTYPE_AP_VLAN,
@@ -116,7 +116,7 @@
  				return -1;
  
  			if (bridge_ifname)
-@@ -8991,7 +9013,8 @@ static int wpa_driver_nl80211_if_add(voi
+@@ -9055,7 +9077,8 @@ static int wpa_driver_nl80211_if_add(voi
  
  		os_memset(&p2pdev_info, 0, sizeof(p2pdev_info));
  		ifidx = nl80211_create_iface(drv, ifname, nlmode, addr,
@@ -126,7 +126,7 @@
  					     &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",
-@@ -9008,7 +9031,8 @@ static int wpa_driver_nl80211_if_add(voi
+@@ -9072,7 +9095,8 @@ static int wpa_driver_nl80211_if_add(voi
  			   (long long unsigned int) p2pdev_info.wdev_id);
  	} else {
  		ifidx = nl80211_create_iface(drv, ifname, nlmode, addr,
@@ -136,9 +136,9 @@
  		if (use_existing && ifidx == -ENFILE) {
  			added = 0;
  			ifidx = if_nametoindex(ifname);
-@@ -9103,6 +9127,8 @@ static int wpa_driver_nl80211_if_add(voi
- 			*drv_priv = new_bss;
- 		nl80211_init_bss(new_bss);
+@@ -9142,6 +9166,8 @@ static int wpa_driver_nl80211_if_add(voi
+ 		new_bss->ctx = bss_ctx;
+ 		new_bss->added_if = added;
  
 +		new_bss->radio_mask = nl80211_get_radio_mask(new_bss);
 +
diff --git a/package/network/services/hostapd/patches/400-wps_single_auth_enc_type.patch b/package/network/services/hostapd/patches/400-wps_single_auth_enc_type.patch
index 65452a7c40..6992383d1c 100644
--- a/package/network/services/hostapd/patches/400-wps_single_auth_enc_type.patch
+++ b/package/network/services/hostapd/patches/400-wps_single_auth_enc_type.patch
@@ -7,7 +7,7 @@ Fixes windows 7 interop issues
 
 --- a/src/ap/wps_hostapd.c
 +++ b/src/ap/wps_hostapd.c
-@@ -394,9 +394,8 @@ static int hapd_wps_reconfig_in_memory(s
+@@ -395,9 +395,8 @@ static int hapd_wps_reconfig_in_memory(s
  				bss->wpa_pairwise |= WPA_CIPHER_GCMP;
  			else
  				bss->wpa_pairwise |= WPA_CIPHER_CCMP;
@@ -18,7 +18,7 @@ Fixes windows 7 interop issues
  			bss->wpa_pairwise |= WPA_CIPHER_TKIP;
  #endif /* CONFIG_NO_TKIP */
  		bss->rsn_pairwise = bss->wpa_pairwise;
-@@ -1181,8 +1180,7 @@ int hostapd_init_wps(struct hostapd_data
+@@ -1183,8 +1182,7 @@ int hostapd_init_wps(struct hostapd_data
  					  WPA_CIPHER_GCMP_256)) {
  			wps->encr_types |= WPS_ENCR_AES;
  			wps->encr_types_rsn |= WPS_ENCR_AES;
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 e22da80341..8e65244f60 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 <ordex at autistici.org>
 
 --- a/src/drivers/driver.h
 +++ b/src/drivers/driver.h
-@@ -1018,6 +1018,9 @@ struct wpa_driver_associate_params {
+@@ -1019,6 +1019,9 @@ struct wpa_driver_associate_params {
  	 * responsible for selecting with which BSS to associate. */
  	const u8 *bssid;
  
@@ -155,7 +155,7 @@ Signed-hostap: Antonio Quartulli <ordex at autistici.org>
  	 * macsec_policy - Determines the policy for MACsec secure session
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -4674,6 +4674,12 @@ static void wpas_start_assoc_cb(struct w
+@@ -4685,6 +4685,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 262c398015..3a966a5619 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 <simon.wunderlich at openmesh.com>
 
 --- a/src/drivers/driver.h
 +++ b/src/drivers/driver.h
-@@ -1959,6 +1959,7 @@ struct wpa_driver_mesh_join_params {
+@@ -1960,6 +1960,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 <simon.wunderlich at openmesh.com>
  struct wpa_driver_set_key_params {
 --- a/src/drivers/driver_nl80211.c
 +++ b/src/drivers/driver_nl80211.c
-@@ -12295,6 +12295,18 @@ static int nl80211_put_mesh_id(struct nl
+@@ -12361,6 +12361,18 @@ static int nl80211_put_mesh_id(struct nl
  }
  
  
@@ -48,7 +48,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich at openmesh.com>
  static int nl80211_put_mesh_config(struct nl_msg *msg,
  				   struct wpa_driver_mesh_bss_params *params)
  {
-@@ -12356,6 +12368,7 @@ static int nl80211_join_mesh(struct i802
+@@ -12422,6 +12434,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 a60397ce12..f0841258b3 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
-@@ -3469,6 +3469,10 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -3480,6 +3480,10 @@ void ibss_mesh_setup_freq(struct wpa_sup
  
  	freq->freq = ssid->frequency;
  
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 be09ed319c..9b272dfd6d 100644
--- a/package/network/services/hostapd/patches/590-rrm-wnm-statistics.patch
+++ b/package/network/services/hostapd/patches/590-rrm-wnm-statistics.patch
@@ -99,4 +99,4 @@ method.
 +	hapd->openwrt_stats.wnm.bss_transition_request_tx++;
  	if (disassoc_timer) {
  #ifdef CONFIG_IEEE80211BE
- 		if (ap_sta_is_mld(hapd, sta)) {
+ 		/* Link removal is scheduled only when the Link Removal Imminent
diff --git a/package/network/services/hostapd/patches/600-ubus_support.patch b/package/network/services/hostapd/patches/600-ubus_support.patch
index 90560b2124..0368726c81 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
-@@ -1438,6 +1438,12 @@ void handle_probe_req(struct hostapd_dat
+@@ -1439,6 +1439,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)
-@@ -1624,6 +1630,12 @@ void handle_probe_req(struct hostapd_dat
+@@ -1625,6 +1631,12 @@ void handle_probe_req(struct hostapd_dat
  	}
  #endif /* CONFIG_P2P */
  
@@ -92,10 +92,10 @@ probe/assoc/auth requests via object subscribe.
  		return 0;
 --- a/src/ap/drv_callbacks.c
 +++ b/src/ap/drv_callbacks.c
-@@ -330,6 +330,10 @@ int hostapd_notif_assoc(struct hostapd_d
- 	struct hostapd_iface *iface = hapd->iface;
+@@ -331,6 +331,10 @@ int hostapd_notif_assoc(struct hostapd_d
  #endif /* CONFIG_OWE */
  	bool updated = false;
+ 	bool driver_acl;
 +	struct hostapd_ubus_request req = {
 +		.type = HOSTAPD_UBUS_ASSOC_REQ,
 +		.addr = addr,
@@ -103,9 +103,9 @@ probe/assoc/auth requests via object subscribe.
  
  	if (addr == NULL) {
  		/*
-@@ -468,6 +472,12 @@ int hostapd_notif_assoc(struct hostapd_d
- 		goto fail;
+@@ -512,6 +516,12 @@ int hostapd_notif_assoc(struct hostapd_d
  	}
+ #endif /* CONFIG_IEEE80211BE */
  
 +	if (hostapd_ubus_handle_event(hapd, &req)) {
 +		wpa_printf(MSG_DEBUG, "Station " MACSTR " assoc rejected by ubus handler.\n",
@@ -116,7 +116,7 @@ probe/assoc/auth requests via object subscribe.
  #ifdef CONFIG_P2P
  	if (elems.p2p) {
  		wpabuf_free(sta->p2p_ie);
-@@ -1371,6 +1381,7 @@ void hostapd_event_ch_switch(struct host
+@@ -1414,6 +1424,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);
@@ -143,7 +143,7 @@ probe/assoc/auth requests via object subscribe.
  	return 0;
  }
  
-@@ -2546,6 +2549,7 @@ static int hostapd_setup_interface_compl
+@@ -2554,6 +2557,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
-@@ -2771,6 +2775,7 @@ dfs_offload:
+@@ -2781,6 +2785,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);
-@@ -3517,6 +3522,7 @@ void hostapd_interface_deinit_free(struc
+@@ -3527,6 +3532,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;
@@ -230,7 +230,7 @@ probe/assoc/auth requests via object subscribe.
  	if (res == HOSTAPD_ACL_PENDING)
  		return;
  
-@@ -5616,7 +5628,7 @@ static void handle_assoc(struct hostapd_
+@@ -5659,7 +5671,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
-@@ -5858,6 +5870,11 @@ static void handle_assoc(struct hostapd_
+@@ -5901,6 +5913,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 */
-@@ -5965,6 +5982,13 @@ static void handle_assoc(struct hostapd_
+@@ -6009,6 +6026,13 @@ static void handle_assoc(struct hostapd_
  	if (set_beacon)
  		ieee802_11_update_beacons(hapd->iface);
  
@@ -265,7 +265,7 @@ probe/assoc/auth requests via object subscribe.
   fail:
  
  	/*
-@@ -6194,6 +6218,7 @@ static void handle_disassoc(struct hosta
+@@ -6238,6 +6262,7 @@ static void handle_disassoc(struct hosta
  			   (unsigned long) len);
  		return;
  	}
@@ -273,7 +273,7 @@ probe/assoc/auth requests via object subscribe.
  
  	sta = ap_get_sta(hapd, mgmt->sa);
  	if (!sta) {
-@@ -6225,6 +6250,8 @@ static void handle_deauth(struct hostapd
+@@ -6269,6 +6294,8 @@ static void handle_deauth(struct hostapd
  	/* Clear the PTKSA cache entries for PASN */
  	ptksa_cache_flush(hapd->ptksa, mgmt->sa, WPA_CIPHER_NONE);
  
@@ -305,7 +305,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
-@@ -544,6 +544,7 @@ void ap_handle_timer(void *eloop_ctx, vo
+@@ -545,6 +545,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");
@@ -313,7 +313,7 @@ probe/assoc/auth requests via object subscribe.
  		ap_free_sta(hapd, sta);
  		return;
  	}
-@@ -701,6 +702,7 @@ skip_poll:
+@@ -702,6 +703,7 @@ skip_poll:
  		mlme_deauthenticate_indication(
  			hapd, sta,
  			WLAN_REASON_PREV_AUTH_NOT_VALID);
@@ -321,7 +321,7 @@ probe/assoc/auth requests via object subscribe.
  		ap_free_sta(hapd, sta);
  		break;
  	}
-@@ -1589,15 +1591,28 @@ void ap_sta_set_authorized_event(struct
+@@ -1590,15 +1592,28 @@ void ap_sta_set_authorized_event(struct
  		os_snprintf(buf, sizeof(buf), MACSTR, MAC2STR(sta->addr));
  
  	if (authorized) {
@@ -350,7 +350,7 @@ probe/assoc/auth requests via object subscribe.
  #ifdef CONFIG_P2P
  		if (wpa_auth_get_ip_addr(sta->wpa_sm, ip_addr_buf) == 0) {
  			os_snprintf(ip_addr, sizeof(ip_addr),
-@@ -1608,6 +1623,13 @@ void ap_sta_set_authorized_event(struct
+@@ -1609,6 +1624,13 @@ void ap_sta_set_authorized_event(struct
  		}
  #endif /* CONFIG_P2P */
  
@@ -364,7 +364,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),
-@@ -1626,17 +1648,19 @@ void ap_sta_set_authorized_event(struct
+@@ -1627,17 +1649,19 @@ void ap_sta_set_authorized_event(struct
  					 dpp_pkhash, SHA256_MAC_LEN);
  		}
  
@@ -683,7 +683,7 @@ probe/assoc/auth requests via object subscribe.
  			break;
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -8233,6 +8233,8 @@ struct wpa_supplicant * wpa_supplicant_a
+@@ -8261,6 +8261,8 @@ struct wpa_supplicant * wpa_supplicant_a
  	}
  #endif /* CONFIG_P2P */
  
@@ -692,7 +692,7 @@ probe/assoc/auth requests via object subscribe.
  	return wpa_s;
  }
  
-@@ -8259,6 +8261,8 @@ int wpa_supplicant_remove_iface(struct w
+@@ -8287,6 +8289,8 @@ int wpa_supplicant_remove_iface(struct w
  	struct wpa_supplicant *parent = wpa_s->parent;
  #endif /* CONFIG_MESH */
  
@@ -701,7 +701,7 @@ probe/assoc/auth requests via object subscribe.
  	/* Remove interface from the global list of interfaces */
  	prev = global->ifaces;
  	if (prev == wpa_s) {
-@@ -8605,8 +8609,12 @@ int wpa_supplicant_run(struct wpa_global
+@@ -8633,8 +8637,12 @@ int wpa_supplicant_run(struct wpa_global
  	eloop_register_signal_terminate(wpa_supplicant_terminate, global);
  	eloop_register_signal_reconfig(wpa_supplicant_reconfig, global);
  
@@ -733,7 +733,7 @@ probe/assoc/auth requests via object subscribe.
  };
  
  
-@@ -696,6 +699,7 @@ struct wpa_supplicant {
+@@ -697,6 +700,7 @@ struct wpa_supplicant {
  	unsigned char own_addr[ETH_ALEN];
  	unsigned char perm_addr[ETH_ALEN];
  	char ifname[100];
diff --git a/package/network/services/hostapd/patches/601-ucode_support.patch b/package/network/services/hostapd/patches/601-ucode_support.patch
index 865a01cc98..db68772f6f 100644
--- a/package/network/services/hostapd/patches/601-ucode_support.patch
+++ b/package/network/services/hostapd/patches/601-ucode_support.patch
@@ -34,7 +34,7 @@ as adding/removing interfaces.
  ifdef CONFIG_CODE_COVERAGE
 --- a/hostapd/ctrl_iface.c
 +++ b/hostapd/ctrl_iface.c
-@@ -6004,6 +6004,7 @@ try_again:
+@@ -6037,6 +6037,7 @@ try_again:
  		return -1;
  	}
  
@@ -42,7 +42,7 @@ as adding/removing interfaces.
  	wpa_msg_register_cb(hostapd_ctrl_iface_msg_cb);
  
  	return 0;
-@@ -6105,6 +6106,7 @@ fail:
+@@ -6138,6 +6139,7 @@ fail:
  	os_free(fname);
  
  	interface->global_ctrl_sock = s;
@@ -148,7 +148,7 @@ as adding/removing interfaces.
  	if (conf->wmm_enabled < 0)
  		conf->wmm_enabled = hapd->iconf->ieee80211n |
  			hapd->iconf->ieee80211ax;
-@@ -2508,7 +2514,7 @@ static int hostapd_owe_iface_iter2(struc
+@@ -2516,7 +2522,7 @@ static int hostapd_owe_iface_iter2(struc
  #endif /* CONFIG_OWE */
  
  
@@ -157,7 +157,7 @@ as adding/removing interfaces.
  {
  #ifdef CONFIG_OWE
  	/* Check whether the enabled BSS can complete OWE transition mode
-@@ -2976,7 +2982,7 @@ hostapd_alloc_bss_data(struct hostapd_if
+@@ -2986,7 +2992,7 @@ hostapd_alloc_bss_data(struct hostapd_if
  }
  
  
@@ -166,7 +166,7 @@ as adding/removing interfaces.
  {
  	if (!hapd)
  		return;
-@@ -4051,7 +4057,8 @@ int hostapd_remove_iface(struct hapd_int
+@@ -4070,7 +4076,8 @@ int hostapd_remove_iface(struct hapd_int
  		hapd_iface = interfaces->iface[i];
  		if (hapd_iface == NULL)
  			return -1;
@@ -232,7 +232,7 @@ as adding/removing interfaces.
  void hostapd_switch_color(struct hostapd_data *hapd, u64 bitmap);
 --- a/src/drivers/driver.h
 +++ b/src/drivers/driver.h
-@@ -4036,6 +4036,25 @@ struct wpa_driver_ops {
+@@ -4067,6 +4067,25 @@ struct wpa_driver_ops {
  			 const char *ifname);
  
  	/**
@@ -258,7 +258,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)
-@@ -6851,6 +6870,7 @@ union wpa_event_data {
+@@ -6896,6 +6915,7 @@ union wpa_event_data {
  
  	/**
  	 * struct ch_switch
@@ -266,7 +266,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
-@@ -6861,6 +6881,7 @@ union wpa_event_data {
+@@ -6906,6 +6926,7 @@ union wpa_event_data {
  	 * @punct_bitmap: Puncturing bitmap
  	 */
  	struct ch_switch {
@@ -293,7 +293,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
+@@ -435,6 +445,11 @@ static int no_seq_check(struct nl_msg *m
  	return NL_OK;
  }
  
@@ -305,7 +305,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
+@@ -509,6 +524,8 @@ int send_and_recv_glb(struct nl80211_glo
  	if (!msg)
  		return -ENOMEM;
  
@@ -314,7 +314,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
+@@ -550,6 +567,7 @@ int send_and_recv_glb(struct nl80211_glo
  	err.err_info = err_info;
  	err.drv = drv;
  
@@ -322,7 +322,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
+@@ -971,6 +989,7 @@ nl80211_get_wiphy_data_ap(struct i802_bs
  			os_free(w);
  			return NULL;
  		}
@@ -330,7 +330,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,
-@@ -1388,7 +1407,7 @@ static void wpa_driver_nl80211_event_rtm
+@@ -1399,7 +1418,7 @@ static void wpa_driver_nl80211_event_rtm
  		}
  		wpa_printf(MSG_DEBUG, "nl80211: Interface down (%s/%s)",
  			   namebuf, ifname);
@@ -339,7 +339,7 @@ as adding/removing interfaces.
  			wpa_printf(MSG_DEBUG,
  				   "nl80211: Not the main interface (%s) - do not indicate interface down",
  				   drv->first_bss->ifname);
-@@ -1424,7 +1443,7 @@ static void wpa_driver_nl80211_event_rtm
+@@ -1435,7 +1454,7 @@ static void wpa_driver_nl80211_event_rtm
  		}
  		wpa_printf(MSG_DEBUG, "nl80211: Interface up (%s/%s)",
  			   namebuf, ifname);
@@ -348,7 +348,7 @@ as adding/removing interfaces.
  			wpa_printf(MSG_DEBUG,
  				   "nl80211: Not the main interface (%s) - do not indicate interface up",
  				   drv->first_bss->ifname);
-@@ -2070,6 +2089,7 @@ static int wpa_driver_nl80211_init_nl_gl
+@@ -2128,6 +2147,7 @@ static int wpa_driver_nl80211_init_nl_gl
  	genl_family_put(family);
  	nl_cache_free(cache);
  
@@ -356,7 +356,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,
-@@ -2240,6 +2260,7 @@ static int nl80211_init_bss(struct i802_
+@@ -2298,6 +2318,7 @@ static int nl80211_init_bss(struct i802_
  	if (!bss->nl_cb)
  		return -1;
  
@@ -364,7 +364,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,
-@@ -8785,6 +8806,7 @@ static void *i802_init(struct hostapd_da
+@@ -8849,6 +8870,7 @@ static void *i802_init(struct hostapd_da
  	char master_ifname[IFNAMSIZ];
  	int ifindex, br_ifindex = 0;
  	int br_added = 0;
@@ -372,7 +372,7 @@ as adding/removing interfaces.
  
  	bss = wpa_driver_nl80211_drv_init(hapd, params->ifname,
  					  params->global_priv, 1,
-@@ -8845,21 +8867,17 @@ static void *i802_init(struct hostapd_da
+@@ -8909,21 +8931,17 @@ static void *i802_init(struct hostapd_da
  	    (params->num_bridge == 0 || !params->bridge[0]))
  		add_ifidx(drv, br_ifindex, drv->ifindex);
  
@@ -404,7 +404,7 @@ as adding/removing interfaces.
  	}
  
  	if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) {
-@@ -9236,6 +9254,50 @@ static int wpa_driver_nl80211_if_remove(
+@@ -9302,6 +9320,50 @@ static int wpa_driver_nl80211_if_remove(
  	return 0;
  }
  
@@ -455,7 +455,7 @@ as adding/removing interfaces.
  
  static int cookie_handler(struct nl_msg *msg, void *arg)
  {
-@@ -11114,6 +11176,37 @@ static bool nl80211_is_drv_shared(void *
+@@ -11180,6 +11242,37 @@ static bool nl80211_is_drv_shared(void *
  #endif /* CONFIG_IEEE80211BE */
  
  
@@ -493,7 +493,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,
-@@ -14839,6 +14932,8 @@ const struct wpa_driver_ops wpa_driver_n
+@@ -14999,6 +15092,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,
@@ -504,7 +504,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
-@@ -1213,6 +1213,7 @@ static void mlme_event_ch_switch(struct
+@@ -1254,6 +1254,7 @@ static void mlme_event_ch_switch(struct
  				 struct nlattr *bw, struct nlattr *cf1,
  				 struct nlattr *cf2,
  				 struct nlattr *punct_bitmap,
@@ -512,7 +512,7 @@ as adding/removing interfaces.
  				 int finished)
  {
  	struct i802_bss *bss;
-@@ -1278,6 +1279,8 @@ static void mlme_event_ch_switch(struct
+@@ -1319,6 +1320,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);
@@ -521,7 +521,7 @@ as adding/removing interfaces.
  
  	if (link) {
  		data.ch_switch.link_id = nla_get_u8(link);
-@@ -4129,6 +4132,7 @@ static void do_process_drv_event(struct
+@@ -4279,6 +4282,7 @@ static void do_process_drv_event(struct
  				     tb[NL80211_ATTR_CENTER_FREQ1],
  				     tb[NL80211_ATTR_CENTER_FREQ2],
  				     tb[NL80211_ATTR_PUNCT_BITMAP],
@@ -529,7 +529,7 @@ as adding/removing interfaces.
  				     0);
  		break;
  	case NL80211_CMD_CH_SWITCH_NOTIFY:
-@@ -4141,6 +4145,7 @@ static void do_process_drv_event(struct
+@@ -4291,6 +4295,7 @@ static void do_process_drv_event(struct
  				     tb[NL80211_ATTR_CENTER_FREQ1],
  				     tb[NL80211_ATTR_CENTER_FREQ2],
  				     tb[NL80211_ATTR_PUNCT_BITMAP],
@@ -622,7 +622,7 @@ as adding/removing interfaces.
  CFLAGS += -DEAP_SERVER -DEAP_SERVER_IDENTITY
 --- a/wpa_supplicant/events.c
 +++ b/wpa_supplicant/events.c
-@@ -6211,6 +6211,7 @@ void supplicant_event(void *ctx, enum wp
+@@ -6291,6 +6291,7 @@ void supplicant_event(void *ctx, enum wp
  		event_to_string(event), event);
  #endif /* CONFIG_NO_STDOUT_DEBUG */
  
@@ -632,15 +632,15 @@ as adding/removing interfaces.
  #ifdef CONFIG_FST
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -1271,6 +1271,7 @@ void wpa_supplicant_set_state(struct wpa
+@@ -1276,6 +1276,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);
  
- #ifdef CONFIG_BGSCAN
- 	if (state == WPA_COMPLETED && wpa_s->current_ssid != wpa_s->bgscan_ssid)
-@@ -8234,6 +8235,7 @@ struct wpa_supplicant * wpa_supplicant_a
+ #ifndef CONFIG_NO_ROBUST_AV
+ 	if (state == WPA_COMPLETED && dl_list_len(&wpa_s->active_scs_ids) &&
+@@ -8262,6 +8263,7 @@ struct wpa_supplicant * wpa_supplicant_a
  #endif /* CONFIG_P2P */
  
  	wpas_ubus_add_bss(wpa_s);
@@ -648,7 +648,7 @@ as adding/removing interfaces.
  
  	return wpa_s;
  }
-@@ -8261,6 +8263,7 @@ int wpa_supplicant_remove_iface(struct w
+@@ -8289,6 +8291,7 @@ int wpa_supplicant_remove_iface(struct w
  	struct wpa_supplicant *parent = wpa_s->parent;
  #endif /* CONFIG_MESH */
  
@@ -656,7 +656,7 @@ as adding/removing interfaces.
  	wpas_ubus_free_bss(wpa_s);
  
  	/* Remove interface from the global list of interfaces */
-@@ -8571,6 +8574,7 @@ struct wpa_global * wpa_supplicant_init(
+@@ -8599,6 +8602,7 @@ struct wpa_global * wpa_supplicant_init(
  
  	eloop_register_timeout(WPA_SUPPLICANT_CLEANUP_INTERVAL, 0,
  			       wpas_periodic, global, NULL);
@@ -664,7 +664,7 @@ as adding/removing interfaces.
  
  	return global;
  }
-@@ -8609,12 +8613,8 @@ int wpa_supplicant_run(struct wpa_global
+@@ -8637,12 +8641,8 @@ int wpa_supplicant_run(struct wpa_global
  	eloop_register_signal_terminate(wpa_supplicant_terminate, global);
  	eloop_register_signal_reconfig(wpa_supplicant_reconfig, global);
  
@@ -677,7 +677,7 @@ as adding/removing interfaces.
  	return 0;
  }
  
-@@ -8647,6 +8647,8 @@ void wpa_supplicant_deinit(struct wpa_gl
+@@ -8675,6 +8675,8 @@ void wpa_supplicant_deinit(struct wpa_gl
  
  	wpas_notify_supplicant_deinitialized(global);
  
@@ -696,7 +696,7 @@ as adding/removing interfaces.
  
  extern const char *const wpa_supplicant_version;
  extern const char *const wpa_supplicant_license;
-@@ -700,6 +701,7 @@ struct wpa_supplicant {
+@@ -701,6 +702,7 @@ struct wpa_supplicant {
  	unsigned char perm_addr[ETH_ALEN];
  	char ifname[100];
  	struct wpas_ubus_bss ubus;
@@ -758,7 +758,7 @@ as adding/removing interfaces.
  		}
  	}
  
-@@ -3429,6 +3452,12 @@ static void handle_auth(struct hostapd_d
+@@ -3446,6 +3469,12 @@ static void handle_auth(struct hostapd_d
  		goto fail;
  	}
  
@@ -773,7 +773,7 @@ as adding/removing interfaces.
  
 --- a/src/ap/sta_info.c
 +++ b/src/ap/sta_info.c
-@@ -476,6 +476,11 @@ void ap_free_sta(struct hostapd_data *ha
+@@ -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 */
  
@@ -785,7 +785,7 @@ as adding/removing interfaces.
  	os_free(sta);
  }
  
-@@ -1575,6 +1580,8 @@ void ap_sta_set_authorized_event(struct
+@@ -1576,6 +1581,8 @@ void ap_sta_set_authorized_event(struct
  #endif /* CONFIG_P2P */
  	const u8 *ip_ptr = NULL;
  
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 6a22a610c5..5dfe839e5a 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
@@ -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
-@@ -1654,7 +1654,7 @@ void handle_probe_req(struct hostapd_dat
+@@ -1655,7 +1655,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) &&
diff --git a/package/network/services/hostapd/patches/730-ft_iface.patch b/package/network/services/hostapd/patches/730-ft_iface.patch
index e5d29c30f2..e1573bd1fa 100644
--- a/package/network/services/hostapd/patches/730-ft_iface.patch
+++ b/package/network/services/hostapd/patches/730-ft_iface.patch
@@ -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
-@@ -1834,8 +1834,12 @@ int hostapd_setup_wpa(struct hostapd_dat
+@@ -1844,8 +1844,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 6dc62a5328..7eeb1aa193 100644
--- a/package/network/services/hostapd/patches/740-snoop_iface.patch
+++ b/package/network/services/hostapd/patches/740-snoop_iface.patch
@@ -112,7 +112,7 @@ untagged DHCP packets
  	hapd->x_snoop_initialized = false;
 --- a/src/drivers/driver.h
 +++ b/src/drivers/driver.h
-@@ -4462,7 +4462,7 @@ struct wpa_driver_ops {
+@@ -4493,7 +4493,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
-@@ -12815,7 +12815,7 @@ static const char * drv_br_net_param_str
+@@ -12881,7 +12881,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];
-@@ -12841,8 +12841,11 @@ static int wpa_driver_br_set_net_param(v
+@@ -12907,8 +12907,11 @@ static int wpa_driver_br_set_net_param(v
  			return -EINVAL;
  	}
  
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 e673002139..0df542e319 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 <mail at david-bauer.net>
 
 --- a/src/ap/beacon.c
 +++ b/src/ap/beacon.c
-@@ -1497,7 +1497,7 @@ void handle_probe_req(struct hostapd_dat
+@@ -1498,7 +1498,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 5f50f46869..8ad1c8a808 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
@@ -373,7 +373,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
  
  #ifdef CONFIG_FILS
  static struct wpabuf *
-@@ -3820,8 +3823,8 @@ static u16 check_multi_ap(struct hostapd
+@@ -3837,8 +3840,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 &&
-@@ -4263,7 +4266,7 @@ static int __check_assoc_ies(struct host
+@@ -4283,7 +4286,7 @@ static int __check_assoc_ies(struct host
  			       elems->ext_capab_len);
  	if (resp != WLAN_STATUS_SUCCESS)
  		return resp;
@@ -393,7 +393,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
  	if (resp != WLAN_STATUS_SUCCESS)
  		return resp;
  
-@@ -6314,6 +6317,11 @@ static void handle_beacon(struct hostapd
+@@ -6358,6 +6361,11 @@ static void handle_beacon(struct hostapd
  				      0);
  
  	ap_list_process_beacon(hapd->iface, mgmt, &elems, fi);
@@ -407,7 +407,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6
  
 --- a/src/ap/ieee802_11.h
 +++ b/src/ap/ieee802_11.h
-@@ -114,6 +114,8 @@ int hostapd_process_ml_assoc_req_addr(st
+@@ -145,6 +145,8 @@ int hostapd_process_ml_assoc_req_addr(st
  				      const u8 *basic_mle, size_t basic_mle_len,
  				      u8 *mld_addr);
  int hostapd_get_aid(struct hostapd_data *hapd, struct sta_info *sta);
@@ -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
-@@ -4156,7 +4156,7 @@ struct wpa_driver_ops {
+@@ -4187,7 +4187,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
-@@ -8637,25 +8637,15 @@ static int have_ifidx(struct wpa_driver_
+@@ -8701,25 +8701,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 d2b7b0b414..180fe742a6 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
-@@ -1971,3 +1971,22 @@ void ap_sta_free_sta_profile(struct mld_
+@@ -1972,3 +1972,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
-@@ -411,23 +411,8 @@ int ap_sta_re_add(struct hostapd_data *h
+@@ -412,23 +412,8 @@ int ap_sta_re_add(struct hostapd_data *h
  
  void ap_free_sta_pasn(struct hostapd_data *hapd, struct sta_info *sta);
  
diff --git a/package/network/services/hostapd/patches/804-hostapd-revert-ACS-Validate-6-GHz-AP-criteria-before.patch b/package/network/services/hostapd/patches/804-hostapd-revert-ACS-Validate-6-GHz-AP-criteria-before.patch
deleted file mode 100644
index 5e6badde8d..0000000000
--- a/package/network/services/hostapd/patches/804-hostapd-revert-ACS-Validate-6-GHz-AP-criteria-before.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From bc40770144e52d1103d1098dfe59da6108a6413b Mon Sep 17 00:00:00 2001
-From: Agustin Lorenzo <agustin.lorenzo at thinco.es>
-Date: Tue, 22 Apr 2025 22:13:58 +0200
-Subject: [PATCH] hostapd: revert "ACS: Validate 6 GHz AP criteria before ACS"
-
-By OpenWrt's design, hostapd runs in a single global instance for all radios supported by the device, rather than one instance per radio like hostapd usually does.
-
-This reverts commit 02a8d40c9ffb2987c291ea96cf7be7c012b359a3.
----
- src/ap/ap_config.c  | 2 +-
- src/ap/ap_config.h  | 1 -
- src/ap/ap_drv_ops.c | 6 ++----
- 3 files changed, 3 insertions(+), 6 deletions(-)
-
---- a/src/ap/ap_config.c
-+++ b/src/ap/ap_config.c
-@@ -1198,7 +1198,7 @@ static bool hostapd_sae_pk_password_with
- #endif /* CONFIG_SAE_PK */
- 
- 
--bool hostapd_config_check_bss_6g(struct hostapd_bss_config *bss)
-+static bool hostapd_config_check_bss_6g(struct hostapd_bss_config *bss)
- {
- 	if (bss->wpa != WPA_PROTO_RSN) {
- 		wpa_printf(MSG_ERROR,
---- a/src/ap/ap_config.h
-+++ b/src/ap/ap_config.h
-@@ -1436,6 +1436,5 @@ int hostapd_add_acl_maclist(struct mac_a
- 			    int vlan_id, const u8 *addr);
- void hostapd_remove_acl_mac(struct mac_acl_entry **acl, int *num,
- 			    const u8 *addr);
--bool hostapd_config_check_bss_6g(struct hostapd_bss_config *bss);
- 
- #endif /* HOSTAPD_CONFIG_H */
---- a/src/ap/ap_drv_ops.c
-+++ b/src/ap/ap_drv_ops.c
-@@ -1175,9 +1175,6 @@ void hostapd_get_hw_mode_any_channels(st
- {
- 	int i;
- 	bool is_no_ir = false;
--	bool allow_6g_acs = hostapd_config_check_bss_6g(hapd->conf) &&
--		(hapd->iface->conf->ieee80211ax ||
--		 hapd->iface->conf->ieee80211be);
- 
- 	for (i = 0; i < mode->num_channels; i++) {
- 		struct hostapd_channel_data *chan = &mode->channels[i];
-@@ -1198,7 +1195,8 @@ void hostapd_get_hw_mode_any_channels(st
- 		if (is_6ghz_freq(chan->freq) &&
- 		    ((hapd->iface->conf->acs_exclude_6ghz_non_psc &&
- 		      !is_6ghz_psc_frequency(chan->freq)) ||
--		     !allow_6g_acs))
-+		     (!hapd->iface->conf->ieee80211ax &&
-+		      !hapd->iface->conf->ieee80211be)))
- 			continue;
- 		if ((!(chan->flag & HOSTAPD_CHAN_DISABLED) || allow_disabled) &&
- 		    !(hapd->iface->conf->acs_exclude_dfs &&




More information about the lede-commits mailing list