aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-ieee80211-radiotap.c
diff options
context:
space:
mode:
authorRichard Sharpe <realrichardsharpe@gmail.com>2017-12-23 07:31:19 -0800
committerAnders Broman <a.broman58@gmail.com>2017-12-24 06:50:54 +0000
commit8d6202df4559d144bc8edc6fdf4bfa6112fe746f (patch)
treef588089354cb746e802929ca40b65680a11b0fc5 /epan/dissectors/packet-ieee80211-radiotap.c
parente30374d1691c5728cc979e9682ad4e99ea5c8252 (diff)
ieee80211-radiotap: Add definitions for HE information and dissect it.
Now that HE Information is starting to be used in radiotap headers we need to start defining and showing these. More will be comming, especially the dissection of the header itself and carrying info in the ieee_802_11_phdr structure. Change-Id: I94c2184e83243656764147029295ad4ce4254416 Reviewed-on: https://code.wireshark.org/review/24945 Petri-Dish: Richard Sharpe <realrichardsharpe@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-ieee80211-radiotap.c')
-rw-r--r--epan/dissectors/packet-ieee80211-radiotap.c608
1 files changed, 607 insertions, 1 deletions
diff --git a/epan/dissectors/packet-ieee80211-radiotap.c b/epan/dissectors/packet-ieee80211-radiotap.c
index 47b34bb191..932102a4fe 100644
--- a/epan/dissectors/packet-ieee80211-radiotap.c
+++ b/epan/dissectors/packet-ieee80211-radiotap.c
@@ -187,6 +187,7 @@ static int hf_radiotap_present_mcs = -1;
static int hf_radiotap_present_ampdu = -1;
static int hf_radiotap_present_vht = -1;
static int hf_radiotap_present_timestamp = -1;
+static int hf_radiotap_present_he = -1;
static int hf_radiotap_present_reserved = -1;
static int hf_radiotap_present_rtap_ns = -1;
static int hf_radiotap_present_vendor_ns = -1;
@@ -207,6 +208,67 @@ static int hf_radiotap_quality = -1;
static int hf_radiotap_fcs = -1;
static int hf_radiotap_fcs_bad = -1;
+/* HE Info fields */
+static int hf_radiotap_he_ppdu_format = -1;
+static int hf_radiotap_he_bss_color_known = -1;
+static int hf_radiotap_he_beam_change_known = -1;
+static int hf_radiotap_he_ul_dl_known = -1;
+static int hf_radiotap_he_data_mcs_known = -1;
+static int hf_radiotap_he_data_dcm_known = -1;
+static int hf_radiotap_he_coding_known = -1;
+static int hf_radiotap_he_ldpc_extra_symbol_segment_known = -1;
+static int hf_radiotap_he_stbc_known = -1;
+static int hf_radiotap_he_spatial_reuse_1_known = -1;
+static int hf_radiotap_he_spatial_reuse_2_known = -1;
+static int hf_radiotap_he_spatial_reuse_3_known = -1;
+static int hf_radiotap_he_spatial_reuse_4_known = -1;
+static int hf_radiotap_he_data_bw_ru_allocation_known = -1;
+static int hf_radiotap_he_dopler_known = -1;
+static int hf_radiotap_he_d2_reserved_b1 = -1;
+static int hf_radiotap_he_gi_known = -1;
+static int hf_radiotap_he_ltf_symbols_known = -1;
+static int hf_radiotap_he_pre_fec_padding_factor_known = -1;
+static int hf_radiotap_he_txbf_known = -1;
+static int hf_radiotap_he_pe_disambiguity_known = -1;
+static int hf_radiotap_he_txop_known = -1;
+static int hf_radiotap_he_midamble_periodicity_known = -1;
+static int hf_radiotap_he_d2_reserved_ff00 = -1;
+static int he_radiotap_he_bss_color = -1;
+static int he_radiotap_he_beam_change = -1;
+static int he_radiotap_he_ul_dl = -1;
+static int he_radiotap_he_data_mcs = -1;
+static int he_radiotap_he_data_dcm = -1;
+static int he_radiotap_he_coding = -1;
+static int he_radiotap_he_ldpc_extra_symbol_segment = -1;
+static int he_radiotap_he_stbc = -1;
+static int he_radiotap_spatial_reuse = -1;
+static int he_radiotap_he_su_reserved = -1;
+static int he_radiotap_spatial_reuse_1 = -1;
+static int he_radiotap_spatial_reuse_2 = -1;
+static int he_radiotap_spatial_reuse_3 = -1;
+static int he_radiotap_spatial_reuse_4 = -1;
+static int he_radiotap_sta_id_user_captured = -1;
+static int he_radiotap_he_mu_reserved = -1;
+static int he_radiotap_data_bandwidth_ru_allocation = -1;
+static int he_radiotap_gi = -1;
+static int he_radiotap_d5_reserved_00c0 = -1;
+static int he_radiotap_ltf_symbols = -1;
+static int he_radiotap_d5_reserved_b11 = -1;
+static int he_radiotap_pre_fec_padding_factor = -1;
+static int he_radiotap_txbf = -1;
+static int he_radiotap_pe_disambiguity = -1;
+static int hf_radiotap_he_nsts = -1;
+static int hf_radiotap_he_dopler_value = -1;
+static int hf_radiotap_he_d6_reserved_00e0 = -1;
+static int hf_radiotap_he_txop_value = -1;
+static int hf_radiotap_midamble_periodicity = -1;
+static int hf_radiotap_he_info_data_1 = -1;
+static int hf_radiotap_he_info_data_2 = -1;
+static int hf_radiotap_he_info_data_3 = -1;
+static int hf_radiotap_he_info_data_4 = -1;
+static int hf_radiotap_he_info_data_5 = -1;
+static int hf_radiotap_he_info_data_6 = -1;
+
static gint ett_radiotap = -1;
static gint ett_radiotap_present = -1;
static gint ett_radiotap_present_word = -1;
@@ -224,6 +286,13 @@ static gint ett_radiotap_vht_known = -1;
static gint ett_radiotap_vht_user = -1;
static gint ett_radiotap_timestamp = -1;
static gint ett_radiotap_timestamp_flags = -1;
+static gint ett_radiotap_he_info = -1;
+static gint ett_radiotap_he_info_data_1 = -1;
+static gint ett_radiotap_he_info_data_2 = -1;
+static gint ett_radiotap_he_info_data_3 = -1;
+static gint ett_radiotap_he_info_data_4 = -1;
+static gint ett_radiotap_he_info_data_5 = -1;
+static gint ett_radiotap_he_info_data_6 = -1;
static expert_field ei_radiotap_data_past_header = EI_INIT;
static expert_field ei_radiotap_present_reserved = EI_INIT;
@@ -662,6 +731,230 @@ capture_radiotap(const guchar * pd, int offset, int len, capture_packet_info_t *
return call_capture_dissector(ieee80211_cap_handle, pd, offset + it_len, len, cpinfo, pseudo_header);
}
+static const true_false_string tfs_known_unknown = {
+ "Known",
+ "Unknown"
+};
+
+static const int *data1_headers[] = {
+ &hf_radiotap_he_ppdu_format,
+ &hf_radiotap_he_bss_color_known,
+ &hf_radiotap_he_beam_change_known,
+ &hf_radiotap_he_ul_dl_known,
+ &hf_radiotap_he_data_mcs_known,
+ &hf_radiotap_he_data_dcm_known,
+ &hf_radiotap_he_coding_known,
+ &hf_radiotap_he_ldpc_extra_symbol_segment_known,
+ &hf_radiotap_he_stbc_known,
+ &hf_radiotap_he_spatial_reuse_1_known,
+ &hf_radiotap_he_spatial_reuse_2_known,
+ &hf_radiotap_he_spatial_reuse_3_known,
+ &hf_radiotap_he_spatial_reuse_4_known,
+ &hf_radiotap_he_data_bw_ru_allocation_known,
+ &hf_radiotap_he_dopler_known,
+ NULL
+};
+
+static const value_string he_pdu_format_vals[] = {
+ { IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_SU, "HE_SU" },
+ { IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_EXT_SU, "HE_EXT_SU" },
+ { IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_MU, "HE_MU" },
+ { IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_TRIG, "HE_TRIG" },
+ { 0, NULL }
+};
+
+static const int *data2_headers[] = {
+ &hf_radiotap_he_d2_reserved_b1,
+ &hf_radiotap_he_gi_known,
+ &hf_radiotap_he_ltf_symbols_known,
+ &hf_radiotap_he_pre_fec_padding_factor_known,
+ &hf_radiotap_he_txbf_known,
+ &hf_radiotap_he_pe_disambiguity_known,
+ &hf_radiotap_he_txop_known,
+ &hf_radiotap_he_midamble_periodicity_known,
+ &hf_radiotap_he_d2_reserved_ff00,
+ NULL
+};
+
+static const int *data3_headers[] = {
+ &he_radiotap_he_bss_color,
+ &he_radiotap_he_beam_change,
+ &he_radiotap_he_ul_dl,
+ &he_radiotap_he_data_mcs,
+ &he_radiotap_he_data_dcm,
+ &he_radiotap_he_coding,
+ &he_radiotap_he_ldpc_extra_symbol_segment,
+ &he_radiotap_he_stbc,
+ NULL
+};
+
+static const value_string he_coding_vals[] = {
+ { 0, "BCC" },
+ { 1, "LDPC" },
+ { 0, NULL }
+};
+
+static const int *data4_he_su_and_he_ext_su_headers[] = {
+ &he_radiotap_spatial_reuse,
+ &he_radiotap_he_su_reserved,
+ NULL
+};
+
+static const int *data4_he_trig_headers[] = {
+ &he_radiotap_spatial_reuse_1,
+ &he_radiotap_spatial_reuse_2,
+ &he_radiotap_spatial_reuse_3,
+ &he_radiotap_spatial_reuse_4,
+ NULL
+};
+
+static const int *data4_he_mu_headers[] = {
+ &he_radiotap_spatial_reuse,
+ &he_radiotap_sta_id_user_captured,
+ &he_radiotap_he_mu_reserved,
+ NULL
+};
+
+static const int *data5_headers[] = {
+ &he_radiotap_data_bandwidth_ru_allocation,
+ &he_radiotap_gi,
+ &he_radiotap_d5_reserved_00c0,
+ &he_radiotap_ltf_symbols,
+ &he_radiotap_d5_reserved_b11,
+ &he_radiotap_pre_fec_padding_factor,
+ &he_radiotap_txbf,
+ &he_radiotap_pe_disambiguity,
+ NULL
+};
+
+static const value_string he_data_bw_ru_alloc_vals[] = {
+ { 0, "20" },
+ { 1, "40" },
+ { 2, "80" },
+ { 3, "160/80+80" },
+ { 4, "26-tone RU" },
+ { 5, "52-tone RU" },
+ { 6, "106-tone RU" },
+ { 7, "242-tone RU" },
+ { 8, "484-tone RU" },
+ { 9, "996-tone RU" },
+ { 10, "2x996-tone RU" },
+ { 11, "reserved" },
+ { 12, "reserved" },
+ { 13, "reserved" },
+ { 14, "reserved" },
+ { 15, "reserved" },
+ { 0, NULL }
+};
+
+static const value_string he_gi_vals[] = {
+ { 0, "0.8us" },
+ { 1, "1.6us" },
+ { 2, "3.2us" },
+ { 3, "reserved" },
+ { 0, NULL }
+};
+
+static const value_string he_ltf_symbols_vals[] = {
+ { 0, "1x" },
+ { 1, "2x" },
+ { 2, "4x" },
+ { 3, "6x" },
+ { 4, "8x" },
+ { 5, "reserved" },
+ { 6, "reserved" },
+ { 7, "reserved" },
+ { 0, NULL }
+};
+
+static const int *data6_headers[] = {
+ &hf_radiotap_he_nsts,
+ &hf_radiotap_he_dopler_value,
+ &hf_radiotap_he_d6_reserved_00e0,
+ &hf_radiotap_he_txop_value,
+ &hf_radiotap_midamble_periodicity,
+ NULL
+};
+
+static const value_string he_nsts_vals[] = {
+ { 0, "Unknown" },
+ { 1, "1 space-time stream" },
+ { 2, "2 space-time streams" },
+ { 3, "3 space-time streams" },
+ { 4, "4 space-time streams" },
+ { 5, "5 space-time streams" },
+ { 6, "6 space-time streams" },
+ { 7, "7 space-time streams" },
+ { 8, "8 space-time streams" },
+ { 9, "9 space-time streams" },
+ { 10, "10 space-time streams" },
+ { 11, "11 space-time streams" },
+ { 12, "12 space-time streams" },
+ { 13, "13 space-time streams" },
+ { 14, "14 space-time streams" },
+ { 15, "15 space-time streams" },
+ { 0, NULL }
+};
+
+static const value_string he_midamble_periodicity_vals[] = {
+ { 0, "10" },
+ { 1, "20" },
+ { 0, NULL }
+};
+
+static void
+dissect_radiotap_he_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
+ int offset)
+{
+ guint16 ppdu_format = tvb_get_letohs(tvb, offset) &
+ IEEE80211_RADIOTAP_HE_PPDU_FORMAT_MASK;
+ proto_tree *he_info_tree = NULL;
+
+ he_info_tree = proto_tree_add_subtree(tree, tvb, offset, 12,
+ ett_radiotap_he_info, NULL, "HE information");
+
+ /* Add the bitmasks for each of D1 through D6 */
+ proto_tree_add_bitmask(he_info_tree, tvb, offset,
+ hf_radiotap_he_info_data_1, ett_radiotap_he_info_data_1,
+ data1_headers, ENC_LITTLE_ENDIAN);
+ offset += 2;
+
+ proto_tree_add_bitmask(he_info_tree, tvb, offset,
+ hf_radiotap_he_info_data_2, ett_radiotap_he_info_data_2,
+ data2_headers, ENC_LITTLE_ENDIAN);
+ offset += 2;
+
+ proto_tree_add_bitmask(he_info_tree, tvb, offset,
+ hf_radiotap_he_info_data_3, ett_radiotap_he_info_data_3,
+ data3_headers, ENC_LITTLE_ENDIAN);
+ offset += 2;
+
+ if (ppdu_format == IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_SU ||
+ ppdu_format == IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_EXT_SU)
+ proto_tree_add_bitmask(he_info_tree, tvb, offset,
+ hf_radiotap_he_info_data_4, ett_radiotap_he_info_data_4,
+ data4_he_su_and_he_ext_su_headers, ENC_LITTLE_ENDIAN);
+ else if (ppdu_format == IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_MU)
+ proto_tree_add_bitmask(he_info_tree, tvb, offset,
+ hf_radiotap_he_info_data_4, ett_radiotap_he_info_data_4,
+ data4_he_mu_headers, ENC_LITTLE_ENDIAN);
+ else
+ proto_tree_add_bitmask(he_info_tree, tvb, offset,
+ hf_radiotap_he_info_data_4, ett_radiotap_he_info_data_4,
+ data4_he_trig_headers, ENC_LITTLE_ENDIAN);
+
+ offset += 2;
+
+ proto_tree_add_bitmask(he_info_tree, tvb, offset,
+ hf_radiotap_he_info_data_5, ett_radiotap_he_info_data_5,
+ data5_headers, ENC_LITTLE_ENDIAN);
+ offset += 2;
+
+ proto_tree_add_bitmask(he_info_tree, tvb, offset,
+ hf_radiotap_he_info_data_6, ett_radiotap_he_info_data_6,
+ data6_headers, ENC_LITTLE_ENDIAN);
+}
+
static int
dissect_radiotap(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* unused_data _U_)
{
@@ -881,6 +1174,9 @@ dissect_radiotap(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* u
proto_tree_add_item(present_word_tree,
hf_radiotap_present_timestamp, tvb,
offset + 4, 4, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(present_word_tree,
+ hf_radiotap_present_he, tvb,
+ offset + 4, 4, ENC_LITTLE_ENDIAN);
ti = proto_tree_add_item(present_word_tree,
hf_radiotap_present_reserved, tvb,
@@ -1874,6 +2170,9 @@ dissect_radiotap(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* u
offset + 11, 1, ENC_LITTLE_ENDIAN);
break;
}
+ case IEEE80211_RADIOTAP_HE:
+ dissect_radiotap_he_info(tvb, pinfo, radiotap_tree, offset);
+ break;
}
}
@@ -2073,6 +2372,11 @@ void proto_register_radiotap(void)
FT_BOOLEAN, 32, TFS(&tfs_present_absent), RADIOTAP_MASK(TIMESTAMP),
"Specifies if the timestamp field is present", HFILL}},
+ {&hf_radiotap_present_he,
+ {"HE information", "radiotap.present.he",
+ FT_BOOLEAN, 32, TFS(&tfs_present_absent), RADIOTAP_MASK(HE),
+ "Specifies is the HE field is present", HFILL}},
+
{&hf_radiotap_present_reserved,
{"Reserved", "radiotap.present.reserved",
FT_UINT32, BASE_HEX, NULL, IEEE80211_RADIOTAP_NOTDEFINED,
@@ -2800,6 +3104,301 @@ void proto_register_radiotap(void)
FT_BOOLEAN, BASE_NONE, NULL, 0x0,
"Specifies if this frame has a bad frame check sequence", HFILL}},
+ {&hf_radiotap_he_info_data_1,
+ {"HE Data 1", "radiotap.he.data_1",
+ FT_UINT16, BASE_HEX, NULL, 0x0,
+ "Data 1 of the HE Info field", HFILL}},
+
+ {&hf_radiotap_he_ppdu_format,
+ {"PPDU Format", "radiotap.he.data_1.ppdu_format",
+ FT_UINT16, BASE_HEX, VALS(he_pdu_format_vals),
+ IEEE80211_RADIOTAP_HE_PPDU_FORMAT_MASK, NULL, HFILL}},
+
+ {&hf_radiotap_he_bss_color_known,
+ {"BSS Color known", "radiotap.he.data_1.bss_color_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown),
+ IEEE80211_RADIOTAP_HE_BSS_COLOR_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_he_beam_change_known,
+ {"Beam Change known", "radiotap.he.data_1.beam_change_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown),
+ IEEE80211_RADIOTAP_HE_BEAM_CHANGE_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_he_ul_dl_known,
+ {"UL/DL known", "radiotap.he.data_1.ul_dl_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown),
+ IEEE80211_RADIOTAP_HE_UL_DL_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_he_data_mcs_known,
+ {"data MCS known", "radiotap.he.data_1.data_mcs_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown),
+ IEEE80211_RADIOTAP_HE_DATA_MCS_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_he_data_dcm_known,
+ {"data DCM known", "radiotap.he.data_1.data_dcm_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown),
+ IEEE80211_RADIOTAP_HE_DATA_DCM_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_he_coding_known,
+ {"Coding known", "radiotap.he.data_1.coding_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown),
+ IEEE80211_RADIOTAP_HE_CODING_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_he_ldpc_extra_symbol_segment_known,
+ {"LDPC extra symbol segment known", "radiotap.he.data_1.ldpc_extra_symbol_segment_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown),
+ IEEE80211_RADIOTAP_HE_LDPC_EXTRA_SYMBOL_SEGMENT_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_he_stbc_known,
+ {"STBC known", "radiotap.he.data_1.stbc_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown),
+ IEEE80211_RADIOTAP_HE_STBC_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_he_spatial_reuse_1_known,
+ {"Spatial Reuse 1 known", "radiotap.he.data_1.spatial_reuse_1_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown),
+ IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_he_spatial_reuse_2_known,
+ {"Spatial Reuse 2 known", "radiotap.he.data_1.spatial_reuse_2_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown),
+ IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_2_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_he_spatial_reuse_3_known,
+ {"Spatial Reuse 3 known", "radiotap.he.data_1.spatial_reuse_3_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown),
+ IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_3_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_he_spatial_reuse_4_known,
+ {"Spatial Reuse 4 known", "radiotap.he.data_1.spatial_reuse_4_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown),
+ IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_4_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_he_data_bw_ru_allocation_known,
+ {"dat BW/RU allocation known", "radiotap.he.data_1.data_bw_ru_allocation_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown),
+ IEEE80211_RADIOTAP_HE_DATA_BW_RU_ALLOCATION_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_he_dopler_known,
+ {"Dopler known", "radiotap.he.data_1.dopler_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown),
+ IEEE80211_RADIOTAP_HE_DOPLER_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_he_info_data_2,
+ {"HE Data 2", "radiotap.he.data_2",
+ FT_UINT16, BASE_HEX, NULL, 0x0,
+ "Data 1 of the HE Info field", HFILL}},
+
+ {&hf_radiotap_he_d2_reserved_b1,
+ {"Reserved", "radiotap.he.data_2.reserved_ff00",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_RESERVED_D2_B1,
+ NULL, HFILL}},
+
+ {&hf_radiotap_he_gi_known,
+ {"GI known", "radiotap.he.data_2.gi_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown), IEEE80211_RADIOTAP_HE_GI_KNOWN,
+ NULL, HFILL}},
+
+ {&hf_radiotap_he_ltf_symbols_known,
+ {"LTF symbols known", "radiotap.he.data_2.ltf_symbols_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown), IEEE80211_RADIOTAP_HE_LTF_SYMBOLS_KNOWN,
+ NULL, HFILL}},
+
+ {&hf_radiotap_he_pre_fec_padding_factor_known,
+ {"Pre-FEC Padding Factor known", "radiotap.he.data_2.pre_fec_padding_factor_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown), IEEE80211_RADIOTAP_HE_PRE_FEC_PADDING_FACTOR_KNOWN,
+ NULL, HFILL}},
+
+ {&hf_radiotap_he_txbf_known,
+ {"TxBF known", "radiotap.he.data_2.txbf_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown), IEEE80211_RADIOTAP_HE_TXBF_KNOWN,
+ NULL, HFILL}},
+
+ {&hf_radiotap_he_pe_disambiguity_known,
+ {"PE Disambiguity known", "radiotap.he.data_2.pe_disambiguity_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown), IEEE80211_RADIOTAP_HE_PE_DISAMBIGUITY_KNOWN,
+ NULL, HFILL}},
+
+ {&hf_radiotap_he_txop_known,
+ {"TXOP known", "radiotap.he.data_2.txop_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown), IEEE80211_RADIOTAP_HE_TXOP_KNOWN,
+ NULL, HFILL}},
+
+ {&hf_radiotap_he_midamble_periodicity_known,
+ {"midamble periodicity known", "radiotap.he.data_2.midamble_periodicity_known",
+ FT_BOOLEAN, 16, TFS(&tfs_known_unknown), IEEE80211_RADIOTAP_HE_MIDAMBLE_PERIODICITY_KNOWN,
+ NULL, HFILL}},
+
+ {&hf_radiotap_he_d2_reserved_ff00,
+ {"Reserved", "radiotap.he.data_2.reserved_ff00",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_RESERVED_D2_FF00,
+ NULL, HFILL}},
+
+ {&he_radiotap_he_bss_color,
+ {"BSS Color", "radiotap.he.data_3.bss_color",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_BSS_COLOR_MASK,
+ NULL, HFILL}},
+
+ {&he_radiotap_he_beam_change,
+ {"Beam Change", "radiotap.he.data_3.beam_change",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_BEAM_CHANGE,
+ NULL, HFILL}},
+
+ {&he_radiotap_he_ul_dl,
+ {"UL/DL", "radiotap.he.data_3.ul_dl",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_UL_DL,
+ NULL, HFILL}},
+
+ {&he_radiotap_he_data_mcs,
+ {"data MCS", "radiotap.he.data_3.data_mcs",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_DATA_MCS_MASK,
+ NULL, HFILL}},
+
+ {&he_radiotap_he_data_dcm,
+ {"data DCM", "radiotap.he.data_3.data_dcm",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_DATA_DCM,
+ NULL, HFILL}},
+
+ {&he_radiotap_he_coding,
+ {"Coding", "radiotap.he.data_3.coding",
+ FT_UINT16, BASE_HEX, VALS(he_coding_vals),
+ IEEE80211_RADIOTAP_HE_CODING, NULL, HFILL}},
+
+ {&he_radiotap_he_ldpc_extra_symbol_segment,
+ {"LDPC extra symbol segment", "radiotap.he.data_3.ldpc_extra_symbol_segment",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_LDPC_EXTRA_SYMBOL_SEGMENT,
+ NULL, HFILL}},
+
+ {&he_radiotap_he_stbc,
+ {"STBC", "radiotap.he.data_3.stbc",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_STBC,
+ NULL, HFILL}},
+
+ {&hf_radiotap_he_info_data_3,
+ {"HE Data 3", "radiotap.he.data_3",
+ FT_UINT16, BASE_HEX, NULL, 0x0,
+ "Data 1 of the HE Info field", HFILL}},
+
+ {&he_radiotap_spatial_reuse,
+ {"Spatial Reuse", "radiotap.he.data_4.spatial_reuse",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_MASK,
+ NULL, HFILL}},
+
+ {&he_radiotap_he_su_reserved,
+ {"Reserved", "radiotap.he.data_4.reserved_d4_fff0",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_D4_FFF0,
+ NULL, HFILL}},
+
+ {&he_radiotap_spatial_reuse_1,
+ {"Spatial Reuse 1", "radiotap.he.data_4.spatial_reuse_1",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_1_MASK,
+ NULL, HFILL}},
+
+ {&he_radiotap_spatial_reuse_2,
+ {"Spatial Reuse 2", "radiotap.he.data_4.spatial_reuse_2",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_2_MASK,
+ NULL, HFILL}},
+
+ {&he_radiotap_spatial_reuse_3,
+ {"Spatial Reuse 3", "radiotap.he.data_4.spatial_reuse_3",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_3_MASK,
+ NULL, HFILL}},
+
+ {&he_radiotap_spatial_reuse_4,
+ {"Spatial Reuse 4", "radiotap.he.data_4.spatial_reuse_4",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_4_MASK,
+ NULL, HFILL}},
+
+ {&he_radiotap_sta_id_user_captured,
+ {"STA-ID of user data captured for", "radiotap.he.data_4.sta_id_user",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_STA_ID_MASK,
+ NULL, HFILL}},
+
+ {&he_radiotap_he_mu_reserved,
+ {"Reserved", "radiotap.he.data_4.reserved_d4_b15",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_RESERVED_D4_B15,
+ NULL, HFILL}},
+
+ {&hf_radiotap_he_info_data_4,
+ {"HE Data 4", "radiotap.he.data_4",
+ FT_UINT16, BASE_HEX, NULL, 0x0,
+ "Data 1 of the HE Info field", HFILL}},
+
+ {&he_radiotap_data_bandwidth_ru_allocation,
+ {"data Bandwidth/RU allocation", "radiotap.he.data_5.data_bw_ru_allocation",
+ FT_UINT16, BASE_HEX, VALS(he_data_bw_ru_alloc_vals),
+ IEEE80211_RADIOTAP_HE_DATA_BANDWIDTH_RU_ALLOC_MASK, NULL, HFILL}},
+
+ {&he_radiotap_gi,
+ {"GI", "radiotap.he.data_5.gi",
+ FT_UINT16, BASE_HEX, VALS(he_gi_vals), IEEE80211_RADIOTAP_HE_GI_MASK,
+ NULL, HFILL}},
+
+ {&he_radiotap_d5_reserved_00c0,
+ {"reserved", "radiotap.he.data_5.reserved_d5_00c0",
+ FT_UINT16, BASE_HEX, NULL,
+ IEEE80211_RADIOTAP_HE_RESERVED_D5_00C0, NULL, HFILL}},
+
+ {&he_radiotap_ltf_symbols,
+ {"LTF symbols", "radiotap.he.ltf_symbols",
+ FT_UINT16, BASE_HEX, VALS(he_ltf_symbols_vals),
+ IEEE80211_RADIOTAP_HE_LTF_SYMBOLS_MASK, NULL, HFILL}},
+
+ {&he_radiotap_d5_reserved_b11,
+ {"reserved", "radiotap.he.data_5.reserved_d5_b11",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_RESERVED_D5_B11,
+ NULL, HFILL}},
+
+ {&he_radiotap_pre_fec_padding_factor,
+ {"Pre-FEC Padding Factor", "radiotap.he.pre_fec_padding_factor",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_PRE_FEC_PADDING_FACTOR_MASK,
+ NULL, HFILL}},
+
+ {&he_radiotap_txbf,
+ {"TxBF", "radiotap.he.txbf",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_TXBF,
+ NULL, HFILL}},
+
+ {&he_radiotap_pe_disambiguity,
+ {"PE Disambiguity", "radiotap.he.pe_disambiguity",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_PE_DISAMBIGUITY,
+ NULL, HFILL}},
+
+ {&hf_radiotap_he_info_data_5,
+ {"HE Data 5", "radiotap.he.data_5",
+ FT_UINT16, BASE_HEX, NULL, 0x0,
+ "Data 1 of the HE Info field", HFILL}},
+
+ {&hf_radiotap_he_nsts,
+ {"NSTS", "radiotap.he.data_6.nsts",
+ FT_UINT16, BASE_HEX, VALS(he_nsts_vals),IEEE80211_RADIOTAP_HE_NSTS_MASK,
+ NULL, HFILL}},
+
+ {&hf_radiotap_he_dopler_value,
+ {"Dopler value", "radiotap.he.data_6.dopler_value",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_DOPLER_VALUE,
+ NULL, HFILL}},
+
+ {&hf_radiotap_he_d6_reserved_00e0,
+ {"Reserved", "radiotap.he.data_6.reserved_d6_00e0",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_RESERVED_D6_00E0,
+ NULL, HFILL}},
+
+ {&hf_radiotap_he_txop_value,
+ {"TXOP value", "radiotap.he.data_6.txop_value",
+ FT_UINT16, BASE_HEX, NULL, IEEE80211_RADIOTAP_HE_TXOP_VALUE_MASK,
+ NULL, HFILL}},
+
+ {&hf_radiotap_midamble_periodicity,
+ {"midamble periodicty", "radiotap.he.data_6.midamble_periodicity",
+ FT_UINT16, BASE_HEX, VALS(he_midamble_periodicity_vals),
+ IEEE80211_RADIOTAP_HE_MIDAMBLE_PERIODICITY, NULL, HFILL}},
+
+ {&hf_radiotap_he_info_data_6,
+ {"HE Data 6", "radiotap.he.data_6",
+ FT_UINT16, BASE_HEX, NULL, 0x0,
+ "Data 1 of the HE Info field", HFILL}},
+
};
static gint *ett[] = {
&ett_radiotap,
@@ -2818,7 +3417,14 @@ void proto_register_radiotap(void)
&ett_radiotap_vht_known,
&ett_radiotap_vht_user,
&ett_radiotap_timestamp,
- &ett_radiotap_timestamp_flags
+ &ett_radiotap_timestamp_flags,
+ &ett_radiotap_he_info,
+ &ett_radiotap_he_info_data_1,
+ &ett_radiotap_he_info_data_2,
+ &ett_radiotap_he_info_data_3,
+ &ett_radiotap_he_info_data_4,
+ &ett_radiotap_he_info_data_5,
+ &ett_radiotap_he_info_data_6,
};
static ei_register_info ei[] = {
{ &ei_radiotap_present, { "radiotap.present.radiotap_and_vendor", PI_MALFORMED, PI_ERROR, "Both radiotap and vendor namespace specified in bitmask word", EXPFILL }},