1 /*- 2 * Copyright (c) 2003, 2004 David Young. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 /* 8 * Modifications to fit into the linux IEEE 802.11 stack, 9 * Mike Kershaw (dragorn@kismetwireless.net) 10 */ 11 12 #ifndef IEEE80211RADIOTAP_H 13 #define IEEE80211RADIOTAP_H 14 15 #include <glib.h> 16 17 /* Base version of the radiotap packet header data */ 18 #define PKTHDR_RADIOTAP_VERSION 0 19 20 /* A generic radio capture format is desirable. There is one for 21 * Linux, but it is neither rigidly defined (there were not even 22 * units given for some fields) nor easily extensible. 23 * 24 * I suggest the following extensible radio capture format. It is 25 * based on a bitmap indicating which fields are present. 26 * 27 * I am trying to describe precisely what the application programmer 28 * should expect in the following, and for that reason I tell the 29 * units and origin of each measurement (where it applies), or else I 30 * use sufficiently weaselly language ("is a monotonically nondecreasing 31 * function of...") that I cannot set false expectations for lawyerly 32 * readers. 33 */ 34 35 /* The radio capture header precedes the 802.11 header. 36 * All data in the header is little endian on all platforms. 37 */ 38 struct ieee80211_radiotap_header { 39 guint8 it_version; /* Version 0. Only increases 40 * for drastic changes, 41 * introduction of compatible 42 * new fields does not count. 43 */ 44 guint8 it_pad; 45 guint16 it_len; /* length of the whole 46 * header in bytes, including 47 * it_version, it_pad, 48 * it_len, and data fields. 49 */ 50 guint32 it_present; /* A bitmap telling which 51 * fields are present. Set bit 31 52 * (0x80000000) to extend the 53 * bitmap by another 32 bits. 54 * Additional extensions are made 55 * by setting bit 31. 56 */ 57 }; 58 59 /* Name Data type Units 60 * ---- --------- ----- 61 * 62 * IEEE80211_RADIOTAP_TSFT __le64 microseconds 63 * 64 * Value in microseconds of the MAC's 64-bit 802.11 Time 65 * Synchronization Function timer when the first bit of the 66 * MPDU arrived at the MAC. For received frames, only. 67 * 68 * IEEE80211_RADIOTAP_CHANNEL 2 x guint16 MHz, bitmap 69 * 70 * Tx/Rx frequency in MHz, followed by flags (see below). 71 * 72 * IEEE80211_RADIOTAP_FHSS guint16 see below 73 * 74 * For frequency-hopping radios, the hop set (first byte) 75 * and pattern (second byte). 76 * 77 * IEEE80211_RADIOTAP_RATE u8 500kb/s 78 * 79 * Tx/Rx data rate 80 * 81 * IEEE80211_RADIOTAP_DBM_ANTSIGNAL s8 decibels from 82 * one milliwatt (dBm) 83 * 84 * RF signal power at the antenna, decibel difference from 85 * one milliwatt. 86 * 87 * IEEE80211_RADIOTAP_DBM_ANTNOISE s8 decibels from 88 * one milliwatt (dBm) 89 * 90 * RF noise power at the antenna, decibel difference from one 91 * milliwatt. 92 * 93 * IEEE80211_RADIOTAP_DB_ANTSIGNAL u8 decibel (dB) 94 * 95 * RF signal power at the antenna, decibel difference from an 96 * arbitrary, fixed reference. 97 * 98 * IEEE80211_RADIOTAP_DB_ANTNOISE u8 decibel (dB) 99 * 100 * RF noise power at the antenna, decibel difference from an 101 * arbitrary, fixed reference point. 102 * 103 * IEEE80211_RADIOTAP_LOCK_QUALITY guint16 unitless 104 * 105 * Quality of Barker code lock. Unitless. Monotonically 106 * nondecreasing with "better" lock strength. Called "Signal 107 * Quality" in datasheets. (Is there a standard way to measure 108 * this?) 109 * 110 * IEEE80211_RADIOTAP_TX_ATTENUATION guint16 unitless 111 * 112 * Transmit power expressed as unitless distance from max 113 * power set at factory calibration. 0 is max power. 114 * Monotonically nondecreasing with lower power levels. 115 * 116 * IEEE80211_RADIOTAP_DB_TX_ATTENUATION guint16 decibels (dB) 117 * 118 * Transmit power expressed as decibel distance from max power 119 * set at factory calibration. 0 is max power. Monotonically 120 * nondecreasing with lower power levels. 121 * 122 * IEEE80211_RADIOTAP_DBM_TX_POWER s8 decibels from 123 * one milliwatt (dBm) 124 * 125 * Transmit power expressed as dBm (decibels from a 1 milliwatt 126 * reference). This is the absolute power level measured at 127 * the antenna port. 128 * 129 * IEEE80211_RADIOTAP_FLAGS u8 bitmap 130 * 131 * Properties of transmitted and received frames. See flags 132 * defined below. 133 * 134 * IEEE80211_RADIOTAP_ANTENNA u8 antenna index 135 * 136 * Unitless indication of the Rx/Tx antenna for this packet. 137 * The first antenna is antenna 0. 138 * 139 * IEEE80211_RADIOTAP_RX_FLAGS guint16 bitmap 140 * 141 * Properties of received frames. See flags defined below. 142 * 143 * IEEE80211_RADIOTAP_TX_FLAGS guint16 bitmap 144 * 145 * Properties of transmitted frames. See flags defined below. 146 * 147 * IEEE80211_RADIOTAP_RTS_RETRIES u8 data 148 * 149 * Number of rts retries a transmitted frame used. 150 * 151 * IEEE80211_RADIOTAP_DATA_RETRIES u8 data 152 * 153 * Number of unicast retries a transmitted frame used. 154 * 155 * IEEE80211_RADIOTAP_MCS u8, u8, u8 unitless 156 * 157 * Contains a bitmap of known fields/flags, the flags, and 158 * the MCS index. 159 * 160 * IEEE80211_RADIOTAP_AMPDU_STATUS u32, u16, u8, u8 unitlesss 161 * 162 * Contains the AMPDU information for the subframe. 163 * 164 * IEEE80211_RADIOTAP_HE u16, u16, u16, u16, u16, u16 unitless 165 * Contains some information for HE frames. 166 * 167 * IEEE80211_RADIOTAP_HE_MU U16, U16, u8[4] unitless 168 * 169 * IEEE80211_RADIOTAP_HE_MU_USER 170 * 171 * IEEE80211_RADIOTAP_0_LENGTH_PSDU 172 * 173 * IEEE80211_RADIOTAP_L_SIG 174 * 175 * IEEE80211_RADIOTAP_TLVS_PRESENT 176 * 177 * THERE ARE NO MORE BITS FREE! If you need a new radiotap header you must 178 * ask for a TLV value. See www.radiotap.org. 179 * 180 */ 181 enum ieee80211_radiotap_type { 182 IEEE80211_RADIOTAP_TSFT = 0, 183 IEEE80211_RADIOTAP_FLAGS = 1, 184 IEEE80211_RADIOTAP_RATE = 2, 185 IEEE80211_RADIOTAP_CHANNEL = 3, 186 IEEE80211_RADIOTAP_FHSS = 4, 187 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5, 188 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6, 189 IEEE80211_RADIOTAP_LOCK_QUALITY = 7, 190 IEEE80211_RADIOTAP_TX_ATTENUATION = 8, 191 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9, 192 IEEE80211_RADIOTAP_DBM_TX_POWER = 10, 193 IEEE80211_RADIOTAP_ANTENNA = 11, 194 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12, 195 IEEE80211_RADIOTAP_DB_ANTNOISE = 13, 196 IEEE80211_RADIOTAP_RX_FLAGS = 14, 197 IEEE80211_RADIOTAP_TX_FLAGS = 15, 198 IEEE80211_RADIOTAP_RTS_RETRIES = 16, 199 IEEE80211_RADIOTAP_DATA_RETRIES = 17, 200 IEEE80211_RADIOTAP_XCHANNEL = 18, /* Unofficial, used by FreeBSD */ 201 IEEE80211_RADIOTAP_MCS = 19, 202 IEEE80211_RADIOTAP_AMPDU_STATUS = 20, 203 IEEE80211_RADIOTAP_VHT = 21, 204 IEEE80211_RADIOTAP_TIMESTAMP = 22, 205 IEEE80211_RADIOTAP_HE = 23, 206 IEEE80211_RADIOTAP_HE_MU = 24, 207 IEEE80211_RAFIOTAP_HE_MU_USER = 25, 208 IEEE80211_RADIOTAP_0_LENGTH_PSDU = 26, 209 IEEE80211_RADIOTAP_L_SIG = 27, 210 IEEE80211_RADIOTAP_TLVS = 28, 211 212 /* valid in every it_present bitmap, even vendor namespaces */ 213 IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE = 29, 214 IEEE80211_RADIOTAP_VENDOR_NAMESPACE = 30, 215 IEEE80211_RADIOTAP_EXT = 31 216 }; 217 218 struct ieee80211_radiotap_tlv { 219 guint16 type; 220 guint16 datalen; 221 guint8 data[]; 222 }; 223 224 /* Channel flags. */ 225 /* 0x00000008 undefined (reserved?) */ 226 #define IEEE80211_CHAN_700MHZ 0x00000001 /* S1G 700 MHz spectrum channel. */ 227 #define IEEE80211_CHAN_800MHZ 0x00000002 /* S1G 800 MHz spectrum channel. */ 228 #define IEEE80211_CHAN_900MHZ 0x00000004 /* S1G 900 MHz spectrum channel. */ 229 #define IEEE80211_CHAN_TURBO 0x00000010 /* Turbo channel */ 230 #define IEEE80211_CHAN_CCK 0x00000020 /* CCK channel */ 231 #define IEEE80211_CHAN_OFDM 0x00000040 /* OFDM channel */ 232 #define IEEE80211_CHAN_2GHZ 0x00000080 /* 2 GHz spectrum channel. */ 233 #define IEEE80211_CHAN_5GHZ 0x00000100 /* 5 GHz spectrum channel */ 234 #define IEEE80211_CHAN_PASSIVE 0x00000200 /* Only passive scan allowed */ 235 #define IEEE80211_CHAN_DYN 0x00000400 /* Dynamic CCK-OFDM channel */ 236 #define IEEE80211_CHAN_GFSK 0x00000800 /* GFSK channel (FHSS PHY) */ 237 238 /* Additional XChannel flags. */ 239 #define IEEE80211_CHAN_GSM 0x00001000 /* 900 MHz spectrum channel */ 240 #define IEEE80211_CHAN_STURBO 0x00002000 /* 11a static turbo channel only */ 241 #define IEEE80211_CHAN_HALF 0x00004000 /* Half rate channel */ 242 #define IEEE80211_CHAN_QUARTER 0x00008000 /* Quarter rate channel */ 243 #define IEEE80211_CHAN_HT20 0x00010000 /* HT 20 channel */ 244 #define IEEE80211_CHAN_HT40U 0x00020000 /* HT 40 channel w/ ext above */ 245 #define IEEE80211_CHAN_HT40D 0x00040000 /* HT 40 channel w/ ext below */ 246 247 #define IEEE80211_CHAN_HT40 (IEEE80211_CHAN_HT40U | IEEE80211_CHAN_HT40D) 248 #define IEEE80211_CHAN_HT (IEEE80211_CHAN_HT20 | IEEE80211_CHAN_HT40) 249 #define IEEE80211_CHAN_S1G \ 250 (IEEE80211_CHAN_700MHZ | IEEE80211_CHAN_800MHZ | \ 251 IEEE80211_CHAN_900MHZ) 252 253 #define IEEE80211_CHAN_ALL \ 254 (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_GFSK | \ 255 IEEE80211_CHAN_700MHZ | IEEE80211_CHAN_800MHZ | \ 256 IEEE80211_CHAN_900MHZ | \ 257 IEEE80211_CHAN_CCK | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_DYN | \ 258 IEEE80211_CHAN_HALF | IEEE80211_CHAN_QUARTER | \ 259 IEEE80211_CHAN_HT) 260 #define IEEE80211_CHAN_ALLTURBO \ 261 (IEEE80211_CHAN_ALL | IEEE80211_CHAN_TURBO | IEEE80211_CHAN_STURBO) 262 263 /* For IEEE80211_RADIOTAP_FLAGS */ 264 #define IEEE80211_RADIOTAP_F_CFP 0x01 /* sent/received 265 * during CFP 266 */ 267 #define IEEE80211_RADIOTAP_F_SHORTPRE 0x02 /* sent/received 268 * with short 269 * preamble 270 */ 271 #define IEEE80211_RADIOTAP_F_WEP 0x04 /* sent/received 272 * with WEP encryption 273 */ 274 #define IEEE80211_RADIOTAP_F_FRAG 0x08 /* sent/received 275 * with fragmentation 276 */ 277 #define IEEE80211_RADIOTAP_F_FCS 0x10 /* frame includes FCS */ 278 #define IEEE80211_RADIOTAP_F_DATAPAD 0x20 /* frame has padding between 279 * 802.11 header and payload 280 * (to 32-bit boundary) 281 */ 282 #define IEEE80211_RADIOTAP_F_BADFCS 0x40 /* frame failed FCS check */ 283 284 /* For IEEE80211_RADIOTAP_RX_FLAGS */ 285 #define IEEE80211_RADIOTAP_F_RX_BADPLCP 0x0002 /* bad PLCP */ 286 287 /* For IEEE80211_RADIOTAP_TX_FLAGS */ 288 #define IEEE80211_RADIOTAP_F_TX_FAIL 0x0001 /* failed due to excessive 289 * retries */ 290 #define IEEE80211_RADIOTAP_F_TX_CTS 0x0002 /* used cts 'protection' */ 291 #define IEEE80211_RADIOTAP_F_TX_RTS 0x0004 /* used rts/cts handshake */ 292 #define IEEE80211_RADIOTAP_F_TX_NOACK 0x0008 /* don't expect ACK */ 293 #define IEEE80211_RADIOTAP_F_TX_NOSEQNO 0x0010 /* don't overwrite sequence 294 * number */ 295 #define IEEE80211_RADIOTAP_F_TX_ORDER 0x0020 /* don't reorder injected 296 * frames relative to other 297 * frames with this flag */ 298 299 /* For IEEE80211_RADIOTAP_MCS */ 300 #define IEEE80211_RADIOTAP_MCS_HAVE_BW 0x01 301 #define IEEE80211_RADIOTAP_MCS_HAVE_MCS 0x02 302 #define IEEE80211_RADIOTAP_MCS_HAVE_GI 0x04 303 #define IEEE80211_RADIOTAP_MCS_HAVE_FMT 0x08 304 #define IEEE80211_RADIOTAP_MCS_HAVE_FEC 0x10 305 #define IEEE80211_RADIOTAP_MCS_HAVE_STBC 0x20 306 #define IEEE80211_RADIOTAP_MCS_HAVE_NESS 0x40 307 #define IEEE80211_RADIOTAP_MCS_NESS_BIT1 0x80 308 309 #define IEEE80211_RADIOTAP_MCS_BW_MASK 0x03 310 #define IEEE80211_RADIOTAP_MCS_BW_20 0 311 #define IEEE80211_RADIOTAP_MCS_BW_40 1 312 #define IEEE80211_RADIOTAP_MCS_BW_20L 2 313 #define IEEE80211_RADIOTAP_MCS_BW_20U 3 314 #define IEEE80211_RADIOTAP_MCS_SGI 0x04 315 #define IEEE80211_RADIOTAP_MCS_FMT_GF 0x08 316 #define IEEE80211_RADIOTAP_MCS_FEC_LDPC 0x10 317 #define IEEE80211_RADIOTAP_MCS_STBC_MASK 0x60 318 #define IEEE80211_RADIOTAP_MCS_STBC_SHIFT 5 319 #define IEEE80211_RADIOTAP_MCS_STBC_1 1 320 #define IEEE80211_RADIOTAP_MCS_STBC_2 2 321 #define IEEE80211_RADIOTAP_MCS_STBC_3 3 322 #define IEEE80211_RADIOTAP_MCS_NESS_BIT0 0x80 323 324 /* For IEEE80211_RADIOTAP_AMPDU_STATUS */ 325 #define IEEE80211_RADIOTAP_AMPDU_REPORT_ZEROLEN 0x0001 326 #define IEEE80211_RADIOTAP_AMPDU_IS_ZEROLEN 0x0002 327 #define IEEE80211_RADIOTAP_AMPDU_LAST_KNOWN 0x0004 328 #define IEEE80211_RADIOTAP_AMPDU_IS_LAST 0x0008 329 #define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR 0x0010 330 #define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN 0x0020 331 #define IEEE80211_RADIOTAP_AMPDU_EOF 0x0040 332 #define IEEE80211_RADIOTAP_AMPDU_EOF_KNOWN 0x0080 333 334 /* For IEEE80211_RADIOTAP_VHT */ 335 #define IEEE80211_RADIOTAP_VHT_HAVE_STBC 0x0001 336 #define IEEE80211_RADIOTAP_VHT_HAVE_TXOP_PS 0x0002 337 #define IEEE80211_RADIOTAP_VHT_HAVE_GI 0x0004 338 #define IEEE80211_RADIOTAP_VHT_HAVE_SGI_NSYM_DA 0x0008 339 #define IEEE80211_RADIOTAP_VHT_HAVE_LDPC_EXTRA 0x0010 340 #define IEEE80211_RADIOTAP_VHT_HAVE_BF 0x0020 341 #define IEEE80211_RADIOTAP_VHT_HAVE_BW 0x0040 342 #define IEEE80211_RADIOTAP_VHT_HAVE_GID 0x0080 343 #define IEEE80211_RADIOTAP_VHT_HAVE_PAID 0x0100 344 #define IEEE80211_RADIOTAP_VHT_STBC 0x01 345 #define IEEE80211_RADIOTAP_VHT_TXOP_PS 0x02 346 #define IEEE80211_RADIOTAP_VHT_SGI 0x04 347 #define IEEE80211_RADIOTAP_VHT_SGI_NSYM_DA 0x08 348 #define IEEE80211_RADIOTAP_VHT_LDPC_EXTRA 0x10 349 #define IEEE80211_RADIOTAP_VHT_BF 0x20 350 #define IEEE80211_RADIOTAP_VHT_NSS 0x0f 351 #define IEEE80211_RADIOTAP_VHT_MCS 0xf0 352 #define IEEE80211_RADIOTAP_VHT_CODING_LDPC 0x01 353 354 #define IEEE80211_RADIOTAP_VHT_BW_MASK 0x1f 355 #define IEEE80211_RADIOTAP_VHT_BW_20 IEEE80211_RADIOTAP_MCS_BW_20 356 #define IEEE80211_RADIOTAP_VHT_BW_40 IEEE80211_RADIOTAP_MCS_BW_40 357 #define IEEE80211_RADIOTAP_VHT_BW_20L IEEE80211_RADIOTAP_MCS_BW_20L 358 #define IEEE80211_RADIOTAP_VHT_BW_20U IEEE80211_RADIOTAP_MCS_BW_20U 359 #define IEEE80211_RADIOTAP_VHT_BW_80 4 360 #define IEEE80211_RADIOTAP_VHT_BW_40L 5 361 #define IEEE80211_RADIOTAP_VHT_BW_40U 6 362 #define IEEE80211_RADIOTAP_VHT_BW_20LL 7 363 #define IEEE80211_RADIOTAP_VHT_BW_20LU 8 364 #define IEEE80211_RADIOTAP_VHT_BW_20UL 9 365 #define IEEE80211_RADIOTAP_VHT_BW_20UU 10 366 #define IEEE80211_RADIOTAP_VHT_BW_160 11 367 #define IEEE80211_RADIOTAP_VHT_BW_80L 12 368 #define IEEE80211_RADIOTAP_VHT_BW_80U 13 369 #define IEEE80211_RADIOTAP_VHT_BW_40LL 14 370 #define IEEE80211_RADIOTAP_VHT_BW_40LU 15 371 #define IEEE80211_RADIOTAP_VHT_BW_40UL 16 372 #define IEEE80211_RADIOTAP_VHT_BW_40UU 17 373 #define IEEE80211_RADIOTAP_VHT_BW_20LLL 18 374 #define IEEE80211_RADIOTAP_VHT_BW_20LLU 19 375 #define IEEE80211_RADIOTAP_VHT_BW_20LUL 20 376 #define IEEE80211_RADIOTAP_VHT_BW_20LUU 21 377 #define IEEE80211_RADIOTAP_VHT_BW_20ULL 22 378 #define IEEE80211_RADIOTAP_VHT_BW_20ULU 23 379 #define IEEE80211_RADIOTAP_VHT_BW_20UUL 24 380 #define IEEE80211_RADIOTAP_VHT_BW_20UUU 25 381 382 /* for IEEE80211_RADIOTAP_TIMESTAMP */ 383 #define IEEE80211_RADIOTAP_TS_UNIT_MASK 0x0F 384 #define IEEE80211_RADIOTAP_TS_UNIT_MSEC 0x00 385 #define IEEE80211_RADIOTAP_TS_UNIT_USEC 0x01 386 #define IEEE80211_RADIOTAP_TS_UNIT_NSEC 0x02 387 #define IEEE80211_RADIOTAP_TS_SPOS_MASK 0xF0 388 #define IEEE80211_RADIOTAP_TS_SPOS_SHIFT 4 389 #define IEEE80211_RADIOTAP_TS_SPOS_MPDU 0x0 390 #define IEEE80211_RADIOTAP_TS_SPOS_ACQ 0x1 391 #define IEEE80211_RADIOTAP_TS_SPOS_EOF 0x2 392 #define IEEE80211_RADIOTAP_TS_SPOS_UNDEF 0xF 393 394 /* for IEEE80211_RADIOTAP_HE */ 395 #define IEEE80211_RADIOTAP_HE_PPDU_FORMAT_MASK 0x0003 396 #define IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_SU 0 397 #define IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_EXT_SU 1 398 #define IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_MU 2 399 #define IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_TRIG 3 400 #define IEEE80211_RADIOTAP_HE_BSS_COLOR_KNOWN 0x0004 401 #define IEEE80211_RADIOTAP_HE_BEAM_CHANGE_KNOWN 0x0008 402 #define IEEE80211_RADIOTAP_HE_UL_DL_KNOWN 0x0010 403 #define IEEE80211_RADIOTAP_HE_DATA_MCS_KNOWN 0x0020 404 #define IEEE80211_RADIOTAP_HE_DATA_DCM_KNOWN 0x0040 405 #define IEEE80211_RADIOTAP_HE_CODING_KNOWN 0x0080 406 #define IEEE80211_RADIOTAP_HE_LDPC_EXTRA_SYMBOL_SEGMENT_KNOWN 0x0100 407 #define IEEE80211_RADIOTAP_HE_STBC_KNOWN 0x0200 408 #define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_KNOWN 0x0400 409 #define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_2_KNOWN 0x0800 410 #define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_3_KNOWN 0x1000 411 #define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_4_KNOWN 0x2000 412 #define IEEE80211_RADIOTAP_HE_DATA_BW_RU_ALLOCATION_KNOWN 0x4000 413 #define IEEE80211_RADIOTAP_HE_DOPPLER_KNOWN 0x8000 414 #define IEEE80211_RADIOTAP_HE_PRI_SEC_80_MHZ_KNOWN 0x0001 415 #define IEEE80211_RADIOTAP_HE_GI_KNOWN 0x0002 416 #define IEEE80211_RADIOTAP_HE_NUM_LTF_SYMBOLS_KNOWN 0x0004 417 #define IEEE80211_RADIOTAP_HE_PRE_FEC_PADDING_FACTOR_KNOWN 0x0008 418 #define IEEE80211_RADIOTAP_HE_TXBF_KNOWN 0x0010 419 #define IEEE80211_RADIOTAP_HE_PE_DISAMBIGUITY_KNOWN 0x0020 420 #define IEEE80211_RADIOTAP_HE_TXOP_KNOWN 0x0040 421 #define IEEE80211_RADIOTAP_HE_MIDAMBLE_PERIODICITY_KNOWN 0x0080 422 #define IEEE80211_RADIOTAP_HE_RU_ALLOCATION_OFFSET 0x3F00 423 #define IEEE80211_RADIOTAP_HE_RU_ALLOCATION_OFFSET_KNOWN 0x4000 424 #define IEEE80211_RADIOTAP_HE_PRI_SEC_80_MHZ 0x8000 425 #define IEEE80211_RADIOTAP_HE_BSS_COLOR_MASK 0x003F 426 #define IEEE80211_RADIOTAP_HE_BEAM_CHANGE 0x0040 427 #define IEEE80211_RADIOTAP_HE_UL_DL 0x0080 428 #define IEEE80211_RADIOTAP_HE_DATA_MCS_MASK 0x0F00 429 #define IEEE80211_RADIOTAP_HE_DATA_DCM 0x1000 430 #define IEEE80211_RADIOTAP_HE_CODING 0x2000 431 #define IEEE80211_RADIOTAP_HE_LDPC_EXTRA_SYMBOL_SEGMENT 0x4000 432 #define IEEE80211_RADIOTAP_HE_STBC 0x8000 433 /* HE_SU and HE_EXT_SU formap PPDU */ 434 #define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_MASK 0x000F 435 #define IEEE80211_RADIOTAP_HE_D4_FFF0 0xFFF0 436 /* HE_TRIG format PPDU */ 437 #define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_1_MASK 0X000F 438 #define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_2_MASK 0X00F0 439 #define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_3_MASK 0X0F00 440 #define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_4_MASK 0XF000 441 /* HE_MU format PPDU-also uses SPATIAL_REUSE_MASK from above */ 442 #define IEEE80211_RADIOTAP_HE_STA_ID_MASK 0x7FF0 443 #define IEEE80211_RADIOTAP_HE_RESERVED_D4_B15 0x8000 444 445 #define IEEE80211_RADIOTAP_HE_DATA_BANDWIDTH_RU_ALLOC_MASK 0x000F 446 #define IEEE80211_RADIOTAP_HE_GI_MASK 0x0030 447 #define IEEE80211_RADIOTAP_HE_GI_0_POINT_8_MICRO 0 448 #define IEEE80211_RADIOTAP_HE_GI_1_POINT_6_MICRO 1 449 #define IEEE80211_RADIOTAP_HE_GI_3_POINT_2_MICRO 2 450 #define IEEE80211_RADIOTAP_HE_GI_RESERVED 3 451 #define IEEE80211_RADIOTAP_HE_LTF_SYMBOL_SIZE 0x00C0 452 #define IEEE80211_RADIOTAP_HE_NUM_LTF_SYMBOLS_MASK 0x0700 453 #define IEEE80211_RADIOTAP_HE_RESERVED_D5_B11 0x0800 454 #define IEEE80211_RADIOTAP_HE_PRE_FEC_PADDING_FACTOR_MASK 0x3000 455 #define IEEE80211_RADIOTAP_HE_TXBF 0x4000 456 #define IEEE80211_RADIOTAP_HE_PE_DISAMBIGUITY 0x8000 457 #define IEEE80211_RADIOTAP_HE_NSTS_MASK 0x000F 458 #define IEEE80211_RADIOTAP_HE_DOPLER_VALUE 0x0010 459 #define IEEE80211_RADIOTAP_HE_RESERVED_D6_00E0 0x00E0 460 #define IEEE80211_RADIOTAP_HE_TXOP_VALUE_MASK 0x7F00 461 #define IEEE80211_RADIOTAP_HE_MIDAMBLE_PERIODICITY 0x8000 462 463 /* For IEEE80211_RADIOTAP_HE_MU */ 464 #define IEEE80211_RADIOTAP_HE_MU_SIG_B_MCS_MASK 0x000F 465 #define IEEE80211_RADIOTAP_HE_MU_SIG_B_MCS_KNOWN 0x0010 466 #define IEEE80211_RADIOTAP_HE_MU_SIG_B_DCM 0x0020 467 #define IEEE80211_RADIOTAP_HE_MU_SIG_B_DCM_KNOWN 0x0040 468 #define IEEE80211_RADIOTAP_HE_MU_CHAN2_CENTER_26_TONE_RU_BIT_KNOWN 0x0080 469 #define IEEE80211_RADIOTAP_HE_MU_CHAN1_RUS_KNOWN 0x0100 470 #define IEEE80211_RADIOTAP_HE_MU_CHAN2_RUS_KNOWN 0x0200 471 #define IEEE80211_RADIOTAP_HE_MU_RESERVED_F1_B10_B11 0x0C00 472 #define IEEE80211_RADIOTAP_HE_MU_CHAN1_CENTER_26_TONE_RU_BIT_KNOWN 0x1000 473 #define IEEE80211_RADIOTAP_HE_MU_CHAN1_CENTER_26_TONE_RU_VALUE 0x2000 474 #define IEEE80211_RADIOTAP_HE_MU_SIG_B_COMPRESSION_KNOWN 0x4000 475 #define IEEE80211_RADIOTAP_HE_MU_SYMBOL_CNT_OR_USER_CNT_KNOWN 0x8000 476 #define IEEE80211_RADIOTAP_HE_MU_BW_FROM_BW_IN_SIG_A_MASK 0x0003 477 #define IEEE80211_RADIOTAP_HE_MU_BW_FROM_BW_IN_SIG_A_KNOWN 0x0004 478 #define IEEE80211_RADIOTAP_HE_MU_SIG_B_COMPRESSION_FROM_SIG_A 0x0008 479 #define IEEE80211_RADIOTAP_HE_MU_SYMBOL_CNT_OR_USER_CNT 0x00F0 480 #define IEEE80211_RADIOTAP_HE_MU_PREAMBLE_PUNCTURING_MASK 0x0300 481 #define IEEE80211_RADIOTAP_HE_MU_PREAMBLE_PUNCTURING_KNOWN 0x0400 482 #define IEEE80211_RADIOTAP_HE_MU_CHAN2_CENTER_26_TONE_RU_VALUE 0x0800 483 #define IEEE80211_RADIOTAP_HE_MU_RESERVED_F2_B12_B15 0xF000 484 485 /* For IEEE80211_RADIOTAP_L_SIG */ 486 #define IEEE80211_RADIOTAP_L_SIG_RATE_KNOWN 0x0001 487 #define IEEE80211_RADIOTAP_L_SIG_LENGTH_KNOWN 0x0002 488 #define IEEE80211_RADIOTAP_L_SIG_RESERVED_MASK 0xFFFC 489 #define IEEE80211_RADIOTAP_L_SIG_RATE_MASK 0x000F 490 #define IEEE80211_RADIOTAP_L_SIG_LENGTH_MASK 0xFFF0 491 492 /* TLV Definitions, start at 32 */ 493 #define IEEE80211_RADIOTAP_TLV_S1G 32 494 495 /* For IEEE80211_RADIOTAP_TLV_S1G */ 496 #define IEEE80211_RADIOTAP_TLV_S1G_S1G_PPDU_FORMAT_KNOWN 0x0001 497 #define IEEE80211_RADIOTAP_TLV_S1G_RESPONSE_INDICATION_KNOWN 0x0002 498 #define IEEE80211_RADIOTAP_TLV_S1G_GUARD_INTERVAL_KNOWN 0x0004 499 #define IEEE80211_RADIOTAP_TLV_S1G_NSS_KNOWN 0x0008 500 #define IEEE80211_RADIOTAP_TLV_S1G_BANDWIDTH_KNOWN 0x0010 501 #define IEEE80211_RADIOTAP_TLV_S1G_MCS_KNOWN 0x0020 502 #define IEEE80211_RADIOTAP_TLV_S1G_COLOR_KNOWN 0x0040 503 #define IEEE80211_RADIOTAP_TLV_S1G_UPLINK_INDICATION_KNOWN 0x0080 504 #define IEEE80211_RADIOTAP_TLV_S1G_RESERVED_1 0xFF00 505 #define IEEE80211_RADIOTAP_TLV_S1G_S1G_PPDU_FORMAT 0x0003 506 #define IEEE80211_RADIOTAP_TLV_S1G_RESPONSE_INDICATION 0x000C 507 #define IEEE80211_RADIOTAP_TLV_S1G_RESERVED_2 0x0010 508 #define IEEE80211_RADIOTAP_TLV_S1G_GUARD_INTERVAL 0x0020 509 #define IEEE80211_RADIOTAP_TLV_S1G_NSS 0x00C0 510 #define IEEE80211_RADIOTAP_TLV_S1G_BANDWIDTH 0x0F00 511 #define IEEE80211_RADIOTAP_TLV_S1G_MCS 0xF000 512 #define IEEE80211_RADIOTAP_TLV_S1G_COLOR 0x0007 513 #define IEEE80211_RADIOTAP_TLV_S1G_UPLINK_INDICATION 0x0008 514 #define IEEE80211_RADIOTAP_TLV_S1G_RESERVED_3 0x00F0 515 #define IEEE80211_RADIOTAP_TLV_S1G_RSSI 0xFF00 516 517 #define IEEE80211_RADIOTAP_TS_FLG_32BIT 0x01 518 #define IEEE80211_RADIOTAP_TS_FLG_ACCURACY 0x02 519 520 #endif /* IEEE80211_RADIOTAP_H */ 521