40 lines
		
	
	
		
			948 B
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			948 B
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/wpa_supplicant/ap.c
 | |
| +++ b/wpa_supplicant/ap.c
 | |
| @@ -1513,15 +1513,35 @@ int ap_switch_channel(struct wpa_supplic
 | |
|  
 | |
|  
 | |
|  #ifdef CONFIG_CTRL_IFACE
 | |
| +
 | |
| +static int __ap_ctrl_iface_chanswitch(struct hostapd_iface *iface,
 | |
| +				      struct csa_settings *settings)
 | |
| +{
 | |
| +#ifdef NEED_AP_MLME
 | |
| +	if (!iface || !iface->bss[0])
 | |
| +		return 0;
 | |
| +
 | |
| +	return hostapd_switch_channel(iface->bss[0], settings);
 | |
| +#else
 | |
| +	return -1;
 | |
| +#endif
 | |
| +}
 | |
| +
 | |
| +
 | |
|  int ap_ctrl_iface_chanswitch(struct wpa_supplicant *wpa_s, const char *pos)
 | |
|  {
 | |
|  	struct csa_settings settings;
 | |
|  	int ret = hostapd_parse_csa_settings(pos, &settings);
 | |
|  
 | |
| +	if (!(wpa_s->ap_iface && wpa_s->ap_iface->bss[0]) &&
 | |
| +	    !(wpa_s->ifmsh && wpa_s->ifmsh->bss[0]))
 | |
| +		return -1;
 | |
| +
 | |
| +	ret = __ap_ctrl_iface_chanswitch(wpa_s->ap_iface, &settings);
 | |
|  	if (ret)
 | |
|  		return ret;
 | |
|  
 | |
| -	return ap_switch_channel(wpa_s, &settings);
 | |
| +	return __ap_ctrl_iface_chanswitch(wpa_s->ifmsh, &settings);
 | |
|  }
 | |
|  #endif /* CONFIG_CTRL_IFACE */
 | |
|  
 | 
