mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-10-31 02:17:58 +00:00 
			
		
		
		
	hostapd: ubus: add DFS channels support during CSA
Add options to trigger CSA with DFS channels, without
this patch ubus request was rejected:
ubus call hostapd.wlan0 switch_chan '{"freq":5260,"bcn_count":10}'
Command failed: Operation not supported
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
						
							1ca8f18b9d
						
					
				
				
					commit
					4b5eeb48cc
				
			| @@ -0,0 +1,54 @@ | ||||
| Index: hostapd-2021-02-20-59e9794c/src/ap/ubus.c | ||||
| =================================================================== | ||||
| --- hostapd-2021-02-20-59e9794c.orig/src/ap/ubus.c | ||||
| +++ hostapd-2021-02-20-59e9794c/src/ap/ubus.c | ||||
| @@ -25,6 +25,7 @@ | ||||
|  #include "airtime_policy.h" | ||||
|  #include "hw_features.h" | ||||
|  #include "radius_client.h" | ||||
| +#include "dfs.h" | ||||
|   | ||||
|  static struct ubus_context *ctx; | ||||
|  static struct blob_buf b; | ||||
| @@ -857,6 +858,7 @@ hostapd_switch_chan(struct ubus_context | ||||
|  	u8 seg0 = 0, seg1 = 0; | ||||
|  	int ret = UBUS_STATUS_OK; | ||||
|  	int i; | ||||
| +	int dfs_range = 0; | ||||
|   | ||||
|  	blobmsg_parse(csa_policy, __CSA_MAX, tb, blob_data(msg), blob_len(msg)); | ||||
|   | ||||
| @@ -912,6 +914,17 @@ hostapd_switch_chan(struct ubus_context | ||||
|  		break; | ||||
|  	} | ||||
|   | ||||
| +	if (css.freq_params.center_freq1) | ||||
| +		dfs_range += hostapd_is_dfs_overlap( | ||||
| +			hapd->iface, chwidth, css.freq_params.center_freq1); | ||||
| +	else | ||||
| +		dfs_range += hostapd_is_dfs_overlap( | ||||
| +			hapd->iface, chwidth, css.freq_params.freq); | ||||
| + | ||||
| +	if (css.freq_params.center_freq2) | ||||
| +		dfs_range += hostapd_is_dfs_overlap( | ||||
| +			hapd->iface, chwidth, css.freq_params.center_freq2); | ||||
| + | ||||
|  	hostapd_set_freq_params(&css.freq_params, iconf->hw_mode, | ||||
|  				css.freq_params.freq, | ||||
|  				css.freq_params.channel, iconf->enable_edmg, | ||||
| @@ -925,6 +938,15 @@ hostapd_switch_chan(struct ubus_context | ||||
|  				mode ? &mode->he_capab[IEEE80211_MODE_AP] : | ||||
|  				NULL); | ||||
|   | ||||
| +	if (dfs_range) { | ||||
| +		/* Perform CAC and switch channel */ | ||||
| +		freq_params = malloc(sizeof(*freq_params)); | ||||
| +		memcpy(freq_params, &css.freq_params, sizeof(*freq_params)); | ||||
| +		eloop_register_timeout(0, 1, switch_chan_fallback_cb, | ||||
| +				       hapd->iface, freq_params); | ||||
| +		return 0; | ||||
| +	} | ||||
| + | ||||
|  	for (i = 0; i < hapd->iface->num_bss; i++) { | ||||
|  		struct hostapd_data *bss = hapd->iface->bss[i]; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user