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@thinco.es> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
		 Agustin Lorenzo
					Agustin Lorenzo
				
			
				
					committed by
					
						 Felix Fietkau
						Felix Fietkau
					
				
			
			
				
	
			
			
			 Felix Fietkau
						Felix Fietkau
					
				
			
						parent
						
							39580b1d7b
						
					
				
				
					commit
					2ac791e87d
				
			| @@ -5,13 +5,13 @@ | |||||||
| include $(TOPDIR)/rules.mk | include $(TOPDIR)/rules.mk | ||||||
|  |  | ||||||
| PKG_NAME:=hostapd | PKG_NAME:=hostapd | ||||||
| PKG_RELEASE:=2 | PKG_RELEASE:=1 | ||||||
|  |  | ||||||
| PKG_SOURCE_URL:=https://w1.fi/hostap.git | PKG_SOURCE_URL:=https://w1.fi/hostap.git | ||||||
| PKG_SOURCE_PROTO:=git | PKG_SOURCE_PROTO:=git | ||||||
| PKG_SOURCE_DATE:=2025-05-23 | PKG_SOURCE_DATE:=2025-06-27 | ||||||
| PKG_SOURCE_VERSION:=4b8ac10cb77c3d4dbf7ccefbe697dc0578da374c | PKG_SOURCE_VERSION:=ea08700a762f13c415e319993720bed83ad9aa2c | ||||||
| PKG_MIRROR_HASH:=25a77ae4b26adef9c0d71c3b175445f246a4530e63563e81b8e19c2436934100 | PKG_MIRROR_HASH:=8bfd23188058611a7efb3b0064a7601f8073ceedbf1538a99f93abc743608d46 | ||||||
|  |  | ||||||
| PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name> | PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name> | ||||||
| PKG_LICENSE:=BSD-3-Clause | PKG_LICENSE:=BSD-3-Clause | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com> | |||||||
|  |  | ||||||
| --- a/wpa_supplicant/wpa_supplicant.c | --- a/wpa_supplicant/wpa_supplicant.c | ||||||
| +++ b/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@bowerswilkins.com> | |||||||
|  { |  { | ||||||
|  	int i; |  	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); |  		chan = hw_get_channel_chan(mode, i, NULL); | ||||||
|  		if (!chan || |  		if (!chan || | ||||||
| @@ -35,7 +35,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com> | |||||||
|  			return false; |  			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, |  				   const struct wpa_ssid *ssid, | ||||||
|  				   struct hostapd_hw_modes *mode, |  				   struct hostapd_hw_modes *mode, | ||||||
|  				   struct hostapd_freq_params *freq, |  				   struct hostapd_freq_params *freq, | ||||||
| @@ -44,7 +44,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com> | |||||||
|  { |  { | ||||||
|  	int chan_idx; |  	int chan_idx; | ||||||
|  	struct hostapd_channel_data *pri_chan = NULL, *sec_chan = NULL; |  	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; |  		return; | ||||||
|   |   | ||||||
|  	/* Check primary channel flags */ |  	/* Check primary channel flags */ | ||||||
| @@ -58,7 +58,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com> | |||||||
|   |   | ||||||
|  #ifdef CONFIG_HT_OVERRIDES |  #ifdef CONFIG_HT_OVERRIDES | ||||||
|  	if (ssid->disable_ht40) |  	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; |  		return; | ||||||
|   |   | ||||||
|  	/* Check secondary channel flags */ |  	/* Check secondary channel flags */ | ||||||
| @@ -72,7 +72,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com> | |||||||
|   |   | ||||||
|  	if (freq->ht_enabled) { |  	if (freq->ht_enabled) { | ||||||
|  		if (ht40 == -1) { |  		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, |  				       const struct wpa_ssid *ssid, | ||||||
|  				       struct hostapd_hw_modes *mode, |  				       struct hostapd_hw_modes *mode, | ||||||
|  				       struct hostapd_freq_params *freq, |  				       struct hostapd_freq_params *freq, | ||||||
| @@ -81,7 +81,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com> | |||||||
|  	static const int bw80[] = { |  	static const int bw80[] = { | ||||||
|  		5180, 5260, 5500, 5580, 5660, 5745, 5825, |  		5180, 5260, 5500, 5580, 5660, 5745, 5825, | ||||||
|  		5955, 6035, 6115, 6195, 6275, 6355, 6435, |  		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; |  		goto skip_80mhz; | ||||||
|   |   | ||||||
|  	/* Use 40 MHz if channel not usable */ |  	/* Use 40 MHz if channel not usable */ | ||||||
| @@ -90,7 +90,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com> | |||||||
|  		goto skip_80mhz; |  		goto skip_80mhz; | ||||||
|   |   | ||||||
|  	chwidth = CONF_OPER_CHWIDTH_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) && |  	     HE_PHYCAP_CHANNEL_WIDTH_SET_160MHZ_IN_5G) && | ||||||
|  	    (ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_160MHZ || |  	    (ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_160MHZ || | ||||||
|  	     ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_320MHZ) && |  	     ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_320MHZ) && | ||||||
| @@ -99,7 +99,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com> | |||||||
|  		for (j = 0; j < ARRAY_SIZE(bw160); j++) { |  		for (j = 0; j < ARRAY_SIZE(bw160); j++) { | ||||||
|  			u8 start_chan; |  			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 && |  	     EHT_PHYCAP_320MHZ_IN_6GHZ_SUPPORT_MASK) && is_6ghz && | ||||||
|  	    ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_320MHZ && |  	    ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_320MHZ && | ||||||
|  	    ibss_mesh_is_80mhz_avail(channel + 16 - |  	    ibss_mesh_is_80mhz_avail(channel + 16 - | ||||||
| @@ -114,7 +114,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com> | |||||||
|  		for (j = 0; j < ARRAY_SIZE(bw320); j += 2) { |  		for (j = 0; j < ARRAY_SIZE(bw320); j += 2) { | ||||||
|  			if (freq->freq >= bw320[j] && |  			if (freq->freq >= bw320[j] && | ||||||
|  			    freq->freq <= bw320[j + 1]) { |  			    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) |  				if (!chan) | ||||||
|  					continue; |  					continue; | ||||||
|   |   | ||||||
| @@ -131,7 +131,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com> | |||||||
|   |   | ||||||
|  				/* Found a suitable second segment for 80+80 */ |  				/* Found a suitable second segment for 80+80 */ | ||||||
|  				chwidth = CONF_OPER_CHWIDTH_80P80MHZ; |  				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; |  	int obss_scan = 1; | ||||||
|  	u8 channel; |  	u8 channel; | ||||||
|  	bool is_6ghz, is_24ghz; |  	bool is_6ghz, is_24ghz; | ||||||
| @@ -139,7 +139,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com> | |||||||
|   |   | ||||||
|  	freq->freq = ssid->frequency; |  	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 */ |  	/* Setup higher BW only for 5 and 6 GHz */ | ||||||
|  	if (mode->mode == HOSTAPD_MODE_IEEE80211A) { |  	if (mode->mode == HOSTAPD_MODE_IEEE80211A) { | ||||||
|  		ibss_mesh_select_40mhz(wpa_s, ssid, mode, freq, obss_scan, |  		ibss_mesh_select_40mhz(wpa_s, ssid, mode, freq, obss_scan, | ||||||
|   | |||||||
| @@ -68,7 +68,7 @@ Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de> | |||||||
|  		   chan_idx, num_available_chandefs); |  		   chan_idx, num_available_chandefs); | ||||||
| --- a/src/drivers/driver_nl80211.c | --- a/src/drivers/driver_nl80211.c | ||||||
| +++ b/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) |  	if (ret) | ||||||
|  		goto error; |  		goto error; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ Subject: [PATCH] fix adding back stations after a missed deauth/disassoc | |||||||
|  |  | ||||||
| --- a/src/ap/ieee802_11.c | --- a/src/ap/ieee802_11.c | ||||||
| +++ b/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 |  	 * 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 |  	 * after a new FT-over-DS exchange, a new TK has been derived, so key | ||||||
|  	 * reinstallation is not a concern for this case. |  	 * 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 |  	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)", |  		   " (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) || |  	    (!(sta->flags & WLAN_STA_AUTHORIZED) || | ||||||
|  	     (reassoc && sta->ft_over_ds && sta->auth_alg == WLAN_AUTH_FT) || |  	     (reassoc && sta->ft_over_ds && sta->auth_alg == WLAN_AUTH_FT) || | ||||||
|  	     (!wpa_auth_sta_ft_tk_already_set(sta->wpa_sm) && |  	     (!wpa_auth_sta_ft_tk_already_set(sta->wpa_sm) && | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be> | |||||||
|  |  | ||||||
| --- a/src/ap/hostapd.c | --- a/src/ap/hostapd.c | ||||||
| +++ b/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, |  void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta, | ||||||
|  			   int reassoc) |  			   int reassoc) | ||||||
|  { |  { | ||||||
| @@ -29,7 +29,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be> | |||||||
|  	if (hapd->tkip_countermeasures) { |  	if (hapd->tkip_countermeasures) { | ||||||
|  		hostapd_drv_sta_deauth(hapd, sta->addr, |  		hostapd_drv_sta_deauth(hapd, sta->addr, | ||||||
|  				       WLAN_REASON_MICHAEL_MIC_FAILURE); |  				       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 |  #ifdef CONFIG_IEEE80211BE | ||||||
| @@ -51,7 +51,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be> | |||||||
|  	ap_sta_clear_assoc_timeout(hapd, sta); |  	ap_sta_clear_assoc_timeout(hapd, sta); | ||||||
| --- a/src/ap/sta_info.c | --- a/src/ap/sta_info.c | ||||||
| +++ b/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; |  				mld_assoc_link_id = -2; | ||||||
|  		} |  		} | ||||||
|  #endif /* CONFIG_IEEE80211BE */ |  #endif /* CONFIG_IEEE80211BE */ | ||||||
|   | |||||||
| @@ -26,7 +26,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net> | |||||||
|  |  | ||||||
| --- a/src/drivers/driver.h | --- a/src/drivers/driver.h | ||||||
| +++ b/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 */ |  	/** Maximum number of iterations in a single scan plan */ | ||||||
|  	u32 max_sched_scan_plan_iterations; |  	u32 max_sched_scan_plan_iterations; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -527,17 +527,17 @@ Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com> | |||||||
|  # glibc < 2.17 needs -lrt for clock_gettime() |  # glibc < 2.17 needs -lrt for clock_gettime() | ||||||
|  LLIBS += -lrt |  LLIBS += -lrt | ||||||
|   |   | ||||||
|  test-aes: $(call BUILDOBJ,test-aes.o) $(LIBS) |  TEST=test-aes | ||||||
|  	$(LDO) $(LDFLAGS) -o $@ $^ $(LLIBS) |  include test.mk | ||||||
|   |   | ||||||
| +test-crypto_module: $(call BUILDOBJ,test-crypto_module.o) $(LIBS) | +TEST=test-crypto_module | ||||||
| +	$(LDO) $(LDFLAGS) -o $@ $< $(LLIBS) | +include test.mk | ||||||
| + | + | ||||||
|  test-base64: $(call BUILDOBJ,test-base64.o) $(LIBS) |  TEST=test-base64 | ||||||
|  	$(LDO) $(LDFLAGS) -o $@ $^ $(LLIBS) |  include test.mk | ||||||
|   |   | ||||||
| @@ -141,18 +188,11 @@ test-bss: $(call BUILDOBJ,test-bss.o) $( | @@ -143,18 +190,11 @@ OBJS_test-bss=$(WPA_OBJS) | ||||||
|  	$(LDO) $(LDFLAGS) -o $@ $< $(LLIBS) $(WPA_CFLAGS) $(WPA_OBJS) $(LIBS) |  include test.mk | ||||||
|   |   | ||||||
|  run-tests: $(ALL) |  run-tests: $(ALL) | ||||||
| -	./test-aes | -	./test-aes | ||||||
|   | |||||||
| @@ -130,7 +130,7 @@ Signed-off-by: P Praneesh <ppranees@codeaurora.org> | |||||||
|  #undef VHT_CAP_CHECK_MAX |  #undef VHT_CAP_CHECK_MAX | ||||||
| --- a/src/common/ieee802_11_defs.h | --- a/src/common/ieee802_11_defs.h | ||||||
| +++ b/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_VHT_LINK_ADAPTATION_VHT_MRQ_MFB     ((u32) BIT(26) | BIT(27)) | ||||||
|  #define VHT_CAP_RX_ANTENNA_PATTERN                  ((u32) BIT(28)) |  #define VHT_CAP_RX_ANTENNA_PATTERN                  ((u32) BIT(28)) | ||||||
|  #define VHT_CAP_TX_ANTENNA_PATTERN                  ((u32) BIT(29)) |  #define VHT_CAP_TX_ANTENNA_PATTERN                  ((u32) BIT(29)) | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/src/ap/hostapd.c | --- a/src/ap/hostapd.c | ||||||
| +++ b/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 || |  		if (!bss->conf->ssid.ssid_set || !bss->conf->ssid.ssid_len || | ||||||
|  		    is_zero_ether_addr(bss->own_addr)) |  		    is_zero_ether_addr(bss->own_addr)) | ||||||
|  			continue; |  			continue; | ||||||
| @@ -13,7 +13,7 @@ | |||||||
|  		os_memcpy(hapd->conf->owe_transition_bssid, bss->own_addr, |  		os_memcpy(hapd->conf->owe_transition_bssid, bss->own_addr, | ||||||
|  			  ETH_ALEN); |  			  ETH_ALEN); | ||||||
|  		os_memcpy(hapd->conf->owe_transition_ssid, |  		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) |  int hostapd_owe_trans_get_info(struct hostapd_data *hapd) | ||||||
|  { |  { | ||||||
|   | |||||||
| @@ -94,7 +94,7 @@ This allows building both hostapd and wpa_supplicant as a single binary | |||||||
|  		if (c < 0) |  		if (c < 0) | ||||||
| --- a/src/ap/drv_callbacks.c | --- a/src/ap/drv_callbacks.c | ||||||
| +++ b/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 */ |  #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 hostapd_data *hapd = ctx; | ||||||
|  	struct sta_info *sta; |  	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; |  	struct hapd_interfaces *interfaces = ctx; | ||||||
| --- a/src/drivers/driver.h | --- a/src/drivers/driver.h | ||||||
| +++ b/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 |   * Driver wrapper code should call this function whenever an event is received | ||||||
|   * from the driver. |   * 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 |   * 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 |   * Same as wpa_supplicant_event(), but we search for the interface in | ||||||
|   * wpa_global. |   * 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)); |  	os_memset(&eapol_test, 0, sizeof(eapol_test)); | ||||||
| --- a/wpa_supplicant/events.c | --- a/wpa_supplicant/events.c | ||||||
| +++ b/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 */ |  #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; |  	struct wpa_supplicant *wpa_s = ctx; | ||||||
|  	int resched; |  	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)); |  	os_memset(&global, 0, sizeof(global)); | ||||||
| --- a/wpa_supplicant/wpa_supplicant.c | --- a/wpa_supplicant/wpa_supplicant.c | ||||||
| +++ b/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; |  	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 |   * wpa_supplicant_match_existing - Match existing interfaces | ||||||
|   * @global: Pointer to global data from wpa_supplicant_init() |   * @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 */ |  #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 |   * 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 |  #ifndef CONFIG_NO_WPA_MSG | ||||||
|  	wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb); |  	wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb); | ||||||
|  #endif /* CONFIG_NO_WPA_MSG */ |  #endif /* CONFIG_NO_WPA_MSG */ | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net> | |||||||
|  |  | ||||||
| --- a/wpa_supplicant/ctrl_iface.c | --- a/wpa_supplicant/ctrl_iface.c | ||||||
| +++ b/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)) |  		if (wpas_ctrl_iface_coloc_intf_report(wpa_s, buf + 18)) | ||||||
|  			reply_len = -1; |  			reply_len = -1; | ||||||
|  #endif /* CONFIG_WNM */ |  #endif /* CONFIG_WNM */ | ||||||
| @@ -22,7 +22,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net> | |||||||
|  	} else if (os_strncmp(buf, "DISASSOC_IMMINENT ", 18) == 0) { |  	} else if (os_strncmp(buf, "DISASSOC_IMMINENT ", 18) == 0) { | ||||||
|  		if (ap_ctrl_iface_disassoc_imminent(wpa_s, buf + 18)) |  		if (ap_ctrl_iface_disassoc_imminent(wpa_s, buf + 18)) | ||||||
|  			reply_len = -1; |  			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) { |  	} else if (os_strncmp(buf, "BSS_TM_REQ ", 11) == 0) { | ||||||
|  		if (ap_ctrl_iface_bss_tm_req(wpa_s, buf + 11)) |  		if (ap_ctrl_iface_bss_tm_req(wpa_s, buf + 11)) | ||||||
|  			reply_len = -1; |  			reply_len = -1; | ||||||
|   | |||||||
| @@ -16,7 +16,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality | |||||||
|  else |  else | ||||||
| --- a/hostapd/ctrl_iface.c | --- a/hostapd/ctrl_iface.c | ||||||
| +++ b/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); |  						      reply_size); | ||||||
|  	} else if (os_strcmp(buf, "STATUS-DRIVER") == 0) { |  	} else if (os_strcmp(buf, "STATUS-DRIVER") == 0) { | ||||||
|  		reply_len = hostapd_drv_status(hapd, reply, reply_size); |  		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) { |  	} else if (os_strcmp(buf, "MIB") == 0) { | ||||||
|  		reply_len = ieee802_11_get_mib(hapd, reply, reply_size); |  		reply_len = ieee802_11_get_mib(hapd, reply, reply_size); | ||||||
|  		if (reply_len >= 0) { |  		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) { |  	} else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) { | ||||||
|  		reply_len = hostapd_ctrl_iface_sta_next(hapd, buf + 9, reply, |  		reply_len = hostapd_ctrl_iface_sta_next(hapd, buf + 9, reply, | ||||||
|  							reply_size); |  							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) |  static void ieee802_1x_wnm_notif_send(void *eloop_ctx, void *timeout_ctx) | ||||||
| --- a/src/ap/wpa_auth.c | --- a/src/ap/wpa_auth.c | ||||||
| +++ b/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"; |  	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 "%02x-%02x-%02x-%d" | ||||||
|  #define RSN_SUITE_ARG(s) \ |  #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; |  	return len; | ||||||
|  } |  } | ||||||
| @@ -192,7 +192,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality | |||||||
|  			    char *buf, size_t buflen) |  			    char *buf, size_t buflen) | ||||||
| --- a/wpa_supplicant/ctrl_iface.c | --- a/wpa_supplicant/ctrl_iface.c | ||||||
| +++ b/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; |  			pos += ret; | ||||||
|  		} |  		} | ||||||
|   |   | ||||||
| @@ -201,7 +201,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality | |||||||
|  		if (wpa_s->ap_iface) { |  		if (wpa_s->ap_iface) { | ||||||
|  			pos += ap_ctrl_iface_wpa_get_status(wpa_s, pos, |  			pos += ap_ctrl_iface_wpa_get_status(wpa_s, pos, | ||||||
|  							    end - 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; |  			reply_len = -1; | ||||||
|  	} else if (os_strncmp(buf, "NOTE ", 5) == 0) { |  	} else if (os_strncmp(buf, "NOTE ", 5) == 0) { | ||||||
|  		wpa_printf(MSG_INFO, "NOTE: %s", buf + 5); |  		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) { |  	} else if (os_strcmp(buf, "MIB") == 0) { | ||||||
|  		reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size); |  		reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size); | ||||||
|  		if (reply_len >= 0) { |  		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); |  				reply_size - reply_len); | ||||||
|  #endif /* CONFIG_MACSEC */ |  #endif /* CONFIG_MACSEC */ | ||||||
|  		} |  		} | ||||||
| @@ -217,7 +217,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality | |||||||
|  	} else if (os_strncmp(buf, "STATUS", 6) == 0) { |  	} else if (os_strncmp(buf, "STATUS", 6) == 0) { | ||||||
|  		reply_len = wpa_supplicant_ctrl_iface_status( |  		reply_len = wpa_supplicant_ctrl_iface_status( | ||||||
|  			wpa_s, buf + 6, reply, reply_size); |  			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( |  		reply_len = wpa_supplicant_ctrl_iface_bss( | ||||||
|  			wpa_s, buf + 4, reply, reply_size); |  			wpa_s, buf + 4, reply, reply_size); | ||||||
|  #ifdef CONFIG_AP |  #ifdef CONFIG_AP | ||||||
| @@ -225,7 +225,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality | |||||||
|  	} else if (os_strcmp(buf, "STA-FIRST") == 0) { |  	} else if (os_strcmp(buf, "STA-FIRST") == 0) { | ||||||
|  		reply_len = ap_ctrl_iface_sta_first(wpa_s, reply, reply_size); |  		reply_len = ap_ctrl_iface_sta_first(wpa_s, reply, reply_size); | ||||||
|  	} else if (os_strncmp(buf, "STA ", 4) == 0) { |  	} 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) { |  	} else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) { | ||||||
|  		reply_len = ap_ctrl_iface_sta_next(wpa_s, buf + 9, reply, |  		reply_len = ap_ctrl_iface_sta_next(wpa_s, buf + 9, reply, | ||||||
|  						   reply_size); |  						   reply_size); | ||||||
|   | |||||||
| @@ -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 | --- a/wpa_supplicant/wpa_supplicant.c | ||||||
| +++ b/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, |  				  const struct wpa_ssid *ssid, | ||||||
|  				  struct hostapd_hw_modes *mode) |  				  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; |  		return false; | ||||||
|   |   | ||||||
|  	if (!drv_supports_vht(wpa_s, ssid)) |  	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; |  	int i, res; | ||||||
|  	unsigned int j; |  	unsigned int j; | ||||||
|  	static const int ht40plus_5ghz[] = { |  	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 |  		149, 157, 165, 173, 184, 192 | ||||||
|  	}; |  	}; | ||||||
|  	static const int ht40plus_6ghz[] = { |  	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); |  	int ieee80211_mode = wpas_mode_to_ieee80211_mode(ssid->mode); | ||||||
|  	enum hostapd_hw_mode hw_mode; |  	enum hostapd_hw_mode hw_mode; | ||||||
|  	struct hostapd_hw_modes *mode = NULL; |  	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; |  	u8 channel; | ||||||
|  	bool is_6ghz, is_24ghz; |  	bool is_6ghz, is_24ghz; | ||||||
|  	bool dfs_enabled = wpa_s->conf->country[0] && (wpa_s->drv_flags & WPA_DRIVER_FLAGS_RADAR); |  	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, |  		freq->he_enabled = ibss_mesh_can_use_he(wpa_s, ssid, mode, | ||||||
|  							ieee80211_mode); |  							ieee80211_mode); | ||||||
|  	freq->channel = channel; |  	freq->channel = channel; | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ Subject: [PATCH] rescan_immediately.patch | |||||||
|  |  | ||||||
| --- a/wpa_supplicant/wpa_supplicant.c | --- a/wpa_supplicant/wpa_supplicant.c | ||||||
| +++ b/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) |  	if (wpa_s == NULL) | ||||||
|  		return NULL; |  		return NULL; | ||||||
|  	wpa_s->scan_req = INITIAL_SCAN_REQ; |  	wpa_s->scan_req = INITIAL_SCAN_REQ; | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ Subject: [PATCH] nl80211_del_beacon_bss.patch | |||||||
|  |  | ||||||
| --- a/src/drivers/driver_nl80211.c | --- a/src/drivers/driver_nl80211.c | ||||||
| +++ b/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); |  	nl80211_put_wiphy_data_ap(bss); | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ | |||||||
|  void nl80211_remove_iface(struct wpa_driver_nl80211_data *drv, int ifidx); |  void nl80211_remove_iface(struct wpa_driver_nl80211_data *drv, int ifidx); | ||||||
| --- a/src/drivers/driver_nl80211.c | --- a/src/drivers/driver_nl80211.c | ||||||
| +++ b/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; |  	enum nl80211_iftype nlmode; | ||||||
|  	u8 *macaddr; |  	u8 *macaddr; | ||||||
|  	u8 use_4addr; |  	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]) |  	if (tb[NL80211_ATTR_4ADDR]) | ||||||
|  		info->use_4addr = nla_get_u8(tb[NL80211_ATTR_4ADDR]); |  		info->use_4addr = nla_get_u8(tb[NL80211_ATTR_4ADDR]); | ||||||
|   |   | ||||||
| @@ -37,7 +37,7 @@ | |||||||
|  	return NL_SKIP; |  	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, |  static int nl80211_register_beacons(struct wpa_driver_nl80211_data *drv, | ||||||
|  				    struct nl80211_wiphy_data *w) |  				    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, |  static int nl80211_create_iface_once(struct wpa_driver_nl80211_data *drv, | ||||||
|  				     const char *ifname, |  				     const char *ifname, | ||||||
|  				     enum nl80211_iftype iftype, |  				     enum nl80211_iftype iftype, | ||||||
| @@ -67,7 +67,7 @@ | |||||||
|  				     int (*handler)(struct nl_msg *, void *), |  				     int (*handler)(struct nl_msg *, void *), | ||||||
|  				     void *arg) |  				     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)) |  	if (wds && nla_put_u8(msg, NL80211_ATTR_4ADDR, wds)) | ||||||
|  		goto fail; |  		goto fail; | ||||||
|   |   | ||||||
| @@ -78,7 +78,7 @@ | |||||||
|  	/* |  	/* | ||||||
|  	 * Tell cfg80211 that the interface belongs to the socket that created |  	 * Tell cfg80211 that the interface belongs to the socket that created | ||||||
|  	 * it, and the interface should be deleted when the socket is closed. |  	 * 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, |  int nl80211_create_iface(struct wpa_driver_nl80211_data *drv, | ||||||
|  			 const char *ifname, enum nl80211_iftype iftype, |  			 const char *ifname, enum nl80211_iftype iftype, | ||||||
| @@ -96,7 +96,7 @@ | |||||||
|   |   | ||||||
|  	/* if error occurred and interface exists already */ |  	/* if error occurred and interface exists already */ | ||||||
|  	if (ret < 0 && if_nametoindex(ifname)) { |  	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 */ |  		/* Try to create the interface again */ | ||||||
|  		ret = nl80211_create_iface_once(drv, ifname, iftype, addr, |  		ret = nl80211_create_iface_once(drv, ifname, iftype, addr, | ||||||
| @@ -105,7 +105,7 @@ | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	if (ret >= 0 && is_p2p_net_interface(iftype)) { |  	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 (!if_nametoindex(name)) { | ||||||
|  			if (nl80211_create_iface(drv, name, |  			if (nl80211_create_iface(drv, name, | ||||||
|  						 NL80211_IFTYPE_AP_VLAN, |  						 NL80211_IFTYPE_AP_VLAN, | ||||||
| @@ -116,7 +116,7 @@ | |||||||
|  				return -1; |  				return -1; | ||||||
|   |   | ||||||
|  			if (bridge_ifname) |  			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)); |  		os_memset(&p2pdev_info, 0, sizeof(p2pdev_info)); | ||||||
|  		ifidx = nl80211_create_iface(drv, ifname, nlmode, addr, |  		ifidx = nl80211_create_iface(drv, ifname, nlmode, addr, | ||||||
| @@ -126,7 +126,7 @@ | |||||||
|  					     &p2pdev_info, use_existing); |  					     &p2pdev_info, use_existing); | ||||||
|  		if (!p2pdev_info.wdev_id_set || ifidx != 0) { |  		if (!p2pdev_info.wdev_id_set || ifidx != 0) { | ||||||
|  			wpa_printf(MSG_ERROR, "nl80211: Failed to create a P2P Device interface %s", |  			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); |  			   (long long unsigned int) p2pdev_info.wdev_id); | ||||||
|  	} else { |  	} else { | ||||||
|  		ifidx = nl80211_create_iface(drv, ifname, nlmode, addr, |  		ifidx = nl80211_create_iface(drv, ifname, nlmode, addr, | ||||||
| @@ -136,9 +136,9 @@ | |||||||
|  		if (use_existing && ifidx == -ENFILE) { |  		if (use_existing && ifidx == -ENFILE) { | ||||||
|  			added = 0; |  			added = 0; | ||||||
|  			ifidx = if_nametoindex(ifname); |  			ifidx = if_nametoindex(ifname); | ||||||
| @@ -9103,6 +9127,8 @@ static int wpa_driver_nl80211_if_add(voi | @@ -9142,6 +9166,8 @@ static int wpa_driver_nl80211_if_add(voi | ||||||
|  			*drv_priv = new_bss; |  		new_bss->ctx = bss_ctx; | ||||||
|  		nl80211_init_bss(new_bss); |  		new_bss->added_if = added; | ||||||
|   |   | ||||||
| +		new_bss->radio_mask = nl80211_get_radio_mask(new_bss); | +		new_bss->radio_mask = nl80211_get_radio_mask(new_bss); | ||||||
| + | + | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ Fixes windows 7 interop issues | |||||||
|  |  | ||||||
| --- a/src/ap/wps_hostapd.c | --- a/src/ap/wps_hostapd.c | ||||||
| +++ b/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; |  				bss->wpa_pairwise |= WPA_CIPHER_GCMP; | ||||||
|  			else |  			else | ||||||
|  				bss->wpa_pairwise |= WPA_CIPHER_CCMP; |  				bss->wpa_pairwise |= WPA_CIPHER_CCMP; | ||||||
| @@ -18,7 +18,7 @@ Fixes windows 7 interop issues | |||||||
|  			bss->wpa_pairwise |= WPA_CIPHER_TKIP; |  			bss->wpa_pairwise |= WPA_CIPHER_TKIP; | ||||||
|  #endif /* CONFIG_NO_TKIP */ |  #endif /* CONFIG_NO_TKIP */ | ||||||
|  		bss->rsn_pairwise = bss->wpa_pairwise; |  		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)) { |  					  WPA_CIPHER_GCMP_256)) { | ||||||
|  			wps->encr_types |= WPS_ENCR_AES; |  			wps->encr_types |= WPS_ENCR_AES; | ||||||
|  			wps->encr_types_rsn |= WPS_ENCR_AES; |  			wps->encr_types_rsn |= WPS_ENCR_AES; | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org> | |||||||
|  |  | ||||||
| --- a/src/drivers/driver.h | --- a/src/drivers/driver.h | ||||||
| +++ b/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. */ |  	 * responsible for selecting with which BSS to associate. */ | ||||||
|  	const u8 *bssid; |  	const u8 *bssid; | ||||||
|   |   | ||||||
| @@ -155,7 +155,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org> | |||||||
|  	 * macsec_policy - Determines the policy for MACsec secure session |  	 * macsec_policy - Determines the policy for MACsec secure session | ||||||
| --- a/wpa_supplicant/wpa_supplicant.c | --- a/wpa_supplicant/wpa_supplicant.c | ||||||
| +++ b/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; |  			params.beacon_int = ssid->beacon_int; | ||||||
|  		else |  		else | ||||||
|  			params.beacon_int = wpa_s->conf->beacon_int; |  			params.beacon_int = wpa_s->conf->beacon_int; | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com> | |||||||
|  |  | ||||||
| --- a/src/drivers/driver.h | --- a/src/drivers/driver.h | ||||||
| +++ b/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 |  #define WPA_DRIVER_MESH_FLAG_AMPE	0x00000008 | ||||||
|  	unsigned int flags; |  	unsigned int flags; | ||||||
|  	bool handle_dfs; |  	bool handle_dfs; | ||||||
| @@ -29,7 +29,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com> | |||||||
|  struct wpa_driver_set_key_params { |  struct wpa_driver_set_key_params { | ||||||
| --- a/src/drivers/driver_nl80211.c | --- a/src/drivers/driver_nl80211.c | ||||||
| +++ b/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@openmesh.com> | |||||||
|  static int nl80211_put_mesh_config(struct nl_msg *msg, |  static int nl80211_put_mesh_config(struct nl_msg *msg, | ||||||
|  				   struct wpa_driver_mesh_bss_params *params) |  				   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_basic_rates(msg, params->basic_rates) || | ||||||
|  	    nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) || |  	    nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) || | ||||||
|  	    nl80211_put_beacon_int(msg, params->beacon_int) || |  	    nl80211_put_beacon_int(msg, params->beacon_int) || | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ Subject: [PATCH] Fix issues with disabling obss scan when using fixed_freq on | |||||||
|  |  | ||||||
| --- a/wpa_supplicant/wpa_supplicant.c | --- a/wpa_supplicant/wpa_supplicant.c | ||||||
| +++ b/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; |  	freq->freq = ssid->frequency; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -99,4 +99,4 @@ method. | |||||||
| +	hapd->openwrt_stats.wnm.bss_transition_request_tx++; | +	hapd->openwrt_stats.wnm.bss_transition_request_tx++; | ||||||
|  	if (disassoc_timer) { |  	if (disassoc_timer) { | ||||||
|  #ifdef CONFIG_IEEE80211BE |  #ifdef CONFIG_IEEE80211BE | ||||||
|  		if (ap_sta_is_mld(hapd, sta)) { |  		/* Link removal is scheduled only when the Link Removal Imminent | ||||||
|   | |||||||
| @@ -53,7 +53,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|  	} |  	} | ||||||
| --- a/src/ap/beacon.c | --- a/src/ap/beacon.c | ||||||
| +++ b/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; |  	int mld_id; | ||||||
|  	u16 links; |  	u16 links; | ||||||
|  #endif /* CONFIG_IEEE80211BE */ |  #endif /* CONFIG_IEEE80211BE */ | ||||||
| @@ -66,7 +66,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|   |   | ||||||
|  	if (hapd->iconf->rssi_ignore_probe_request && ssi_signal && |  	if (hapd->iconf->rssi_ignore_probe_request && ssi_signal && | ||||||
|  	    ssi_signal < hapd->iconf->rssi_ignore_probe_request) |  	    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 */ |  #endif /* CONFIG_P2P */ | ||||||
|   |   | ||||||
| @@ -92,10 +92,10 @@ probe/assoc/auth requests via object subscribe. | |||||||
|  		return 0; |  		return 0; | ||||||
| --- a/src/ap/drv_callbacks.c | --- a/src/ap/drv_callbacks.c | ||||||
| +++ b/src/ap/drv_callbacks.c | +++ b/src/ap/drv_callbacks.c | ||||||
| @@ -330,6 +330,10 @@ int hostapd_notif_assoc(struct hostapd_d | @@ -331,6 +331,10 @@ int hostapd_notif_assoc(struct hostapd_d | ||||||
|  	struct hostapd_iface *iface = hapd->iface; |  | ||||||
|  #endif /* CONFIG_OWE */ |  #endif /* CONFIG_OWE */ | ||||||
|  	bool updated = false; |  	bool updated = false; | ||||||
|  |  	bool driver_acl; | ||||||
| +	struct hostapd_ubus_request req = { | +	struct hostapd_ubus_request req = { | ||||||
| +		.type = HOSTAPD_UBUS_ASSOC_REQ, | +		.type = HOSTAPD_UBUS_ASSOC_REQ, | ||||||
| +		.addr = addr, | +		.addr = addr, | ||||||
| @@ -103,9 +103,9 @@ probe/assoc/auth requests via object subscribe. | |||||||
|   |   | ||||||
|  	if (addr == NULL) { |  	if (addr == NULL) { | ||||||
|  		/* |  		/* | ||||||
| @@ -468,6 +472,12 @@ int hostapd_notif_assoc(struct hostapd_d | @@ -512,6 +516,12 @@ int hostapd_notif_assoc(struct hostapd_d | ||||||
|  		goto fail; |  | ||||||
|  	} |  	} | ||||||
|  |  #endif /* CONFIG_IEEE80211BE */ | ||||||
|   |   | ||||||
| +	if (hostapd_ubus_handle_event(hapd, &req)) { | +	if (hostapd_ubus_handle_event(hapd, &req)) { | ||||||
| +		wpa_printf(MSG_DEBUG, "Station " MACSTR " assoc rejected by ubus handler.\n", | +		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 |  #ifdef CONFIG_P2P | ||||||
|  	if (elems.p2p) { |  	if (elems.p2p) { | ||||||
|  		wpabuf_free(sta->p2p_ie); |  		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 |  		wpa_msg(hapd->msg_ctx, MSG_INFO, AP_CSA_FINISHED | ||||||
|  			"freq=%d dfs=%d", freq, is_dfs); |  			"freq=%d dfs=%d", freq, is_dfs); | ||||||
| @@ -143,7 +143,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -2546,6 +2549,7 @@ static int hostapd_setup_interface_compl | @@ -2554,6 +2557,7 @@ static int hostapd_setup_interface_compl | ||||||
|  	if (err) |  	if (err) | ||||||
|  		goto fail; |  		goto fail; | ||||||
|   |   | ||||||
| @@ -151,7 +151,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|  	wpa_printf(MSG_DEBUG, "Completing interface initialization"); |  	wpa_printf(MSG_DEBUG, "Completing interface initialization"); | ||||||
|  	if (iface->freq) { |  	if (iface->freq) { | ||||||
|  #ifdef NEED_AP_MLME |  #ifdef NEED_AP_MLME | ||||||
| @@ -2771,6 +2775,7 @@ dfs_offload: | @@ -2781,6 +2785,7 @@ dfs_offload: | ||||||
|   |   | ||||||
|  fail: |  fail: | ||||||
|  	wpa_printf(MSG_ERROR, "Interface initialization failed"); |  	wpa_printf(MSG_ERROR, "Interface initialization failed"); | ||||||
| @@ -159,7 +159,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|   |   | ||||||
|  	if (iface->is_no_ir) { |  	if (iface->is_no_ir) { | ||||||
|  		hostapd_set_state(iface, HAPD_IFACE_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); |  		   (unsigned int) iface->conf->num_bss); | ||||||
|  	driver = iface->bss[0]->driver; |  	driver = iface->bss[0]->driver; | ||||||
|  	drv_priv = iface->bss[0]->drv_priv; |  	drv_priv = iface->bss[0]->drv_priv; | ||||||
| @@ -230,7 +230,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|  	if (res == HOSTAPD_ACL_PENDING) |  	if (res == HOSTAPD_ACL_PENDING) | ||||||
|  		return; |  		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; |  	int resp = WLAN_STATUS_SUCCESS; | ||||||
|  	u16 reply_res = WLAN_STATUS_UNSPECIFIED_FAILURE; |  	u16 reply_res = WLAN_STATUS_UNSPECIFIED_FAILURE; | ||||||
|  	const u8 *pos; |  	const u8 *pos; | ||||||
| @@ -239,7 +239,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|  	struct sta_info *sta; |  	struct sta_info *sta; | ||||||
|  	u8 *tmp = NULL; |  	u8 *tmp = NULL; | ||||||
|  #ifdef CONFIG_FILS |  #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; |  		left = res; | ||||||
|  	} |  	} | ||||||
|  #endif /* CONFIG_FILS */ |  #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 |  	/* followed by SSID and Supported rates; and HT capabilities if 802.11n | ||||||
|  	 * is used */ |  	 * 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) |  	if (set_beacon) | ||||||
|  		ieee802_11_update_beacons(hapd->iface); |  		ieee802_11_update_beacons(hapd->iface); | ||||||
|   |   | ||||||
| @@ -265,7 +265,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|   fail: |   fail: | ||||||
|   |   | ||||||
|  	/* |  	/* | ||||||
| @@ -6194,6 +6218,7 @@ static void handle_disassoc(struct hosta | @@ -6238,6 +6262,7 @@ static void handle_disassoc(struct hosta | ||||||
|  			   (unsigned long) len); |  			   (unsigned long) len); | ||||||
|  		return; |  		return; | ||||||
|  	} |  	} | ||||||
| @@ -273,7 +273,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|   |   | ||||||
|  	sta = ap_get_sta(hapd, mgmt->sa); |  	sta = ap_get_sta(hapd, mgmt->sa); | ||||||
|  	if (!sta) { |  	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 */ |  	/* Clear the PTKSA cache entries for PASN */ | ||||||
|  	ptksa_cache_flush(hapd->ptksa, mgmt->sa, WPA_CIPHER_NONE); |  	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", |  		wpa_printf(MSG_DEBUG, "RRM action %u is not supported", | ||||||
| --- a/src/ap/sta_info.c | --- a/src/ap/sta_info.c | ||||||
| +++ b/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_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211, | ||||||
|  			       HOSTAPD_LEVEL_INFO, "deauthenticated due to " |  			       HOSTAPD_LEVEL_INFO, "deauthenticated due to " | ||||||
|  			       "local deauth request"); |  			       "local deauth request"); | ||||||
| @@ -313,7 +313,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|  		ap_free_sta(hapd, sta); |  		ap_free_sta(hapd, sta); | ||||||
|  		return; |  		return; | ||||||
|  	} |  	} | ||||||
| @@ -701,6 +702,7 @@ skip_poll: | @@ -702,6 +703,7 @@ skip_poll: | ||||||
|  		mlme_deauthenticate_indication( |  		mlme_deauthenticate_indication( | ||||||
|  			hapd, sta, |  			hapd, sta, | ||||||
|  			WLAN_REASON_PREV_AUTH_NOT_VALID); |  			WLAN_REASON_PREV_AUTH_NOT_VALID); | ||||||
| @@ -321,7 +321,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|  		ap_free_sta(hapd, sta); |  		ap_free_sta(hapd, sta); | ||||||
|  		break; |  		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)); |  		os_snprintf(buf, sizeof(buf), MACSTR, MAC2STR(sta->addr)); | ||||||
|   |   | ||||||
|  	if (authorized) { |  	if (authorized) { | ||||||
| @@ -350,7 +350,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|  #ifdef CONFIG_P2P |  #ifdef CONFIG_P2P | ||||||
|  		if (wpa_auth_get_ip_addr(sta->wpa_sm, ip_addr_buf) == 0) { |  		if (wpa_auth_get_ip_addr(sta->wpa_sm, ip_addr_buf) == 0) { | ||||||
|  			os_snprintf(ip_addr, sizeof(ip_addr), |  			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 */ |  #endif /* CONFIG_P2P */ | ||||||
|   |   | ||||||
| @@ -364,7 +364,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|  		keyid = ap_sta_wpa_get_keyid(hapd, sta); |  		keyid = ap_sta_wpa_get_keyid(hapd, sta); | ||||||
|  		if (keyid) { |  		if (keyid) { | ||||||
|  			os_snprintf(keyid_buf, sizeof(keyid_buf), |  			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); |  					 dpp_pkhash, SHA256_MAC_LEN); | ||||||
|  		} |  		} | ||||||
|   |   | ||||||
| @@ -683,7 +683,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|  			break; |  			break; | ||||||
| --- a/wpa_supplicant/wpa_supplicant.c | --- a/wpa_supplicant/wpa_supplicant.c | ||||||
| +++ b/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 */ |  #endif /* CONFIG_P2P */ | ||||||
|   |   | ||||||
| @@ -692,7 +692,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|  	return wpa_s; |  	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; |  	struct wpa_supplicant *parent = wpa_s->parent; | ||||||
|  #endif /* CONFIG_MESH */ |  #endif /* CONFIG_MESH */ | ||||||
|   |   | ||||||
| @@ -701,7 +701,7 @@ probe/assoc/auth requests via object subscribe. | |||||||
|  	/* Remove interface from the global list of interfaces */ |  	/* Remove interface from the global list of interfaces */ | ||||||
|  	prev = global->ifaces; |  	prev = global->ifaces; | ||||||
|  	if (prev == wpa_s) { |  	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_terminate(wpa_supplicant_terminate, global); | ||||||
|  	eloop_register_signal_reconfig(wpa_supplicant_reconfig, 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 own_addr[ETH_ALEN]; | ||||||
|  	unsigned char perm_addr[ETH_ALEN]; |  	unsigned char perm_addr[ETH_ALEN]; | ||||||
|  	char ifname[100]; |  	char ifname[100]; | ||||||
|   | |||||||
| @@ -34,7 +34,7 @@ as adding/removing interfaces. | |||||||
|  ifdef CONFIG_CODE_COVERAGE |  ifdef CONFIG_CODE_COVERAGE | ||||||
| --- a/hostapd/ctrl_iface.c | --- a/hostapd/ctrl_iface.c | ||||||
| +++ b/hostapd/ctrl_iface.c | +++ b/hostapd/ctrl_iface.c | ||||||
| @@ -6004,6 +6004,7 @@ try_again: | @@ -6037,6 +6037,7 @@ try_again: | ||||||
|  		return -1; |  		return -1; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -42,7 +42,7 @@ as adding/removing interfaces. | |||||||
|  	wpa_msg_register_cb(hostapd_ctrl_iface_msg_cb); |  	wpa_msg_register_cb(hostapd_ctrl_iface_msg_cb); | ||||||
|   |   | ||||||
|  	return 0; |  	return 0; | ||||||
| @@ -6105,6 +6106,7 @@ fail: | @@ -6138,6 +6139,7 @@ fail: | ||||||
|  	os_free(fname); |  	os_free(fname); | ||||||
|   |   | ||||||
|  	interface->global_ctrl_sock = s; |  	interface->global_ctrl_sock = s; | ||||||
| @@ -148,7 +148,7 @@ as adding/removing interfaces. | |||||||
|  	if (conf->wmm_enabled < 0) |  	if (conf->wmm_enabled < 0) | ||||||
|  		conf->wmm_enabled = hapd->iconf->ieee80211n | |  		conf->wmm_enabled = hapd->iconf->ieee80211n | | ||||||
|  			hapd->iconf->ieee80211ax; |  			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 */ |  #endif /* CONFIG_OWE */ | ||||||
|   |   | ||||||
|   |   | ||||||
| @@ -157,7 +157,7 @@ as adding/removing interfaces. | |||||||
|  { |  { | ||||||
|  #ifdef CONFIG_OWE |  #ifdef CONFIG_OWE | ||||||
|  	/* Check whether the enabled BSS can complete OWE transition mode |  	/* 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) |  	if (!hapd) | ||||||
|  		return; |  		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]; |  		hapd_iface = interfaces->iface[i]; | ||||||
|  		if (hapd_iface == NULL) |  		if (hapd_iface == NULL) | ||||||
|  			return -1; |  			return -1; | ||||||
| @@ -232,7 +232,7 @@ as adding/removing interfaces. | |||||||
|  void hostapd_switch_color(struct hostapd_data *hapd, u64 bitmap); |  void hostapd_switch_color(struct hostapd_data *hapd, u64 bitmap); | ||||||
| --- a/src/drivers/driver.h | --- a/src/drivers/driver.h | ||||||
| +++ b/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); |  			 const char *ifname); | ||||||
|   |   | ||||||
|  	/** |  	/** | ||||||
| @@ -258,7 +258,7 @@ as adding/removing interfaces. | |||||||
|  	 * set_sta_vlan - Bind a station into a specific interface (AP only) |  	 * set_sta_vlan - Bind a station into a specific interface (AP only) | ||||||
|  	 * @priv: Private driver interface data |  	 * @priv: Private driver interface data | ||||||
|  	 * @ifname: Interface (main or virtual BSS or VLAN) |  	 * @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 |  	 * struct ch_switch | ||||||
| @@ -266,7 +266,7 @@ as adding/removing interfaces. | |||||||
|  	 * @freq: Frequency of new channel in MHz |  	 * @freq: Frequency of new channel in MHz | ||||||
|  	 * @ht_enabled: Whether this is an HT channel |  	 * @ht_enabled: Whether this is an HT channel | ||||||
|  	 * @ch_offset: Secondary channel offset |  	 * @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 |  	 * @punct_bitmap: Puncturing bitmap | ||||||
|  	 */ |  	 */ | ||||||
|  	struct ch_switch { |  	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) |  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; |  	return NL_OK; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -305,7 +305,7 @@ as adding/removing interfaces. | |||||||
|   |   | ||||||
|  static void nl80211_nlmsg_clear(struct nl_msg *msg) |  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) |  	if (!msg) | ||||||
|  		return -ENOMEM; |  		return -ENOMEM; | ||||||
|   |   | ||||||
| @@ -314,7 +314,7 @@ as adding/removing interfaces. | |||||||
|  	err.err = -ENOMEM; |  	err.err = -ENOMEM; | ||||||
|   |   | ||||||
|  	s_nl_cb = nl_socket_get_cb(nl_handle); |  	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.err_info = err_info; | ||||||
|  	err.drv = drv; |  	err.drv = drv; | ||||||
|   |   | ||||||
| @@ -322,7 +322,7 @@ as adding/removing interfaces. | |||||||
|  	nl_cb_err(cb, NL_CB_CUSTOM, error_handler, &err); |  	nl_cb_err(cb, NL_CB_CUSTOM, error_handler, &err); | ||||||
|  	nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, finish_handler, &err.err); |  	nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, finish_handler, &err.err); | ||||||
|  	if (ack_handler_custom) { |  	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); |  			os_free(w); | ||||||
|  			return NULL; |  			return NULL; | ||||||
|  		} |  		} | ||||||
| @@ -330,7 +330,7 @@ as adding/removing interfaces. | |||||||
|  		nl_cb_set(w->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, |  		nl_cb_set(w->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, | ||||||
|  			  no_seq_check, NULL); |  			  no_seq_check, NULL); | ||||||
|  		nl_cb_set(w->nl_cb, NL_CB_VALID, NL_CB_CUSTOM, |  		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)", |  		wpa_printf(MSG_DEBUG, "nl80211: Interface down (%s/%s)", | ||||||
|  			   namebuf, ifname); |  			   namebuf, ifname); | ||||||
| @@ -339,7 +339,7 @@ as adding/removing interfaces. | |||||||
|  			wpa_printf(MSG_DEBUG, |  			wpa_printf(MSG_DEBUG, | ||||||
|  				   "nl80211: Not the main interface (%s) - do not indicate interface down", |  				   "nl80211: Not the main interface (%s) - do not indicate interface down", | ||||||
|  				   drv->first_bss->ifname); |  				   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)", |  		wpa_printf(MSG_DEBUG, "nl80211: Interface up (%s/%s)", | ||||||
|  			   namebuf, ifname); |  			   namebuf, ifname); | ||||||
| @@ -348,7 +348,7 @@ as adding/removing interfaces. | |||||||
|  			wpa_printf(MSG_DEBUG, |  			wpa_printf(MSG_DEBUG, | ||||||
|  				   "nl80211: Not the main interface (%s) - do not indicate interface up", |  				   "nl80211: Not the main interface (%s) - do not indicate interface up", | ||||||
|  				   drv->first_bss->ifname); |  				   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); |  	genl_family_put(family); | ||||||
|  	nl_cache_free(cache); |  	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, |  	nl_cb_set(global->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, | ||||||
|  		  no_seq_check, NULL); |  		  no_seq_check, NULL); | ||||||
|  	nl_cb_set(global->nl_cb, NL_CB_VALID, NL_CB_CUSTOM, |  	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) |  	if (!bss->nl_cb) | ||||||
|  		return -1; |  		return -1; | ||||||
|   |   | ||||||
| @@ -364,7 +364,7 @@ as adding/removing interfaces. | |||||||
|  	nl_cb_set(bss->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, |  	nl_cb_set(bss->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, | ||||||
|  		  no_seq_check, NULL); |  		  no_seq_check, NULL); | ||||||
|  	nl_cb_set(bss->nl_cb, NL_CB_VALID, NL_CB_CUSTOM, |  	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]; |  	char master_ifname[IFNAMSIZ]; | ||||||
|  	int ifindex, br_ifindex = 0; |  	int ifindex, br_ifindex = 0; | ||||||
|  	int br_added = 0; |  	int br_added = 0; | ||||||
| @@ -372,7 +372,7 @@ as adding/removing interfaces. | |||||||
|   |   | ||||||
|  	bss = wpa_driver_nl80211_drv_init(hapd, params->ifname, |  	bss = wpa_driver_nl80211_drv_init(hapd, params->ifname, | ||||||
|  					  params->global_priv, 1, |  					  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])) |  	    (params->num_bridge == 0 || !params->bridge[0])) | ||||||
|  		add_ifidx(drv, br_ifindex, drv->ifindex); |  		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) { |  	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; |  	return 0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -455,7 +455,7 @@ as adding/removing interfaces. | |||||||
|   |   | ||||||
|  static int cookie_handler(struct nl_msg *msg, void *arg) |  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 */ |  #endif /* CONFIG_IEEE80211BE */ | ||||||
|   |   | ||||||
|   |   | ||||||
| @@ -493,7 +493,7 @@ as adding/removing interfaces. | |||||||
|  static int driver_nl80211_send_mlme(void *priv, const u8 *data, |  static int driver_nl80211_send_mlme(void *priv, const u8 *data, | ||||||
|  				    size_t data_len, int noack, |  				    size_t data_len, int noack, | ||||||
|  				    unsigned int freq, |  				    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, |  	.set_acl = wpa_driver_nl80211_set_acl, | ||||||
|  	.if_add = wpa_driver_nl80211_if_add, |  	.if_add = wpa_driver_nl80211_if_add, | ||||||
|  	.if_remove = driver_nl80211_if_remove, |  	.if_remove = driver_nl80211_if_remove, | ||||||
| @@ -504,7 +504,7 @@ as adding/removing interfaces. | |||||||
|  	.sta_add = wpa_driver_nl80211_sta_add, |  	.sta_add = wpa_driver_nl80211_sta_add, | ||||||
| --- a/src/drivers/driver_nl80211_event.c | --- a/src/drivers/driver_nl80211_event.c | ||||||
| +++ b/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 *bw, struct nlattr *cf1, | ||||||
|  				 struct nlattr *cf2, |  				 struct nlattr *cf2, | ||||||
|  				 struct nlattr *punct_bitmap, |  				 struct nlattr *punct_bitmap, | ||||||
| @@ -512,7 +512,7 @@ as adding/removing interfaces. | |||||||
|  				 int finished) |  				 int finished) | ||||||
|  { |  { | ||||||
|  	struct i802_bss *bss; |  	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); |  		data.ch_switch.cf1 = nla_get_u32(cf1); | ||||||
|  	if (cf2) |  	if (cf2) | ||||||
|  		data.ch_switch.cf2 = nla_get_u32(cf2); |  		data.ch_switch.cf2 = nla_get_u32(cf2); | ||||||
| @@ -521,7 +521,7 @@ as adding/removing interfaces. | |||||||
|   |   | ||||||
|  	if (link) { |  	if (link) { | ||||||
|  		data.ch_switch.link_id = nla_get_u8(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_FREQ1], | ||||||
|  				     tb[NL80211_ATTR_CENTER_FREQ2], |  				     tb[NL80211_ATTR_CENTER_FREQ2], | ||||||
|  				     tb[NL80211_ATTR_PUNCT_BITMAP], |  				     tb[NL80211_ATTR_PUNCT_BITMAP], | ||||||
| @@ -529,7 +529,7 @@ as adding/removing interfaces. | |||||||
|  				     0); |  				     0); | ||||||
|  		break; |  		break; | ||||||
|  	case NL80211_CMD_CH_SWITCH_NOTIFY: |  	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_FREQ1], | ||||||
|  				     tb[NL80211_ATTR_CENTER_FREQ2], |  				     tb[NL80211_ATTR_CENTER_FREQ2], | ||||||
|  				     tb[NL80211_ATTR_PUNCT_BITMAP], |  				     tb[NL80211_ATTR_PUNCT_BITMAP], | ||||||
| @@ -622,7 +622,7 @@ as adding/removing interfaces. | |||||||
|  CFLAGS += -DEAP_SERVER -DEAP_SERVER_IDENTITY |  CFLAGS += -DEAP_SERVER -DEAP_SERVER_IDENTITY | ||||||
| --- a/wpa_supplicant/events.c | --- a/wpa_supplicant/events.c | ||||||
| +++ b/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); |  		event_to_string(event), event); | ||||||
|  #endif /* CONFIG_NO_STDOUT_DEBUG */ |  #endif /* CONFIG_NO_STDOUT_DEBUG */ | ||||||
|   |   | ||||||
| @@ -632,15 +632,15 @@ as adding/removing interfaces. | |||||||
|  #ifdef CONFIG_FST |  #ifdef CONFIG_FST | ||||||
| --- a/wpa_supplicant/wpa_supplicant.c | --- a/wpa_supplicant/wpa_supplicant.c | ||||||
| +++ b/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); |  		sme_sched_obss_scan(wpa_s, 0); | ||||||
|  	} |  	} | ||||||
|  	wpa_s->wpa_state = state; |  	wpa_s->wpa_state = state; | ||||||
| +	wpas_ucode_update_state(wpa_s); | +	wpas_ucode_update_state(wpa_s); | ||||||
|   |   | ||||||
|  #ifdef CONFIG_BGSCAN |  #ifndef CONFIG_NO_ROBUST_AV | ||||||
|  	if (state == WPA_COMPLETED && wpa_s->current_ssid != wpa_s->bgscan_ssid) |  	if (state == WPA_COMPLETED && dl_list_len(&wpa_s->active_scs_ids) && | ||||||
| @@ -8234,6 +8235,7 @@ struct wpa_supplicant * wpa_supplicant_a | @@ -8262,6 +8263,7 @@ struct wpa_supplicant * wpa_supplicant_a | ||||||
|  #endif /* CONFIG_P2P */ |  #endif /* CONFIG_P2P */ | ||||||
|   |   | ||||||
|  	wpas_ubus_add_bss(wpa_s); |  	wpas_ubus_add_bss(wpa_s); | ||||||
| @@ -648,7 +648,7 @@ as adding/removing interfaces. | |||||||
|   |   | ||||||
|  	return wpa_s; |  	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; |  	struct wpa_supplicant *parent = wpa_s->parent; | ||||||
|  #endif /* CONFIG_MESH */ |  #endif /* CONFIG_MESH */ | ||||||
|   |   | ||||||
| @@ -656,7 +656,7 @@ as adding/removing interfaces. | |||||||
|  	wpas_ubus_free_bss(wpa_s); |  	wpas_ubus_free_bss(wpa_s); | ||||||
|   |   | ||||||
|  	/* Remove interface from the global list of interfaces */ |  	/* 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, |  	eloop_register_timeout(WPA_SUPPLICANT_CLEANUP_INTERVAL, 0, | ||||||
|  			       wpas_periodic, global, NULL); |  			       wpas_periodic, global, NULL); | ||||||
| @@ -664,7 +664,7 @@ as adding/removing interfaces. | |||||||
|   |   | ||||||
|  	return global; |  	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_terminate(wpa_supplicant_terminate, global); | ||||||
|  	eloop_register_signal_reconfig(wpa_supplicant_reconfig, global); |  	eloop_register_signal_reconfig(wpa_supplicant_reconfig, global); | ||||||
|   |   | ||||||
| @@ -677,7 +677,7 @@ as adding/removing interfaces. | |||||||
|  	return 0; |  	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); |  	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_version; | ||||||
|  extern const char *const wpa_supplicant_license; |  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]; |  	unsigned char perm_addr[ETH_ALEN]; | ||||||
|  	char ifname[100]; |  	char ifname[100]; | ||||||
|  	struct wpas_ubus_bss ubus; |  	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; |  		goto fail; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -773,7 +773,7 @@ as adding/removing interfaces. | |||||||
|   |   | ||||||
| --- a/src/ap/sta_info.c | --- a/src/ap/sta_info.c | ||||||
| +++ b/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); |  	forced_memzero(sta->last_tk, WPA_TK_MAX_LEN); | ||||||
|  #endif /* CONFIG_TESTING_OPTIONS */ |  #endif /* CONFIG_TESTING_OPTIONS */ | ||||||
|   |   | ||||||
| @@ -785,7 +785,7 @@ as adding/removing interfaces. | |||||||
|  	os_free(sta); |  	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 */ |  #endif /* CONFIG_P2P */ | ||||||
|  	const u8 *ip_ptr = NULL; |  	const u8 *ip_ptr = NULL; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -36,7 +36,7 @@ full device, e.g. in order to deal with hardware/driver limitations | |||||||
|  			  * ' ' (ascii 32): all environments |  			  * ' ' (ascii 32): all environments | ||||||
| --- a/src/ap/beacon.c | --- a/src/ap/beacon.c | ||||||
| +++ b/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 && |  	if (hapd->conf->no_probe_resp_if_max_sta && | ||||||
|  	    is_multicast_ether_addr(mgmt->da) && |  	    is_multicast_ether_addr(mgmt->da) && | ||||||
|  	    is_multicast_ether_addr(mgmt->bssid) && |  	    is_multicast_ether_addr(mgmt->bssid) && | ||||||
|   | |||||||
| @@ -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 */ |  	int bridge_hairpin; /* hairpin_mode on bridge members */ | ||||||
| --- a/src/ap/wpa_auth_glue.c | --- a/src/ap/wpa_auth_glue.c | ||||||
| +++ b/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)) { |  	    wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt)) { | ||||||
|  		const char *ft_iface; |  		const char *ft_iface; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -112,7 +112,7 @@ untagged DHCP packets | |||||||
|  	hapd->x_snoop_initialized = false; |  	hapd->x_snoop_initialized = false; | ||||||
| --- a/src/drivers/driver.h | --- a/src/drivers/driver.h | ||||||
| +++ b/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 |  	 * Returns: 0 on success, negative (<0) on failure | ||||||
|  	 */ |  	 */ | ||||||
|  	int (*br_set_net_param)(void *priv, enum drv_br_net_param param, |  	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 |  	 * get_wowlan - Get wake-on-wireless status | ||||||
| --- a/src/drivers/driver_nl80211.c | --- a/src/drivers/driver_nl80211.c | ||||||
| +++ b/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, |  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; |  	struct i802_bss *bss = priv; | ||||||
|  	char path[128]; |  	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; |  			return -EINVAL; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net> | |||||||
|  |  | ||||||
| --- a/src/ap/beacon.c | --- a/src/ap/beacon.c | ||||||
| +++ b/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 |  	 * is less likely to see them (Probe Request frame sent on a | ||||||
|  	 * neighboring, but partially overlapping, channel). |  	 * neighboring, but partially overlapping, channel). | ||||||
|  	 */ |  	 */ | ||||||
|   | |||||||
| @@ -373,7 +373,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 | |||||||
|   |   | ||||||
|  #ifdef CONFIG_FILS |  #ifdef CONFIG_FILS | ||||||
|  static struct wpabuf * |  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 */ |  	/* Supported rates not used in IEEE 802.11ad/DMG */ | ||||||
|  	if (hapd->iface->current_mode && |  	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); |  			       elems->ext_capab_len); | ||||||
|  	if (resp != WLAN_STATUS_SUCCESS) |  	if (resp != WLAN_STATUS_SUCCESS) | ||||||
|  		return resp; |  		return resp; | ||||||
| @@ -393,7 +393,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 | |||||||
|  	if (resp != WLAN_STATUS_SUCCESS) |  	if (resp != WLAN_STATUS_SUCCESS) | ||||||
|  		return resp; |  		return resp; | ||||||
|   |   | ||||||
| @@ -6314,6 +6317,11 @@ static void handle_beacon(struct hostapd | @@ -6358,6 +6361,11 @@ static void handle_beacon(struct hostapd | ||||||
|  				      0); |  				      0); | ||||||
|   |   | ||||||
|  	ap_list_process_beacon(hapd->iface, mgmt, &elems, fi); |  	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 | --- a/src/ap/ieee802_11.h | ||||||
| +++ b/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, |  				      const u8 *basic_mle, size_t basic_mle_len, | ||||||
|  				      u8 *mld_addr); |  				      u8 *mld_addr); | ||||||
|  int hostapd_get_aid(struct hostapd_data *hapd, struct sta_info *sta); |  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, |  u16 copy_sta_vendor_vht(struct hostapd_data *hapd, struct sta_info *sta, | ||||||
| --- a/src/drivers/driver.h | --- a/src/drivers/driver.h | ||||||
| +++ b/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 |  	 * Returns: 0 on success, -1 on failure | ||||||
|  	 */ |  	 */ | ||||||
|  	int (*set_wds_sta)(void *priv, const u8 *addr, int aid, int val, |  	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 |  	 * send_action - Transmit an Action frame | ||||||
| --- a/src/drivers/driver_nl80211.c | --- a/src/drivers/driver_nl80211.c | ||||||
| +++ b/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, |  static int i802_set_wds_sta(void *priv, const u8 *addr, int aid, int val, | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/src/ap/sta_info.c | --- a/src/ap/sta_info.c | ||||||
| +++ b/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 */ |  #endif /* CONFIG_IEEE80211BE */ | ||||||
| @@ -25,7 +25,7 @@ | |||||||
| + | + | ||||||
| --- a/src/ap/sta_info.h | --- a/src/ap/sta_info.h | ||||||
| +++ b/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); |  void ap_free_sta_pasn(struct hostapd_data *hapd, struct sta_info *sta); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,56 +0,0 @@ | |||||||
| From bc40770144e52d1103d1098dfe59da6108a6413b Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Agustin Lorenzo <agustin.lorenzo@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 && |  | ||||||
		Reference in New Issue
	
	Block a user