1c6303b23SSam Leffler /* $NetBSD: ieee80211_radiotap.h,v 1.16 2007/01/06 05:51:15 dyoung Exp $ */ 295a22a9aSSam Leffler 395a22a9aSSam Leffler /*- 4fe267a55SPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 5fe267a55SPedro F. Giffuni * 695a22a9aSSam Leffler * Copyright (c) 2003, 2004 David Young. All rights reserved. 795a22a9aSSam Leffler * 895a22a9aSSam Leffler * Redistribution and use in source and binary forms, with or without 995a22a9aSSam Leffler * modification, are permitted provided that the following conditions 1095a22a9aSSam Leffler * are met: 1195a22a9aSSam Leffler * 1. Redistributions of source code must retain the above copyright 1295a22a9aSSam Leffler * notice, this list of conditions and the following disclaimer. 1395a22a9aSSam Leffler * 2. Redistributions in binary form must reproduce the above copyright 1495a22a9aSSam Leffler * notice, this list of conditions and the following disclaimer in the 1595a22a9aSSam Leffler * documentation and/or other materials provided with the distribution. 1695a22a9aSSam Leffler * 3. The name of David Young may not be used to endorse or promote 1795a22a9aSSam Leffler * products derived from this software without specific prior 1895a22a9aSSam Leffler * written permission. 1995a22a9aSSam Leffler * 2095a22a9aSSam Leffler * THIS SOFTWARE IS PROVIDED BY DAVID YOUNG ``AS IS'' AND ANY 2195a22a9aSSam Leffler * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 2295a22a9aSSam Leffler * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 2395a22a9aSSam Leffler * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DAVID 2495a22a9aSSam Leffler * YOUNG BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2595a22a9aSSam Leffler * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 2695a22a9aSSam Leffler * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2795a22a9aSSam Leffler * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 2895a22a9aSSam Leffler * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 2995a22a9aSSam Leffler * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3095a22a9aSSam Leffler * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 3195a22a9aSSam Leffler * OF SUCH DAMAGE. 3295a22a9aSSam Leffler */ 33c6303b23SSam Leffler #ifndef _NET80211_IEEE80211_RADIOTAP_H_ 34c6303b23SSam Leffler #define _NET80211_IEEE80211_RADIOTAP_H_ 3595a22a9aSSam Leffler 36c6303b23SSam Leffler /* A generic radio capture format is desirable. It must be 37c6303b23SSam Leffler * rigidly defined (e.g., units for fields should be given), 38c6303b23SSam Leffler * and easily extensible. 3995a22a9aSSam Leffler * 40c6303b23SSam Leffler * The following is an extensible radio capture format. It is 4195a22a9aSSam Leffler * based on a bitmap indicating which fields are present. 4295a22a9aSSam Leffler * 4395a22a9aSSam Leffler * I am trying to describe precisely what the application programmer 4495a22a9aSSam Leffler * should expect in the following, and for that reason I tell the 4595a22a9aSSam Leffler * units and origin of each measurement (where it applies), or else I 4695a22a9aSSam Leffler * use sufficiently weaselly language ("is a monotonically nondecreasing 4795a22a9aSSam Leffler * function of...") that I cannot set false expectations for lawyerly 4895a22a9aSSam Leffler * readers. 4995a22a9aSSam Leffler */ 508a1b9b6aSSam Leffler #if defined(__KERNEL__) || defined(_KERNEL) 5195a22a9aSSam Leffler #ifndef DLT_IEEE802_11_RADIO 5295a22a9aSSam Leffler #define DLT_IEEE802_11_RADIO 127 /* 802.11 plus WLAN header */ 5395a22a9aSSam Leffler #endif 548a1b9b6aSSam Leffler #endif /* defined(__KERNEL__) || defined(_KERNEL) */ 5595a22a9aSSam Leffler 56c6303b23SSam Leffler #define IEEE80211_RADIOTAP_HDRLEN 64 /* XXX deprecated */ 57a88be5f1SSam Leffler 583ec1a8c9SAdrian Chadd struct ieee80211_radiotap_vendor_header { 593ec1a8c9SAdrian Chadd uint8_t vh_oui[3]; /* 3 byte vendor OUI */ 603ec1a8c9SAdrian Chadd uint8_t vh_sub_ns; /* Sub namespace of this section */ 613ec1a8c9SAdrian Chadd uint16_t vh_skip_len; /* Length of this vendor section */ 623ec1a8c9SAdrian Chadd } __packed; 633ec1a8c9SAdrian Chadd 64c6303b23SSam Leffler /* 65c6303b23SSam Leffler * The radio capture header precedes the 802.11 header. 66c6303b23SSam Leffler * 67c6303b23SSam Leffler * Note well: all radiotap fields are little-endian. 68c6303b23SSam Leffler */ 6995a22a9aSSam Leffler struct ieee80211_radiotap_header { 7068e8e04eSSam Leffler uint8_t it_version; /* Version 0. Only increases 7195a22a9aSSam Leffler * for drastic changes, 7295a22a9aSSam Leffler * introduction of compatible 73c6b688c4SSam Leffler * new fields does not count. 7495a22a9aSSam Leffler */ 7568e8e04eSSam Leffler uint8_t it_pad; 7668e8e04eSSam Leffler uint16_t it_len; /* length of the whole 7795a22a9aSSam Leffler * header in bytes, including 7895a22a9aSSam Leffler * it_version, it_pad, 79c6b688c4SSam Leffler * it_len, and data fields. 8095a22a9aSSam Leffler */ 8168e8e04eSSam Leffler uint32_t it_present; /* A bitmap telling which 8295a22a9aSSam Leffler * fields are present. Set bit 31 8395a22a9aSSam Leffler * (0x80000000) to extend the 8495a22a9aSSam Leffler * bitmap by another 32 bits. 8595a22a9aSSam Leffler * Additional extensions are made 8695a22a9aSSam Leffler * by setting bit 31. 8795a22a9aSSam Leffler */ 88820d8b5cSWarner Losh } __packed; 8995a22a9aSSam Leffler 90c6303b23SSam Leffler /* 91c6303b23SSam Leffler * Name Data type Units 9295a22a9aSSam Leffler * ---- --------- ----- 9395a22a9aSSam Leffler * 9468e8e04eSSam Leffler * IEEE80211_RADIOTAP_TSFT uint64_t microseconds 9595a22a9aSSam Leffler * 96c6b688c4SSam Leffler * Value in microseconds of the MAC's 64-bit 802.11 Time 97c6b688c4SSam Leffler * Synchronization Function timer when the first bit of the 98c6b688c4SSam Leffler * MPDU arrived at the MAC. For received frames, only. 99c6b688c4SSam Leffler * 10068e8e04eSSam Leffler * IEEE80211_RADIOTAP_CHANNEL 2 x uint16_t MHz, bitmap 101c6b688c4SSam Leffler * 102c6b688c4SSam Leffler * Tx/Rx frequency in MHz, followed by flags (see below). 10395a22a9aSSam Leffler * 10468e8e04eSSam Leffler * IEEE80211_RADIOTAP_FHSS uint16_t see below 10595a22a9aSSam Leffler * 10695a22a9aSSam Leffler * For frequency-hopping radios, the hop set (first byte) 10795a22a9aSSam Leffler * and pattern (second byte). 10895a22a9aSSam Leffler * 10968e8e04eSSam Leffler * IEEE80211_RADIOTAP_RATE uint8_t 500kb/s or index 11095a22a9aSSam Leffler * 11168e8e04eSSam Leffler * Tx/Rx data rate. If bit 0x80 is set then it represents an 11268e8e04eSSam Leffler * an MCS index and not an IEEE rate. 11395a22a9aSSam Leffler * 114c6b688c4SSam Leffler * IEEE80211_RADIOTAP_DBM_ANTSIGNAL int8_t decibels from 115c6b688c4SSam Leffler * one milliwatt (dBm) 11695a22a9aSSam Leffler * 117c6b688c4SSam Leffler * RF signal power at the antenna, decibel difference from 118c6b688c4SSam Leffler * one milliwatt. 11995a22a9aSSam Leffler * 120c6b688c4SSam Leffler * IEEE80211_RADIOTAP_DBM_ANTNOISE int8_t decibels from 121c6b688c4SSam Leffler * one milliwatt (dBm) 12295a22a9aSSam Leffler * 123c6b688c4SSam Leffler * RF noise power at the antenna, decibel difference from one 124c6b688c4SSam Leffler * milliwatt. 125c6b688c4SSam Leffler * 12668e8e04eSSam Leffler * IEEE80211_RADIOTAP_DB_ANTSIGNAL uint8_t decibel (dB) 127c6b688c4SSam Leffler * 128c6b688c4SSam Leffler * RF signal power at the antenna, decibel difference from an 129c6b688c4SSam Leffler * arbitrary, fixed reference. 130c6b688c4SSam Leffler * 13168e8e04eSSam Leffler * IEEE80211_RADIOTAP_DB_ANTNOISE uint8_t decibel (dB) 132c6b688c4SSam Leffler * 133c6b688c4SSam Leffler * RF noise power at the antenna, decibel difference from an 134c6b688c4SSam Leffler * arbitrary, fixed reference point. 13595a22a9aSSam Leffler * 13668e8e04eSSam Leffler * IEEE80211_RADIOTAP_LOCK_QUALITY uint16_t unitless 13795a22a9aSSam Leffler * 13895a22a9aSSam Leffler * Quality of Barker code lock. Unitless. Monotonically 13995a22a9aSSam Leffler * nondecreasing with "better" lock strength. Called "Signal 14095a22a9aSSam Leffler * Quality" in datasheets. (Is there a standard way to measure 14195a22a9aSSam Leffler * this?) 14295a22a9aSSam Leffler * 14368e8e04eSSam Leffler * IEEE80211_RADIOTAP_TX_ATTENUATION uint16_t unitless 14495a22a9aSSam Leffler * 14595a22a9aSSam Leffler * Transmit power expressed as unitless distance from max 14695a22a9aSSam Leffler * power set at factory calibration. 0 is max power. 14795a22a9aSSam Leffler * Monotonically nondecreasing with lower power levels. 14895a22a9aSSam Leffler * 14968e8e04eSSam Leffler * IEEE80211_RADIOTAP_DB_TX_ATTENUATION uint16_t decibels (dB) 15095a22a9aSSam Leffler * 15195a22a9aSSam Leffler * Transmit power expressed as decibel distance from max power 15295a22a9aSSam Leffler * set at factory calibration. 0 is max power. Monotonically 15395a22a9aSSam Leffler * nondecreasing with lower power levels. 15495a22a9aSSam Leffler * 155c6b688c4SSam Leffler * IEEE80211_RADIOTAP_DBM_TX_POWER int8_t decibels from 156c6b688c4SSam Leffler * one milliwatt (dBm) 15795a22a9aSSam Leffler * 15895a22a9aSSam Leffler * Transmit power expressed as dBm (decibels from a 1 milliwatt 15995a22a9aSSam Leffler * reference). This is the absolute power level measured at 16095a22a9aSSam Leffler * the antenna port. 16195a22a9aSSam Leffler * 16268e8e04eSSam Leffler * IEEE80211_RADIOTAP_FLAGS uint8_t bitmap 16395a22a9aSSam Leffler * 16495a22a9aSSam Leffler * Properties of transmitted and received frames. See flags 16595a22a9aSSam Leffler * defined below. 16695a22a9aSSam Leffler * 16768e8e04eSSam Leffler * IEEE80211_RADIOTAP_ANTENNA uint8_t antenna index 16895a22a9aSSam Leffler * 16995a22a9aSSam Leffler * Unitless indication of the Rx/Tx antenna for this packet. 17095a22a9aSSam Leffler * The first antenna is antenna 0. 17168e8e04eSSam Leffler * 17268e8e04eSSam Leffler * IEEE80211_RADIOTAP_XCHANNEL uint32_t bitmap 17368e8e04eSSam Leffler * uint16_t MHz 17468e8e04eSSam Leffler * uint8_t channel number 17568e8e04eSSam Leffler * int8_t .5 dBm 17668e8e04eSSam Leffler * 17768e8e04eSSam Leffler * Extended channel specification: flags (see below) followed by 17868e8e04eSSam Leffler * frequency in MHz, the corresponding IEEE channel number, and 17968e8e04eSSam Leffler * finally the maximum regulatory transmit power cap in .5 dBm 18068e8e04eSSam Leffler * units. This property supersedes IEEE80211_RADIOTAP_CHANNEL 18168e8e04eSSam Leffler * and only one of the two should be present. 182f56f89c7SAdrian Chadd * IEEE80211_RADIOTAP_RX_FLAGS guint16 bitmap 183f56f89c7SAdrian Chadd * 184f56f89c7SAdrian Chadd * Properties of received frames. See flags defined below. 185f56f89c7SAdrian Chadd * 186f56f89c7SAdrian Chadd * IEEE80211_RADIOTAP_TX_FLAGS guint16 bitmap 187f56f89c7SAdrian Chadd * 188f56f89c7SAdrian Chadd * Properties of transmitted frames. See flags defined below. 189f56f89c7SAdrian Chadd * 190f56f89c7SAdrian Chadd * IEEE80211_RADIOTAP_RTS_RETRIES u8 data 191f56f89c7SAdrian Chadd * 192f56f89c7SAdrian Chadd * Number of rts retries a transmitted frame used. 193f56f89c7SAdrian Chadd * 194f56f89c7SAdrian Chadd * IEEE80211_RADIOTAP_DATA_RETRIES u8 data 195f56f89c7SAdrian Chadd * 196f56f89c7SAdrian Chadd * Number of unicast retries a transmitted frame used. 197f56f89c7SAdrian Chadd * 198f56f89c7SAdrian Chadd * IEEE80211_RADIOTAP_MCS u8, u8, u8 unitless 199f56f89c7SAdrian Chadd * 200f56f89c7SAdrian Chadd * Contains a bitmap of known fields/flags, the flags, and 201f56f89c7SAdrian Chadd * the MCS index. 202f56f89c7SAdrian Chadd * 203f56f89c7SAdrian Chadd * IEEE80211_RADIOTAP_AMPDU_STATUS u32, u16, u8, u8 unitlesss 204f56f89c7SAdrian Chadd * 205f56f89c7SAdrian Chadd * Contains the AMPDU information for the subframe. 20695a22a9aSSam Leffler */ 20795a22a9aSSam Leffler enum ieee80211_radiotap_type { 208c6b688c4SSam Leffler IEEE80211_RADIOTAP_TSFT = 0, 20995a22a9aSSam Leffler IEEE80211_RADIOTAP_FLAGS = 1, 21095a22a9aSSam Leffler IEEE80211_RADIOTAP_RATE = 2, 21195a22a9aSSam Leffler IEEE80211_RADIOTAP_CHANNEL = 3, 21295a22a9aSSam Leffler IEEE80211_RADIOTAP_FHSS = 4, 213c6b688c4SSam Leffler IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5, 214c6b688c4SSam Leffler IEEE80211_RADIOTAP_DBM_ANTNOISE = 6, 21595a22a9aSSam Leffler IEEE80211_RADIOTAP_LOCK_QUALITY = 7, 21695a22a9aSSam Leffler IEEE80211_RADIOTAP_TX_ATTENUATION = 8, 21795a22a9aSSam Leffler IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9, 21895a22a9aSSam Leffler IEEE80211_RADIOTAP_DBM_TX_POWER = 10, 21995a22a9aSSam Leffler IEEE80211_RADIOTAP_ANTENNA = 11, 220c6b688c4SSam Leffler IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12, 221c6b688c4SSam Leffler IEEE80211_RADIOTAP_DB_ANTNOISE = 13, 222b8f699e9SAdrian Chadd /* 223b8f699e9SAdrian Chadd * 14-17 are from Linux, they overlap the netbsd-specific 224b8f699e9SAdrian Chadd * fields. 225b8f699e9SAdrian Chadd */ 226b8f699e9SAdrian Chadd IEEE80211_RADIOTAP_RX_FLAGS = 14, 227b8f699e9SAdrian Chadd IEEE80211_RADIOTAP_TX_FLAGS = 15, 228b8f699e9SAdrian Chadd IEEE80211_RADIOTAP_RTS_RETRIES = 16, 229b8f699e9SAdrian Chadd IEEE80211_RADIOTAP_DATA_RETRIES = 17, 230b8f699e9SAdrian Chadd 231d4548f09SAndrew Thompson IEEE80211_RADIOTAP_XCHANNEL = 18, 232d8f609a9SAdrian Chadd IEEE80211_RADIOTAP_MCS = 19, 233b8f699e9SAdrian Chadd IEEE80211_RADIOTAP_AMPDU_STATUS = 20, 234f56f89c7SAdrian Chadd IEEE80211_RADIOTAP_VHT = 21, 235b8f699e9SAdrian Chadd 2367232e6dcSBjoern A. Zeeb IEEE80211_RADIOTAP_TLV = 28, 237b8f699e9SAdrian Chadd IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE = 29, 2387232e6dcSBjoern A. Zeeb IEEE80211_RADIOTAP_VENDOREXT = 30, /* obsolete? */ 2397232e6dcSBjoern A. Zeeb IEEE80211_RADIOTAP_VENDOR_NAMESPACE = 30, 24095a22a9aSSam Leffler IEEE80211_RADIOTAP_EXT = 31, 2417232e6dcSBjoern A. Zeeb IEEE80211_RADIOTAP_EHT_USIG = 33, 2427232e6dcSBjoern A. Zeeb IEEE80211_RADIOTAP_EHT = 34, 24395a22a9aSSam Leffler }; 24495a22a9aSSam Leffler 245c6b688c4SSam Leffler #ifndef _KERNEL 2461f0598ffSSam Leffler /* channel attributes */ 2471f0598ffSSam Leffler #define IEEE80211_CHAN_TURBO 0x00000010 /* Turbo channel */ 2481f0598ffSSam Leffler #define IEEE80211_CHAN_CCK 0x00000020 /* CCK channel */ 2491f0598ffSSam Leffler #define IEEE80211_CHAN_OFDM 0x00000040 /* OFDM channel */ 2501f0598ffSSam Leffler #define IEEE80211_CHAN_2GHZ 0x00000080 /* 2 GHz spectrum channel. */ 2511f0598ffSSam Leffler #define IEEE80211_CHAN_5GHZ 0x00000100 /* 5 GHz spectrum channel */ 2521f0598ffSSam Leffler #define IEEE80211_CHAN_PASSIVE 0x00000200 /* Only passive scan allowed */ 2531f0598ffSSam Leffler #define IEEE80211_CHAN_DYN 0x00000400 /* Dynamic CCK-OFDM channel */ 2541f0598ffSSam Leffler #define IEEE80211_CHAN_GFSK 0x00000800 /* GFSK channel (FHSS PHY) */ 2551f0598ffSSam Leffler #define IEEE80211_CHAN_GSM 0x00001000 /* 900 MHz spectrum channel */ 2561f0598ffSSam Leffler #define IEEE80211_CHAN_STURBO 0x00002000 /* 11a static turbo channel only */ 2571f0598ffSSam Leffler #define IEEE80211_CHAN_HALF 0x00004000 /* Half rate channel */ 2581f0598ffSSam Leffler #define IEEE80211_CHAN_QUARTER 0x00008000 /* Quarter rate channel */ 259c6b688c4SSam Leffler #endif /* !_KERNEL */ 260c6b688c4SSam Leffler 26195a22a9aSSam Leffler /* For IEEE80211_RADIOTAP_FLAGS */ 262c6b688c4SSam Leffler #define IEEE80211_RADIOTAP_F_CFP 0x01 /* sent/received 26395a22a9aSSam Leffler * during CFP 26495a22a9aSSam Leffler */ 265c6b688c4SSam Leffler #define IEEE80211_RADIOTAP_F_SHORTPRE 0x02 /* sent/received 26695a22a9aSSam Leffler * with short 26795a22a9aSSam Leffler * preamble 26895a22a9aSSam Leffler */ 269c6b688c4SSam Leffler #define IEEE80211_RADIOTAP_F_WEP 0x04 /* sent/received 27095a22a9aSSam Leffler * with WEP encryption 27195a22a9aSSam Leffler */ 272c6b688c4SSam Leffler #define IEEE80211_RADIOTAP_F_FRAG 0x08 /* sent/received 27395a22a9aSSam Leffler * with fragmentation 27495a22a9aSSam Leffler */ 275a88be5f1SSam Leffler #define IEEE80211_RADIOTAP_F_FCS 0x10 /* frame includes FCS */ 276a88be5f1SSam Leffler #define IEEE80211_RADIOTAP_F_DATAPAD 0x20 /* frame has padding between 277a88be5f1SSam Leffler * 802.11 header and payload 278a88be5f1SSam Leffler * (to 32-bit boundary) 279a88be5f1SSam Leffler */ 2802204bcfdSSam Leffler #define IEEE80211_RADIOTAP_F_BADFCS 0x40 /* does not pass FCS check */ 28168e8e04eSSam Leffler #define IEEE80211_RADIOTAP_F_SHORTGI 0x80 /* HT short GI */ 28295a22a9aSSam Leffler 283f56f89c7SAdrian Chadd /* For IEEE80211_RADIOTAP_RX_FLAGS */ 284f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_F_RX_BADPLCP 0x0002 /* bad PLCP */ 285f56f89c7SAdrian Chadd 286f56f89c7SAdrian Chadd /* For IEEE80211_RADIOTAP_TX_FLAGS */ 287f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_F_TX_FAIL 0x0001 /* failed due to excessive 288f56f89c7SAdrian Chadd * retries */ 289f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_F_TX_CTS 0x0002 /* used cts 'protection' */ 290f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_F_TX_RTS 0x0004 /* used rts/cts handshake */ 291f56f89c7SAdrian Chadd 292f56f89c7SAdrian Chadd /* For IEEE80211_RADIOTAP_MCS */ 293f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_HAVE_BW 0x01 294f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_HAVE_MCS 0x02 295f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_HAVE_GI 0x04 296f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_HAVE_FMT 0x08 297f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_HAVE_FEC 0x10 298f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_HAVE_STBC 0x20 299f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_HAVE_NESS 0x40 300f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_NESS_BIT1 0x80 301f56f89c7SAdrian Chadd 302f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_BW_MASK 0x03 303f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_BW_20 0 304f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_BW_40 1 305f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_BW_20L 2 306f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_BW_20U 3 307f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_SGI 0x04 308f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_FMT_GF 0x08 309f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_FEC_LDPC 0x10 310f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_STBC_MASK 0x60 311f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_STBC_SHIFT 5 312f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_STBC_1 1 313f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_STBC_2 2 314f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_STBC_3 3 315f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_MCS_NESS_BIT0 0x80 316f56f89c7SAdrian Chadd 317f56f89c7SAdrian Chadd /* For IEEE80211_RADIOTAP_AMPDU_STATUS */ 318f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_AMPDU_REPORT_ZEROLEN 0x0001 319f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_AMPDU_IS_ZEROLEN 0x0002 320f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_AMPDU_LAST_KNOWN 0x0004 321f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_AMPDU_IS_LAST 0x0008 322f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR 0x0010 323f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN 0x0020 324f56f89c7SAdrian Chadd 325f56f89c7SAdrian Chadd /* For IEEE80211_RADIOTAP_VHT */ 326f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_HAVE_STBC 0x0001 327f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_HAVE_TXOP_PS 0x0002 328f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_HAVE_GI 0x0004 329f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_HAVE_SGI_NSYM_DA 0x0008 330f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_HAVE_LDPC_EXTRA 0x0010 331f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_HAVE_BF 0x0020 332f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_HAVE_BW 0x0040 333f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_HAVE_GID 0x0080 334f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_HAVE_PAID 0x0100 335f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_STBC 0x01 336f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_TXOP_PS 0x02 337f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_SGI 0x04 338f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_SGI_NSYM_DA 0x08 339f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_LDPC_EXTRA 0x10 340f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BF 0x20 341f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_NSS 0x0f 342f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_MCS 0xf0 343f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_CODING_LDPC 0x01 344f56f89c7SAdrian Chadd 345f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_MASK 0x1f 346f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20 IEEE80211_RADIOTAP_MCS_BW_20 347f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_40 IEEE80211_RADIOTAP_MCS_BW_40 348f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20L IEEE80211_RADIOTAP_MCS_BW_20L 349f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20U IEEE80211_RADIOTAP_MCS_BW_20U 350f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_80 4 351f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_40L 5 352f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_40U 6 353f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20LL 7 354f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20LU 8 355f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20UL 9 356f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20UU 10 357f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_160 11 358f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_80L 12 359f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_80U 13 360f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_40LL 14 361f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_40LU 15 362f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_40UL 16 363f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_40UU 17 364f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20LLL 18 365f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20LLU 19 366f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20LUL 20 367f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20LUU 21 368f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20ULL 22 369f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20ULU 23 370f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20UUL 24 371f56f89c7SAdrian Chadd #define IEEE80211_RADIOTAP_VHT_BW_20UUU 25 372f56f89c7SAdrian Chadd 373b5d37e5aSBjoern A. Zeeb /* 374b5d37e5aSBjoern A. Zeeb * These are found in various drivers already so use them rather than 375b5d37e5aSBjoern A. Zeeb * going by our own names and changing everything. 376b5d37e5aSBjoern A. Zeeb */ 377b5d37e5aSBjoern A. Zeeb 378b5d37e5aSBjoern A. Zeeb /* https://www.radiotap.org/fields/VHT.html */ 379b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_VHT_KNOWN_STBC 0x0001 /* net80211::IEEE80211_RADIOTAP_VHT_HAVE_STBC */ 380b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_VHT_KNOWN_BEAMFORMED 0x0020 /* net80211::IEEE80211_RADIOTAP_VHT_HAVE_BF */ 381b5d37e5aSBjoern A. Zeeb 382b5d37e5aSBjoern A. Zeeb /* https://www.radiotap.org/fields/0-length-PSDU.html */ 383b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_ZERO_LEN_PSDU_SOUNDING 0x00 384b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_ZERO_LEN_PSDU_NOT_CAPTURED 0x01 385b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_ZERO_LEN_PSDU_VENDOR 0xFF 386b5d37e5aSBjoern A. Zeeb 3877232e6dcSBjoern A. Zeeb /* http://www.radiotap.org/fields/TLV.html */ 3887232e6dcSBjoern A. Zeeb struct ieee80211_radiotap_tlv { 3897232e6dcSBjoern A. Zeeb uint16_t type; 3907232e6dcSBjoern A. Zeeb uint16_t len; 3917232e6dcSBjoern A. Zeeb uint8_t data[]; 3927232e6dcSBjoern A. Zeeb } __packed; 3937232e6dcSBjoern A. Zeeb 3947232e6dcSBjoern A. Zeeb struct ieee80211_radiotap_vendor_content { 3957232e6dcSBjoern A. Zeeb uint8_t oui[3]; 3967232e6dcSBjoern A. Zeeb uint8_t oui_subtype; 3977232e6dcSBjoern A. Zeeb uint16_t vendor_type; 3987232e6dcSBjoern A. Zeeb uint16_t __padding; 3997232e6dcSBjoern A. Zeeb uint8_t data[]; 4007232e6dcSBjoern A. Zeeb } __packed; 4017232e6dcSBjoern A. Zeeb 402b5d37e5aSBjoern A. Zeeb /* https://www.radiotap.org/fields/HE.html */ 403b5d37e5aSBjoern A. Zeeb struct ieee80211_radiotap_he { 404b5d37e5aSBjoern A. Zeeb uint16_t data1, data2, data3, data4, data5, data6; 4057232e6dcSBjoern A. Zeeb } __packed; 406b5d37e5aSBjoern A. Zeeb 407b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_FORMAT_SU 0x0000 408b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_FORMAT_EXT_SU 0x0001 409b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_FORMAT_MU 0x0002 410b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_FORMAT_TRIG 0x0003 411b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_BSS_COLOR_KNOWN 0x0004 412b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_BEAM_CHANGE_KNOWN 0x0008 413b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_UL_DL_KNOWN 0x0010 414b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_DATA_MCS_KNOWN 0x0020 415b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_DATA_DCM_KNOWN 0x0040 416b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_CODING_KNOWN 0x0080 417b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_LDPC_XSYMSEG_KNOWN 0x0100 418b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_STBC_KNOWN 0x0200 419b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE_KNOWN 0x0400 420b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE2_KNOWN 0x0800 421b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE3_KNOWN 0x1000 422b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE4_KNOWN 0x2000 423b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_BW_RU_ALLOC_KNOWN 0x4000 424b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA1_DOPPLER_KNOWN 0x8000 425b5d37e5aSBjoern A. Zeeb 426b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA2_PRISEC_80_KNOWN 0x0001 427b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA2_GI_KNOWN 0x0002 428b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA2_NUM_LTF_SYMS_KNOWN 0x0004 429b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA2_PRE_FEC_PAD_KNOWN 0x0008 430b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA2_TXBF_KNOWN 0x0010 431b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA2_PE_DISAMBIG_KNOWN 0x0020 432b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA2_TXOP_KNOWN 0x0040 43363231f4dSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA2_MIDAMBLE_KNOWN 0x0080 434b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA2_RU_OFFSET 0x3F00 435b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA2_RU_OFFSET_KNOWN 0x4000 436b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA2_PRISEC_80_SEC 0x8000 437b5d37e5aSBjoern A. Zeeb 438b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA3_BSS_COLOR 0x003F 439b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA3_BEAM_CHANGE 0x0040 440b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA3_UL_DL 0x0080 44163231f4dSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA3_DATA_MCS 0x0F00 44263231f4dSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA3_DATA_DCM 0x1000 44363231f4dSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA3_CODING 0x2000 444b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA3_LDPC_XSYMSEG 0x4000 44563231f4dSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA3_STBC 0x8000 446b5d37e5aSBjoern A. Zeeb 447b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA4_SU_MU_SPTL_REUSE 0x000F 448c7a8db6aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA4_MU_STA_ID 0x7FF0 449b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE1 0x000F 450b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE2 0x00F0 451b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE3 0x0F00 452b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE4 0xF000 453b5d37e5aSBjoern A. Zeeb 45463231f4dSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC 0x000F 45563231f4dSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA5_GI 0x0030 456b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE 0x00C0 457f7c526abSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_UNKNOWN 0x0 458b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_1X 0x1 459b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_2X 0x2 460b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_4X 0x3 461b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA5_NUM_LTF_SYMS 0x0700 462b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA5_PRE_FEC_PAD 0x3000 463b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA5_TXBF 0x4000 464b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA5_PE_DISAMBIG 0x8000 465b5d37e5aSBjoern A. Zeeb 46663231f4dSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA6_NSTS 0x000F 467b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA6_DOPPLER 0x0010 468b5d37e5aSBjoern A. Zeeb /* 0x00e0 (reserved) ; use these for the following undocumented. */ 469b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_KNOWN 0x0020 470b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW 0x00C0 471b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_20MHZ 0x0 472b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_40MHZ 0x1 473b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_80MHZ 0x2 474b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_160MHZ 0x3 475b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_DATA6_TXOP 0x7F00 476b5d37e5aSBjoern A. Zeeb 477b5d37e5aSBjoern A. Zeeb /* https://www.radiotap.org/fields/HE-MU.html */ 478b5d37e5aSBjoern A. Zeeb struct ieee80211_radiotap_he_mu { 479b5d37e5aSBjoern A. Zeeb uint16_t flags1; 480b5d37e5aSBjoern A. Zeeb uint16_t flags2; 481b5d37e5aSBjoern A. Zeeb uint8_t ru_ch1[4]; 482b5d37e5aSBjoern A. Zeeb uint8_t ru_ch2[4]; 4837232e6dcSBjoern A. Zeeb } __packed; 484b5d37e5aSBjoern A. Zeeb 485b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_MCS 0x000F 486b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_MCS_KNOWN 0x0010 487b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_DCM 0x0020 488b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_DCM_KNOWN 0x0040 489b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH2_CTR_26T_RU_KNOWN 0x0080 490b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH1_RU_KNOWN 0x0100 491b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH2_RU_KNOWN 0x0200 492b5d37e5aSBjoern A. Zeeb /* reserved 0x0C00 */ 493b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH1_CTR_26T_RU_KNOWN 0x1000 494b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH1_CTR_26T_RU 0x2000 495b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_COMP_KNOWN 0x4000 496b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_SYMS_USERS_KNOWN 0x8000 497b5d37e5aSBjoern A. Zeeb 498b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW 0x0003 499b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_20MHZ 0x0000 500b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_40MHZ 0x0001 501b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_80MHZ 0x0002 502b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_160MHZ 0x0003 503b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_KNOWN 0x0004 504b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS2_SIG_B_COMP 0x0008 505b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS2_SIG_B_SYMS_USERS 0x00F0 506b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS2_PUNC_FROM_SIG_A_BW 0x0300 507b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS2_PUNC_FROM_SIG_A_BW_KNOWN 0x0400 508b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_HE_MU_FLAGS2_CH2_CTR_26T_RU 0x0800 509b5d37e5aSBjoern A. Zeeb 510b5d37e5aSBjoern A. Zeeb /* https://www.radiotap.org/fields/L-SIG.html */ 511b5d37e5aSBjoern A. Zeeb struct ieee80211_radiotap_lsig { 512b5d37e5aSBjoern A. Zeeb uint16_t data1; 513b5d37e5aSBjoern A. Zeeb uint16_t data2; 5147232e6dcSBjoern A. Zeeb } __packed; 515b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_LSIG_DATA1_LENGTH_KNOWN 0x0002 516b5d37e5aSBjoern A. Zeeb 517b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_LSIG_DATA2_LENGTH 0xFFF0 518b5d37e5aSBjoern A. Zeeb 519b5d37e5aSBjoern A. Zeeb /* https://www.radiotap.org/fields/MCS.html */ 520b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_MCS_HAVE_FEC 0x10 521b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_MCS_HAVE_STBC 0x20 522b5d37e5aSBjoern A. Zeeb 523b5d37e5aSBjoern A. Zeeb /* https://www.radiotap.org/fields/timestamp.html */ 524b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_TIMESTAMP_UNIT_US 0x01 525b5d37e5aSBjoern A. Zeeb #define IEEE80211_RADIOTAP_TIMESTAMP_SPOS_PLCP_SIG_ACQ 0x10 526b5d37e5aSBjoern A. Zeeb 5277232e6dcSBjoern A. Zeeb /* http://www.radiotap.org/fields/U-SIG.html */ 5287232e6dcSBjoern A. Zeeb struct ieee80211_radiotap_eht_usig { 5297232e6dcSBjoern A. Zeeb uint32_t common; 5307232e6dcSBjoern A. Zeeb uint32_t value; 5317232e6dcSBjoern A. Zeeb uint32_t mask; 5327232e6dcSBjoern A. Zeeb } __packed; 5337232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_PHY_VER_KNOWN 0x00000001 5347232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW_KNOWN 0x00000002 5357232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_UL_DL_KNOWN 0x00000004 5367232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_BSS_COLOR_KNOWN 0x00000008 5377232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_TXOP_KNOWN 0x00000010 5387232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_BAD_USIG_CRC 0x00000020 539d73de457SBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_VALIDATE_BITS_CHECKED 0x00000040 540d73de457SBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_VALIDATE_BITS_OK 0x00000080 5417232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_PHY_VER 0x00007000 5427232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW 0x00038000 543*ab95bca9SBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW_20MHZ 0x0 544*ab95bca9SBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW_40MHZ 0x1 545*ab95bca9SBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW_80MHZ 0x2 546*ab95bca9SBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW_160MHZ 0x3 547*ab95bca9SBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW_320MHZ_1 0x4 5487232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_UL_DL 0x00040000 5497232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_BSS_COLOR 0x01f80000 5507232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG_COMMON_TXOP 0xfe000000 5517232e6dcSBjoern A. Zeeb 5527232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG1_MU_B20_B24_DISREGARD 0x0000001f 5537232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG1_MU_B25_VALIDATE 0x00000020 5547232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_MU_B0_B1_PPDU_TYPE 0x000000c0 5557232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_MU_B2_VALIDATE 0x00000100 5567232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_MU_B3_B7_PUNCTURED_INFO 0x00003e00 5577232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_MU_B8_VALIDATE 0x00004000 5587232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_MU_B9_B10_SIG_MCS 0x00018000 5597232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_MU_B11_B15_EHT_SIG_SYMBOLS 0x003e0000 5607232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_MU_B16_B19_CRC 0x03c00000 5617232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_MU_B20_B25_TAIL 0xfc000000 5627232e6dcSBjoern A. Zeeb 5637232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG1_TB_B20_B25_DISREGARD 0x0000003f 5647232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_TB_B0_B1_PPDU_TYPE 0x000000c0 5657232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_TB_B2_VALIDATE 0x00000100 5667232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_TB_B3_B6_SPATIAL_REUSE_1 0x00001e00 5677232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_TB_B7_B10_SPATIAL_REUSE_2 0x0001e000 5687232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_TB_B11_B15_DISREGARD 0x003e0000 5697232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_TB_B16_B19_CRC 0x03c00000 5707232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USIG2_TB_B20_B25_TAIL 0xfc000000 5717232e6dcSBjoern A. Zeeb 5727232e6dcSBjoern A. Zeeb /* http://www.radiotap.org/fields/EHT.html */ 5737232e6dcSBjoern A. Zeeb struct ieee80211_radiotap_eht { 5747232e6dcSBjoern A. Zeeb uint32_t known; 5757232e6dcSBjoern A. Zeeb uint32_t data[9]; 5767232e6dcSBjoern A. Zeeb uint32_t user_info[]; 5777232e6dcSBjoern A. Zeeb } __packed; 5787232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_KNOWN_SPATIAL_REUSE 0x00000002 5797232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_KNOWN_GI 0x00000004 5807232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_KNOWN_EHT_LTF 0x00000010 5817232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_KNOWN_LDPC_EXTRA_SYM_OM 0x00000020 5827232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_KNOWN_PRE_PADD_FACOR_OM 0x00000040 5837232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_KNOWN_PE_DISAMBIGUITY_OM 0x00000080 5847232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_KNOWN_NSS_S 0x00020000 5857232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_KNOWN_BEAMFORMED_S 0x00040000 5867232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_KNOWN_NR_NON_OFDMA_USERS_M 0x00080000 5877232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_KNOWN_RU_ALLOC_TB_FMT 0x01000000 5887232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_KNOWN_PRIMARY_80 0x02000000 5897232e6dcSBjoern A. Zeeb 5907232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA0_SPATIAL_REUSE 0x00000078 5917232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA0_GI 0x00000180 5927232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA0_LTF 0x00000600 5937232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA0_EHT_LTF 0x00003800 5947232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA0_LDPC_EXTRA_SYM_OM 0x00004000 5957232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA0_PRE_PADD_FACOR_OM 0x00018000 5967232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA0_PE_DISAMBIGUITY_OM 0x00020000 5977232e6dcSBjoern A. Zeeb 5987232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA1_RU_ALLOC_CC_1_1_1 0x003fe000 5997232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA1_RU_ALLOC_CC_1_1_1_KNOWN 0x00400000 6007232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA1_PRIMARY_80 0xc0000000 6017232e6dcSBjoern A. Zeeb 6027232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_2_1_1 0x000001ff 6037232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_2_1_1_KNOWN 0x00000200 6047232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_1_1_2 0x0007fc00 6057232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_1_1_2_KNOWN 0x00080000 6067232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_2_1_2 0x1ff00000 6077232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_2_1_2_KNOWN 0x20000000 6087232e6dcSBjoern A. Zeeb 6097232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_1_2_1 0x000001ff 6107232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_1_2_1_KNOWN 0x00000200 6117232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_2_2_1 0x0007fc00 6127232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_2_2_1_KNOWN 0x00080000 6137232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_1_2_2 0x1ff00000 6147232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_1_2_2_KNOWN 0x20000000 6157232e6dcSBjoern A. Zeeb 6167232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA4_RU_ALLOC_CC_2_2_2 0x000001ff 6177232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA4_RU_ALLOC_CC_2_2_2_KNOWN 0x00000200 6187232e6dcSBjoern A. Zeeb 6197232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA7_NSS_S 0x0000f000 6207232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA7_BEAMFORMED_S 0x00010000 6217232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA7_NUM_OF_NON_OFDMA_USERS 0x000e0000 6227232e6dcSBjoern A. Zeeb 6237232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA8_RU_ALLOC_TB_FMT_PS_160 0x00000001 6247232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA8_RU_ALLOC_TB_FMT_B0 0x00000002 6257232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_DATA8_RU_ALLOC_TB_FMT_B7_B1 0x000001fc 6267232e6dcSBjoern A. Zeeb 6277232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USER_INFO_STA_ID_KNOWN 0x00000001 6287232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USER_INFO_MCS_KNOWN 0x00000002 6297232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USER_INFO_CODING_KNOWN 0x00000004 6307232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USER_INFO_NSS_KNOWN_O 0x00000010 6317232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USER_INFO_BEAMFORMING_KNOWN_O 0x00000020 6327232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USER_INFO_DATA_FOR_USER 0x00000080 6337232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USER_INFO_STA_ID 0x0007ff00 6347232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USER_INFO_CODING 0x00080000 6357232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USER_INFO_MCS 0x00f00000 6367232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USER_INFO_NSS_O 0x0f000000 6377232e6dcSBjoern A. Zeeb #define IEEE80211_RADIOTAP_EHT_USER_INFO_BEAMFORMING_O 0x20000000 6387232e6dcSBjoern A. Zeeb 639c6303b23SSam Leffler #endif /* !_NET80211_IEEE80211_RADIOTAP_H_ */ 640