aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-ieee80211-radiotap.c
diff options
context:
space:
mode:
authorRichard Sharpe <realrichardsharpe@gmail.com>2021-01-02 14:40:24 -0800
committerWireshark GitLab Utility <gerald+gitlab-utility@wireshark.org>2021-02-01 19:34:55 +0000
commitfb2a0b4a71b134a2830e39b6493a4007818ceda6 (patch)
treebb0805ab62e16d0bbd63acb0c77f75102f26d92b /epan/dissectors/packet-ieee80211-radiotap.c
parentfc5d8db628f20f63e8e8f6435384086424c15a28 (diff)
ieee80211: Add support for S1G including PV1.
S1G adapters should be shipping soon since Silex America has a dev-kit available, so it is about time to add support for this. Change-Id: I0225d87f78efbcbe88476921d4fce3d56a3ce0cd
Diffstat (limited to 'epan/dissectors/packet-ieee80211-radiotap.c')
-rw-r--r--epan/dissectors/packet-ieee80211-radiotap.c1160
1 files changed, 1153 insertions, 7 deletions
diff --git a/epan/dissectors/packet-ieee80211-radiotap.c b/epan/dissectors/packet-ieee80211-radiotap.c
index a6489b87f6..cc514f87ff 100644
--- a/epan/dissectors/packet-ieee80211-radiotap.c
+++ b/epan/dissectors/packet-ieee80211-radiotap.c
@@ -39,7 +39,6 @@ static int hf_radiotap_pad = -1;
static int hf_radiotap_length = -1;
static int hf_radiotap_present = -1;
-static int hf_radiotap_tlv = -1;
static int hf_radiotap_tlv_type = -1;
static int hf_radiotap_tlv_datalen = -1;
static int hf_radiotap_unknown_tlv_data = -1;
@@ -48,6 +47,9 @@ static int hf_radiotap_mactime = -1;
/* static int hf_radiotap_channel = -1; */
static int hf_radiotap_channel_frequency = -1;
static int hf_radiotap_channel_flags = -1;
+static int hf_radiotap_channel_flags_700mhz = -1;
+static int hf_radiotap_channel_flags_800mhz = -1;
+static int hf_radiotap_channel_flags_900mhz = -1;
static int hf_radiotap_channel_flags_turbo = -1;
static int hf_radiotap_channel_flags_cck = -1;
static int hf_radiotap_channel_flags_ofdm = -1;
@@ -363,6 +365,120 @@ static int hf_radiotap_l_sig_data_2 = -1;
static int hf_radiotap_l_sig_rate = -1;
static int hf_radiotap_l_sig_length = -1;
+/* S1G */
+static int hf_radiotap_s1g_known = -1;
+static int hf_radiotap_s1g_s1g_ppdu_format_known = -1;
+static int hf_radiotap_s1g_response_indication_known = -1;
+static int hf_radiotap_s1g_guard_interval_known = -1;
+static int hf_radiotap_s1g_nss_known = -1;
+static int hf_radiotap_s1g_bandwidth_known = -1;
+static int hf_radiotap_s1g_mcs_known = -1;
+static int hf_radiotap_s1g_color_known = -1;
+static int hf_radiotap_s1g_uplink_indication_known = -1;
+static int hf_radiotap_s1g_reserved_1 = -1;
+static int hf_radiotap_s1g_data_1 = -1;
+static int hf_radiotap_s1g_s1g_ppdu_format = -1;
+static int hf_radiotap_s1g_response_indication = -1;
+static int hf_radiotap_s1g_reserved_2 = -1;
+static int hf_radiotap_s1g_guard_interval = -1;
+static int hf_radiotap_s1g_nss = -1;
+static int hf_radiotap_s1g_bandwidth = -1;
+static int hf_radiotap_s1g_mcs = -1;
+static int hf_radiotap_s1g_data_2 = -1;
+static int hf_radiotap_s1g_color = -1;
+static int hf_radiotap_s1g_uplink_indication = -1;
+static int hf_radiotap_s1g_rssi = -1;
+static int hf_radiotap_s1g_reserved_3 = -1;
+
+/* S1G NDP */
+static int hf_radiotap_s1g_ndp_bytes = -1;
+static int hf_radiotap_s1g_ndp_ctrl = -1;
+static int hf_radiotap_s1g_ndp_mgmt = -1;
+static int hf_radiotap_s1g_ndp_type_3bit = -1;
+static int hf_radiotap_s1g_ndp_ack_1m = -1;
+static int hf_radiotap_s1g_ndp_ack_1m_ack_id = -1;
+static int hf_radiotap_s1g_ndp_ack_1m_more_data = -1;
+static int hf_radiotap_s1g_ndp_ack_1m_idle_indication = -1;
+static int hf_radiotap_s1g_ndp_ack_1m_duration = -1;
+static int hf_radiotap_s1g_ndp_ack_1m_relayed_frame = -1;
+static int hf_radiotap_s1g_ndp_ack_2m = -1;
+static int hf_radiotap_s1g_ndp_ack_2m_ack_id = -1;
+static int hf_radiotap_s1g_ndp_ack_2m_more_data = -1;
+static int hf_radiotap_s1g_ndp_ack_2m_idle_indication = -1;
+static int hf_radiotap_s1g_ndp_ack_2m_duration = -1;
+static int hf_radiotap_s1g_ndp_ack_2m_relayed_frame = -1;
+static int hf_radiotap_s1g_ndp_ack_2m_reserved = -1;
+static int hf_radiotap_s1g_ndp_cts_1m = -1;
+static int hf_radiotap_s1g_ndp_cts_cf_end_indic = -1;
+static int hf_radiotap_s1g_ndp_cts_address_indic = -1;
+static int hf_radiotap_s1g_ndp_cts_ra_partial_bssid = -1;
+static int hf_radiotap_s1g_ndp_cts_duration_1m = -1;
+static int hf_radiotap_s1g_ndp_cts_duration_2m = -1;
+static int hf_radiotap_s1g_ndp_cts_early_sector_indic_1m = -1;
+static int hf_radiotap_s1g_ndp_cts_2m = -1;
+static int hf_radiotap_s1g_ndp_cts_early_sector_indic_2m = -1;
+static int hf_radiotap_s1g_ndp_cts_bandwidth_indic_2m = -1;
+static int hf_radiotap_s1g_ndp_cts_reserved = -1;
+static int hf_radiotap_s1g_ndp_cf_end_1m = -1;
+static int hf_radiotap_s1g_ndp_cf_end_partial_bssid = -1;
+static int hf_radiotap_s1g_ndp_cf_end_duration_1m = -1;
+static int hf_radiotap_s1g_ndp_cf_end_reserved_1m = -1;
+static int hf_radiotap_s1g_ndp_cf_end_2m = -1;
+static int hf_radiotap_s1g_ndp_cf_end_duration_2m = -1;
+static int hf_radiotap_s1g_ndp_cf_end_reserved_2m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_1m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_ra = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_ta = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_preferred_mcs_1m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_udi_1m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_2m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_preferred_mcs_2m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_udi_2m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_ack_1m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_ack_id = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_ack_more_data = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_ack_idle_indication = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_ack_duration_1m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_ack_reserved_1m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_ack_2m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_ack_id_2m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_ack_more_data_2m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_ack_idle_indication_2m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_ack_duration_2m = -1;
+static int hf_radiotap_s1g_ndp_ps_poll_ack_reserved_2m = -1;
+static int hf_radiotap_s1g_ndp_block_ack_1m = -1;
+static int hf_radiotap_s1g_ndp_block_ack_id_1m = -1;
+static int hf_radiotap_s1g_ndp_block_ack_starting_sequence_control_1m = -1;
+static int hf_radiotap_s1g_ndp_block_ack_bitmap_1m = -1;
+static int hf_radiotap_s1g_ndp_block_ack_unused_1m = -1;
+static int hf_radiotap_s1g_ndp_block_ack_2m = -1;
+static int hf_radiotap_s1g_ndp_block_ack_id_2m = -1;
+static int hf_radiotap_s1g_ndp_block_ack_starting_sequence_control_2m = -1;
+static int hf_radiotap_s1g_ndp_block_ack_bitmap_2m = -1;
+static int hf_radiotap_s1g_ndp_beamforming_report_poll = -1;
+static int hf_radiotap_s1g_ndp_beamforming_ap_address = -1;
+static int hf_radiotap_s1g_ndp_beamforming_non_ap_sta_address = -1;
+static int hf_radiotap_s1g_ndp_beamforming_feedback_segment_bitmap = -1;
+static int hf_radiotap_s1g_ndp_beamforming_reserved = -1;
+static int hf_radiotap_s1g_ndp_paging_1m = -1;
+static int hf_radiotap_s1g_ndp_paging_p_id = -1;
+static int hf_radiotap_s1g_ndp_paging_apdi_partial_aid = -1;
+static int hf_radiotap_s1g_ndp_paging_direction = -1;
+static int hf_radiotap_s1g_ndp_paging_reserved_1m = -1;
+static int hf_radiotap_s1g_ndp_paging_2m = -1;
+static int hf_radiotap_s1g_ndp_paging_reserved_2m = -1;
+static int hf_radiotap_s1g_ndp_probe_1m = -1;
+static int hf_radiotap_s1g_ndp_probe_cssid_ano_present = -1;
+static int hf_radiotap_s1g_ndp_probe_1m_cssid_ano = -1;
+static int hf_radiotap_s1g_ndp_probe_1m_requested_response_type = -1;
+static int hf_radiotap_s1g_ndp_probe_1m_reserved = -1;
+static int hf_radiotap_s1g_ndp_probe_2m = -1;
+static int hf_radiotap_s1g_ndp_probe_2m_cssid_ano = -1;
+static int hf_radiotap_s1g_ndp_probe_2m_requested_response_type = -1;
+static int hf_radiotap_s1g_ndp_1m_unused = -1;
+static int hf_radiotap_s1g_ndp_2m_unused = -1;
+static int hf_radiotap_s1g_ndp_bw = -1;
+
static gint ett_radiotap = -1;
static gint ett_radiotap_tlv = -1;
static gint ett_radiotap_present = -1;
@@ -398,6 +514,23 @@ static gint ett_radiotap_l_sig = -1;
static gint ett_radiotap_l_sig_data_1 = -1;
static gint ett_radiotap_l_sig_data_2 = -1;
static gint ett_radiotap_unknown_tlv = -1;
+/* S1G */
+static gint ett_radiotap_s1g = -1;
+static gint ett_radiotap_s1g_known = -1;
+static gint ett_radiotap_s1g_data_1 = -1;
+static gint ett_radiotap_s1g_data_2 = -1;
+
+/* S1G NDP */
+static gint ett_s1g_ndp = -1;
+static gint ett_s1g_ndp_ack = -1;
+static gint ett_s1g_ndp_cts = -1;
+static gint ett_s1g_ndp_cf_end = -1;
+static gint ett_s1g_ndp_ps_poll = -1;
+static gint ett_s1g_ndp_ps_poll_ack = -1;
+static gint ett_s1g_ndp_block_ack = -1;
+static gint ett_s1g_ndp_beamforming_report_poll = -1;
+static gint ett_s1g_ndp_paging = -1;
+static gint ett_s1g_ndp_probe = -1;
static expert_field ei_radiotap_invalid_header_length = EI_INIT;
static expert_field ei_radiotap_data_past_header = EI_INIT;
@@ -737,6 +870,72 @@ static const value_string timestamp_spos[] = {
{ 0, NULL }
};
+/* S1G */
+static const value_string s1g_ppdu_format[] = {
+ { 0, "S1G 1M" },
+ { 1, "S1G Short" },
+ { 2, "S1G Long" },
+ { 0, NULL},
+};
+
+static const value_string s1g_response_indication[] = {
+ { 0, "No response" },
+ { 1, "NDP response" },
+ { 2, "Normal response" },
+ { 3, "Long response" },
+ { 0, NULL},
+};
+
+static const value_string s1g_guard_interval[] = {
+ { 0, "Long GI" },
+ { 1, "Short GI" },
+ { 0, NULL},
+};
+
+static const value_string s1g_nss[] = {
+ { 0, "1" },
+ { 1, "2" },
+ { 2, "3" },
+ { 3, "4" },
+ { 0, NULL},
+};
+
+static const value_string s1g_bandwidth[] = {
+ { 0, "1MHz channel" },
+ { 1, "2MHz channel" },
+ { 2, "4MHz channel" },
+ { 3, "8MHz channel" },
+ { 4, "16MHz channel" },
+ { 0, NULL},
+};
+
+static const value_string s1g_mcs[] = {
+ { 0, "0" },
+ { 1, "1" },
+ { 2, "2" },
+ { 3, "3" },
+ { 4, "4" },
+ { 5, "5" },
+ { 6, "6" },
+ { 7, "7" },
+ { 8, "8" },
+ { 9, "9" },
+ { 10, "10" },
+ { 0, NULL},
+};
+
+static const value_string s1g_color[] = {
+ { 0, "0" },
+ { 1, "1" },
+ { 2, "2" },
+ { 3, "3" },
+ { 4, "4" },
+ { 5, "5" },
+ { 6, "6" },
+ { 7, "7" },
+ { 0, NULL},
+};
+
/*
* The NetBSD ieee80211_radiotap man page
* (http://netbsd.gw.com/cgi-bin/man-cgi?ieee80211_radiotap+9+NetBSD-current)
@@ -1363,6 +1562,11 @@ dissect_radiotap_he_mu_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *t
} else {
flags1_headers[5] = &hf_radiotap_he_mu_chan1_rus_known;
}
+ if (!mu_chan2_rus_known) {
+ flags1_headers[6] = &hf_radiotap_he_mu_chan2_rus_unknown;
+ } else {
+ flags1_headers[6] = &hf_radiotap_he_mu_chan2_rus_known;
+ }
if (!mu_chan1_center_26_tone_ru_bit_known) {
flags1_headers[8] = &hf_radiotap_he_mu_chan1_center_26_tone_ru_bit_unknown;
} else {
@@ -1517,17 +1721,23 @@ dissect_radiotap_he_mu_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *t
static const range_string zero_length_psdu_rsvals[] = {
{ 0, 0, "sounding PPDU" },
- { 1, 254, "reserved" },
+ { 1, 1, "reserved" },
+ { 2, 2, "S1G NDP CMAC frame" },
+ { 3, 254, "reserved" },
{ 255, 255, "vendor-specific" },
{ 0, 0, NULL }
};
+static int
+dissect_s1g_ndp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree);
+
static void
dissect_radiotap_0_length_psdu(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
int offset, struct ieee_802_11_phdr *phdr)
{
proto_tree *zero_len_tree = NULL;
guint32 psdu_type;
+ tvbuff_t *new_tvb = NULL;
zero_len_tree = proto_tree_add_subtree(tree, tvb, offset, 1,
ett_radiotap_0_length_psdu, NULL, "0-length PSDU");
@@ -1546,6 +1756,13 @@ dissect_radiotap_0_length_psdu(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
phdr->zero_length_psdu_type = PHDR_802_11_DATA_NOT_CAPTURED;
break;
+ case 2:
+ phdr->has_zero_length_psdu_type = TRUE;
+ phdr->zero_length_psdu_type = PHDR_802_11_0_LENGTH_PSDU_S1G_NDP;
+ new_tvb = tvb_new_subset_length(tvb, offset, 6);
+ dissect_s1g_ndp(new_tvb, pinfo, zero_len_tree);
+ break;
+
case 0xff:
phdr->has_zero_length_psdu_type = TRUE;
phdr->zero_length_psdu_type = PHDR_802_11_0_LENGTH_PSDU_VENDOR_SPECIFIC;
@@ -1585,6 +1802,427 @@ dissect_radiotap_l_sig(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
l_sig_data2_headers, ENC_LITTLE_ENDIAN);
}
+/*
+ * Dissect an S1G NDP as it is currently. This is a 6-byte field, with the
+ * first byte looking like the first byte of the FCF, and coded using
+ * reserved values for the subtype. The remaining bytes are the NDP data,
+ * with the last two bits distinguishing between 1M and 2M.
+ */
+
+#define S1G_NDP_CTS_CF_END 0x00
+#define S1G_NDP_PS_POLL 0x01
+#define S1G_NDP_ACK 0x02
+#define S1G_NDP_PS_POLL_ACK 0x03
+#define S1G_NDP_BLOCK_ACK 0x04
+#define S1G_NDP_BEAMFORMING_REPORT_POLL 0x05
+#define S1G_NDP_PAGING 0x06
+#define S1G_NDP_PROBE_REQ 0x07
+
+static int * const ndp_ack_1m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_ack_1m_ack_id,
+ &hf_radiotap_s1g_ndp_ack_1m_more_data,
+ &hf_radiotap_s1g_ndp_ack_1m_idle_indication,
+ &hf_radiotap_s1g_ndp_ack_1m_duration,
+ &hf_radiotap_s1g_ndp_ack_1m_relayed_frame,
+ &hf_radiotap_s1g_ndp_1m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_ack_2m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_ack_2m_ack_id,
+ &hf_radiotap_s1g_ndp_ack_2m_more_data,
+ &hf_radiotap_s1g_ndp_ack_2m_idle_indication,
+ &hf_radiotap_s1g_ndp_ack_2m_duration,
+ &hf_radiotap_s1g_ndp_ack_2m_relayed_frame,
+ &hf_radiotap_s1g_ndp_ack_2m_reserved,
+ &hf_radiotap_s1g_ndp_2m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_probe_1m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_probe_cssid_ano_present,
+ &hf_radiotap_s1g_ndp_probe_1m_cssid_ano,
+ &hf_radiotap_s1g_ndp_probe_1m_requested_response_type,
+ &hf_radiotap_s1g_ndp_probe_1m_reserved,
+ &hf_radiotap_s1g_ndp_1m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_probe_2m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_probe_cssid_ano_present,
+ &hf_radiotap_s1g_ndp_probe_2m_cssid_ano,
+ &hf_radiotap_s1g_ndp_probe_2m_requested_response_type,
+ &hf_radiotap_s1g_ndp_2m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_cts_1m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_cts_cf_end_indic,
+ &hf_radiotap_s1g_ndp_cts_address_indic,
+ &hf_radiotap_s1g_ndp_cts_ra_partial_bssid,
+ &hf_radiotap_s1g_ndp_cts_duration_1m,
+ &hf_radiotap_s1g_ndp_cts_early_sector_indic_1m,
+ &hf_radiotap_s1g_ndp_1m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_cts_2m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_cts_cf_end_indic,
+ &hf_radiotap_s1g_ndp_cts_address_indic,
+ &hf_radiotap_s1g_ndp_cts_ra_partial_bssid,
+ &hf_radiotap_s1g_ndp_cts_duration_2m,
+ &hf_radiotap_s1g_ndp_cts_early_sector_indic_2m,
+ &hf_radiotap_s1g_ndp_cts_bandwidth_indic_2m,
+ &hf_radiotap_s1g_ndp_cts_reserved,
+ &hf_radiotap_s1g_ndp_2m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_cf_end_1m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_cts_cf_end_indic,
+ &hf_radiotap_s1g_ndp_cf_end_partial_bssid,
+ &hf_radiotap_s1g_ndp_cf_end_duration_1m,
+ &hf_radiotap_s1g_ndp_cf_end_reserved_1m,
+ &hf_radiotap_s1g_ndp_1m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_cf_end_2m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_cts_cf_end_indic,
+ &hf_radiotap_s1g_ndp_cf_end_partial_bssid,
+ &hf_radiotap_s1g_ndp_cf_end_duration_2m,
+ &hf_radiotap_s1g_ndp_cf_end_reserved_2m,
+ &hf_radiotap_s1g_ndp_1m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_ps_poll_1m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_ps_poll_ra,
+ &hf_radiotap_s1g_ndp_ps_poll_ta,
+ &hf_radiotap_s1g_ndp_ps_poll_preferred_mcs_1m,
+ &hf_radiotap_s1g_ndp_ps_poll_udi_1m,
+ &hf_radiotap_s1g_ndp_1m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_ps_poll_2m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_ps_poll_ra,
+ &hf_radiotap_s1g_ndp_ps_poll_ta,
+ &hf_radiotap_s1g_ndp_ps_poll_preferred_mcs_2m,
+ &hf_radiotap_s1g_ndp_ps_poll_udi_2m,
+ &hf_radiotap_s1g_ndp_2m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_ps_poll_ack_1m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_ps_poll_ack_id,
+ &hf_radiotap_s1g_ndp_ps_poll_ack_more_data,
+ &hf_radiotap_s1g_ndp_ps_poll_ack_idle_indication,
+ &hf_radiotap_s1g_ndp_ps_poll_ack_duration_1m,
+ &hf_radiotap_s1g_ndp_ps_poll_ack_reserved_1m,
+ &hf_radiotap_s1g_ndp_1m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_ps_poll_ack_2m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_ps_poll_ack_id_2m,
+ &hf_radiotap_s1g_ndp_ps_poll_ack_more_data_2m,
+ &hf_radiotap_s1g_ndp_ps_poll_ack_idle_indication_2m,
+ &hf_radiotap_s1g_ndp_ps_poll_ack_duration_2m,
+ &hf_radiotap_s1g_ndp_ps_poll_ack_reserved_2m,
+ &hf_radiotap_s1g_ndp_2m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_block_ack_1m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_block_ack_id_1m,
+ &hf_radiotap_s1g_ndp_block_ack_starting_sequence_control_1m,
+ &hf_radiotap_s1g_ndp_block_ack_bitmap_1m,
+ &hf_radiotap_s1g_ndp_block_ack_unused_1m,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_block_ack_2m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_block_ack_id_2m,
+ &hf_radiotap_s1g_ndp_block_ack_starting_sequence_control_2m,
+ &hf_radiotap_s1g_ndp_block_ack_bitmap_2m,
+ &hf_radiotap_s1g_ndp_2m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_beamforming_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_beamforming_ap_address,
+ &hf_radiotap_s1g_ndp_beamforming_non_ap_sta_address,
+ &hf_radiotap_s1g_ndp_beamforming_feedback_segment_bitmap,
+ &hf_radiotap_s1g_ndp_beamforming_reserved,
+ &hf_radiotap_s1g_ndp_2m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_paging_1m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_paging_p_id,
+ &hf_radiotap_s1g_ndp_paging_apdi_partial_aid,
+ &hf_radiotap_s1g_ndp_paging_direction,
+ &hf_radiotap_s1g_ndp_paging_reserved_1m,
+ &hf_radiotap_s1g_ndp_1m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int * const ndp_paging_2m_headers[] = {
+ &hf_radiotap_s1g_ndp_type_3bit,
+ &hf_radiotap_s1g_ndp_paging_p_id,
+ &hf_radiotap_s1g_ndp_paging_apdi_partial_aid,
+ &hf_radiotap_s1g_ndp_paging_direction,
+ &hf_radiotap_s1g_ndp_paging_reserved_2m,
+ &hf_radiotap_s1g_ndp_2m_unused,
+ &hf_radiotap_s1g_ndp_bw,
+ NULL
+};
+
+static int
+dissect_s1g_ndp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
+{
+ proto_tree *ndp_tree = NULL;
+ proto_item *ndp_item = NULL;
+ int offset = 0;
+ guint8 ndp_type = tvb_get_guint8(tvb, 1);
+ guint8 ndp_bw = tvb_get_guint8(tvb, 5) >> 7;
+
+ ndp_tree = proto_tree_add_subtree(tree, tvb, offset, 6, ett_s1g_ndp,
+ &ndp_item, "S1G NDP");
+
+ switch (ndp_type & 0x07) {
+ case S1G_NDP_PROBE_REQ:
+ proto_tree_add_item(ndp_tree, hf_radiotap_s1g_ndp_mgmt, tvb, offset, 1,
+ ENC_NA);
+ break;
+
+ default:
+ proto_tree_add_item(ndp_tree, hf_radiotap_s1g_ndp_ctrl, tvb, offset, 1,
+ ENC_NA);
+ }
+ offset += 1;
+
+ col_append_str(pinfo->cinfo, COL_INFO, ", S1G");
+
+ switch (ndp_type & 0x07) {
+ case S1G_NDP_CTS_CF_END: /* This uses an extra bit to distinguish */
+ if (ndp_type & 0x8) { /* NDP CF-END */
+ proto_item_append_text(ndp_item, " CF-End");
+ if (ndp_bw == 0) {
+ col_append_str(pinfo->cinfo, COL_INFO, " CF-End 1MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_cf_end_1m,
+ ett_s1g_ndp_cf_end, ndp_cf_end_1m_headers,
+ ENC_LITTLE_ENDIAN);
+ } else {
+ col_append_str(pinfo->cinfo, COL_INFO, " CF-End 2MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_cf_end_2m,
+ ett_s1g_ndp_cf_end, ndp_cf_end_2m_headers,
+ ENC_LITTLE_ENDIAN);
+ }
+ } else { /* NDP CTS */
+ proto_item_append_text(ndp_item, " CTS");
+ if (ndp_bw == 0) {
+ col_append_str(pinfo->cinfo, COL_INFO, " CTS 1MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_cts_1m,
+ ett_s1g_ndp_cts, ndp_cts_1m_headers,
+ ENC_LITTLE_ENDIAN);
+ } else {
+ col_append_str(pinfo->cinfo, COL_INFO, " CTS 2MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_cts_2m,
+ ett_s1g_ndp_cts, ndp_cts_2m_headers,
+ ENC_LITTLE_ENDIAN);
+ }
+ }
+ break;
+
+ case S1G_NDP_PS_POLL:
+ proto_item_append_text(ndp_item, " PS-Poll");
+ if (ndp_bw == 0) {
+ col_append_str(pinfo->cinfo, COL_INFO, " PS-Poll 1MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_ps_poll_1m,
+ ett_s1g_ndp_ps_poll, ndp_ps_poll_1m_headers,
+ ENC_LITTLE_ENDIAN);
+ } else {
+ col_append_str(pinfo->cinfo, COL_INFO, " PS-Poll 2MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_ps_poll_2m,
+ ett_s1g_ndp_ps_poll, ndp_ps_poll_2m_headers,
+ ENC_LITTLE_ENDIAN);
+ }
+ break;
+
+ case S1G_NDP_ACK:
+ proto_item_append_text(ndp_item, " Ack");
+ if (ndp_bw == 0) {
+ col_append_str(pinfo->cinfo, COL_INFO, " ACK 1MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_ack_1m,
+ ett_s1g_ndp_ack, ndp_ack_1m_headers,
+ ENC_LITTLE_ENDIAN);
+ } else {
+ col_append_str(pinfo->cinfo, COL_INFO, " ACK 2MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_ack_2m,
+ ett_s1g_ndp_ack, ndp_ack_2m_headers,
+ ENC_LITTLE_ENDIAN);
+ }
+ break;
+
+ case S1G_NDP_PS_POLL_ACK:
+ proto_item_append_text(ndp_item, " PS-Poll-Ack");
+ if (ndp_bw == 0) {
+ col_append_str(pinfo->cinfo, COL_INFO, " PS-Poll-Ack 1MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_ps_poll_ack_1m,
+ ett_s1g_ndp_ps_poll_ack, ndp_ps_poll_ack_1m_headers,
+ ENC_LITTLE_ENDIAN);
+ } else {
+ col_append_str(pinfo->cinfo, COL_INFO, " PS-Poll-Ack 2MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_ps_poll_ack_2m,
+ ett_s1g_ndp_ps_poll_ack, ndp_ps_poll_ack_2m_headers,
+ ENC_LITTLE_ENDIAN);
+ }
+ break;
+
+ case S1G_NDP_BLOCK_ACK:
+ proto_item_append_text(ndp_item, " BlockAck");
+ if (ndp_bw == 0) {
+ col_append_str(pinfo->cinfo, COL_INFO, " BlockAck 1MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_block_ack_1m,
+ ett_s1g_ndp_block_ack, ndp_block_ack_1m_headers,
+ ENC_LITTLE_ENDIAN);
+ } else {
+ col_append_str(pinfo->cinfo, COL_INFO, " BlockAck 2MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_block_ack_2m,
+ ett_s1g_ndp_block_ack, ndp_block_ack_2m_headers,
+ ENC_LITTLE_ENDIAN);
+ }
+ break;
+
+ case S1G_NDP_BEAMFORMING_REPORT_POLL:
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_beamforming_report_poll,
+ ett_s1g_ndp_beamforming_report_poll, ndp_beamforming_headers,
+ ENC_LITTLE_ENDIAN);
+ break;
+
+ case S1G_NDP_PAGING:
+ proto_item_append_text(ndp_item, " NDP Paging");
+ if (ndp_bw == 0) {
+ col_append_str(pinfo->cinfo, COL_INFO, " NDP Paging 1MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_paging_1m,
+ ett_s1g_ndp_paging, ndp_paging_1m_headers,
+ ENC_LITTLE_ENDIAN);
+ } else {
+ col_append_str(pinfo->cinfo, COL_INFO, " NDP Paging 2MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_paging_2m,
+ ett_s1g_ndp_paging, ndp_paging_2m_headers,
+ ENC_LITTLE_ENDIAN);
+ }
+ break;
+
+ case S1G_NDP_PROBE_REQ:
+ proto_item_append_text(ndp_item, " Probe Request");
+ if (ndp_bw == 0) {
+ col_append_str(pinfo->cinfo, COL_INFO, " Probe Request 1MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_probe_1m,
+ ett_s1g_ndp_probe, ndp_probe_1m_headers,
+ ENC_LITTLE_ENDIAN);
+ } else {
+ col_append_str(pinfo->cinfo, COL_INFO, " Probe Request 2MHz");
+ proto_tree_add_bitmask(ndp_tree, tvb, offset,
+ hf_radiotap_s1g_ndp_probe_2m,
+ ett_s1g_ndp_probe, ndp_probe_2m_headers,
+ ENC_LITTLE_ENDIAN);
+ }
+ break;
+ default:
+ proto_item_append_text(ndp_item, ", Unknown NDP type");
+ col_append_str(pinfo->cinfo, COL_INFO, " Unknown NDP type");
+ proto_tree_add_item(ndp_tree, hf_radiotap_s1g_ndp_bytes, tvb, offset,
+ 5, ENC_NA);
+ }
+
+ offset += 6;
+ return tvb_captured_length(tvb);
+}
+
+static int * const s1g_known_headers[] = {
+ &hf_radiotap_s1g_s1g_ppdu_format_known,
+ &hf_radiotap_s1g_response_indication_known,
+ &hf_radiotap_s1g_guard_interval_known,
+ &hf_radiotap_s1g_nss_known,
+ &hf_radiotap_s1g_bandwidth_known,
+ &hf_radiotap_s1g_mcs_known,
+ &hf_radiotap_s1g_color_known,
+ &hf_radiotap_s1g_uplink_indication_known,
+ &hf_radiotap_s1g_reserved_1,
+ NULL
+};
+
+static int * const s1g_data1_headers[] = {
+ &hf_radiotap_s1g_s1g_ppdu_format,
+ &hf_radiotap_s1g_response_indication,
+ &hf_radiotap_s1g_reserved_2,
+ &hf_radiotap_s1g_guard_interval,
+ &hf_radiotap_s1g_nss,
+ &hf_radiotap_s1g_bandwidth,
+ &hf_radiotap_s1g_mcs,
+ NULL
+};
+
+static int * const s1g_data2_headers[] = {
+ &hf_radiotap_s1g_color,
+ &hf_radiotap_s1g_uplink_indication,
+ &hf_radiotap_s1g_reserved_3,
+ &hf_radiotap_s1g_rssi,
+ NULL
+};
+
static void
dissect_radiotap_tlv(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
int offset, struct ieee_802_11_phdr *phdr _U_)
@@ -1592,9 +2230,29 @@ dissect_radiotap_tlv(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
guint16 type = tvb_get_letohs(tvb, offset);
guint16 length = tvb_get_letohs(tvb, offset + 2);
proto_tree *unknown_tlv = NULL;
+ proto_tree *s1g_tree = NULL;
/* Insert code here to call the dissector for your TLV type */
switch (type) {
+ case IEEE80211_RADIOTAP_TLV_S1G:
+ phdr->phy = PHDR_802_11_PHY_11AH;
+ s1g_tree = proto_tree_add_subtree(tree, tvb, offset, 6,
+ ett_radiotap_s1g, NULL, "S1G");
+
+ proto_tree_add_bitmask(s1g_tree, tvb, offset,
+ hf_radiotap_s1g_known, ett_radiotap_s1g_known,
+ s1g_known_headers, ENC_LITTLE_ENDIAN);
+ offset += 2;
+
+ proto_tree_add_bitmask(s1g_tree, tvb, offset,
+ hf_radiotap_s1g_data_1, ett_radiotap_s1g_data_1,
+ s1g_data1_headers, ENC_LITTLE_ENDIAN);
+ offset += 2;
+
+ proto_tree_add_bitmask(s1g_tree, tvb, offset,
+ hf_radiotap_s1g_data_2, ett_radiotap_s1g_data_2,
+ s1g_data2_headers, ENC_LITTLE_ENDIAN);
+ break;
default:
unknown_tlv = proto_tree_add_subtree(tree, tvb, offset,
@@ -1822,6 +2480,9 @@ dissect_radiotap_channel(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
if (tree) {
gchar *chan_str;
static int * const channel_flags[] = {
+ &hf_radiotap_channel_flags_700mhz,
+ &hf_radiotap_channel_flags_800mhz,
+ &hf_radiotap_channel_flags_900mhz,
&hf_radiotap_channel_flags_turbo,
&hf_radiotap_channel_flags_cck,
&hf_radiotap_channel_flags_ofdm,
@@ -3136,11 +3797,6 @@ void proto_register_radiotap(void)
FT_UINT32, BASE_HEX, NULL, 0x0,
"Word from present flags bitmask", HFILL}},
- {&hf_radiotap_tlv,
- {"TLV", "radiotap.tlv",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}},
-
{&hf_radiotap_tlv_type,
{"TLV type", "radiotap.tlv.type",
FT_UINT32, BASE_DEC, NULL, 0x0,
@@ -3393,6 +4049,18 @@ void proto_register_radiotap(void)
{"Turbo", "radiotap.channel.flags.turbo",
FT_BOOLEAN, 16, NULL, 0x0010, "Channel Flags Turbo", HFILL}},
+ {&hf_radiotap_channel_flags_700mhz,
+ {"700 MHz spectrum", "radiotap.channel.flags.700mhz",
+ FT_BOOLEAN, 16, NULL, 0x0001, "Channel Flags Turbo", HFILL}},
+
+ {&hf_radiotap_channel_flags_800mhz,
+ {"800 MHz spectrum", "radiotap.channel.flags.800mhz",
+ FT_BOOLEAN, 16, NULL, 0x0002, "Channel Flags Turbo", HFILL}},
+
+ {&hf_radiotap_channel_flags_900mhz,
+ {"900 MHz spectrum", "radiotap.channel.flags.900mhz",
+ FT_BOOLEAN, 16, NULL, 0x0004, "Channel Flags Turbo", HFILL}},
+
{&hf_radiotap_channel_flags_cck,
{"Complementary Code Keying (CCK)", "radiotap.channel.flags.cck",
FT_BOOLEAN, 16, NULL, 0x0020,
@@ -4785,6 +5453,470 @@ void proto_register_radiotap(void)
{"length", "radiotap.l_sig.length",
FT_UINT16, BASE_DEC, NULL,
IEEE80211_RADIOTAP_L_SIG_LENGTH_MASK, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_known,
+ {"Known", "radiotap.s1g.known",
+ FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_s1g_ppdu_format_known,
+ {"S1G PPDU Format Known", "radiotap.s1g.s1g_ppdu_format_known",
+ FT_BOOLEAN, 16, NULL,
+ IEEE80211_RADIOTAP_TLV_S1G_S1G_PPDU_FORMAT_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_response_indication_known,
+ {"Response Indication Known", "radiotap.s1g.response_indication_known",
+ FT_BOOLEAN, 16, NULL,
+ IEEE80211_RADIOTAP_TLV_S1G_RESPONSE_INDICATION_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_guard_interval_known,
+ {"Guard Interval Known", "radiotap.s1g.guard_interval_known",
+ FT_BOOLEAN, 16, NULL,
+ IEEE80211_RADIOTAP_TLV_S1G_GUARD_INTERVAL_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_nss_known,
+ {"NSS Known", "radiotap.s1g.nss_known",
+ FT_BOOLEAN, 16, NULL,
+ IEEE80211_RADIOTAP_TLV_S1G_NSS_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_bandwidth_known,
+ {"Bandwidth Known", "radiotap.s1g.bandwidth_known",
+ FT_BOOLEAN, 16, NULL,
+ IEEE80211_RADIOTAP_TLV_S1G_BANDWIDTH_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_mcs_known,
+ {"MCS Known", "radiotap.s1g.mcs_known",
+ FT_BOOLEAN, 16, NULL,
+ IEEE80211_RADIOTAP_TLV_S1G_MCS_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_color_known,
+ {"Color Known", "radiotap.s1g.color_known",
+ FT_BOOLEAN, 16, NULL,
+ IEEE80211_RADIOTAP_TLV_S1G_COLOR_KNOWN, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_uplink_indication_known,
+ {"Uplink Indication Known",
+ "radiotap.s1g.uplink_indication_known",
+ FT_BOOLEAN, 16, NULL,
+ IEEE80211_RADIOTAP_TLV_S1G_UPLINK_INDICATION_KNOWN,
+ NULL, HFILL}},
+
+ {&hf_radiotap_s1g_reserved_1,
+ {"Reserved 1", "radiotap.s1g.reserved_1",
+ FT_UINT16, BASE_HEX, NULL,
+ IEEE80211_RADIOTAP_TLV_S1G_RESERVED_1, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_data_1,
+ {"Data1", "radiotap.s1g.data_1",
+ FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_s1g_ppdu_format,
+ {"S1G PPDU Format", "radiotap.s1g.s1g_ppdu_format",
+ FT_UINT16, BASE_DEC, VALS(s1g_ppdu_format),
+ IEEE80211_RADIOTAP_TLV_S1G_S1G_PPDU_FORMAT, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_response_indication,
+ {"Response Indication", "radiotap.s1g.response_indication",
+ FT_UINT16, BASE_DEC, VALS(s1g_response_indication),
+ IEEE80211_RADIOTAP_TLV_S1G_RESPONSE_INDICATION, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_reserved_2,
+ {"Reserved 2", "radiotap.s1g.reserved_2",
+ FT_UINT16, BASE_HEX, NULL,
+ IEEE80211_RADIOTAP_TLV_S1G_RESERVED_2, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_guard_interval,
+ {"Guard Interval", "radiotap.s1g.guard_interval",
+ FT_UINT16, BASE_DEC, VALS(s1g_guard_interval),
+ IEEE80211_RADIOTAP_TLV_S1G_GUARD_INTERVAL, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_nss,
+ {"NSS", "radiotap.s1g.nss",
+ FT_UINT16, BASE_DEC, VALS(s1g_nss),
+ IEEE80211_RADIOTAP_TLV_S1G_NSS, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_bandwidth,
+ {"Bandwidth", "radiotap.s1g.bandwidth",
+ FT_UINT16, BASE_DEC, VALS(s1g_bandwidth),
+ IEEE80211_RADIOTAP_TLV_S1G_BANDWIDTH, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_mcs,
+ {"MCS", "radiotap.s1g.mcs",
+ FT_UINT16, BASE_DEC, VALS(s1g_mcs),
+ IEEE80211_RADIOTAP_TLV_S1G_MCS, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_data_2,
+ {"Data2", "radiotap.s1g.data_2",
+ FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_color,
+ {"Color", "radiotap.s1g.color",
+ FT_UINT16, BASE_DEC, VALS(s1g_color),
+ IEEE80211_RADIOTAP_TLV_S1G_COLOR, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_uplink_indication,
+ {"Uplink Indication", "radiotap.s1g.uplink_indication",
+ FT_BOOLEAN, 16, NULL,
+ IEEE80211_RADIOTAP_TLV_S1G_UPLINK_INDICATION, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_reserved_3,
+ {"Reserved 3", "radiotap.s1g.reserved_3",
+ FT_UINT16, BASE_HEX, NULL,
+ IEEE80211_RADIOTAP_TLV_S1G_RESERVED_3, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_rssi,
+ {"RSSI", "radiotap.s1g.rssi",
+ FT_INT16, BASE_DEC, NULL,
+ IEEE80211_RADIOTAP_TLV_S1G_RSSI, NULL, HFILL}},
+
+ {&hf_radiotap_s1g_ndp_bytes,
+ {"NDP Bytes", "radiotap.s1g.ndp.bytes",
+ FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ctrl,
+ {"NDP Control", "radiotap.s1g.ndp.control",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_mgmt,
+ {"NDP Management", "radiotap.s1g.ndp.management",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_type_3bit,
+ {"NDP Type", "radiotap.s1g.ndp.type",
+ FT_UINT40, BASE_HEX, NULL, 0x0000000007, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ack_1m,
+ {"NDP Ack 1MHz", "radiotap.s1g.ndp.ack_1m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ack_1m_ack_id,
+ {"ACK Id", "radiotap.s1g.ndp.ack.ack_id",
+ FT_UINT40, BASE_HEX, NULL, 0x0000000FF8, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ack_1m_more_data,
+ {"More Data", "radiotap.s1g.ndp.ack.more_data",
+ FT_BOOLEAN, 40, NULL, 0x0000001000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ack_1m_idle_indication,
+ {"Idle Indication", "radiotap.s1g.ndp.ack.idle_indication",
+ FT_BOOLEAN, 40, NULL, 0x0000002000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ack_1m_duration,
+ {"Duration", "radiotap.s1g.ndp.ack.duration",
+ FT_UINT40, BASE_DEC, NULL, 0x0000FFC000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ack_1m_relayed_frame,
+ {"Relayed Frame", "radiotap.s1g.ndp.ack.relayed_frame",
+ FT_BOOLEAN, 40, NULL, 0x0001000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ack_2m,
+ {"NDP Ack 2MHz", "radiotap.s1g.ndp.ack_2m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ack_2m_ack_id,
+ {"ACK Id", "radiotap.s1g.ndp.ack.ack_id",
+ FT_UINT40, BASE_HEX, NULL, 0x000007FFF8, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ack_2m_more_data,
+ {"More Data", "radiotap.s1g.ndp.ack.more_data",
+ FT_BOOLEAN, 40, NULL, 0x0000080000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ack_2m_idle_indication,
+ {"Idle Indication", "radiotap.s1g.ndp.ack.idle_indication",
+ FT_BOOLEAN, 40, NULL, 0x0000100000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ack_2m_duration,
+ {"Duration", "radiotap.s1g.ndp.ack.duration",
+ FT_UINT40, BASE_DEC, NULL, 0x07FFE00000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ack_2m_relayed_frame,
+ {"Relayed Frame", "radiotap.s1g.ndp.ack.relayed_frame",
+ FT_BOOLEAN, 40, NULL, 0x0800000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ack_2m_reserved,
+ {"Reserved", "radiotap.s1g.ndp.ack.reserved",
+ FT_UINT40, BASE_HEX, NULL, 0x1000000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cts_1m,
+ {"NDP CTS 1MHz", "radiotap.s1g.ndp.cts_1m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cts_cf_end_indic,
+ {"NDP CTS/CF_End Indicator", "radiotap.s1g.ndp.cts_cf_end_indic",
+ FT_BOOLEAN, 40, NULL, 0x0000000008, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cts_address_indic,
+ {"Address Indicator", "radiotap.s1g.ndp.cts.address_indic",
+ FT_BOOLEAN, 40, NULL, 0x0000000010, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cts_ra_partial_bssid,
+ {"RA/Partial BSSID", "radiotap.s1g.ndp.cts.ra_partial_bssid",
+ FT_UINT40, BASE_HEX, NULL, 0x0000003FE0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cts_duration_1m,
+ {"Duration", "radiotap.s1g.ndp.cts.duration_1m",
+ FT_UINT40, BASE_DEC, NULL, 0x0000FFC000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cts_early_sector_indic_1m,
+ {"Early Sector Indicator", "radiotap.s1g.ndp.cts.early_sector_indic_1m",
+ FT_BOOLEAN, 40, NULL, 0x0001000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cts_2m,
+ {"NDP CTS 2MHz", "radiotap.s1g.ndp.cts_2m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cts_duration_2m,
+ {"Duration", "radiotap.s1g.ndp.cts.duration_2m",
+ FT_UINT40, BASE_DEC, NULL, 0x001FFFC000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cts_early_sector_indic_2m,
+ {"Early Sector Indicator", "radiotap.s1g.ndp.cts.early_sector_indic_2m",
+ FT_BOOLEAN, 40, NULL, 0x020000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cts_bandwidth_indic_2m,
+ {"Address Indicator", "radiotap.s1g.ndp.cts.address_indic",
+ FT_UINT40, BASE_DEC, NULL, 0x01C0000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cts_reserved,
+ {"Reserved", "radiotap.s1g.ndp.cts.reserved",
+ FT_UINT40, BASE_HEX, NULL, 0x1E00000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cf_end_1m,
+ {"NDP CF-End 1MHz", "radiotap.s1g.ndp.cf_end_1m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cf_end_partial_bssid,
+ {"Patrtial BSSID (TA)", "radiotap.s1g.ndp.cf_end.partial_bssid",
+ FT_UINT40, BASE_HEX, NULL, 0x0000001FF0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cf_end_duration_1m,
+ {"Duration", "radiotap.s1g.ndp.cf_end.duration_1m",
+ FT_UINT40, BASE_HEX, NULL, 0x00007FE000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cf_end_reserved_1m,
+ {"Reserved", "radiotap.s1g.ndp.cf_end.reserved_1m",
+ FT_UINT40, BASE_HEX, NULL, 0x0001800000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cf_end_2m,
+ {"NDP CF-End 2MHz", "radiotap.s1g.ndp.cf_end_2m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cf_end_duration_2m,
+ {"Duration", "radiotap.s1g.ndp.cf_end.duration_2m",
+ FT_UINT40, BASE_HEX, NULL, 0x000FFFE000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_cf_end_reserved_2m,
+ {"Reserved", "radiotap.s1g.ndp.cf_end.reserved_2m",
+ FT_UINT40, BASE_HEX, NULL, 0x1FF0000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_1m,
+ {"NDP PS-Poll 1MHz", "radiotap.s1g.ndp.ps_poll_1m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_ra,
+ {"RA", "radiotap.s1g.ndp.ps_poll.ra",
+ FT_UINT40, BASE_HEX, NULL, 0x0000000FF8, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_ta,
+ {"TA", "radiotap.s1g.ndp.ps_poll.ta",
+ FT_UINT40, BASE_HEX, NULL, 0x00001FF000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_preferred_mcs_1m,
+ {"Preferred MCS", "radiotap.s1g.ndp.ps_poll.preferred_mcs",
+ FT_UINT40, BASE_HEX, NULL, 0x0000E00000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_udi_1m,
+ {"UDI", "radiotap.s1g.ndp.ps_poll.udi",
+ FT_UINT40, BASE_HEX, NULL, 0x0001000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_2m,
+ {"NDP PS-Poll 2MHz", "radiotap.s1g.ndp.ps_poll_2m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_preferred_mcs_2m,
+ {"Preferred MCS", "radiotap.s1g.ndp.ps_poll.preferred_mcs",
+ FT_UINT40, BASE_HEX, NULL, 0x0001E00000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_udi_2m,
+ {"UDI", "radiotap.s1g.ndp.ps_poll.udi",
+ FT_UINT40, BASE_HEX, NULL, 0x1FFE00000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_ack_1m,
+ {"NDP PS-Poll-Ack 1MHz", "radiotap.s1g.ndp.ndp_ps_poll_ack_1m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_ack_id,
+ {"Ack ID", "radiotap.s1g.ndp.ps_poll.ack_id",
+ FT_UINT40, BASE_HEX, NULL, 0x0000000FF8, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_ack_more_data,
+ {"More Data", "radiotap.s1g.ndp.ps_poll.more_data",
+ FT_BOOLEAN, 40, NULL, 0x0000001000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_ack_idle_indication,
+ {"Idle Indication", "radiotap.s1g.ndp.ps_poll.idle_indication",
+ FT_BOOLEAN, 40, NULL, 0x0000002000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_ack_duration_1m,
+ {"Duration", "radiotap.s1g.ndp.ps_poll.duration",
+ FT_UINT40, BASE_HEX, NULL, 0x0000FFC000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_ack_reserved_1m,
+ {"Reserved", "radiotap.s1g.ndp.ps_poll.reserved_1m",
+ FT_UINT40, BASE_HEX, NULL, 0x0001000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_ack_2m,
+ {"NDP PS-Poll-Ack 2MHz", "radiotap.s1g.ndp.ndp_ps_poll_ack_2m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_ack_id_2m,
+ {"Ack ID", "radiotap.s1g.ndp.ps_poll.ack_id",
+ FT_UINT40, BASE_HEX, NULL, 0x000007FFF8, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_ack_more_data_2m,
+ {"More Data", "radiotap.s1g.ndp.ps_poll.more_data",
+ FT_BOOLEAN, 40, NULL, 0x0000080000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_ack_idle_indication_2m,
+ {"Idle Indication", "radiotap.s1g.ndp.ps_poll.idle_indication",
+ FT_BOOLEAN, 40, NULL, 0x0000100000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_ack_duration_2m,
+ {"Duration", "radiotap.s1g.ndp.ps_poll.duration",
+ FT_UINT40, BASE_HEX, NULL, 0x07FFE00000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_ps_poll_ack_reserved_2m,
+ {"Reserved", "radiotap.s1g.ndp.ps_poll.reserved",
+ FT_UINT40, BASE_HEX, NULL, 0x1800000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_block_ack_1m,
+ {"NDP Block Ack 1MHz", "radiotap.s1g.ndp.block_ack_1m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_block_ack_id_1m,
+ {"BlockAck ID", "radiotap.s1g.ndp.block_ack.blockack_id",
+ FT_UINT40, BASE_HEX, NULL, 0x0000000018, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_block_ack_starting_sequence_control_1m,
+ {"Starting Sequence Control", "radiotap.s1g.ndp.ps_poll.starting_sequence_control",
+ FT_UINT40, BASE_HEX, NULL, 0x000001FFE0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_block_ack_bitmap_1m,
+ {"Block Ack Bitmap", "radiotap.s1g.ndp.ps_poll.block_ack_bitmap",
+ FT_UINT40, BASE_HEX, NULL, 0x001FFE0000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_block_ack_unused_1m,
+ {"Unused", "radiotap.s1g.ndp.ps_poll.block_ack_unused",
+ FT_UINT40, BASE_HEX, NULL, 0x3FE0000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_block_ack_2m,
+ {"NDP Block Ack 2MHz", "radiotap.s1g.ndp.block_ack_2m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_block_ack_id_2m,
+ {"BlockAck ID", "radiotap.s1g.ndp.ps_poll.blockack_id",
+ FT_UINT40, BASE_HEX, NULL, 0x00000001F8, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_block_ack_starting_sequence_control_2m,
+ {"Starting Sequence Control", "radiotap.s1g.ndp.ps_poll.starting_sequence_control",
+ FT_UINT40, BASE_HEX, NULL, 0x00001FFE00, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_block_ack_bitmap_2m,
+ {"Block Ack Bitmap", "radiotap.s1g.ndp.ps_poll.block_ack_bitmap",
+ FT_UINT40, BASE_HEX, NULL, 0x1FFFE00000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_beamforming_report_poll,
+ {"Beamforming Report Poll", "radiotap.s1g.ndp.beamforming_report_poll",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_beamforming_ap_address,
+ {"AP Address", "radiotap.s1g.ndp.beamforming_report_poll.ap_address",
+ FT_UINT40, BASE_HEX, NULL, 0x0000000FF8, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_beamforming_non_ap_sta_address,
+ {"Non-AP STA Address", "radiotap.s1g.ndp.beamforming_report_poll.non_ap_sta_address",
+ FT_UINT40, BASE_HEX, NULL, 0x0001FFF000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_beamforming_feedback_segment_bitmap,
+ {"Retransmission Segment Retransmission Bitmap",
+ "radiotap.s1g.ndp.beamforming_report_poll.feedback_segment_retransmission_bitmap",
+ FT_UINT40, BASE_HEX, NULL, 0x01FE000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_beamforming_reserved,
+ {"Reserved", "radiotap.s1g.ndp.beamforming_report_poll.reserved",
+ FT_UINT40, BASE_HEX, NULL, 0x1E00000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_paging_1m,
+ {"NDP Paging 1MHz", "radiotap.s1g.ndp.ndp_paging_1m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_paging_p_id,
+ {"P-ID", "radiotap.s1g.ndp.ndp_paging.p_id",
+ FT_BOOLEAN, 40, NULL, 0x0000000FF8, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_paging_apdi_partial_aid,
+ {"APDI/Partial AID", "radiotap.s1g.ndp.ndp_paging.apdi_partial_aid",
+ FT_BOOLEAN, 40, NULL, 0x00001FF000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_paging_direction,
+ {"Direction", "radiotap.s1g.ndp.ndp_paging.direction",
+ FT_BOOLEAN, 40, NULL, 0x0000200000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_paging_reserved_1m,
+ {"Reserved", "radiotap.s1g.ndp.ndp_paging.reserved",
+ FT_BOOLEAN, 40, NULL, 0x0001C00000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_paging_2m,
+ {"NDP Paging 2MHz", "radiotap.s1g.ndp.ndp_paging_2m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_paging_reserved_2m,
+ {"Reserved", "radiotap.s1g.ndp.reserved",
+ FT_BOOLEAN, 40, NULL, 0x1FFFC00000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_probe_1m,
+ {"NDP Probe 1MHz", "radiotap.s1g.ndp.ndp_probe_1m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_probe_cssid_ano_present,
+ {"CSSID/ANO Present", "radiotap.s1g.ndp.ndp_probe.cssid_ano_present",
+ FT_BOOLEAN, 40, NULL, 0x0000000008, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_probe_1m_cssid_ano,
+ {"Compressed SSID/ANO", "radiotap.s1g.ndp.ndp_probe.compressed_ssid_ano",
+ FT_UINT40, BASE_HEX, NULL, 0x00000FFFF0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_probe_1m_requested_response_type,
+ {"Requested Response Type", "radiotap.s1g.ndp.ndp_probe.requested_response_type_1m",
+ FT_UINT40, BASE_HEX, NULL, 0x0000100000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_probe_1m_reserved,
+ {"Reserved", "radiotap.s1g.ndp.probe_1m.ndp_probe.reserved",
+ FT_UINT40, BASE_HEX, NULL, 0x0001E00000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_probe_2m,
+ {"NDP Probe 2MHz", "radiotap.s1g.ndp.probe_2m",
+ FT_UINT40, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_probe_2m_cssid_ano,
+ {"Compressed SSID/ANO", "radiotap.s1g.ndp.ndp_probe.compressed_ssid_ano",
+ FT_UINT40, BASE_HEX, NULL, 0x0FFFFFFFF0, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_probe_2m_requested_response_type,
+ {"Requested Response Type", "radiotap.s1g.ndp.ndp_probe.requested_response_type_2m",
+ FT_UINT40, BASE_HEX, NULL, 0x1000000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_1m_unused,
+ {"Unused", "radiotap.s1g.ndp.ack.1m_unused",
+ FT_UINT40, BASE_HEX, NULL, 0x3FFE000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_2m_unused,
+ {"Unused", "radiotap.s1g.ndp.ack.2m_unused",
+ FT_UINT40, BASE_HEX, NULL, 0x2000000000, NULL, HFILL }},
+
+ {&hf_radiotap_s1g_ndp_bw,
+ {"NDP BW", "radiotap.s1g.ndp.bw",
+ FT_UINT40, BASE_HEX, NULL, 0xC000000000, NULL, HFILL }},
+
};
static gint *ett[] = {
&ett_radiotap,
@@ -4821,6 +5953,20 @@ void proto_register_radiotap(void)
&ett_radiotap_l_sig,
&ett_radiotap_l_sig_data_1,
&ett_radiotap_l_sig_data_2,
+ &ett_radiotap_s1g,
+ &ett_radiotap_s1g_known,
+ &ett_radiotap_s1g_data_1,
+ &ett_radiotap_s1g_data_2,
+ &ett_s1g_ndp,
+ &ett_s1g_ndp_ack,
+ &ett_s1g_ndp_cts,
+ &ett_s1g_ndp_cf_end,
+ &ett_s1g_ndp_ps_poll,
+ &ett_s1g_ndp_ps_poll_ack,
+ &ett_s1g_ndp_block_ack,
+ &ett_s1g_ndp_beamforming_report_poll,
+ &ett_s1g_ndp_paging,
+ &ett_s1g_ndp_probe,
&ett_radiotap_unknown_tlv,
};
static ei_register_info ei[] = {