[PATCH 3/4] ACS: add supported channel BW checking

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Dmitry Lebed <dlebed@xxxxxxxxxxxxx>

While doing automatic channel selection we need
to take into account supported BW for each channel
provided via nl80211.
Without this modification hostapd can select unsupported
channel, will fail to use it and eventually will not start.

Signed-off-by: Dmitry Lebed <dlebed@xxxxxxxxxxxxx>
---
 src/ap/acs.c | 28 +++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/src/ap/acs.c b/src/ap/acs.c
index aa5905894..9ce5ca8f6 100644
--- a/src/ap/acs.c
+++ b/src/ap/acs.c
@@ -13,6 +13,7 @@
 #include "utils/common.h"
 #include "utils/list.h"
 #include "common/ieee802_11_defs.h"
+#include "common/hw_features_common.h"
 #include "common/wpa_ctrl.h"
 #include "drivers/driver.h"
 #include "hostapd.h"
@@ -565,6 +566,7 @@ acs_find_ideal_chan(struct hostapd_iface *iface)
        long double factor, ideal_factor = 0;
        int i, j;
        int n_chans = 1;
+       u32 bw;
        unsigned int k;

        /* TODO: HT40- support */
@@ -583,12 +585,12 @@ acs_find_ideal_chan(struct hostapd_iface *iface)
            iface->conf->vht_oper_chwidth == 1)
                n_chans = 4;

+       bw = num_chan_to_bw(n_chans);
+
        /* TODO: VHT80+80, VHT160. Update acs_adjust_vht_center_freq() too. */

-       wpa_printf(MSG_DEBUG, "ACS: Survey analysis for selected bandwidth %d MHz",
-                  n_chans == 1 ? 20 :
-                  n_chans == 2 ? 40 :
-                  80);
+       wpa_printf(MSG_DEBUG, "ACS: Survey analysis for selected bandwidth %u MHz",
+                  bw);

        for (i = 0; i < iface->current_mode->num_channels; i++) {
                double total_weight;
@@ -596,12 +598,22 @@ acs_find_ideal_chan(struct hostapd_iface *iface)

                chan = &iface->current_mode->channels[i];

-               if (chan->flag & HOSTAPD_CHAN_DISABLED)
+               /* Since in current ACS implementation first channel is
+                * always a primary channel, skip channels not available as
+                * primary until more sophisticated channel selection will be
+                * implemented */
+               if (!chan_pri_allowed(chan))
                        continue;

                if (!is_in_chanlist(iface, chan))
                        continue;

+               if (!chan_bw_allowed(chan, bw, 1, 1)) {
+                       wpa_printf(MSG_DEBUG, "ACS: Channel %d: BW %u is not supported",
+                                  chan->chan, bw);
+                       continue;
+               }
+
                /* HT40 on 5 GHz has a limited set of primary channels as per
                 * 11n Annex J */
                if (iface->current_mode->mode == HOSTAPD_MODE_IEEE80211A &&
@@ -632,6 +644,12 @@ acs_find_ideal_chan(struct hostapd_iface *iface)
                        if (!adj_chan)
                                break;

+                       if (!chan_bw_allowed(adj_chan, bw, 1, 0)) {
+                               wpa_printf(MSG_DEBUG, "ACS: PRI Channel %d: secondary channel %d BW %u is not supported",
+                                          chan->chan, adj_chan->chan, bw);
+                               break;
+                       }
+
                        if (acs_usable_chan(adj_chan)) {
                                factor += adj_chan->interference_factor;
                                total_weight += 1;
--
2.16.1



This email, including its contents and any attachment(s), may contain confidential information of Quantenna Communications, Inc. and is solely for the intended recipient(s). If you may have received this in error, please contact the sender and permanently delete this email, its contents and any attachment(s).

_______________________________________________
Hostap mailing list
Hostap@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/hostap



[Index of Archives]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux