From f1c6c9d3eba81f6d7168536fb0f7323fe2d7e014 Mon Sep 17 00:00:00 2001 From: Aloka Dixit Date: Thu, 14 May 2020 16:18:38 -0700 Subject: [PATCH] ACS: Allow downgrading to 20 MHz based on OBSS results When auto channel selection (ACS) is used for HE 40 MHz in the 2.4 GHz band, AP sets center frequency after finding a 40 MHz channel and then runs a scan for overlapping BSSes in neighboring channels. Upon OBSS detection, AP should downgrade to 20 MHz bandwidth. This was broken because allowed_ht40_channel_pair() returns true in this case and the steps to reset center frequency are not executed causing failure to bring interface up. Fix the condition to allow rollback to 20 MHz. Signed-off-by: Aloka Dixit --- src/ap/hw_features.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ap/hw_features.c b/src/ap/hw_features.c index 9c02f036f..93d19e0ba 100644 --- a/src/ap/hw_features.c +++ b/src/ap/hw_features.c @@ -313,7 +313,7 @@ static void ieee80211n_check_scan(struct hostapd_iface *iface) { struct wpa_scan_results *scan_res; int oper40; - int res; + int res = 0; /* Check list of neighboring BSSes (from scan) to see whether 40 MHz is * allowed per IEEE Std 802.11-2012, 10.15.3.2 */ @@ -349,7 +349,8 @@ static void ieee80211n_check_scan(struct hostapd_iface *iface) } } - res = ieee80211n_allowed_ht40_channel_pair(iface); + if (iface->conf->secondary_channel) + res = ieee80211n_allowed_ht40_channel_pair(iface); if (!res) { iface->conf->secondary_channel = 0; hostapd_set_oper_centr_freq_seg0_idx(iface->conf, 0);