]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Fix determining mode for 6 GHz band when using hw_mode=any
authorXinyue Ling <quic_xinyling@quicinc.com>
Fri, 14 Apr 2023 07:58:03 +0000 (00:58 -0700)
committerJouni Malinen <j@w1.fi>
Fri, 21 Apr 2023 18:15:00 +0000 (21:15 +0300)
When 6 GHz band is specified and hw_mode parameter is set to any,
hostapd_determine_mode() may determine the wrong mode because there are
two hw modes (5 GHz and 6 GHz) with HOSTAPD_MODE_IEEE80211A. This will
cause 6 GHz AP to fail to start. Fix this by adding a check similar to
the changes in commit 99cd453720d6 ("hw_feature: Correctly select mode
in case of the 6 GHz band") into hostapd_determine_mode().

Signed-off-by: Jouni Malinen <quic_jouni@quicinc.com>
src/ap/hw_features.c

index 842d9f5ba52a966a5e864525f59572869027a94c..154449068c14a0ceca2d368886989e2a0e5c6287 100644 (file)
@@ -1003,7 +1003,7 @@ static int hostapd_is_usable_chans(struct hostapd_iface *iface)
 
 static void hostapd_determine_mode(struct hostapd_iface *iface)
 {
-       int i;
+       int i, chan;
        enum hostapd_hw_mode target_mode;
 
        if (iface->current_mode ||
@@ -1022,6 +1022,10 @@ static void hostapd_determine_mode(struct hostapd_iface *iface)
 
                mode = &iface->hw_features[i];
                if (mode->mode == target_mode) {
+                       if (iface->freq > 0 &&
+                           !hw_mode_get_channel(mode, iface->freq, &chan))
+                               continue;
+
                        iface->current_mode = mode;
                        iface->conf->hw_mode = mode->mode;
                        break;