mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-10-31 18:38:10 +00:00 
			
		
		
		
	hostapd: fix opclass during CSA with DFS channels
During CSA with DFS channels, disable, enable interface is a part of the algorithm. When interface was enabled old operating class before switch and new channel were used causing mismatch in configured_fixed_chan_to_freq function. Example of log when switch from channel 157 to 108 was triggered: "Could not convert op_class 124 channel 108 to operating frequency" Fixes: WIFI-13385 Signed-off-by: Marek Kwaczynski <marek@shasta.cloud>
This commit is contained in:
		 Marek Kwaczynski
					Marek Kwaczynski
				
			
				
					committed by
					
						 John Crispin
						John Crispin
					
				
			
			
				
	
			
			
			 John Crispin
						John Crispin
					
				
			
						parent
						
							b1474acf2f
						
					
				
				
					commit
					f74dd74cef
				
			| @@ -0,0 +1,25 @@ | ||||
| Index: hostapd-2021-02-20-59e9794c/src/ap/hostapd.c | ||||
| =================================================================== | ||||
| --- hostapd-2021-02-20-59e9794c.orig/src/ap/hostapd.c | ||||
| +++ hostapd-2021-02-20-59e9794c/src/ap/hostapd.c | ||||
| @@ -3814,6 +3814,8 @@ hostapd_switch_channel_fallback(struct h | ||||
|  				const struct hostapd_freq_params *freq_params) | ||||
|  { | ||||
|  	int seg0_idx = 0, seg1_idx = 0, bw = CHANWIDTH_USE_HT; | ||||
| +	u8 op_class; | ||||
| +	u8 chan; | ||||
|   | ||||
|  	wpa_printf(MSG_DEBUG, "Restarting all CSA-related BSSes"); | ||||
|   | ||||
| @@ -3846,6 +3848,11 @@ hostapd_switch_channel_fallback(struct h | ||||
|  	iface->freq = freq_params->freq; | ||||
|  	iface->conf->channel = freq_params->channel; | ||||
|  	iface->conf->secondary_channel = freq_params->sec_channel_offset; | ||||
| +	ieee80211_freq_to_channel_ext(freq_params->freq, freq_params->sec_channel_offset, bw, &op_class, &chan); | ||||
| +	if (chan != freq_params->channel) | ||||
| +		wpa_printf(MSG_ERROR, "Channel mismatch: %d -> %d", freq_params->channel, chan); | ||||
| + | ||||
| +	iface->conf->op_class = op_class; | ||||
|  	hostapd_set_oper_centr_freq_seg0_idx(iface->conf, seg0_idx); | ||||
|  	hostapd_set_oper_centr_freq_seg1_idx(iface->conf, seg1_idx); | ||||
|  	hostapd_set_oper_chwidth(iface->conf, bw); | ||||
| @@ -0,0 +1,25 @@ | ||||
| Index: hostapd-2021-02-20-59e9794c/src/ap/hostapd.c | ||||
| =================================================================== | ||||
| --- hostapd-2021-02-20-59e9794c.orig/src/ap/hostapd.c | ||||
| +++ hostapd-2021-02-20-59e9794c/src/ap/hostapd.c | ||||
| @@ -3814,6 +3814,8 @@ hostapd_switch_channel_fallback(struct h | ||||
|  				const struct hostapd_freq_params *freq_params) | ||||
|  { | ||||
|  	int seg0_idx = 0, seg1_idx = 0, bw = CHANWIDTH_USE_HT; | ||||
| +	u8 op_class; | ||||
| +	u8 chan; | ||||
|   | ||||
|  	wpa_printf(MSG_DEBUG, "Restarting all CSA-related BSSes"); | ||||
|   | ||||
| @@ -3846,6 +3848,11 @@ hostapd_switch_channel_fallback(struct h | ||||
|  	iface->freq = freq_params->freq; | ||||
|  	iface->conf->channel = freq_params->channel; | ||||
|  	iface->conf->secondary_channel = freq_params->sec_channel_offset; | ||||
| +	ieee80211_freq_to_channel_ext(freq_params->freq, freq_params->sec_channel_offset, bw, &op_class, &chan); | ||||
| +	if (chan != freq_params->channel) | ||||
| +		wpa_printf(MSG_ERROR, "Channel mismatch: %d -> %d", freq_params->channel, chan); | ||||
| + | ||||
| +	iface->conf->op_class = op_class; | ||||
|  	hostapd_set_oper_centr_freq_seg0_idx(iface->conf, seg0_idx); | ||||
|  	hostapd_set_oper_centr_freq_seg1_idx(iface->conf, seg1_idx); | ||||
|  	hostapd_set_oper_chwidth(iface->conf, bw); | ||||
		Reference in New Issue
	
	Block a user