[PATCH 4/4] hostapd: DFS: add support for multi-BSS

Michal Kazior michal.kazior
Tue Oct 29 07:00:34 PDT 2013


If radar was detected single BSS is notified about
it. This caused only that single BSS to be stopped
and restarted. However due to nl80211 interface
combinations the BSS was not started on a new
channel and other BSSes remaing to operate on the
old channel.

The downside is that hostapd_disable_iface()
causes deauth frames to be sent. This is undesired
but on the other hand it doesn't make sense to
create workarounds that imitate CSA's 'block tx'.
For proper Tx quiescing CSA should be properly
implemented.

Signed-off-by: Michal Kazior <michal.kazior at tieto.com>
---
 src/ap/dfs.c | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/src/ap/dfs.c b/src/ap/dfs.c
index 5d34422..17daad8 100644
--- a/src/ap/dfs.c
+++ b/src/ap/dfs.c
@@ -614,6 +614,10 @@ static int hostapd_dfs_start_channel_switch(struct hostapd_data *hapd)
 					&vht_oper_centr_freq_seg0_idx,
 					&vht_oper_centr_freq_seg1_idx);
 	if (channel) {
+		wpa_printf(MSG_DEBUG, "DFS will switch to a new channel %d",
+			   channel->chan);
+
+		hapd->iface->freq = channel->freq;
 		hapd->iconf->channel = channel->chan;
 		hapd->iconf->secondary_channel = secondary_channel;
 		hapd->iconf->vht_oper_centr_freq_seg0_idx =
@@ -625,15 +629,24 @@ static int hostapd_dfs_start_channel_switch(struct hostapd_data *hapd)
 		wpa_printf(MSG_ERROR, "No valid channel available");
 	}
 
-	if (!hapd->cac_started) {
-		wpa_printf(MSG_DEBUG, "DFS radar detected");
-		hapd->driver->stop_ap(hapd->drv_priv);
-	} else {
+	if (hapd->cac_started) {
 		wpa_printf(MSG_DEBUG, "DFS radar detected during CAC");
 		hapd->cac_started = 0;
+		/* FIXME: Wait for channel(s) to become available if no channel
+		 * has been found */
+		hostapd_setup_interface_complete(hapd->iface, err);
+		return err;
+	}
+
+	if (err) {
+		/* FIXME: Wait for channel(s) to become available */
+		hostapd_disable_iface(hapd->iface);
+		return err;
 	}
 
-	hostapd_setup_interface_complete(hapd->iface, err);
+	wpa_printf(MSG_DEBUG, "DFS radar detected");
+	hostapd_disable_iface(hapd->iface);
+	hostapd_enable_iface(hapd->iface);
 	return 0;
 }
 
-- 
1.8.4.rc3




More information about the Hostap mailing list