* [PATCH wireless-next] wifi: radiotap: add definitions for the new UHR TLVs
@ 2026-04-12 12:26 Miri Korenblit
2026-04-15 12:12 ` Johannes Berg
2026-04-15 13:27 ` Pablo MARTIN-GOMEZ
0 siblings, 2 replies; 7+ messages in thread
From: Miri Korenblit @ 2026-04-12 12:26 UTC (permalink / raw)
To: linux-wireless; +Cc: Johannes Berg
From: Johannes Berg <johannes.berg@intel.com>
Add the necessary definitions to create radiotap UHR TLVs
for UHR sniffers.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
---
include/net/ieee80211_radiotap.h | 190 +++++++++++++++++++++++++++++++
1 file changed, 190 insertions(+)
diff --git a/include/net/ieee80211_radiotap.h b/include/net/ieee80211_radiotap.h
index c60867e7e43c..6c2210a253cd 100644
--- a/include/net/ieee80211_radiotap.h
+++ b/include/net/ieee80211_radiotap.h
@@ -95,6 +95,8 @@ enum ieee80211_radiotap_presence {
IEEE80211_RADIOTAP_EXT = 31,
IEEE80211_RADIOTAP_EHT_USIG = 33,
IEEE80211_RADIOTAP_EHT = 34,
+ IEEE80211_RADIOTAP_UHR_ELR = 37,
+ IEEE80211_RADIOTAP_UHR = 38,
};
/* for IEEE80211_RADIOTAP_FLAGS */
@@ -602,6 +604,194 @@ enum ieee80211_radiotap_eht_usig_tb {
IEEE80211_RADIOTAP_EHT_USIG2_TB_B20_B25_TAIL = 0xfc000000,
};
+/*
+ * ieee80211_radiotap_uhr_elr - content of UHR-ELR TLV (type 35)
+ * see https://www.radiotap.org/fields/UHR-ELR for details
+ */
+struct ieee80211_radiotap_uhr_elr {
+ __le32 known;
+ __le32 sig1, sig2, mark;
+} __packed;
+
+enum ieee80211_radiotap_uhr_elr_known {
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_VERSION_ID = 0x00000001,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_UL_DL = 0x00000002,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_MCS = 0x00000004,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_CODING = 0x00000008,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_LENGTH = 0x00000010,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_LDPC_EXTRA_OFDM_SYM = 0x00000020,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_SIG_1_CRC = 0x00000040,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_SIG_1_TAIL = 0x00000080,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_STA_ID = 0x00000100,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_DISREGARD = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_SIG_2_CRC = 0x00000400,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_SIG_2_TAIL = 0x00000800,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_SIG_1_CRC_CHECKED = 0x00001000,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_SIG_2_CRC_CHECKED = 0x00002000,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_MARK_BSS_COLOR = 0x00010000,
+};
+
+enum ieee80211_radiotap_uhr_elr_sig1 {
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_VERSION_ID = 0x00000001,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_UL_DL = 0x00000002,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_MCS = 0x00000004,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_CODING = 0x00000008,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_LENGTH = 0x00001FF0,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_LDPC_EXTRA_OFDM_SYM = 0x00002000,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_CRC = 0x0003C000,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_TAIL = 0x00FC0000,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_CRC_VALID = 0x80000000,
+};
+
+enum ieee80211_radiotap_uhr_elr_sig2 {
+ IEEE80211_RADIOTAP_UHR_ELR_SIG2_STA_ID = 0x000007FF,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG2_DISREGARD = 0x00003800,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG2_CRC = 0x0003C000,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG2_TAIL = 0x00FC0000,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG2_CRC_VALID = 0x80000000,
+};
+
+enum ieee80211_radiotap_uhr_elr_mark {
+ IEEE80211_RADIOTAP_UHR_ELR_MARK_BSS_COLOR = 0x0000003F,
+};
+
+/*
+ * ieee80211_radiotap_uhr - content of UHR TLV (type 36)
+ * see https://www.radiotap.org/fields/UHR for details
+ */
+struct ieee80211_radiotap_uhr {
+ __le32 known;
+ __le32 data[9];
+ struct {
+ __le32 known, info;
+ } user[];
+} __packed;
+
+enum ieee80211_radiotap_uhr_known {
+ IEEE80211_RADIOTAP_UHR_KNOWN_SPATIAL_REUSE = 0x00000001,
+ IEEE80211_RADIOTAP_UHR_KNOWN_GI_LTF_SIZE = 0x00000002,
+ IEEE80211_RADIOTAP_UHR_KNOWN_NUMBER_OF_UHR_LTF_SYMBOLS = 0x00000004,
+ IEEE80211_RADIOTAP_UHR_KNOWN_LDPC_EXTRA_SYMBOL_SEGMENT = 0x00000008,
+ IEEE80211_RADIOTAP_UHR_KNOWN_PRE_FEC_PADDING_FACTOR = 0x00000010,
+ IEEE80211_RADIOTAP_UHR_KNOWN_PE_DISAMBIGUITY = 0x00000020,
+ IEEE80211_RADIOTAP_UHR_KNOWN_DISREGARD_OFDMA = 0x00000040,
+ IEEE80211_RADIOTAP_UHR_KNOWN_CRC1 = 0x00000080,
+ IEEE80211_RADIOTAP_UHR_KNOWN_TAIL1 = 0x00000100,
+ IEEE80211_RADIOTAP_UHR_KNOWN_CRC2 = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_KNOWN_TAIL2 = 0x00000400,
+ IEEE80211_RADIOTAP_UHR_KNOWN_INTERFERENCE_MITIGATION = 0x00000800,
+ IEEE80211_RADIOTAP_UHR_KNOWN_DISREGARD_NON_OFDMA = 0x00001000,
+ IEEE80211_RADIOTAP_UHR_KNOWN_NUMBER_OF_NON_OFDMA_USERS = 0x00002000,
+ IEEE80211_RADIOTAP_UHR_KNOWN_COMMON_ENCODING_BLOCK_CRC = 0x00004000,
+ IEEE80211_RADIOTAP_UHR_KNOWN_COMMON_ENCODING_BLOCK_TAIL = 0x00008000,
+ IEEE80211_RADIOTAP_UHR_KNOWN_RU_MRU_DRU_SIZE = 0x00010000,
+ IEEE80211_RADIOTAP_UHR_KNOWN_RU_MRU_INDEX = 0x00020000,
+ IEEE80211_RADIOTAP_UHR_KNOWN_DRU_RRU_ALLOC_TB_FMT = 0x00040000,
+ IEEE80211_RADIOTAP_UHR_KNOWN_PRI80_CHAN_POS = 0x00080000,
+};
+
+enum ieee80211_radiotap_uhr_data {
+ /* data[0] */
+ IEEE80211_RADIOTAP_UHR_DATA0_SPATIAL_REUSE = 0x0000000F,
+ IEEE80211_RADIOTAP_UHR_DATA0_GI_LTF_SIZE = 0x00000030,
+ IEEE80211_RADIOTAP_UHR_DATA0_NUMBER_OF_LTF_SYMBOLS = 0x00000700,
+ IEEE80211_RADIOTAP_UHR_DATA0_LDPC_EXTRA_SYMBOL_SEGMENT = 0x00000800,
+ IEEE80211_RADIOTAP_UHR_DATA0_PRE_FEC_PADDING_FACTOR = 0x00003000,
+ IEEE80211_RADIOTAP_UHR_DATA0_PE_DISAMBIGUITY = 0x00004000,
+ IEEE80211_RADIOTAP_UHR_DATA0_DISREGARD_OFDMA = 0x00078000,
+ IEEE80211_RADIOTAP_UHR_DATA0_CRC1 = 0x00780000,
+ IEEE80211_RADIOTAP_UHR_DATA0_TAIL1 = 0x1f800000,
+ /* data[1] */
+ IEEE80211_RADIOTAP_UHR_DATA1_RU_MRU_DRU_SIZE = 0x0000001f,
+ IEEE80211_RADIOTAP_UHR_DATA1_RU_MRU_INDEX = 0x00001fe0,
+ IEEE80211_RADIOTAP_UHR_DATA1_RU_ALLOC_CC_1_1_1 = 0x003fe000,
+ IEEE80211_RADIOTAP_UHR_DATA1_RU_ALLOC_CC_1_1_1_KNOWN = 0x00400000,
+ IEEE80211_RADIOTAP_UHR_DATA1_PRI80_CHAN_POS = 0xc0000000,
+ /* data[2] */
+ IEEE80211_RADIOTAP_UHR_DATA2_RU_ALLOC_CC_2_1_1 = 0x000001ff,
+ IEEE80211_RADIOTAP_UHR_DATA2_RU_ALLOC_CC_2_1_1_KNOWN = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_DATA2_RU_ALLOC_CC_1_1_2 = 0x0007fc00,
+ IEEE80211_RADIOTAP_UHR_DATA2_RU_ALLOC_CC_1_1_2_KNOWN = 0x00080000,
+ IEEE80211_RADIOTAP_UHR_DATA2_RU_ALLOC_CC_2_1_2 = 0x1ff00000,
+ IEEE80211_RADIOTAP_UHR_DATA2_RU_ALLOC_CC_2_1_2_KNOWN = 0x20000000,
+ /* data[3] */
+ IEEE80211_RADIOTAP_UHR_DATA3_RU_ALLOC_CC_1_2_1 = 0x000001ff,
+ IEEE80211_RADIOTAP_UHR_DATA3_RU_ALLOC_CC_1_2_1_KNOWN = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_DATA3_RU_ALLOC_CC_2_2_1 = 0x0007fc00,
+ IEEE80211_RADIOTAP_UHR_DATA3_RU_ALLOC_CC_2_2_1_KNOWN = 0x00080000,
+ IEEE80211_RADIOTAP_UHR_DATA3_RU_ALLOC_CC_1_2_2 = 0x1ff00000,
+ IEEE80211_RADIOTAP_UHR_DATA3_RU_ALLOC_CC_1_2_2_KNOWN = 0x20000000,
+ /* data[4] */
+ IEEE80211_RADIOTAP_UHR_DATA4_RU_ALLOC_CC_2_2_2 = 0x000001ff,
+ IEEE80211_RADIOTAP_UHR_DATA4_RU_ALLOC_CC_2_2_2_KNOWN = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_DATA4_RU_ALLOC_CC_1_2_3 = 0x0007fc00,
+ IEEE80211_RADIOTAP_UHR_DATA4_RU_ALLOC_CC_1_2_3_KNOWN = 0x00080000,
+ IEEE80211_RADIOTAP_UHR_DATA4_RU_ALLOC_CC_2_2_3 = 0x1ff00000,
+ IEEE80211_RADIOTAP_UHR_DATA4_RU_ALLOC_CC_2_2_3_KNOWN = 0x20000000,
+ /* data[5] */
+ IEEE80211_RADIOTAP_UHR_DATA5_RU_ALLOC_CC_1_2_4 = 0x000001ff,
+ IEEE80211_RADIOTAP_UHR_DATA5_RU_ALLOC_CC_1_2_4_KNOWN = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_DATA5_RU_ALLOC_CC_2_2_4 = 0x0007fc00,
+ IEEE80211_RADIOTAP_UHR_DATA5_RU_ALLOC_CC_2_2_4_KNOWN = 0x00080000,
+ IEEE80211_RADIOTAP_UHR_DATA5_RU_ALLOC_CC_1_2_5 = 0x1ff00000,
+ IEEE80211_RADIOTAP_UHR_DATA5_RU_ALLOC_CC_1_2_5_KNOWN = 0x20000000,
+ /* data[6] */
+ IEEE80211_RADIOTAP_UHR_DATA6_RU_ALLOC_CC_2_2_5 = 0x000001ff,
+ IEEE80211_RADIOTAP_UHR_DATA6_RU_ALLOC_CC_2_2_5_KNOWN = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_DATA6_RU_ALLOC_CC_1_2_6 = 0x0007fc00,
+ IEEE80211_RADIOTAP_UHR_DATA6_RU_ALLOC_CC_1_2_6_KNOWN = 0x00080000,
+ IEEE80211_RADIOTAP_UHR_DATA6_RU_ALLOC_CC_2_2_6 = 0x1ff00000,
+ IEEE80211_RADIOTAP_UHR_DATA6_RU_ALLOC_CC_2_2_6_KNOWN = 0x20000000,
+ /* data[7] */
+ IEEE80211_RADIOTAP_UHR_DATA7_CRC2 = 0x0000000f,
+ IEEE80211_RADIOTAP_UHR_DATA7_TAIL2 = 0x000003f0,
+ IEEE80211_RADIOTAP_UHR_DATA7_INTERFERENCE_MITIGATION = 0x00000400,
+ IEEE80211_RADIOTAP_UHR_DATA7_DISREGARD_NON_OFDMA = 0x00001800,
+ IEEE80211_RADIOTAP_UHR_DATA7_NUMBER_OF_NON_OFDMA_USERS = 0x0000e000,
+ IEEE80211_RADIOTAP_UHR_DATA7_COMMON_ENCODING_BLOCK_CRC = 0x000f0000,
+ IEEE80211_RADIOTAP_UHR_DATA7_COMMON_ENCODING_BLOCK_TAIL = 0x03f00000,
+ /* data[8] */
+ IEEE80211_RADIOTAP_UHR_DATA8_DRU_RRU_ALLOC_TB_FMT_PS_160= 0x00000001,
+ IEEE80211_RADIOTAP_UHR_DATA8_DRU_RRU_ALLOC_TB_FMT_B0 = 0x00000002,
+ IEEE80211_RADIOTAP_UHR_DATA8_DRU_RRU_ALLOC_TB_FMT_B7_B1 = 0x000001fc,
+ IEEE80211_RADIOTAP_UHR_DATA8_DRU_RRU_INDICATION = 0x00000200,
+};
+
+enum ieee80211_radiotap_uhr_user_known {
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_STA_ID = 0x00000001,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_MCS = 0x00000002,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_NSS = 0x00000004,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_UEQM = 0x00000008,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_BF = 0x00000010,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_CODING = 0x00000020,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_UEQM_PATTERN = 0x00000040,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_2X_LDPC = 0x00000080,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_SPATIAL_CONFIG = 0x00000100,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_DISREGARD = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_BSS_COLOR_INDICATION = 0x00000400,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_USR_ENC_BLK_CRC = 0x00000800,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_USR_ENC_BLK_TAIL = 0x00001000,
+ /* really 'known' but actual data */
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_DATA_USR_ENC_BLK_CRC = 0x000f0000,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_DATA_USR_ENC_BLK_TAIL = 0x03f00000,
+ /* indicates this user was captured */
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_USER_CAPTURED = 0x80000000,
+};
+
+enum ieee80211_radiotap_uhr_user_info {
+ IEEE80211_RADIOTAP_UHR_USER_INFO_STA_ID = 0x000007ff,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_MCS = 0x0000f800,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_NSS = 0x00070000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_SPATIAL_CONFIG = 0x000f0000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_UEQM = 0x00100000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_DISREGARD = 0x00100000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_BF = 0x00200000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_BSS_COLOR_INDICATION = 0x00200000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_UEQM_PATTERN = 0x00c00000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_CODING = 0x01000000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_2X_LDPC = 0x02000000,
+};
+
/**
* ieee80211_get_radiotap_len - get radiotap header length
* @data: pointer to the header
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH wireless-next] wifi: radiotap: add definitions for the new UHR TLVs
2026-04-12 12:26 [PATCH wireless-next] wifi: radiotap: add definitions for the new UHR TLVs Miri Korenblit
@ 2026-04-15 12:12 ` Johannes Berg
2026-04-15 13:27 ` Pablo MARTIN-GOMEZ
1 sibling, 0 replies; 7+ messages in thread
From: Johannes Berg @ 2026-04-15 12:12 UTC (permalink / raw)
To: Miri Korenblit, linux-wireless
On Sun, 2026-04-12 at 15:26 +0300, Miri Korenblit wrote:
> From: Johannes Berg <johannes.berg@intel.com>
>
> Add the necessary definitions to create radiotap UHR TLVs
> for UHR sniffers.
Any particular reason you resent this? v2+changelog would be nice then,
but I guess I'll drop the older version now.
johannes
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH wireless-next] wifi: radiotap: add definitions for the new UHR TLVs
2026-04-12 12:26 [PATCH wireless-next] wifi: radiotap: add definitions for the new UHR TLVs Miri Korenblit
2026-04-15 12:12 ` Johannes Berg
@ 2026-04-15 13:27 ` Pablo MARTIN-GOMEZ
2026-04-15 14:54 ` Johannes Berg
1 sibling, 1 reply; 7+ messages in thread
From: Pablo MARTIN-GOMEZ @ 2026-04-15 13:27 UTC (permalink / raw)
To: Miri Korenblit, linux-wireless; +Cc: Johannes Berg
Hello,
On 12/04/2026 14:26, Miri Korenblit wrote:
> From: Johannes Berg <johannes.berg@intel.com>
>
> Add the necessary definitions to create radiotap UHR TLVs
> for UHR sniffers.
>
> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
> Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
> ---
> include/net/ieee80211_radiotap.h | 190 +++++++++++++++++++++++++++++++
> 1 file changed, 190 insertions(+)
>
> diff --git a/include/net/ieee80211_radiotap.h b/include/net/ieee80211_radiotap.h
> index c60867e7e43c..6c2210a253cd 100644
> --- a/include/net/ieee80211_radiotap.h
> +++ b/include/net/ieee80211_radiotap.h
> @@ -95,6 +95,8 @@ enum ieee80211_radiotap_presence {
> IEEE80211_RADIOTAP_EXT = 31,
> IEEE80211_RADIOTAP_EHT_USIG = 33,
> IEEE80211_RADIOTAP_EHT = 34,
> + IEEE80211_RADIOTAP_UHR_ELR = 37,
> + IEEE80211_RADIOTAP_UHR = 38,
Why are the values 37 and 38 but below in the doc 35 and 38?
> };
>
> /* for IEEE80211_RADIOTAP_FLAGS */
> @@ -602,6 +604,194 @@ enum ieee80211_radiotap_eht_usig_tb {
> IEEE80211_RADIOTAP_EHT_USIG2_TB_B20_B25_TAIL = 0xfc000000,
> };
>
> +/*
> + * ieee80211_radiotap_uhr_elr - content of UHR-ELR TLV (type 35)
> + * see https://www.radiotap.org/fields/UHR-ELR for details
The URL gives a error 404
> + */
> +struct ieee80211_radiotap_uhr_elr {
> + __le32 known;
> + __le32 sig1, sig2, mark;
> +} __packed;
> +
[...]
> +
> +/*
> + * ieee80211_radiotap_uhr - content of UHR TLV (type 36)
> + * see https://www.radiotap.org/fields/UHR for details
Error 404
> + */
> +struct ieee80211_radiotap_uhr {
> + __le32 known;
> + __le32 data[9];
> + struct {
> + __le32 known, info;
> + } user[];
> +} __packed;
> +
> +enum ieee80211_radiotap_uhr_known {
> + IEEE80211_RADIOTAP_UHR_KNOWN_SPATIAL_REUSE = 0x00000001,
> + IEEE80211_RADIOTAP_UHR_KNOWN_GI_LTF_SIZE = 0x00000002,
> + IEEE80211_RADIOTAP_UHR_KNOWN_NUMBER_OF_UHR_LTF_SYMBOLS = 0x00000004,
> + IEEE80211_RADIOTAP_UHR_KNOWN_LDPC_EXTRA_SYMBOL_SEGMENT = 0x00000008,
> + IEEE80211_RADIOTAP_UHR_KNOWN_PRE_FEC_PADDING_FACTOR = 0x00000010,
> + IEEE80211_RADIOTAP_UHR_KNOWN_PE_DISAMBIGUITY = 0x00000020,
> + IEEE80211_RADIOTAP_UHR_KNOWN_DISREGARD_OFDMA = 0x00000040,
> + IEEE80211_RADIOTAP_UHR_KNOWN_CRC1 = 0x00000080,
> + IEEE80211_RADIOTAP_UHR_KNOWN_TAIL1 = 0x00000100,
> + IEEE80211_RADIOTAP_UHR_KNOWN_CRC2 = 0x00000200,
> + IEEE80211_RADIOTAP_UHR_KNOWN_TAIL2 = 0x00000400,
> + IEEE80211_RADIOTAP_UHR_KNOWN_INTERFERENCE_MITIGATION = 0x00000800,
> + IEEE80211_RADIOTAP_UHR_KNOWN_DISREGARD_NON_OFDMA = 0x00001000,
> + IEEE80211_RADIOTAP_UHR_KNOWN_NUMBER_OF_NON_OFDMA_USERS = 0x00002000,
> + IEEE80211_RADIOTAP_UHR_KNOWN_COMMON_ENCODING_BLOCK_CRC = 0x00004000,
> + IEEE80211_RADIOTAP_UHR_KNOWN_COMMON_ENCODING_BLOCK_TAIL = 0x00008000,
> + IEEE80211_RADIOTAP_UHR_KNOWN_RU_MRU_DRU_SIZE = 0x00010000,
> + IEEE80211_RADIOTAP_UHR_KNOWN_RU_MRU_INDEX = 0x00020000,
> + IEEE80211_RADIOTAP_UHR_KNOWN_DRU_RRU_ALLOC_TB_FMT = 0x00040000,
> + IEEE80211_RADIOTAP_UHR_KNOWN_PRI80_CHAN_POS = 0x00080000,
> +};
In the other radiotap fields, the `known` fields are (as far as I
checked) have the same order than the data, but here, for example,
`PRI80_CHAN_POS` is before `INTERFERENCE_MITIGATION ` in `known` but
after in `data`. Any reason for that?
[...]
Pablo MG
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH wireless-next] wifi: radiotap: add definitions for the new UHR TLVs
2026-04-15 13:27 ` Pablo MARTIN-GOMEZ
@ 2026-04-15 14:54 ` Johannes Berg
2026-04-15 15:10 ` Pablo MARTIN-GOMEZ
0 siblings, 1 reply; 7+ messages in thread
From: Johannes Berg @ 2026-04-15 14:54 UTC (permalink / raw)
To: Pablo MARTIN-GOMEZ, Miri Korenblit, linux-wireless
On Wed, 2026-04-15 at 15:27 +0200, Pablo MARTIN-GOMEZ wrote:
>
> > + IEEE80211_RADIOTAP_UHR_ELR = 37,
> > + IEEE80211_RADIOTAP_UHR = 38,
> Why are the values 37 and 38 but below in the doc 35 and 38?
The doc doesn't even exist yet as you say? Other things are being
assigned to 35/36.
> > +/*
> > + * ieee80211_radiotap_uhr_elr - content of UHR-ELR TLV (type 35)
> > + * see https://www.radiotap.org/fields/UHR-ELR for details
> The URL gives a error 404
Yeah it's not merged yet. For now you can see the (draft) at
https://jmberg.github.io/radiotap.github.io/fields/UHR-ELR (etc)
> > +enum ieee80211_radiotap_uhr_known {
> > + IEEE80211_RADIOTAP_UHR_KNOWN_SPATIAL_REUSE = 0x00000001,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_GI_LTF_SIZE = 0x00000002,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_NUMBER_OF_UHR_LTF_SYMBOLS = 0x00000004,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_LDPC_EXTRA_SYMBOL_SEGMENT = 0x00000008,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_PRE_FEC_PADDING_FACTOR = 0x00000010,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_PE_DISAMBIGUITY = 0x00000020,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_DISREGARD_OFDMA = 0x00000040,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_CRC1 = 0x00000080,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_TAIL1 = 0x00000100,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_CRC2 = 0x00000200,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_TAIL2 = 0x00000400,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_INTERFERENCE_MITIGATION = 0x00000800,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_DISREGARD_NON_OFDMA = 0x00001000,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_NUMBER_OF_NON_OFDMA_USERS = 0x00002000,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_COMMON_ENCODING_BLOCK_CRC = 0x00004000,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_COMMON_ENCODING_BLOCK_TAIL = 0x00008000,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_RU_MRU_DRU_SIZE = 0x00010000,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_RU_MRU_INDEX = 0x00020000,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_DRU_RRU_ALLOC_TB_FMT = 0x00040000,
> > + IEEE80211_RADIOTAP_UHR_KNOWN_PRI80_CHAN_POS = 0x00080000,
> > +};
> In the other radiotap fields, the `known` fields are (as far as I
> checked) have the same order than the data, but here, for example,
> `PRI80_CHAN_POS` is before `INTERFERENCE_MITIGATION ` in `known` but
> after in `data`. Any reason for that?
Any reason you care? ;-) I think I just assigned them in the order I
needed them, and in this case you really should look at the radiotap
spec for it too. Some of it may also be due to having copied some things
from EHT and then filling gaps with new bits, perhaps. Since other
people are already working on wireshark support etc. I don't think we'll
be changing this without a good reason.
johannes
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH wireless-next] wifi: radiotap: add definitions for the new UHR TLVs
2026-04-15 14:54 ` Johannes Berg
@ 2026-04-15 15:10 ` Pablo MARTIN-GOMEZ
2026-04-15 15:42 ` Johannes Berg
0 siblings, 1 reply; 7+ messages in thread
From: Pablo MARTIN-GOMEZ @ 2026-04-15 15:10 UTC (permalink / raw)
To: Johannes Berg, Miri Korenblit, linux-wireless
On 15/04/2026 16:54, Johannes Berg wrote:
> On Wed, 2026-04-15 at 15:27 +0200, Pablo MARTIN-GOMEZ wrote:
>>
>>> + IEEE80211_RADIOTAP_UHR_ELR = 37,
>>> + IEEE80211_RADIOTAP_UHR = 38,
>> Why are the values 37 and 38 but below in the doc 35 and 38?
>
> The doc doesn't even exist yet as you say? Other things are being
> assigned to 35/36.
I wasn't clear, I didn't mean the doc like the actual documentation but
the code comments that are used to document the defined value, e.g.
`ieee80211_radiotap_uhr_elr - content of UHR-ELR TLV (type 35)`, it
should be `type 37`, no?
>
>>> +/*
>>> + * ieee80211_radiotap_uhr_elr - content of UHR-ELR TLV (type 35)
>>> + * see https://www.radiotap.org/fields/UHR-ELR for details
>> The URL gives a error 404
>
> Yeah it's not merged yet. For now you can see the (draft) at
> https://jmberg.github.io/radiotap.github.io/fields/UHR-ELR (etc)
Thanks for a working URL :)
>
>>> +enum ieee80211_radiotap_uhr_known {
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_SPATIAL_REUSE = 0x00000001,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_GI_LTF_SIZE = 0x00000002,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_NUMBER_OF_UHR_LTF_SYMBOLS = 0x00000004,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_LDPC_EXTRA_SYMBOL_SEGMENT = 0x00000008,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_PRE_FEC_PADDING_FACTOR = 0x00000010,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_PE_DISAMBIGUITY = 0x00000020,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_DISREGARD_OFDMA = 0x00000040,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_CRC1 = 0x00000080,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_TAIL1 = 0x00000100,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_CRC2 = 0x00000200,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_TAIL2 = 0x00000400,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_INTERFERENCE_MITIGATION = 0x00000800,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_DISREGARD_NON_OFDMA = 0x00001000,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_NUMBER_OF_NON_OFDMA_USERS = 0x00002000,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_COMMON_ENCODING_BLOCK_CRC = 0x00004000,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_COMMON_ENCODING_BLOCK_TAIL = 0x00008000,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_RU_MRU_DRU_SIZE = 0x00010000,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_RU_MRU_INDEX = 0x00020000,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_DRU_RRU_ALLOC_TB_FMT = 0x00040000,
>>> + IEEE80211_RADIOTAP_UHR_KNOWN_PRI80_CHAN_POS = 0x00080000,
>>> +};
>> In the other radiotap fields, the `known` fields are (as far as I
>> checked) have the same order than the data, but here, for example,
>> `PRI80_CHAN_POS` is before `INTERFERENCE_MITIGATION ` in `known` but
>> after in `data`. Any reason for that?
>
> Any reason you care? ;-) I think I just assigned them in the order I
> needed them, and in this case you really should look at the radiotap
> spec for it too. Some of it may also be due to having copied some things
> from EHT and then filling gaps with new bits, perhaps. Since other
> people are already working on wireshark support etc. I don't think we'll
> be changing this without a good reason.
Just the little brain of mine that likes when things follow expected
patterns :) But more seriously, given that I didn't have access to the
specs, the only thing I could use that could point out an issue was
comparing to the patterns of existing fields and matching `known` fields
with `data` fields.
>
> johannes
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH wireless-next] wifi: radiotap: add definitions for the new UHR TLVs
2026-04-15 15:10 ` Pablo MARTIN-GOMEZ
@ 2026-04-15 15:42 ` Johannes Berg
0 siblings, 0 replies; 7+ messages in thread
From: Johannes Berg @ 2026-04-15 15:42 UTC (permalink / raw)
To: Pablo MARTIN-GOMEZ, Miri Korenblit, linux-wireless
On Wed, 2026-04-15 at 17:10 +0200, Pablo MARTIN-GOMEZ wrote:
> On 15/04/2026 16:54, Johannes Berg wrote:
> > On Wed, 2026-04-15 at 15:27 +0200, Pablo MARTIN-GOMEZ wrote:
> > >
> > > > + IEEE80211_RADIOTAP_UHR_ELR = 37,
> > > > + IEEE80211_RADIOTAP_UHR = 38,
> > > Why are the values 37 and 38 but below in the doc 35 and 38?
> >
> > The doc doesn't even exist yet as you say? Other things are being
> > assigned to 35/36.
> I wasn't clear, I didn't mean the doc like the actual documentation but
> the code comments that are used to document the defined value, e.g.
> `ieee80211_radiotap_uhr_elr - content of UHR-ELR TLV (type 35)`, it
> should be `type 37`, no?
Ah! That would be due to last minute renumbering here, indeed it should.
> Just the little brain of mine that likes when things follow expected
> patterns :) But more seriously, given that I didn't have access to the
> specs, the only thing I could use that could point out an issue was
> comparing to the patterns of existing fields and matching `known` fields
> with `data` fields.
>
Sure, fair. I don't really remember, I do remember mostly copying from
EHT (it is necessarily similar since UHR doesn't really even define its
own MCS set etc.), and then filling in the remainder in reserved (or no
longer used) bits...
johannes
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH wireless-next] wifi: radiotap: add definitions for the new UHR TLVs
@ 2026-03-20 8:16 Miri Korenblit
0 siblings, 0 replies; 7+ messages in thread
From: Miri Korenblit @ 2026-03-20 8:16 UTC (permalink / raw)
To: linux-wireless; +Cc: Johannes Berg
From: Johannes Berg <johannes.berg@intel.com>
Add the necessary definitions to create radiotap UHR TLVs
for UHR sniffers.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
---
include/net/ieee80211_radiotap.h | 190 +++++++++++++++++++++++++++++++
1 file changed, 190 insertions(+)
diff --git a/include/net/ieee80211_radiotap.h b/include/net/ieee80211_radiotap.h
index c60867e7e43c..6c2210a253cd 100644
--- a/include/net/ieee80211_radiotap.h
+++ b/include/net/ieee80211_radiotap.h
@@ -95,6 +95,8 @@ enum ieee80211_radiotap_presence {
IEEE80211_RADIOTAP_EXT = 31,
IEEE80211_RADIOTAP_EHT_USIG = 33,
IEEE80211_RADIOTAP_EHT = 34,
+ IEEE80211_RADIOTAP_UHR_ELR = 37,
+ IEEE80211_RADIOTAP_UHR = 38,
};
/* for IEEE80211_RADIOTAP_FLAGS */
@@ -602,6 +604,194 @@ enum ieee80211_radiotap_eht_usig_tb {
IEEE80211_RADIOTAP_EHT_USIG2_TB_B20_B25_TAIL = 0xfc000000,
};
+/*
+ * ieee80211_radiotap_uhr_elr - content of UHR-ELR TLV (type 35)
+ * see https://www.radiotap.org/fields/UHR-ELR for details
+ */
+struct ieee80211_radiotap_uhr_elr {
+ __le32 known;
+ __le32 sig1, sig2, mark;
+} __packed;
+
+enum ieee80211_radiotap_uhr_elr_known {
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_VERSION_ID = 0x00000001,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_UL_DL = 0x00000002,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_MCS = 0x00000004,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_CODING = 0x00000008,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_LENGTH = 0x00000010,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_LDPC_EXTRA_OFDM_SYM = 0x00000020,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_SIG_1_CRC = 0x00000040,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_SIG_1_TAIL = 0x00000080,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_STA_ID = 0x00000100,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_DISREGARD = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_SIG_2_CRC = 0x00000400,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_SIG_2_TAIL = 0x00000800,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_SIG_1_CRC_CHECKED = 0x00001000,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_SIG_2_CRC_CHECKED = 0x00002000,
+ IEEE80211_RADIOTAP_UHR_ELR_KNOWN_MARK_BSS_COLOR = 0x00010000,
+};
+
+enum ieee80211_radiotap_uhr_elr_sig1 {
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_VERSION_ID = 0x00000001,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_UL_DL = 0x00000002,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_MCS = 0x00000004,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_CODING = 0x00000008,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_LENGTH = 0x00001FF0,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_LDPC_EXTRA_OFDM_SYM = 0x00002000,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_CRC = 0x0003C000,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_TAIL = 0x00FC0000,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG1_CRC_VALID = 0x80000000,
+};
+
+enum ieee80211_radiotap_uhr_elr_sig2 {
+ IEEE80211_RADIOTAP_UHR_ELR_SIG2_STA_ID = 0x000007FF,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG2_DISREGARD = 0x00003800,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG2_CRC = 0x0003C000,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG2_TAIL = 0x00FC0000,
+ IEEE80211_RADIOTAP_UHR_ELR_SIG2_CRC_VALID = 0x80000000,
+};
+
+enum ieee80211_radiotap_uhr_elr_mark {
+ IEEE80211_RADIOTAP_UHR_ELR_MARK_BSS_COLOR = 0x0000003F,
+};
+
+/*
+ * ieee80211_radiotap_uhr - content of UHR TLV (type 36)
+ * see https://www.radiotap.org/fields/UHR for details
+ */
+struct ieee80211_radiotap_uhr {
+ __le32 known;
+ __le32 data[9];
+ struct {
+ __le32 known, info;
+ } user[];
+} __packed;
+
+enum ieee80211_radiotap_uhr_known {
+ IEEE80211_RADIOTAP_UHR_KNOWN_SPATIAL_REUSE = 0x00000001,
+ IEEE80211_RADIOTAP_UHR_KNOWN_GI_LTF_SIZE = 0x00000002,
+ IEEE80211_RADIOTAP_UHR_KNOWN_NUMBER_OF_UHR_LTF_SYMBOLS = 0x00000004,
+ IEEE80211_RADIOTAP_UHR_KNOWN_LDPC_EXTRA_SYMBOL_SEGMENT = 0x00000008,
+ IEEE80211_RADIOTAP_UHR_KNOWN_PRE_FEC_PADDING_FACTOR = 0x00000010,
+ IEEE80211_RADIOTAP_UHR_KNOWN_PE_DISAMBIGUITY = 0x00000020,
+ IEEE80211_RADIOTAP_UHR_KNOWN_DISREGARD_OFDMA = 0x00000040,
+ IEEE80211_RADIOTAP_UHR_KNOWN_CRC1 = 0x00000080,
+ IEEE80211_RADIOTAP_UHR_KNOWN_TAIL1 = 0x00000100,
+ IEEE80211_RADIOTAP_UHR_KNOWN_CRC2 = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_KNOWN_TAIL2 = 0x00000400,
+ IEEE80211_RADIOTAP_UHR_KNOWN_INTERFERENCE_MITIGATION = 0x00000800,
+ IEEE80211_RADIOTAP_UHR_KNOWN_DISREGARD_NON_OFDMA = 0x00001000,
+ IEEE80211_RADIOTAP_UHR_KNOWN_NUMBER_OF_NON_OFDMA_USERS = 0x00002000,
+ IEEE80211_RADIOTAP_UHR_KNOWN_COMMON_ENCODING_BLOCK_CRC = 0x00004000,
+ IEEE80211_RADIOTAP_UHR_KNOWN_COMMON_ENCODING_BLOCK_TAIL = 0x00008000,
+ IEEE80211_RADIOTAP_UHR_KNOWN_RU_MRU_DRU_SIZE = 0x00010000,
+ IEEE80211_RADIOTAP_UHR_KNOWN_RU_MRU_INDEX = 0x00020000,
+ IEEE80211_RADIOTAP_UHR_KNOWN_DRU_RRU_ALLOC_TB_FMT = 0x00040000,
+ IEEE80211_RADIOTAP_UHR_KNOWN_PRI80_CHAN_POS = 0x00080000,
+};
+
+enum ieee80211_radiotap_uhr_data {
+ /* data[0] */
+ IEEE80211_RADIOTAP_UHR_DATA0_SPATIAL_REUSE = 0x0000000F,
+ IEEE80211_RADIOTAP_UHR_DATA0_GI_LTF_SIZE = 0x00000030,
+ IEEE80211_RADIOTAP_UHR_DATA0_NUMBER_OF_LTF_SYMBOLS = 0x00000700,
+ IEEE80211_RADIOTAP_UHR_DATA0_LDPC_EXTRA_SYMBOL_SEGMENT = 0x00000800,
+ IEEE80211_RADIOTAP_UHR_DATA0_PRE_FEC_PADDING_FACTOR = 0x00003000,
+ IEEE80211_RADIOTAP_UHR_DATA0_PE_DISAMBIGUITY = 0x00004000,
+ IEEE80211_RADIOTAP_UHR_DATA0_DISREGARD_OFDMA = 0x00078000,
+ IEEE80211_RADIOTAP_UHR_DATA0_CRC1 = 0x00780000,
+ IEEE80211_RADIOTAP_UHR_DATA0_TAIL1 = 0x1f800000,
+ /* data[1] */
+ IEEE80211_RADIOTAP_UHR_DATA1_RU_MRU_DRU_SIZE = 0x0000001f,
+ IEEE80211_RADIOTAP_UHR_DATA1_RU_MRU_INDEX = 0x00001fe0,
+ IEEE80211_RADIOTAP_UHR_DATA1_RU_ALLOC_CC_1_1_1 = 0x003fe000,
+ IEEE80211_RADIOTAP_UHR_DATA1_RU_ALLOC_CC_1_1_1_KNOWN = 0x00400000,
+ IEEE80211_RADIOTAP_UHR_DATA1_PRI80_CHAN_POS = 0xc0000000,
+ /* data[2] */
+ IEEE80211_RADIOTAP_UHR_DATA2_RU_ALLOC_CC_2_1_1 = 0x000001ff,
+ IEEE80211_RADIOTAP_UHR_DATA2_RU_ALLOC_CC_2_1_1_KNOWN = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_DATA2_RU_ALLOC_CC_1_1_2 = 0x0007fc00,
+ IEEE80211_RADIOTAP_UHR_DATA2_RU_ALLOC_CC_1_1_2_KNOWN = 0x00080000,
+ IEEE80211_RADIOTAP_UHR_DATA2_RU_ALLOC_CC_2_1_2 = 0x1ff00000,
+ IEEE80211_RADIOTAP_UHR_DATA2_RU_ALLOC_CC_2_1_2_KNOWN = 0x20000000,
+ /* data[3] */
+ IEEE80211_RADIOTAP_UHR_DATA3_RU_ALLOC_CC_1_2_1 = 0x000001ff,
+ IEEE80211_RADIOTAP_UHR_DATA3_RU_ALLOC_CC_1_2_1_KNOWN = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_DATA3_RU_ALLOC_CC_2_2_1 = 0x0007fc00,
+ IEEE80211_RADIOTAP_UHR_DATA3_RU_ALLOC_CC_2_2_1_KNOWN = 0x00080000,
+ IEEE80211_RADIOTAP_UHR_DATA3_RU_ALLOC_CC_1_2_2 = 0x1ff00000,
+ IEEE80211_RADIOTAP_UHR_DATA3_RU_ALLOC_CC_1_2_2_KNOWN = 0x20000000,
+ /* data[4] */
+ IEEE80211_RADIOTAP_UHR_DATA4_RU_ALLOC_CC_2_2_2 = 0x000001ff,
+ IEEE80211_RADIOTAP_UHR_DATA4_RU_ALLOC_CC_2_2_2_KNOWN = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_DATA4_RU_ALLOC_CC_1_2_3 = 0x0007fc00,
+ IEEE80211_RADIOTAP_UHR_DATA4_RU_ALLOC_CC_1_2_3_KNOWN = 0x00080000,
+ IEEE80211_RADIOTAP_UHR_DATA4_RU_ALLOC_CC_2_2_3 = 0x1ff00000,
+ IEEE80211_RADIOTAP_UHR_DATA4_RU_ALLOC_CC_2_2_3_KNOWN = 0x20000000,
+ /* data[5] */
+ IEEE80211_RADIOTAP_UHR_DATA5_RU_ALLOC_CC_1_2_4 = 0x000001ff,
+ IEEE80211_RADIOTAP_UHR_DATA5_RU_ALLOC_CC_1_2_4_KNOWN = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_DATA5_RU_ALLOC_CC_2_2_4 = 0x0007fc00,
+ IEEE80211_RADIOTAP_UHR_DATA5_RU_ALLOC_CC_2_2_4_KNOWN = 0x00080000,
+ IEEE80211_RADIOTAP_UHR_DATA5_RU_ALLOC_CC_1_2_5 = 0x1ff00000,
+ IEEE80211_RADIOTAP_UHR_DATA5_RU_ALLOC_CC_1_2_5_KNOWN = 0x20000000,
+ /* data[6] */
+ IEEE80211_RADIOTAP_UHR_DATA6_RU_ALLOC_CC_2_2_5 = 0x000001ff,
+ IEEE80211_RADIOTAP_UHR_DATA6_RU_ALLOC_CC_2_2_5_KNOWN = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_DATA6_RU_ALLOC_CC_1_2_6 = 0x0007fc00,
+ IEEE80211_RADIOTAP_UHR_DATA6_RU_ALLOC_CC_1_2_6_KNOWN = 0x00080000,
+ IEEE80211_RADIOTAP_UHR_DATA6_RU_ALLOC_CC_2_2_6 = 0x1ff00000,
+ IEEE80211_RADIOTAP_UHR_DATA6_RU_ALLOC_CC_2_2_6_KNOWN = 0x20000000,
+ /* data[7] */
+ IEEE80211_RADIOTAP_UHR_DATA7_CRC2 = 0x0000000f,
+ IEEE80211_RADIOTAP_UHR_DATA7_TAIL2 = 0x000003f0,
+ IEEE80211_RADIOTAP_UHR_DATA7_INTERFERENCE_MITIGATION = 0x00000400,
+ IEEE80211_RADIOTAP_UHR_DATA7_DISREGARD_NON_OFDMA = 0x00001800,
+ IEEE80211_RADIOTAP_UHR_DATA7_NUMBER_OF_NON_OFDMA_USERS = 0x0000e000,
+ IEEE80211_RADIOTAP_UHR_DATA7_COMMON_ENCODING_BLOCK_CRC = 0x000f0000,
+ IEEE80211_RADIOTAP_UHR_DATA7_COMMON_ENCODING_BLOCK_TAIL = 0x03f00000,
+ /* data[8] */
+ IEEE80211_RADIOTAP_UHR_DATA8_DRU_RRU_ALLOC_TB_FMT_PS_160= 0x00000001,
+ IEEE80211_RADIOTAP_UHR_DATA8_DRU_RRU_ALLOC_TB_FMT_B0 = 0x00000002,
+ IEEE80211_RADIOTAP_UHR_DATA8_DRU_RRU_ALLOC_TB_FMT_B7_B1 = 0x000001fc,
+ IEEE80211_RADIOTAP_UHR_DATA8_DRU_RRU_INDICATION = 0x00000200,
+};
+
+enum ieee80211_radiotap_uhr_user_known {
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_STA_ID = 0x00000001,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_MCS = 0x00000002,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_NSS = 0x00000004,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_UEQM = 0x00000008,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_BF = 0x00000010,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_CODING = 0x00000020,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_UEQM_PATTERN = 0x00000040,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_2X_LDPC = 0x00000080,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_SPATIAL_CONFIG = 0x00000100,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_DISREGARD = 0x00000200,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_BSS_COLOR_INDICATION = 0x00000400,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_USR_ENC_BLK_CRC = 0x00000800,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_USR_ENC_BLK_TAIL = 0x00001000,
+ /* really 'known' but actual data */
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_DATA_USR_ENC_BLK_CRC = 0x000f0000,
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_DATA_USR_ENC_BLK_TAIL = 0x03f00000,
+ /* indicates this user was captured */
+ IEEE80211_RADIOTAP_UHR_USER_KNOWN_USER_CAPTURED = 0x80000000,
+};
+
+enum ieee80211_radiotap_uhr_user_info {
+ IEEE80211_RADIOTAP_UHR_USER_INFO_STA_ID = 0x000007ff,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_MCS = 0x0000f800,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_NSS = 0x00070000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_SPATIAL_CONFIG = 0x000f0000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_UEQM = 0x00100000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_DISREGARD = 0x00100000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_BF = 0x00200000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_BSS_COLOR_INDICATION = 0x00200000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_UEQM_PATTERN = 0x00c00000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_CODING = 0x01000000,
+ IEEE80211_RADIOTAP_UHR_USER_INFO_2X_LDPC = 0x02000000,
+};
+
/**
* ieee80211_get_radiotap_len - get radiotap header length
* @data: pointer to the header
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-04-15 15:42 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-12 12:26 [PATCH wireless-next] wifi: radiotap: add definitions for the new UHR TLVs Miri Korenblit
2026-04-15 12:12 ` Johannes Berg
2026-04-15 13:27 ` Pablo MARTIN-GOMEZ
2026-04-15 14:54 ` Johannes Berg
2026-04-15 15:10 ` Pablo MARTIN-GOMEZ
2026-04-15 15:42 ` Johannes Berg
-- strict thread matches above, loose matches on Subject: below --
2026-03-20 8:16 Miri Korenblit
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox