diff mbox

[PATCHv2,3/4] hostapd: allow to switch to usable DFS channels

Message ID 1391711440-10607-4-git-send-email-sw@simonwunderlich.de
State Accepted
Headers show

Commit Message

Simon Wunderlich Feb. 6, 2014, 6:30 p.m. UTC
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 <sw@simonwunderlich.de>
---
 src/ap/dfs.c |   27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)
diff mbox

Patch

diff --git a/src/ap/dfs.c b/src/ap/dfs.c
index ef3b4e7..78668dc 100644
--- a/src/ap/dfs.c
+++ b/src/ap/dfs.c
@@ -724,9 +724,32 @@  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",