ACS: Fix VHT20
authorMichal Kazior <michal.kazior@tieto.com>
Fri, 28 Feb 2014 14:19:42 +0000 (15:19 +0100)
committerJouni Malinen <j@w1.fi>
Sat, 15 Mar 2014 17:04:31 +0000 (19:04 +0200)
The center segment0 calculation for VHT20 ACS was incorrect. This caused
ACS to fail with: "Could not set channel for kernel driver".

Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
src/ap/acs.c

index 3e0155c..2491b78 100644 (file)
@@ -639,23 +639,26 @@ acs_find_ideal_chan(struct hostapd_iface *iface)
 
 static void acs_adjust_vht_center_freq(struct hostapd_iface *iface)
 {
+       int offset;
+
        wpa_printf(MSG_DEBUG, "ACS: Adjusting VHT center frequency");
 
        switch (iface->conf->vht_oper_chwidth) {
        case VHT_CHANWIDTH_USE_HT:
-               iface->conf->vht_oper_centr_freq_seg0_idx =
-                       iface->conf->channel + 2;
+               offset = 2 * iface->conf->secondary_channel;
                break;
        case VHT_CHANWIDTH_80MHZ:
-               iface->conf->vht_oper_centr_freq_seg0_idx =
-                       iface->conf->channel + 6;
+               offset = 6;
                break;
        default:
                /* TODO: How can this be calculated? Adjust
                 * acs_find_ideal_chan() */
                wpa_printf(MSG_INFO, "ACS: Only VHT20/40/80 is supported now");
-               break;
+               return;
        }
+
+       iface->conf->vht_oper_centr_freq_seg0_idx =
+               iface->conf->channel + offset;
 }