aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjoern A. Zeeb <bz@FreeBSD.org>2021-06-04 17:38:38 +0000
committerBjoern A. Zeeb <bz@FreeBSD.org>2021-07-18 00:35:03 +0000
commita30fe52a12f2d99dcc431c291d3451dae06209bd (patch)
treed08f07ed091bfe3c7e1ef4879b00f11edb5aa789
parentb5519f2ce733deec02e3fd398fe8a02dc6826899 (diff)
downloadsrc-a30fe52a12f2d99dcc431c291d3451dae06209bd.tar.gz
src-a30fe52a12f2d99dcc431c291d3451dae06209bd.zip
net80211/LinuxKPI: add more radiotap definitions
Add more raditap definitions based on "names" found in actual drivers and based on documentation from radiotap.org (where avail). Leave one specific "duplicate" in the LinuxKPI implementation but otherwise manage it all in net80211. Sponsored by: The FreeBSD Foundation Reviewed by: hselasky, adrian, sam Differential Revision: https://reviews.freebsd.org/D30641 (cherry picked from commit b5d37e5a20ab1b189499e2824dc269d998c31989)
-rw-r--r--sys/compat/linuxkpi/common/include/net/ieee80211_radiotap.h55
-rw-r--r--sys/net80211/ieee80211_radiotap.h134
2 files changed, 189 insertions, 0 deletions
diff --git a/sys/compat/linuxkpi/common/include/net/ieee80211_radiotap.h b/sys/compat/linuxkpi/common/include/net/ieee80211_radiotap.h
new file mode 100644
index 000000000000..9c22e3e06988
--- /dev/null
+++ b/sys/compat/linuxkpi/common/include/net/ieee80211_radiotap.h
@@ -0,0 +1,55 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2020-2021 The FreeBSD Foundation
+ *
+ * This software was developed by Björn Zeeb under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef __LKPI_NET_IEEE80211_RADIOTAP_H
+#define __LKPI_NET_IEEE80211_RADIOTAP_H
+
+/* Any possibly duplicate content is only maintained in one place now. */
+#include <net80211/ieee80211_radiotap.h>
+
+/*
+ * This structure deviates from
+ * 'https://www.radiotap.org/fields/Vendor%20Namespace.html'
+ * and the net80211::ieee80211_radiotap_vendor_header version.
+ * We consider it LinuxKPI specific so it stays here.
+ */
+struct ieee80211_vendor_radiotap {
+ u32 present;
+ u8 align;
+ u8 oui[3];
+ u8 subns;
+ u8 pad;
+ __le16 len;
+ u8 data[0];
+};
+
+#endif /* __LKPI_NET_IEEE80211_RADIOTAP_H */
diff --git a/sys/net80211/ieee80211_radiotap.h b/sys/net80211/ieee80211_radiotap.h
index f6e76e9fe8aa..bee1c633b53c 100644
--- a/sys/net80211/ieee80211_radiotap.h
+++ b/sys/net80211/ieee80211_radiotap.h
@@ -367,4 +367,138 @@ enum ieee80211_radiotap_type {
#define IEEE80211_RADIOTAP_VHT_BW_20UUL 24
#define IEEE80211_RADIOTAP_VHT_BW_20UUU 25
+/*
+ * These are found in various drivers already so use them rather than
+ * going by our own names and changing everything.
+ */
+
+/* https://www.radiotap.org/fields/VHT.html */
+#define IEEE80211_RADIOTAP_VHT_KNOWN_STBC 0x0001 /* net80211::IEEE80211_RADIOTAP_VHT_HAVE_STBC */
+#define IEEE80211_RADIOTAP_VHT_KNOWN_BEAMFORMED 0x0020 /* net80211::IEEE80211_RADIOTAP_VHT_HAVE_BF */
+
+/* https://www.radiotap.org/fields/0-length-PSDU.html */
+#define IEEE80211_RADIOTAP_ZERO_LEN_PSDU_SOUNDING 0x00
+#define IEEE80211_RADIOTAP_ZERO_LEN_PSDU_NOT_CAPTURED 0x01
+#define IEEE80211_RADIOTAP_ZERO_LEN_PSDU_VENDOR 0xFF
+
+/* https://www.radiotap.org/fields/HE.html */
+struct ieee80211_radiotap_he {
+ uint16_t data1, data2, data3, data4, data5, data6;
+};
+
+#define IEEE80211_RADIOTAP_HE_DATA1_FORMAT_SU 0x0000
+#define IEEE80211_RADIOTAP_HE_DATA1_FORMAT_EXT_SU 0x0001
+#define IEEE80211_RADIOTAP_HE_DATA1_FORMAT_MU 0x0002
+#define IEEE80211_RADIOTAP_HE_DATA1_FORMAT_TRIG 0x0003
+#define IEEE80211_RADIOTAP_HE_DATA1_BSS_COLOR_KNOWN 0x0004
+#define IEEE80211_RADIOTAP_HE_DATA1_BEAM_CHANGE_KNOWN 0x0008
+#define IEEE80211_RADIOTAP_HE_DATA1_UL_DL_KNOWN 0x0010
+#define IEEE80211_RADIOTAP_HE_DATA1_DATA_MCS_KNOWN 0x0020
+#define IEEE80211_RADIOTAP_HE_DATA1_DATA_DCM_KNOWN 0x0040
+#define IEEE80211_RADIOTAP_HE_DATA1_CODING_KNOWN 0x0080
+#define IEEE80211_RADIOTAP_HE_DATA1_LDPC_XSYMSEG_KNOWN 0x0100
+#define IEEE80211_RADIOTAP_HE_DATA1_STBC_KNOWN 0x0200
+#define IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE_KNOWN 0x0400
+#define IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE2_KNOWN 0x0800
+#define IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE3_KNOWN 0x1000
+#define IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE4_KNOWN 0x2000
+#define IEEE80211_RADIOTAP_HE_DATA1_BW_RU_ALLOC_KNOWN 0x4000
+#define IEEE80211_RADIOTAP_HE_DATA1_DOPPLER_KNOWN 0x8000
+
+#define IEEE80211_RADIOTAP_HE_DATA2_PRISEC_80_KNOWN 0x0001
+#define IEEE80211_RADIOTAP_HE_DATA2_GI_KNOWN 0x0002
+#define IEEE80211_RADIOTAP_HE_DATA2_NUM_LTF_SYMS_KNOWN 0x0004
+#define IEEE80211_RADIOTAP_HE_DATA2_PRE_FEC_PAD_KNOWN 0x0008
+#define IEEE80211_RADIOTAP_HE_DATA2_TXBF_KNOWN 0x0010
+#define IEEE80211_RADIOTAP_HE_DATA2_PE_DISAMBIG_KNOWN 0x0020
+#define IEEE80211_RADIOTAP_HE_DATA2_TXOP_KNOWN 0x0040
+/* #define IEEE80211_RADIOTAP_HE_DATA2_ midamble periodicity _KNOWN 0x0080 */
+#define IEEE80211_RADIOTAP_HE_DATA2_RU_OFFSET 0x3F00
+#define IEEE80211_RADIOTAP_HE_DATA2_RU_OFFSET_KNOWN 0x4000
+#define IEEE80211_RADIOTAP_HE_DATA2_PRISEC_80_SEC 0x8000
+
+#define IEEE80211_RADIOTAP_HE_DATA3_BSS_COLOR 0x003F
+#define IEEE80211_RADIOTAP_HE_DATA3_BEAM_CHANGE 0x0040
+#define IEEE80211_RADIOTAP_HE_DATA3_UL_DL 0x0080
+/* #deifne IEEE80211_RADIOTAP_HE_DATA3_data_MCS 0x0F00 */
+/* #define IEEE80211_RADIOTAP_HE_DATA3_data_DCM 0x1000 */
+/* #define IEEE80211_RADIOTAP_HE_DATA3_Coding 0x2000 */
+#define IEEE80211_RADIOTAP_HE_DATA3_LDPC_XSYMSEG 0x4000
+/* #define IEEE80211_RADIOTAP_HE_DATA3_STBC 0x8000 */
+
+#define IEEE80211_RADIOTAP_HE_DATA4_SU_MU_SPTL_REUSE 0x000F
+#define IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE1 0x000F
+#define IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE2 0x00F0
+#define IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE3 0x0F00
+#define IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE4 0xF000
+
+#define IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE 0x00C0
+#define IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_1X 0x1
+#define IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_2X 0x2
+#define IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_4X 0x3
+#define IEEE80211_RADIOTAP_HE_DATA5_NUM_LTF_SYMS 0x0700
+#define IEEE80211_RADIOTAP_HE_DATA5_PRE_FEC_PAD 0x3000
+#define IEEE80211_RADIOTAP_HE_DATA5_TXBF 0x4000
+#define IEEE80211_RADIOTAP_HE_DATA5_PE_DISAMBIG 0x8000
+
+#define IEEE80211_RADIOTAP_HE_DATA6_DOPPLER 0x0010
+/* 0x00e0 (reserved) ; use these for the following undocumented. */
+#define IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_KNOWN 0x0020
+#define IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW 0x00C0
+#define IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_20MHZ 0x0
+#define IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_40MHZ 0x1
+#define IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_80MHZ 0x2
+#define IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_160MHZ 0x3
+#define IEEE80211_RADIOTAP_HE_DATA6_TXOP 0x7F00
+
+/* https://www.radiotap.org/fields/HE-MU.html */
+struct ieee80211_radiotap_he_mu {
+ uint16_t flags1;
+ uint16_t flags2;
+ uint8_t ru_ch1[4];
+ uint8_t ru_ch2[4];
+};
+
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_MCS 0x000F
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_MCS_KNOWN 0x0010
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_DCM 0x0020
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_DCM_KNOWN 0x0040
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH2_CTR_26T_RU_KNOWN 0x0080
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH1_RU_KNOWN 0x0100
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH2_RU_KNOWN 0x0200
+/* reserved 0x0C00 */
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH1_CTR_26T_RU_KNOWN 0x1000
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH1_CTR_26T_RU 0x2000
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_COMP_KNOWN 0x4000
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_SYMS_USERS_KNOWN 0x8000
+
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW 0x0003
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_20MHZ 0x0000
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_40MHZ 0x0001
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_80MHZ 0x0002
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_160MHZ 0x0003
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_KNOWN 0x0004
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS2_SIG_B_COMP 0x0008
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS2_SIG_B_SYMS_USERS 0x00F0
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS2_PUNC_FROM_SIG_A_BW 0x0300
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS2_PUNC_FROM_SIG_A_BW_KNOWN 0x0400
+#define IEEE80211_RADIOTAP_HE_MU_FLAGS2_CH2_CTR_26T_RU 0x0800
+
+/* https://www.radiotap.org/fields/L-SIG.html */
+struct ieee80211_radiotap_lsig {
+ uint16_t data1;
+ uint16_t data2;
+};
+#define IEEE80211_RADIOTAP_LSIG_DATA1_LENGTH_KNOWN 0x0002
+
+#define IEEE80211_RADIOTAP_LSIG_DATA2_LENGTH 0xFFF0
+
+/* https://www.radiotap.org/fields/MCS.html */
+#define IEEE80211_RADIOTAP_MCS_HAVE_FEC 0x10
+#define IEEE80211_RADIOTAP_MCS_HAVE_STBC 0x20
+
+/* https://www.radiotap.org/fields/timestamp.html */
+#define IEEE80211_RADIOTAP_TIMESTAMP_UNIT_US 0x01
+#define IEEE80211_RADIOTAP_TIMESTAMP_SPOS_PLCP_SIG_ACQ 0x10
+
#endif /* !_NET80211_IEEE80211_RADIOTAP_H_ */