From: Simon Wunderlich Date: Thu, 6 Feb 2014 18:30:39 +0000 (+0100) Subject: hostapd: Allow to switch to usable DFS channels X-Git-Tag: hostap_2_2~605 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e070051207e28d0124758105db70fdc610fe9e16;p=thirdparty%2Fhostap.git hostapd: Allow to switch to usable DFS channels If channels are "available", change to "usable" DFS channels as a fallback, too. This requires CAC, but it is still better to do that instead of stopping service completely. Signed-hostap: Simon Wunderlich --- diff --git a/src/ap/dfs.c b/src/ap/dfs.c index 71ddc807a..e00da51b0 100644 --- a/src/ap/dfs.c +++ b/src/ap/dfs.c @@ -748,9 +748,33 @@ static int hostapd_dfs_start_channel_switch(struct hostapd_iface *iface) skip_radar); if (!channel) { - /* FIXME: Wait for channel(s) to become available */ + /* + * If there is no channel to switch immediately to, check if + * there is another channel where we can switch even if it + * requires to perform a CAC first. + */ + skip_radar = 0; + channel = dfs_get_valid_channel(iface, &secondary_channel, + &vht_oper_centr_freq_seg0_idx, + &vht_oper_centr_freq_seg1_idx, + skip_radar); + if (!channel) { + /* FIXME: Wait for channel(s) to become available */ + hostapd_disable_iface(iface); + return err; + } + + iface->freq = channel->freq; + iface->conf->channel = channel->chan; + iface->conf->secondary_channel = secondary_channel; + iface->conf->vht_oper_centr_freq_seg0_idx = + vht_oper_centr_freq_seg0_idx; + iface->conf->vht_oper_centr_freq_seg1_idx = + vht_oper_centr_freq_seg1_idx; + hostapd_disable_iface(iface); - return err; + hostapd_enable_iface(iface); + return 0; } wpa_printf(MSG_DEBUG, "DFS will switch to a new channel %d",