]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
ACS: Extend acs_find_chan() for all modes
authorNeo Jou <neojou@gmail.com>
Mon, 13 Jan 2020 08:31:28 +0000 (16:31 +0800)
committerJouni Malinen <j@w1.fi>
Sat, 29 Feb 2020 09:23:03 +0000 (11:23 +0200)
This is preparation for being able to support hw_mode=any to select the
best channel from any supported mode.

Signed-off-by: Neo Jou <neojou@gmail.com>
src/ap/acs.c

index 8b6686e855beebfb623b37c266f5a534a56a9ab9..2a18769366e6b425598307ace5489dd4da860b7d 100644 (file)
@@ -538,14 +538,14 @@ static void acs_survey_all_chans_interference_factor(
 }
 
 
-static struct hostapd_channel_data *acs_find_chan(struct hostapd_iface *iface,
-                                                 int freq)
+static struct hostapd_channel_data *
+acs_find_chan_mode(struct hostapd_hw_modes *mode, int freq)
 {
        struct hostapd_channel_data *chan;
        int i;
 
-       for (i = 0; i < iface->current_mode->num_channels; i++) {
-               chan = &iface->current_mode->channels[i];
+       for (i = 0; i < mode->num_channels; i++) {
+               chan = &mode->channels[i];
 
                if (chan->flag & HOSTAPD_CHAN_DISABLED)
                        continue;
@@ -558,6 +558,26 @@ static struct hostapd_channel_data *acs_find_chan(struct hostapd_iface *iface,
 }
 
 
+static struct hostapd_channel_data *
+acs_find_chan(struct hostapd_iface *iface, int freq)
+{
+       int i;
+       struct hostapd_hw_modes *mode;
+       struct hostapd_channel_data *chan;
+
+       for (i = 0; i < iface->num_hw_features; i++) {
+               mode = &iface->hw_features[i];
+               if (!hostapd_hw_skip_mode(iface, mode)) {
+                       chan = acs_find_chan_mode(mode, freq);
+                       if (chan)
+                               return chan;
+               }
+       }
+
+       return NULL;
+}
+
+
 static int is_24ghz_mode(enum hostapd_hw_mode mode)
 {
        return mode == HOSTAPD_MODE_IEEE80211B ||