ACS: Allow subset of channels to be configured
authorAdrien Decostre <ad.decostre@gmail.com>
Mon, 12 Jan 2015 07:57:17 +0000 (08:57 +0100)
committerJouni Malinen <j@w1.fi>
Mon, 19 Jan 2015 00:35:43 +0000 (02:35 +0200)
Add the possibility to define a subset of channels used by the ACS
engine when not operating on DFS channels.

Signed-off-by: Adrien Decostre <ad.decostre@gmail.com>
hostapd/hostapd.conf
src/ap/acs.c

index 2f6126c..b370f21 100644 (file)
@@ -158,10 +158,7 @@ channel=1
 #acs_num_scans=5
 
 # Channel list restriction. This option allows hostapd to select one of the
-# provided channels when a channel should be automatically selected. This
-# is currently only used for DFS when the current channels becomes unavailable
-# due to radar interference, and is currently only useful when ieee80211h=1 is
-# set.
+# provided channels when a channel should be automatically selected.
 # Default: not set (allow any enabled channel to be selected)
 #chanlist=100 104 108 112 116
 
index 97cf26f..e4c834c 100644 (file)
@@ -455,6 +455,22 @@ static int acs_usable_chan(struct hostapd_channel_data *chan)
 }
 
 
+static int is_in_chanlist(struct hostapd_iface *iface,
+                         struct hostapd_channel_data *chan)
+{
+       int *entry;
+
+       if (!iface->conf->chanlist)
+               return 1;
+
+       for (entry = iface->conf->chanlist; *entry != -1; entry++) {
+               if (*entry == chan->chan)
+                       return 1;
+       }
+       return 0;
+}
+
+
 static void acs_survey_all_chans_intereference_factor(
        struct hostapd_iface *iface)
 {
@@ -467,6 +483,9 @@ static void acs_survey_all_chans_intereference_factor(
                if (!acs_usable_chan(chan))
                        continue;
 
+               if (!is_in_chanlist(iface, chan))
+                       continue;
+
                wpa_printf(MSG_DEBUG, "ACS: Survey analysis for channel %d (%d MHz)",
                           chan->chan, chan->freq);
 
@@ -543,6 +562,8 @@ acs_find_ideal_chan(struct hostapd_iface *iface)
                if (chan->flag & HOSTAPD_CHAN_DISABLED)
                        continue;
 
+               if (!is_in_chanlist(iface, chan))
+                       continue;
 
                /* HT40 on 5 GHz has a limited set of primary channels as per
                 * 11n Annex J */