]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
FILS: Fix NSS calculation for HE mode
authorAloka Dixit <quic_alokad@quicinc.com>
Mon, 24 Jul 2023 23:16:25 +0000 (16:16 -0700)
committerJouni Malinen <j@w1.fi>
Fri, 29 Sep 2023 15:03:39 +0000 (18:03 +0300)
Maximum NSS calculation for HE mode checks if both Tx and Rx support
a given NSS. Modify it to instead check if either of these two support
the given NSS.

Signed-off-by: Aloka Dixit <quic_alokad@quicinc.com>
src/ap/beacon.c

index 1d00ab249212a6c434492a05636e8a1469c7ca77..8bda7c323bcefde518bb0f1e545c321261fdef82 100644 (file)
@@ -1425,27 +1425,29 @@ static u16 hostapd_gen_fils_discovery_nss(struct hostapd_hw_modes *mode,
                        u16 nss_mask = 0x3 << (i * 2);
 
                        /*
-                        * If NSS values supported by RX and TX are different
-                        * then choose the smaller of the two as the maximum
-                        * supported NSS as that is the value supported by
-                        * both RX and TX.
+                        * If Tx and/or Rx indicate support for a given NSS,
+                        * count it towards the maximum NSS.
                         */
                        if (he_mcs_nss_size == 4 &&
-                           (((mcs[0] & nss_mask) == nss_mask) ||
-                            ((mcs[1] & nss_mask) == nss_mask)))
+                           (((mcs[0] & nss_mask) != nss_mask) ||
+                            ((mcs[1] & nss_mask) != nss_mask))) {
+                               nss++;
                                continue;
+                       }
 
                        if (he_mcs_nss_size == 8 &&
-                           (((mcs[2] & nss_mask) == nss_mask) ||
-                            ((mcs[3] & nss_mask) == nss_mask)))
+                           (((mcs[2] & nss_mask) != nss_mask) ||
+                            ((mcs[3] & nss_mask) != nss_mask))) {
+                               nss++;
                                continue;
+                       }
 
                        if (he_mcs_nss_size == 12 &&
-                           (((mcs[4] & nss_mask) == nss_mask) ||
-                            ((mcs[5] & nss_mask) == nss_mask)))
+                           (((mcs[4] & nss_mask) != nss_mask) ||
+                            ((mcs[5] & nss_mask) != nss_mask))) {
+                               nss++;
                                continue;
-
-                       nss++;
+                       }
                }
        }