]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Fix 40 MHz channel bringup with ACS on the 6 GHz band
authorHari Chandrakanthan <quic_haric@quicinc.com>
Wed, 19 Apr 2023 12:05:11 +0000 (17:35 +0530)
committerJouni Malinen <j@w1.fi>
Tue, 25 Apr 2023 14:05:52 +0000 (17:05 +0300)
When AP is brought up in HE40/EHT40 with ACS, the AP comes up with 20
MHz bandwidth. It is expected to come up with 40 MHz bandwidth.

conf->secondary_channel does not hold the correct value and it leads to
choosing 20 MHz in hostapd_set_freq_params(). conf->secondary_channel is
filled using the hostapd config he_oper_centr_freq_seg0_idx. When AP is
configured to use ACS, the hostapd config he_oper_centr_freq_seg0_idx is
not valid as the channel is not known during bring up. So using the
config he_oper_centr_freq_seg0_idx to fill the conf->secondary_channel
does not work with ACS.

Use op_class to determine the bandwidth and based on the bandwidth fill
the conf->secondary_channel to address this ACS case.

Signed-off-by: Hari Chandrakanthan <quic_haric@quicinc.com>
src/ap/hostapd.c [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index a208827..aaf8d5e
@@ -1756,16 +1756,15 @@ static int configured_fixed_chan_to_freq(struct hostapd_iface *iface)
 
 static void hostapd_set_6ghz_sec_chan(struct hostapd_iface *iface)
 {
-       int bw, seg0;
+       int bw;
 
        if (!is_6ghz_op_class(iface->conf->op_class))
                return;
 
-       seg0 = hostapd_get_oper_centr_freq_seg0_idx(iface->conf);
-       bw = center_idx_to_bw_6ghz(seg0);
+       bw = op_class_to_bandwidth(iface->conf->op_class);
        /* Assign the secondary channel if absent in config for
         * bandwidths > 20 MHz */
-       if (bw > 0 && !iface->conf->secondary_channel) {
+       if (bw >= 40 && !iface->conf->secondary_channel) {
                if (((iface->conf->channel - 1) / 4) % 2)
                        iface->conf->secondary_channel = -1;
                else