[PATCH v2 0/4] ACS: better channel selection for 40/80/160 MHz

Nicolas Escande nico.escande at gmail.com
Wed Apr 27 06:36:58 PDT 2022

This is a proposal to make better channel selection when using large
bandwidth and not limiting itself to the first channel of a segment.
This enables us to operate on a less crowded primary channel.

This builds upon the previous work of at least Markov Mikhail
<markov.mikhail at itmh.ru> & Janusz Dziedzic <janusz.dziedzic at
I'm sure others took a swing at it too.

I saw two ways to implement this:
  - iterating over each channels, and as we compute the interference
    factor of that channel, also take into account the factor of the
    other channels of the same segment (may they be before or after)
  - iterating over each segment, and within that segment, iterate on the
    following channels to take into account their interference
In both case, we need to later on:
  - adjust the secondary_channel which may not be the following channel
  - adjust the center channel which cannot be deduced arithmatically

The current code already iterates over each channels, skipping
channels that are not the first of their segment (thus iterating over
each segment).

I only added a way to promote one of the sub channels as the main
channel if it had better interference factor.
I also added some tables describing each segments available in 40/80/160
(start/ frequencies & center channel) and use them:
  - to identify which channels are the first of their segment,
  - to deduce the correct secondary channel from the selected one
  - to find out the right center channel for any channel

Note that this code is only enabled for 5/6GHz as 2.4GHz has channel
overlapping, is limited to 40MHz max and we have a working ACS for that.

- refactor the bw_xxx arrays into a unique common array describing all
  segments for each bandwidth
- make the arrays static to the acs.c file
- refactor acs_usable_bwXXX_chan into a signle function
- refactor acs_get_bwXXX_center_chan into a single function

Nicolas Escande (4):
  ACS: extract bw40/80/160 freqs out of acs_usable_bwXXX_chan
  ACS: introduce acs_get_bw_center_chan
  ACS: introduce acs_adjust_secondary
  ACS: allow selecting a better channel when using 40/80/160MHz

 src/ap/acs.c | 191 ++++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 143 insertions(+), 48 deletions(-)


More information about the Hostap mailing list