]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
EHT: Update EHT Operation element to P802.11be/D2.3 in AP settings
authorJouni Malinen <j@w1.fi>
Sat, 17 Dec 2022 18:32:15 +0000 (20:32 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 17 Dec 2022 18:32:15 +0000 (20:32 +0200)
IEEE P802.11be/D2.0 added a 4-octet Basic EHT-MCS And Nss Set field into
the EHT Operation element. cfg80211 is now verifying that the EHT
Operation element has large enough payload and that check is failing
with the previous version. This commit does not really set the correct
Basic EHT-MCS And Nss Set values, but the IE length check is now passing
to allow initial mac80211_hwsim testing to succeed.

Signed-off-by: Jouni Malinen <j@w1.fi>
src/ap/ieee802_11_eht.c
src/common/ieee802_11_defs.h

index 238da2ca8bd238cf1da08046ec172b3ce3440c78..caaadcecf0eb54c82d1747ad65445f14cc653f52 100644 (file)
@@ -197,17 +197,24 @@ u8 * hostapd_eid_eht_operation(struct hostapd_data *hapd, u8 *eid)
        struct ieee80211_eht_operation *oper;
        u8 *pos = eid, seg0 = 0, seg1 = 0;
        enum oper_chan_width chwidth;
+       size_t elen = 1 + 4 + 3;
 
        if (!hapd->iface->current_mode)
                return eid;
 
        *pos++ = WLAN_EID_EXTENSION;
-       *pos++ = 5;
+       *pos++ = 1 + elen;
        *pos++ = WLAN_EID_EXT_EHT_OPERATION;
 
        oper = (struct ieee80211_eht_operation *) pos;
        oper->oper_params = EHT_OPER_INFO_PRESENT;
 
+       /* TODO: Fill in appropriate EHT-MCS max Nss information */
+       oper->basic_eht_mcs_nss_set[0] = 0x11;
+       oper->basic_eht_mcs_nss_set[1] = 0x00;
+       oper->basic_eht_mcs_nss_set[2] = 0x00;
+       oper->basic_eht_mcs_nss_set[3] = 0x00;
+
        if (is_6ghz_op_class(conf->op_class))
                chwidth = op_class_to_ch_width(conf->op_class);
        else
@@ -246,7 +253,7 @@ u8 * hostapd_eid_eht_operation(struct hostapd_data *hapd, u8 *eid)
        oper->oper_info.ccfs0 = seg0 ? seg0 : hapd->iconf->channel;
        oper->oper_info.ccfs1 = seg1;
 
-       return pos + 4;
+       return pos + elen;
 }
 
 
index 5408ae576a3aa43b2c480941c28d4de533295e9a..21b48ac523695699e603ad4d2b8132c0d68c48f0 100644 (file)
@@ -2429,11 +2429,14 @@ struct ieee80211_he_mu_edca_parameter_set {
 #define RNR_BSS_PARAM_CO_LOCATED                    BIT(6)
 #define RNR_20_MHZ_PSD_MAX_TXPOWER                  255 /* dBm */
 
-/* IEEE P802.11be/D1.5, 9.4.2.311 - EHT Operation element */
+/* IEEE P802.11be/D2.3, 9.4.2.311 - EHT Operation element */
 
 /* Figure 9-1002b: EHT Operation Parameters field subfields */
 #define EHT_OPER_INFO_PRESENT                          BIT(0)
 #define EHT_OPER_DISABLED_SUBCHAN_BITMAP_PRESENT       BIT(1)
+#define EHT_OPER_DEFAULT_PE_DURATION                   BIT(2)
+#define EHT_OPER_GROUP_ADDR_BU_INDICATION_LIMIT        BIT(3)
+#define EHT_OPER_GROUP_ADDR_BU_INDICATION_EXPONENT     (BIT(4) | BIT(5))
 
 /* Control subfield: Channel Width subfield; see Table 9-401b */
 #define EHT_OPER_CHANNEL_WIDTH_20MHZ                   0
@@ -2453,6 +2456,7 @@ struct ieee80211_eht_oper_info {
 /* Figure 9-1002a: EHT Operation element format */
 struct ieee80211_eht_operation {
        u8 oper_params; /* EHT Operation Parameters: EHT_OPER_* bits */
+       u8 basic_eht_mcs_nss_set[4];
        struct ieee80211_eht_oper_info oper_info; /* 0 or 3 or 5 octets */
 } STRUCT_PACKED;