From 1648cc642711bdb678c8c1d14344b80df2237d6b Mon Sep 17 00:00:00 2001 From: Adrien Decostre Date: Mon, 12 Jan 2015 08:57:17 +0100 Subject: [PATCH] ACS: Allow subset of channels to be configured 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 --- hostapd/hostapd.conf | 5 +---- src/ap/acs.c | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/hostapd/hostapd.conf b/hostapd/hostapd.conf index 2f6126c3a..b370f21f3 100644 --- a/hostapd/hostapd.conf +++ b/hostapd/hostapd.conf @@ -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 diff --git a/src/ap/acs.c b/src/ap/acs.c index 97cf26fbe..e4c834ce0 100644 --- a/src/ap/acs.c +++ b/src/ap/acs.c @@ -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 */