This patch adds the support for 40- MHz in 2GHz band. Co-developed-by: Money Wang <money.wang@xxxxxxxxxxxx> Signed-off-by: Michael-CY Lee <michael-cy.lee@xxxxxxxxxxxx> --- src/ap/acs.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/ap/acs.c b/src/ap/acs.c index 7ab310f75..f04c8a8d8 100644 --- a/src/ap/acs.c +++ b/src/ap/acs.c @@ -787,6 +787,10 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface, long double factor; int i, j; unsigned int k; + int secondary_channel = 1, freq_offset; + + if (is_24ghz_mode(mode->mode)) + secondary_channel = iface->conf->secondary_channel; for (i = 0; i < mode->num_channels; i++) { double total_weight; @@ -825,7 +829,7 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface, iface->conf->country[2] == 0x4f) continue; - if (!chan_bw_allowed(chan, bw, 1, 1)) { + if (!chan_bw_allowed(chan, bw, secondary_channel != -1, 1)) { wpa_printf(MSG_DEBUG, "ACS: Channel %d: BW %u is not supported", chan->chan, bw); @@ -884,7 +888,8 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface, total_weight = 1; for (j = 1; j < n_chans; j++) { - adj_chan = acs_find_chan(iface, chan->freq + (j * 20)); + adj_chan = acs_find_chan(iface, chan->freq + + (j * secondary_channel * 20)); if (!adj_chan) break; @@ -932,8 +937,9 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface, * channel interference factor. */ if (is_24ghz_mode(mode->mode)) { for (j = 0; j < n_chans; j++) { + freq_offset = j * 20 * secondary_channel; adj_chan = acs_find_chan(iface, chan->freq + - (j * 20) - 5); + freq_offset - 5); if (adj_chan && acs_usable_chan(adj_chan)) { factor += ACS_ADJ_WEIGHT * adj_chan->interference_factor; @@ -941,7 +947,7 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface, } adj_chan = acs_find_chan(iface, chan->freq + - (j * 20) - 10); + freq_offset - 10); if (adj_chan && acs_usable_chan(adj_chan)) { factor += ACS_NEXT_ADJ_WEIGHT * adj_chan->interference_factor; @@ -949,7 +955,7 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface, } adj_chan = acs_find_chan(iface, chan->freq + - (j * 20) + 5); + freq_offset + 5); if (adj_chan && acs_usable_chan(adj_chan)) { factor += ACS_ADJ_WEIGHT * adj_chan->interference_factor; @@ -957,7 +963,7 @@ acs_find_ideal_chan_mode(struct hostapd_iface *iface, } adj_chan = acs_find_chan(iface, chan->freq + - (j * 20) + 10); + freq_offset + 10); if (adj_chan && acs_usable_chan(adj_chan)) { factor += ACS_NEXT_ADJ_WEIGHT * adj_chan->interference_factor; @@ -1042,14 +1048,6 @@ acs_find_ideal_chan(struct hostapd_iface *iface) goto bw_selected; } - /* TODO: HT40- support */ - - if (iface->conf->ieee80211n && - iface->conf->secondary_channel == -1) { - wpa_printf(MSG_ERROR, "ACS: HT40- is not supported yet. Please try HT40+"); - return NULL; - } - if (iface->conf->ieee80211n && iface->conf->secondary_channel) n_chans = 2; -- 2.25.1 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap