View on GitHub

Radiotap

Introduction | defined fields | suggested fields | rejected fields | unofficially used fields

UHR

Type
38 (not assigned yet)
Structure
  • u32 known
  • u32 data[9]
  • {u32 user_known, u32 user_info}[] (Note this is variable length)
Required Alignment
4
Unit(s)
none

known

Note that for trigger-based (TB) PPDUs, the UHR-SIG isn’t present over the air as all the information for each station is provided in the trigger frame. Sniffer should - where possible - provide a subset of the OFDMA related fields to simplify understanding of the resulting capture (i.e. to be able to read it without having to go back to the prior trigger frame.)

bits OFDMA (including TB) non-OFDMA
0x00000001 Spatial Reuse Known (same)
0x00000002 GI+LTF Size Known (same)
0x00000004 Number of UHR-LTF Symbols Known (same)
0x00000008 LDPC Extra Symbol Segment Known (same)
0x00000010 Pre-FEC Padding Factor Known (same)
0x00000020 PE Disambiguity Known (same)
0x00000040 Disregard Known (reserved)
0x00000080 CRC1 Known (same)
0x00000100 Tail1 Known (same)
0x00000200 CRC2 Known (reserved)
0x00000400 Tail2 Known (reserved)
0x00000800 (reserved) Interference Mitigation Known
0x00001000 (reserved) Disregard Known
0x00002000 (reserved) Number Of Non-OFDMA Users Known
0x00004000 (reserved) Common Encoding Block CRC Known
0x00008000 (reserved) Common Encoding Block Tail Known
0x00010000 RU/MRU/DRU Size Known (same)
0x00020000 RU/MRU Index Known (same)
0x00040000 DRU/RRU Allocation (TB format) Known (reserved)
0x00080000 Primary 80 MHz Channel Position known (same)
0xfff00000 (reserved) (reserved)

Note: The “RU/MRU/DRU Size” and “RU/MRU Index” fields are provided for sniffers that cannot provide the entirety of the RU allocations and user information fields for downlink OFDMA PPDUs (which would allow knowing exactly which AID got which RU allocation), but can only provide a subset of the information. They apply only to the captured AID. It’s advantageous to provide this even when all the RU Allocaction and User Information fields are known, so the display tool need not parse all of them.

Note: For uplink OFDMA, the DRU size could also be given here for similar reasons, though the actual DRU allocation should then be given for the captured AID from the trigger frame in the DRU/RRU Allocation fields.

Some values here could also appear for non-OFDMA PPDUs.

data[0]

bits meaning
0x0000000F Spatial Reuse
0x00000030 GI+LTF Size (0=2xLTF+0.8us, 1=2xLTF+1.6us, 2=4xLTF+0.8us, 3=4xLTF+3.2us)
0x000000c0 (reserved)
0x00000700 Number of LTF symbols (0=1x, 1=2x, 2=4x, 3=6x, 4=8x, 5-7=reserved)
0x00000800 LDPC Extra Symbol Segment
0x00003000 Pre-FEC padding factor
0x00004000 PE Disambiguity
0x00078000 Disregard (OFDMA only, B13-B16)
0x00780000 CRC1 (OFDMA: B17+9N-B20+9N, non-OFDMA: B42-B45)
0x1f800000 Tail1 (OFMDA: B21+9N-B26+9N, non-OFDMA: B46-B51)
0xe0000000 (reserved)

data[1]

bits meaning
0x0000001f RU/MRU/DRU Size (0: 26, 1: 52, 2: 106, 3: 242, 4: 484, 5: 996, 6: 2x996, 7: 4x996, 8: 52+26, 9: 106+26, 10: 484+242, 11: 996+484, 12: 996+484+242, 13: 2x996+484, 14: 3x996, 15: 3x996+484)
0x00001fe0 RU/MRU Index (see IEEE 802.11 36.3.2 “Subcarrier and resource allocation”)
0x003fe000 RU Allocation 1
0x00400000 RU Allocation 1 Known
0x3f800000 (reserved)
0xc0000000 Primary 80 MHz Channel Position (0: lowest, 3: highest in frequency)

Note: The RU Allocation 1 here and other RU Allocation fields are in the downlink OFDMA format and do not represent DRUs, which are used only in uplink OFDMA. All RU allocations in uplink OFDMA are are visible only in the trigger frame, and, for the PPDU that was captured, in the other RU related fields.

Note: The RU/MRU/DRU Size and RU/MRU/DRU Index are calculated fields, ideally the sniffer should provide them for all OFDMA and punctured non-OFDMA PPDUs to simplify filtering and other data uses.

Note: The Primary 80 MHz channel position is numbered from low frequency to high frequency. Also note that it is required in order to decode the “RU Allocation (TB format)” field, since the decoding thereof requires doing the table lookup from 802.11 Table 9-65 (Lookup table for X1 and N) to have the correct values for interpretation of 802.11 Table 9-64 (Encoding of PS160 and RU Allocation subfields in an EHT variant User Info field).

data[2]-data[6]

bits meaning
0x000001ff RU Allocation X
0x00000200 RU Allocation X known
0x0007fc00 RU Allocation (X + 1)
0x00080000 RU Allocation (X + 1) known
0x1ff00000 RU Allocation (X + 2)
0x20000000 RU Allocation (X + 2) known
0xc0000000 (reserved)

RU Allocation field order

Together with the “RU Allocation 1” field from data[1], the RU Allocation fields shall be in the following order:

RU Allocation 20MHz 40MHz 80MHz 160MHz 320MHz
Content Channel 1 RU Allocation 1::1 X X X X X
Content Channel 2 RU Allocation 1::1 - X X X X
Content Channel 1 RU Allocation 1::2 - - X X X
Content Channel 2 RU Allocation 1::2 - - X X X
Content Channel 1 RU Allocation 2::1 - - - X X
Content Channel 2 RU Allocation 2::1 - - - X X
Content Channel 1 RU Allocation 2::2 - - - X X
Content Channel 2 RU Allocation 2::2 - - - X X
Content Channel 1 RU Allocation 2::3 - - - - X
Content Channel 2 RU Allocation 2::3 - - - - X
Content Channel 1 RU Allocation 2::4 - - - - X
Content Channel 2 RU Allocation 2::4 - - - - X
Content Channel 1 RU Allocation 2::5 - - - - X
Content Channel 2 RU Allocation 2::5 - - - - X
Content Channel 1 RU Allocation 2::6 - - - - X
Content Channel 2 RU Allocation 2::6 - - - - X

data[7]

bits meaning
0x0000000f CRC2 (OFDMA only: for RU Allocation-B)
0x000003f0 Tail2 (OFDMA only: after RU Allocation-B)
0x00000400 Interference Mitigation (non-OFDMA only)
0x00001800 Disregard (non-OFDMA only)
0x0000e000 Number Of Non-OFDMA Users (non-OFDMA only)
0x000f0000 Common Encoding Block CRC (non-OFDMA only, B42-B45)
0x03f00000 Common Encoding Block Tail (non-OFDMA only, B46-B51)
0xfc000000 (reserved)

data[8]

bits meaning
0x00000001 DRU/RRU Allocation (TB format): PS 160
0x00000002 DRU/RRU Allocation (TB format): B0
0x000001fc DRU/RRU Allocation (TB format): B7–B1
0x00000200 DRU/RRU Indication (0: DRU, 1: RRU)
0xfffffc00 (reserved)

Note: The 0x1ff bits here indicate the RU Allocation for the captured station (AID) in the trigger-based (TB) format, per Table 9-64 “Encoding of PS160 and RU Allocation subfields in an EHT variant User Info field”. This may be given by the sniffer even for downlink OFDMA PPDUs if calculated from the RU Allocation from EHT-SIG for the given station. Note the bit split to ease cross-referencing Table 9-64.

Note: The DRU/RRU Indication bit can only be 0 (indicating DRU) for uplink OFDMA. There’s no separate “known” bit for it since it must be given to interpret the DRU/RRU Allocation.

user entry

Each user_known and user_info entry carries information for a given user entry in the UHR preamble. If multiple user fields are captured, ideally all of them are, and they should be given in the same order as they were ordered in the frame.

Note that to simplify parsing we indicate non-MU-MIMO (e.g. OFDMA) and MU-MIMO information via separate known bits, so that parsers can show these fields without consulting other information to know the PPDU type.

The “Data captured for this user” bit indicates which user the data was captured for that this radiotap header is attached to. It should be set for exactly one user entry in the entire radiotap header, even if potentially the entire UHR field is given multiple times.

user_known

bits non-MU-MIMO / Co-SR MU-MIMO / Co-BF
0x00000001 STA-ID known (same)
0x00000002 MCS known (same)
0x00000004 NSS known (reserved)
0x00000008 UEQM known (reserved)
0x00000010 Beamforming And Coding / UEQM Pattern known (reserved)
0x00000020 2xLDPC known (same)
0x00000040 (reserved) Spatial Configuration known
0x00000080 (reserved) Disregard known
0x00000100 (reserved) Coding/BSS Color Indication known
0x00000200 User Encoding Block CRC known (same)
0x00000400 User Encoding Block Tail known (same)
0x0000f800 (reserved) (reserved)
0x000f0000 User Encoding Block CRC (B23N-B23N+3) (same)
0x03f00000 User Encoding Block Tail (B23N+4-B23N+9) (same)
0x7c000000 (reserved) (reserved)
0x80000000 Data captured for this user (same)

user_info

bits non-MU-MIMO / Co-SR MU-MIMO / Co-BF
0x000007ff STA-ID (same)
0x0001f000 MCS (same)
0x000e0000 NSS (0=1 spatial stream, 1=2 spatial streams, …) (overlap)
0x00100000 UEQM (overlap)
0x00600000 Beamforming And Coding / UEQM Pattern (overlap)
0x000f0000 (overlap) Spatial Configuration
0x00100000 (overlap) Disregard
0x00200000 (overlap) Coding/BSS Color Indication
0x00400000 (overlap) (reserved)
0x00800000 2xLDPC (same)
0xff000000 (reserved) (reserved)