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>
This commit is contained in:
Richard Sharpe 2017-12-23 07:31:19 -08:00 committed by Anders Broman
parent e30374d169
commit 8d6202df45
3 changed files with 680 additions and 3 deletions

View File

@ -183,6 +183,8 @@ struct ieee80211_radiotap_header {
* IEEE80211_RADIOTAP_AMPDU_STATUS u32, u16, u8, u8 unitlesss
*
* Contains the AMPDU information for the subframe.
*
* IEEE80211_RADIOTAP_HE u16, u16, u16, u16, u16, u16 unitless
*/
enum ieee80211_radiotap_type {
IEEE80211_RADIOTAP_TSFT = 0,
@ -208,6 +210,7 @@ enum ieee80211_radiotap_type {
IEEE80211_RADIOTAP_AMPDU_STATUS = 20,
IEEE80211_RADIOTAP_VHT = 21,
IEEE80211_RADIOTAP_TIMESTAMP = 22,
IEEE80211_RADIOTAP_HE = 23,
/* valid in every it_present bitmap, even vendor namespaces */
IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE = 29,
@ -217,7 +220,7 @@ enum ieee80211_radiotap_type {
/* not (yet) defined Radiotap present flag */
/* Bit 23 to 28 are not defined (in binary : 0001 1111 1000 0000 0000 0000 0000 0000 */
#define IEEE80211_RADIOTAP_NOTDEFINED 0x1F800000
#define IEEE80211_RADIOTAP_NOTDEFINED 0x1F000000
/* Channel flags. */
/* 0x00000001 through 0x00000008 undefined (reserved?) */
@ -375,6 +378,73 @@ enum ieee80211_radiotap_type {
#define IEEE80211_RADIOTAP_TS_SPOS_EOF 0x2
#define IEEE80211_RADIOTAP_TS_SPOS_UNDEF 0xF
/* for IEEE80211_RADIOTAP_HE */
#define IEEE80211_RADIOTAP_HE_PPDU_FORMAT_MASK 0x0003
#define IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_SU 0
#define IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_EXT_SU 1
#define IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_MU 2
#define IEEE80211_RADIOTAP_HE_PPDU_FORMAT_HE_TRIG 3
#define IEEE80211_RADIOTAP_HE_BSS_COLOR_KNOWN 0x0004
#define IEEE80211_RADIOTAP_HE_BEAM_CHANGE_KNOWN 0x0008
#define IEEE80211_RADIOTAP_HE_UL_DL_KNOWN 0x0010
#define IEEE80211_RADIOTAP_HE_DATA_MCS_KNOWN 0x0020
#define IEEE80211_RADIOTAP_HE_DATA_DCM_KNOWN 0x0040
#define IEEE80211_RADIOTAP_HE_CODING_KNOWN 0x0080
#define IEEE80211_RADIOTAP_HE_LDPC_EXTRA_SYMBOL_SEGMENT_KNOWN 0x0100
#define IEEE80211_RADIOTAP_HE_STBC_KNOWN 0x0200
#define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_KNOWN 0x0400
#define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_2_KNOWN 0x0800
#define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_3_KNOWN 0x1000
#define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_4_KNOWN 0x2000
#define IEEE80211_RADIOTAP_HE_DATA_BW_RU_ALLOCATION_KNOWN 0x4000
#define IEEE80211_RADIOTAP_HE_DOPLER_KNOWN 0x8000
#define IEEE80211_RADIOTAP_HE_RESERVED_D2_B1 0x0001
#define IEEE80211_RADIOTAP_HE_GI_KNOWN 0x0002
#define IEEE80211_RADIOTAP_HE_LTF_SYMBOLS_KNOWN 0x0004
#define IEEE80211_RADIOTAP_HE_PRE_FEC_PADDING_FACTOR_KNOWN 0x0008
#define IEEE80211_RADIOTAP_HE_TXBF_KNOWN 0x0010
#define IEEE80211_RADIOTAP_HE_PE_DISAMBIGUITY_KNOWN 0x0020
#define IEEE80211_RADIOTAP_HE_TXOP_KNOWN 0x0040
#define IEEE80211_RADIOTAP_HE_MIDAMBLE_PERIODICITY_KNOWN 0x0080
#define IEEE80211_RADIOTAP_HE_RESERVED_D2_FF00 0xFF00
#define IEEE80211_RADIOTAP_HE_BSS_COLOR_MASK 0x003F
#define IEEE80211_RADIOTAP_HE_BEAM_CHANGE 0x0040
#define IEEE80211_RADIOTAP_HE_UL_DL 0x0080
#define IEEE80211_RADIOTAP_HE_DATA_MCS_MASK 0x0F00
#define IEEE80211_RADIOTAP_HE_DATA_DCM 0x1000
#define IEEE80211_RADIOTAP_HE_CODING 0x2000
#define IEEE80211_RADIOTAP_HE_LDPC_EXTRA_SYMBOL_SEGMENT 0x4000
#define IEEE80211_RADIOTAP_HE_STBC 0x8000
/* HE_SU and HE_EXT_SU formap PPDU */
#define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_MASK 0x000F
#define IEEE80211_RADIOTAP_HE_D4_FFF0 0xFFF0
/* HE_TRIG format PPDU */
#define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_1_MASK 0X000F
#define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_2_MASK 0X00F0
#define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_3_MASK 0X0F00
#define IEEE80211_RADIOTAP_HE_SPATIAL_REUSE_4_MASK 0XF000
/* HE_MU format PPDU-also uses SPATIAL_REUSE_MASK from above */
#define IEEE80211_RADIOTAP_HE_STA_ID_MASK 0x7FF0
#define IEEE80211_RADIOTAP_HE_RESERVED_D4_B15 0x8000
#define IEEE80211_RADIOTAP_HE_DATA_BANDWIDTH_RU_ALLOC_MASK 0x000F
#define IEEE80211_RADIOTAP_HE_GI_MASK 0x0030
#define IEEE80211_RADIOTAP_HE_GI_0_POINT_8_MICRO 0
#define IEEE80211_RADIOTAP_HE_GI_1_POINT_6_MICRO 1
#define IEEE80211_RADIOTAP_HE_GI_3_POINT_2_MICRO 2
#define IEEE80211_RADIOTAP_HE_GI_RESERVED 3
#define IEEE80211_RADIOTAP_HE_RESERVED_D5_00C0 0x00C0
#define IEEE80211_RADIOTAP_HE_LTF_SYMBOLS_MASK 0x0700
#define IEEE80211_RADIOTAP_HE_RESERVED_D5_B11 0x0800
#define IEEE80211_RADIOTAP_HE_PRE_FEC_PADDING_FACTOR_MASK 0x3000
#define IEEE80211_RADIOTAP_HE_TXBF 0x4000
#define IEEE80211_RADIOTAP_HE_PE_DISAMBIGUITY 0x8000
#define IEEE80211_RADIOTAP_HE_NSTS_MASK 0x000F
#define IEEE80211_RADIOTAP_HE_DOPLER_VALUE 0x0010
#define IEEE80211_RADIOTAP_HE_RESERVED_D6_00E0 0x00E0
#define IEEE80211_RADIOTAP_HE_TXOP_VALUE_MASK 0x7F00
#define IEEE80211_RADIOTAP_HE_MIDAMBLE_PERIODICITY 0x8000
#define IEEE80211_RADIOTAP_TS_FLG_32BIT 0x01
#define IEEE80211_RADIOTAP_TS_FLG_ACCURACY 0x02

View File

@ -63,7 +63,8 @@ static const struct radiotap_align_size rtap_namespace_sizes[] = {
/* [IEEE80211_RADIOTAP_MCS] = 19 */ { 1, 3 },
/* [IEEE80211_RADIOTAP_AMPDU_STATUS] = 20 */ { 4, 8 },
/* [IEEE80211_RADIOTAP_VHT] = 21 */ { 2, 12 },
/* [IEEE80211_RADIOTAP_TIMESTAMP] = 22 */ { 8, 12 }
/* [IEEE80211_RADIOTAP_TIMESTAMP] = 22 */ { 8, 12 },
/* [IEEE80211_RADIOTAP_HE] = 23 */ { 2, 12 }
/*
* add more here as they are defined in

View File

@ -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 }},