[PATCH] UHR: update to Draft_P802.11bn D1.5

Johannes Berg johannes at sipsolutions.net
Fri Jul 31 05:29:46 PDT 2026


From: Johannes Berg <johannes.berg at intel.com>

Update various definitions to D1.5. Obviously,
the implementation is severly lacking.

Signed-off-by: Johannes Berg <johannes.berg at intel.com>
---
 src/ap/ieee802_11_uhr.c      | 10 +++-------
 src/common/ieee802_11_defs.h | 28 ++++++++++++++--------------
 2 files changed, 17 insertions(+), 21 deletions(-)

diff --git a/src/ap/ieee802_11_uhr.c b/src/ap/ieee802_11_uhr.c
index 02193529a0ed..f7af76e8e732 100644
--- a/src/ap/ieee802_11_uhr.c
+++ b/src/ap/ieee802_11_uhr.c
@@ -30,7 +30,7 @@ size_t hostapd_eid_uhr_capab_len(struct hostapd_data *hapd,
 		return 0;
 
 	if (uhr_cap->mac[1] & IEEE80211_UHR_MAC_CAP1_DBE_SUPP)
-		len++;
+		len += 3;
 
 	return len;
 }
@@ -93,6 +93,8 @@ u8 * hostapd_eid_uhr_capab(struct hostapd_data *hapd, u8 *eid,
 		 * even if operating in a lower bandwidth.
 		 */
 		*pos++ = dbe_bw;
+		*pos++ = 0; /* switch time period */
+		*pos++ = 0; /* mode change interval */
 	}
 
 	*length_pos = pos - (eid + 2);
@@ -123,12 +125,6 @@ u8 * hostapd_eid_uhr_operation(struct hostapd_data *hapd, u8 *eid, bool beacon)
 		oper_ctrl |= dbe_bw;
 	}
 
-	/* TODO: Fill in appropriate UHR-MCS max Nss information */
-	oper->basic_uhr_mcs_nss_set[0] = 0x11;
-	oper->basic_uhr_mcs_nss_set[1] = 0x00;
-	oper->basic_uhr_mcs_nss_set[2] = 0x00;
-	oper->basic_uhr_mcs_nss_set[3] = 0x00;
-
 	pos += sizeof(*oper);
 
 	/* UHR Operation Parameters field */
diff --git a/src/common/ieee802_11_defs.h b/src/common/ieee802_11_defs.h
index 483bde5cdd4b..5b77f5bccd63 100644
--- a/src/common/ieee802_11_defs.h
+++ b/src/common/ieee802_11_defs.h
@@ -3337,16 +3337,16 @@ struct ieee80211_uhr_capabilities {
 #define UHR_OPER_CTRL_DBE_ENA               0x0008
 #define UHR_OPER_CTRL_DBE_BW_SHIFT		4
 #define UHR_OPER_CTRL_DBE_BW_MASK           0x0070
-#define UHR_OPER_CTRL_DUO_OP_PARAMS_PRES    0x0080
-#define UHR_OPER_CTRL_DPS_OP_PARAMS_PRES    0x0100
-#define UHR_OPER_CTRL_NPCA_OP_PARAMS_PRES   0x0200
-#define UHR_OPER_CTRL_P_EDCA_OP_PARAMS_PRES 0x0400
-#define UHR_OPER_CTRL_DPE_OP_PARAMS_PRES    0x0800
+#define UHR_OPER_CTRL_ELR_RX                0x0080
+#define UHR_OPER_CTRL_DUO_OP_PARAMS_PRES    0x0100
+#define UHR_OPER_CTRL_DPS_OP_PARAMS_PRES    0x0200
+#define UHR_OPER_CTRL_NPCA_OP_PARAMS_PRES   0x0400
+#define UHR_OPER_CTRL_P_EDCA_OP_PARAMS_PRES 0x0800
+#define UHR_OPER_CTRL_DPE_OP_PARAMS_PRES    0x1000
 
 /* UHR Operation element format */
 struct ieee80211_uhr_operation {
 	le16 oper_ctrl; /* UHR Operation Control: UHR_OPER_CTRL_* bits */
-	u8 basic_uhr_mcs_nss_set[4];
 	/* UHR Operations Parameters - variable */
 } STRUCT_PACKED;
 
@@ -3364,14 +3364,14 @@ struct ieee80211_uhr_operation {
 #define IEEE80211_UHR_OPER_MAX_SIZE	\
 	(sizeof(struct ieee80211_uhr_operation) + 1 + 4 + 6 + 3 + 3)
 
-/* IEEE P802.11bn/D1.4, Figure 9-aa4 (NPCA Operation Parameters field format) */
-#define UHR_OPER_PARAMS_NPCA_PRI_CHAN_OFFS		0x0000000F
-#define UHR_OPER_PARAMS_NPCA_NPCA_MIN_DUR_THRESH	0x000000F0
-#define UHR_OPER_PARAMS_NPCA_NPCA_SWITCH_DELAY		0x00003F00
-#define UHR_OPER_PARAMS_NPCA_NPCA_SWITCH_BACK_DELAY	0x000FC000
-#define UHR_OPER_PARAMS_NPCA_INIT_NPCA_QRSC		0x00300000
-#define UHR_OPER_PARAMS_NPCA_MOPLEN_NPCA		0x00400000
-#define UHR_OPER_PARAMS_NPCA_DIS_SUBCH_BITMAP_PRES	0x00800000
+/* IEEE P802.11bn/D1.5, Figure 9-aa6 (NPCA Operation Parameters field format) */
+#define UHR_OPER_PARAMS_NPCA_PRI_CHAN			0x000000FF
+#define UHR_OPER_PARAMS_NPCA_NPCA_MIN_DUR_THRESH	0x00000F00
+#define UHR_OPER_PARAMS_NPCA_NPCA_SWITCH_DELAY		0x0003F000
+#define UHR_OPER_PARAMS_NPCA_NPCA_SWITCH_BACK_DELAY	0x00FC0000
+#define UHR_OPER_PARAMS_NPCA_INIT_NPCA_QRSC		0x03000000
+#define UHR_OPER_PARAMS_NPCA_MOPLEN_NPCA		0x04000000
+#define UHR_OPER_PARAMS_NPCA_DIS_SUBCH_BITMAP_PRES	0x08000000
 
 #ifdef _MSC_VER
 #pragma pack(pop)
-- 
2.55.0




More information about the Hostap mailing list