aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Sharpe <realrichardsharpe@gmail.com>2018-12-04 21:41:17 -0500
committerAnders Broman <a.broman58@gmail.com>2018-12-06 14:55:56 +0000
commit9df987d2a4270822da070449c1513698012490f1 (patch)
tree32f0718b644ed97c249aa7b1d3c68d2c0b013c78
parentaadf8727178c9e0aa3ecc638d60bc1878d431f60 (diff)
ieee80211: Fix the handling of A-Control and improve AP Tx Power.
1. Correctly print out the AP Tx Power level. 2. The A-Control UL MU Response field was renamed to the TR Response field. 3. Handle padding correctly in the A-Control field. Change-Id: I33000aa28b9e00ab97ca30d53907685e302c49c2 Reviewed-on: https://code.wireshark.org/review/30918 Petri-Dish: Richard Sharpe <realrichardsharpe@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rw-r--r--epan/dissectors/packet-ieee80211.c92
1 files changed, 68 insertions, 24 deletions
diff --git a/epan/dissectors/packet-ieee80211.c b/epan/dissectors/packet-ieee80211.c
index ec74768f05..1a7c253a1d 100644
--- a/epan/dissectors/packet-ieee80211.c
+++ b/epan/dissectors/packet-ieee80211.c
@@ -3249,8 +3249,9 @@ static int hf_ieee80211_htc = -1;
static int hf_ieee80211_htc_vht = -1;
static int hf_ieee80211_htc_he = -1;
static int hf_ieee80211_htc_he_ctrl_id = -1;
-static int hf_ieee80211_he_umrs_he_tb_ppdu_len = -1;
-static int hf_ieee80211_he_umrs_ru_allocation = -1;
+static int hf_ieee80211_he_a_control_padding = -1;
+static int hf_ieee80211_he_trs_he_tb_ppdu_len = -1;
+static int hf_ieee80211_he_trs_ru_allocation = -1;
static int hf_ieee80211_he_dl_tx_power = -1;
static int hf_ieee80211_he_ul_target_rssi = -1;
static int hf_ieee80211_he_ul_mcs = -1;
@@ -5847,7 +5848,8 @@ static gint ett_htc_he_a_control = -1;
static gint ett_mfb_subtree = -1;
static gint ett_lac_subtree = -1;
static gint ett_ieee80211_buffer_status_report = -1;
-static gint ett_ieee80211_ul_mu_response_schedule = -1;
+static gint ett_ieee80211_a_control_padding = -1;
+static gint ett_ieee80211_triggered_response_schedule = -1;
static gint ett_ieee80211_control_om = -1;
static gint ett_ieee80211_hla_control = -1;
static gint ett_ieee80211_control_uph = -1;
@@ -16891,7 +16893,7 @@ dissect_ht_info_ie_1_0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
* 802.11ax changes the reserved bit to differentiate between the HE version
* and the VHT version, and adds different types of Aggregate Control info.
*/
-#define A_CONTROL_UMRS 0
+#define A_CONTROL_TRS 0
#define A_CONTROL_OM 1
#define A_CONTROL_HLA 2
#define A_CONTROL_BSR 3
@@ -16901,7 +16903,7 @@ dissect_ht_info_ie_1_0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
#define A_CONTROL_BQR_REV 0x0A
static const value_string a_control_control_id_vals[] = {
- { A_CONTROL_UMRS, "UL MU response scheduling" },
+ { A_CONTROL_TRS, "Triggered response scheduling" },
{ A_CONTROL_OM, "Operating mode" },
{ A_CONTROL_HLA, "HE link adaptation" },
{ A_CONTROL_BSR, "Buffer status report" },
@@ -16928,30 +16930,48 @@ ul_target_rssi_base_custom(gchar *result, guint32 target_rssi)
}
static void
-dissect_a_control_umrs(proto_tree *tree, tvbuff_t *tvb, int offset,
+dissect_a_control_padding(proto_tree *tree, tvbuff_t *tvb, int offset,
guint32 bits _U_, guint32 start_bit)
{
- proto_tree *umrs_tree = NULL;
+ proto_tree *trs_tree = NULL;
guint the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
/*
* We isolated the bits and moved them to the bottom ... so display them
*/
- umrs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
- ett_ieee80211_ul_mu_response_schedule,
+ trs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
+ ett_ieee80211_a_control_padding,
+ NULL, "Padding: 0x%0x", the_bits);
+
+ proto_tree_add_uint(trs_tree, hf_ieee80211_he_a_control_padding, tvb,
+ offset, 4, the_bits);
+}
+
+static void
+dissect_a_control_trs(proto_tree *tree, tvbuff_t *tvb, int offset,
+ guint32 bits _U_, guint32 start_bit)
+{
+ proto_tree *trs_tree = NULL;
+ guint the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
+
+ /*
+ * We isolated the bits and moved them to the bottom ... so display them
+ */
+ trs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
+ ett_ieee80211_triggered_response_schedule,
NULL, "UMRS Control: 0x%08x", the_bits);
- proto_tree_add_uint(umrs_tree, hf_ieee80211_he_umrs_he_tb_ppdu_len, tvb,
+ proto_tree_add_uint(trs_tree, hf_ieee80211_he_trs_he_tb_ppdu_len, tvb,
offset, 4, the_bits);
- proto_tree_add_uint(umrs_tree, hf_ieee80211_he_umrs_ru_allocation, tvb,
+ proto_tree_add_uint(trs_tree, hf_ieee80211_he_trs_ru_allocation, tvb,
offset, 4, the_bits);
- proto_tree_add_uint(umrs_tree, hf_ieee80211_he_dl_tx_power, tvb,
+ proto_tree_add_uint(trs_tree, hf_ieee80211_he_dl_tx_power, tvb,
offset, 4, the_bits);
- proto_tree_add_uint(umrs_tree, hf_ieee80211_he_ul_target_rssi, tvb,
+ proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_target_rssi, tvb,
offset, 4, the_bits);
- proto_tree_add_uint(umrs_tree, hf_ieee80211_he_ul_mcs, tvb,
+ proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_mcs, tvb,
offset, 4, the_bits);
- proto_tree_add_uint(umrs_tree, hf_ieee80211_he_ul_reserved, tvb,
+ proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_reserved, tvb,
offset, 4, the_bits);
}
@@ -17148,14 +17168,23 @@ dissect_ht_control(proto_tree *tree, tvbuff_t *tvb, int offset)
while (start_bit_offset < 32) {
guint8 control_id = (htc >> start_bit_offset) & 0x0F;
start_bit_offset += 4;
- pi = proto_tree_add_uint(a_control_tree, hf_ieee80211_htc_he_ctrl_id,
+ if (control_id != 0 || start_bit_offset == 6) {
+ pi = proto_tree_add_uint(a_control_tree, hf_ieee80211_htc_he_ctrl_id,
tvb, offset, 4, control_id);
- proto_item_append_text(pi, ": %s",
+ proto_item_append_text(pi, ": %s",
val_to_str(control_id, a_control_control_id_vals,
"Reserved (%u)"));
+ }
switch (control_id) {
- case A_CONTROL_UMRS:
- dissect_a_control_umrs(a_control_tree, tvb, offset, htc, start_bit_offset);
+ case A_CONTROL_TRS:
+ /*
+ * Padding looks like TRS ... so distinguish. If there are not
+ * enough bits left it must be padding
+ */
+ if (start_bit_offset == 6)
+ dissect_a_control_trs(a_control_tree, tvb, offset, htc, start_bit_offset);
+ else
+ dissect_a_control_padding(a_control_tree, tvb, offset, htc, start_bit_offset);
start_bit_offset += 26;
break;
case A_CONTROL_OM:
@@ -22600,6 +22629,15 @@ static const int *he_trig_frm_bar_info_fields[] = {
#define PE_DISAMBIGUITY 0x4
static void
+ap_tx_power_custom(gchar *result, guint32 ap_tx_power)
+{
+ if (ap_tx_power > 60)
+ g_snprintf(result, ITEM_LABEL_LENGTH, "%s", "Reserved");
+ else
+ g_snprintf(result, ITEM_LABEL_LENGTH, "%d dBm", -20 + ap_tx_power);
+}
+
+static void
ul_packet_extension_base_custom(gchar *result, guint32 ul_packet_extension)
{
int pre_fec_padding = ul_packet_extension & PRE_FEC_PADDING_FACTOR;
@@ -33710,11 +33748,15 @@ proto_register_ieee80211(void)
{"Control ID", "wlan.htc.he.a_control.ctrl_id",
FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
- {&hf_ieee80211_he_umrs_he_tb_ppdu_len,
+ {&hf_ieee80211_he_a_control_padding,
+ {"Padding", "wlan.htc.he.a_control.padding",
+ FT_UINT32, BASE_HEX, NULL, 0x00ffffff, NULL, HFILL }},
+
+ {&hf_ieee80211_he_trs_he_tb_ppdu_len,
{"HE TB PPDU Length", "wlan.htc.he.a_control.umrs.he_tb_ppdu_len",
FT_UINT32, BASE_DEC, NULL, 0x0000001f, NULL, HFILL }},
- {&hf_ieee80211_he_umrs_ru_allocation,
+ {&hf_ieee80211_he_trs_ru_allocation,
{"RU Allocation", "wlan.htc.he.a_control.umrs.ru_allocation",
FT_UINT32, BASE_HEX, NULL, 0x00001fe0, NULL, HFILL }},
@@ -33903,8 +33945,9 @@ proto_register_ieee80211(void)
FT_BOOLEAN, 64, NULL, 0x0000000008000000, NULL, HFILL }},
{&hf_ieee80211_he_trigger_ap_tx_power,
- {"AP TX Power", "wlan.trigger.he.ap_tx_power",
- FT_UINT64, BASE_DEC, NULL, 0x00000003F0000000, NULL, HFILL }},
+ {"AP Tx Power", "wlan.trigger.he.ap_tx_power",
+ FT_UINT64, BASE_CUSTOM, CF_FUNC(ap_tx_power_custom),
+ 0x00000003F0000000, NULL, HFILL }},
{&hf_ieee80211_he_trigger_ul_packet_extension,
{"Packet Extension", "wlan.trigger.he.packet_extension",
@@ -36399,7 +36442,8 @@ proto_register_ieee80211(void)
&ett_htc_he_a_control,
&ett_mfb_subtree,
&ett_lac_subtree,
- &ett_ieee80211_ul_mu_response_schedule,
+ &ett_ieee80211_a_control_padding,
+ &ett_ieee80211_triggered_response_schedule,
&ett_ieee80211_control_om,
&ett_ieee80211_hla_control,
&ett_ieee80211_buffer_status_report,