aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgerald <gerald@f5534014-38df-0310-8fa8-9805f1628bb7>2007-05-02 23:26:33 +0000
committergerald <gerald@f5534014-38df-0310-8fa8-9805f1628bb7>2007-05-02 23:26:33 +0000
commitb4e3cca140b949ab08088f04e15f648df6448820 (patch)
tree44d916bb6d180de2b3977314f5753aa70ee30c1b
parent8f5e9411ea5596ff3021bc0023fb11cba5282a5a (diff)
Add a routine to dissect the MCS Set. Add a tree for the MCS Set
Rx Bitmask. "Steams" -> "Scheme". git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@21654 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r--epan/dissectors/packet-ieee80211.c128
1 files changed, 95 insertions, 33 deletions
diff --git a/epan/dissectors/packet-ieee80211.c b/epan/dissectors/packet-ieee80211.c
index 5fbab73000..4d883de0c7 100644
--- a/epan/dissectors/packet-ieee80211.c
+++ b/epan/dissectors/packet-ieee80211.c
@@ -1035,6 +1035,14 @@ static int ampduparam_mpdu_start_spacing = -1;
static int ampduparam_reserved = -1;
static int mcsset = -1;
+static int mcsset_rx_bitmask_0to7 = -1;
+static int mcsset_rx_bitmask_8to15 = -1;
+static int mcsset_rx_bitmask_16to23 = -1;
+static int mcsset_rx_bitmask_24to31 = -1;
+static int mcsset_rx_bitmask_32 = -1;
+static int mcsset_rx_bitmask_33to38 = -1;
+static int mcsset_rx_bitmask_39to52 = -1;
+static int mcsset_rx_bitmask_53to76 = -1;
static int mcsset_highest_data_rate = -1;
static int mcsset_tx_mcs_set_defined = -1;
static int mcsset_tx_rx_mcs_set_not_equal = -1;
@@ -1096,7 +1104,6 @@ static int ht_info_lsig_txop_protection_full_support = -1;
static int ht_info_pco_active = -1;
static int ht_info_pco_phase = -1;
static int ht_info_reserved_3 = -1;
-static int ht_basic_mcs_set = -1;
/*** End: 802.11n D1.10 - HT Information IE ***/
/*** Begin: 802.11n D1.10 - Secondary Channel Offset Tag - Dustin Johnson***/
@@ -1337,6 +1344,7 @@ static gint ett_rsn_cap_tree = -1;
static gint ett_ht_cap_tree = -1;
static gint ett_ampduparam_tree = -1;
static gint ett_mcsset_tree = -1;
+static gint ett_mcsbit_tree = -1;
static gint ett_htex_cap_tree = -1;
static gint ett_txbf_tree = -1;
static gint ett_antsel_tree = -1;
@@ -3195,6 +3203,50 @@ done:
tag_len - tag_off, "Not interpreted");
}
+static void
+dissect_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean basic) {
+ proto_item *ti;
+ proto_tree *mcs_tree, *bit_tree;
+ guint16 capability;
+
+ /* 16 byte Supported MCS set */
+ ti = proto_tree_add_string(tree, mcsset, tvb, offset, 16,
+ basic ? "Basic MCS Set" : "MCS Set");
+ mcs_tree = proto_item_add_subtree(ti, ett_mcsset_tree);
+
+ /* Rx MCS Bitmask */
+ ti = proto_tree_add_string(mcs_tree, tag_interpretation, tvb, offset,
+ 10, "Rx Modulation and Coding Scheme (One bit per modulation)");
+ bit_tree = proto_item_add_subtree(ti, ett_mcsbit_tree);
+
+ /* Bits 0 - 31 */
+ proto_tree_add_item(bit_tree, mcsset_rx_bitmask_0to7, tvb, offset, 1, TRUE);
+ proto_tree_add_item(bit_tree, mcsset_rx_bitmask_8to15, tvb, offset + 1, 1, TRUE);
+ proto_tree_add_item(bit_tree, mcsset_rx_bitmask_16to23, tvb, offset + 2, 1, TRUE);
+ proto_tree_add_item(bit_tree, mcsset_rx_bitmask_24to31, tvb, offset + 3, 1, TRUE);
+
+ /* Bits 32 - 52 */
+ proto_tree_add_item(bit_tree, mcsset_rx_bitmask_32, tvb, offset + 4, 1, TRUE);
+ proto_tree_add_item(bit_tree, mcsset_rx_bitmask_33to38, tvb, offset + 4, 1, TRUE);
+ proto_tree_add_item(bit_tree, mcsset_rx_bitmask_39to52, tvb, offset + 4, 3, TRUE);
+
+ /* Bits 53 - 76 */
+ proto_tree_add_item(bit_tree, mcsset_rx_bitmask_53to76, tvb, offset + 6, 3, TRUE);
+
+ capability = tvb_get_letohs (tvb, offset+10);
+ proto_tree_add_uint_format(mcs_tree, mcsset_highest_data_rate, tvb, offset + 10, 2,
+ capability, "Highest Supported Data Rate: 0x%04X", capability);
+ capability = tvb_get_letohs (tvb, offset+12);
+ proto_tree_add_boolean(mcs_tree, mcsset_tx_mcs_set_defined, tvb, offset + 12, 1,
+ capability);
+ proto_tree_add_boolean(mcs_tree, mcsset_tx_rx_mcs_set_not_equal, tvb, offset + 12, 1,
+ capability);
+ proto_tree_add_uint(mcs_tree, mcsset_tx_max_spatial_streams, tvb, offset + 12, 1,
+ capability);
+ proto_tree_add_boolean(mcs_tree, mcsset_tx_unequal_modulation, tvb, offset + 12, 1,
+ capability);
+}
+
/* 802.11n D1.10 - HT Information IE */
static void
dissect_ht_info_ie_1_1(proto_tree * tree, tvbuff_t * tvb, int offset,
@@ -3275,10 +3327,10 @@ dissect_ht_info_ie_1_1(proto_tree * tree, tvbuff_t * tvb, int offset,
offset += 2;
cap_tree = tree;
- proto_tree_add_string(cap_tree, ht_basic_mcs_set, tvb, offset, 16,
- "Basic MCS Set");
+ dissect_mcs_set(cap_tree, tvb, offset, TRUE);
offset += 16;
+
if (tag_val_init_off - offset < tag_len){
proto_tree_add_string(cap_tree, tag_interpretation, tvb, offset,
tag_len + tag_val_init_off - offset, "Unparsed Extra Data");
@@ -3380,25 +3432,7 @@ dissect_ht_capability_ie(proto_tree * tree, tvbuff_t * tvb, int offset,
offset += 1;
tag_val_off += 1;
- /* 16 byte Supported MCS set */
- cap_item = proto_tree_add_string(tree, mcsset, tvb, offset,
- 16, "MCS Set");
- cap_tree = proto_item_add_subtree(cap_item, ett_mcsset_tree);
- proto_tree_add_string(cap_tree, tag_interpretation, tvb, offset,
- 10, "Rx Modulation Coding Streams (One bit per modulation)");
- capability = tvb_get_letohs (tvb, offset+10);
- proto_tree_add_uint_format(cap_tree, mcsset_highest_data_rate, tvb, offset + 10, 2,
- capability, "Highest Supported Data Rate: 0x%04X", capability);
- capability = tvb_get_letohs (tvb, offset+12);
- proto_tree_add_boolean(cap_tree, mcsset_tx_mcs_set_defined, tvb, offset + 12, 1,
- capability);
- proto_tree_add_boolean(cap_tree, mcsset_tx_rx_mcs_set_not_equal, tvb, offset + 12, 1,
- capability);
- proto_tree_add_uint(cap_tree, mcsset_tx_max_spatial_streams, tvb, offset + 12, 1,
- capability);
- proto_tree_add_boolean(cap_tree, mcsset_tx_unequal_modulation, tvb, offset + 12, 1,
- capability);
-
+ dissect_mcs_set(cap_tree, tvb, offset, FALSE);
offset += 16;
tag_val_off += 16;
@@ -3585,8 +3619,7 @@ dissect_ht_info_ie_1_0(proto_tree * tree, tvbuff_t * tvb, int offset,
tag_val_off += 2;
/* 16 byte Supported MCS set */
- proto_tree_add_string(tree, tag_interpretation, tvb, offset,
- 16, "Modulation Coding Streams (One bit per modulation)");
+ dissect_mcs_set(tree, tvb, offset, FALSE);
offset += 16;
tag_val_off += 16;
@@ -8825,8 +8858,40 @@ proto_register_ieee80211 (void)
"Reserved", HFILL }},
{&mcsset,
- {"Rx Supported Modulation Coding Streams Set", "wlan_mgt.ht.mcsset",
- FT_STRING, BASE_NONE, NULL, 0, "Rx Supported Modulation Coding Streams Set", HFILL }},
+ {"Rx Supported Modulation and Coding Scheme Set", "wlan_mgt.ht.mcsset",
+ FT_STRING, BASE_NONE, NULL, 0, "Rx Supported Modulation and Coding Scheme Set", HFILL }},
+
+ {&mcsset_rx_bitmask_0to7,
+ {"Rx Bitmask Bits 0-7", "wlan_mgt.ht.mcsset.rxbitmask.0to7",
+ FT_UINT32, BASE_HEX, 0, 0x000000ff, "Rx Bitmask Bits 0-7", HFILL }},
+
+ {&mcsset_rx_bitmask_8to15,
+ {"Rx Bitmask Bits 8-15", "wlan_mgt.ht.mcsset.rxbitmask.8to15",
+ FT_UINT32, BASE_HEX, 0, 0x0000ff00, "Rx Bitmask Bits 8-15", HFILL }},
+
+ {&mcsset_rx_bitmask_16to23,
+ {"Rx Bitmask Bits 16-23", "wlan_mgt.ht.mcsset.rxbitmask.16to23",
+ FT_UINT32, BASE_HEX, 0, 0x00ff0000, "Rx Bitmask Bits 16-23", HFILL }},
+
+ {&mcsset_rx_bitmask_24to31,
+ {"Rx Bitmask Bits 24-31", "wlan_mgt.ht.mcsset.rxbitmask.24to31",
+ FT_UINT32, BASE_HEX, 0, 0xff000000, "Rx Bitmask Bits 24-31", HFILL }},
+
+ {&mcsset_rx_bitmask_32,
+ {"Rx Bitmask Bit 32", "wlan_mgt.ht.mcsset.rxbitmask.32",
+ FT_UINT32, BASE_HEX, 0, 0x000001, "Rx Bitmask Bit 32", HFILL }},
+
+ {&mcsset_rx_bitmask_33to38,
+ {"Rx Bitmask Bits 33-38", "wlan_mgt.ht.mcsset.rxbitmask.33to38",
+ FT_UINT32, BASE_HEX, 0, 0x00007e, "Rx Bitmask Bits 33-38", HFILL }},
+
+ {&mcsset_rx_bitmask_39to52,
+ {"Rx Bitmask Bits 39-52", "wlan_mgt.ht.mcsset.rxbitmask.39to52",
+ FT_UINT32, BASE_HEX, 0, 0x1fff80, "Rx Bitmask Bits 39-52", HFILL }},
+
+ {&mcsset_rx_bitmask_53to76,
+ {"Rx Bitmask Bits 53-76", "wlan_mgt.ht.mcsset.rxbitmask.53to76",
+ FT_UINT32, BASE_HEX, 0, 0x1fffffe0, "Rx Bitmask Bits 53-76", HFILL }},
{&mcsset_highest_data_rate,
{"Highest Supported Data Rate", "wlan_mgt.ht.mcsset.highestdatarate",
@@ -9025,9 +9090,9 @@ proto_register_ieee80211 (void)
"on Greenfield (GF) devices Present", HFILL }},
{&hta_basic_stbc_mcs,
- {"Basic STB Modulation Coding Scheme (MCS)", "wlan_mgt.hta.capabilities.",
+ {"Basic STB Modulation and Coding Scheme (MCS)", "wlan_mgt.hta.capabilities.",
FT_UINT16, BASE_HEX, NULL , 0x007f,
- "Basic STB Modulation Coding Scheme (MCS)", HFILL }},
+ "Basic STB Modulation and Coding Scheme (MCS)", HFILL }},
{&hta_dual_stbc_protection,
{"Dual Clear To Send (CTS) Protection", "wlan_mgt.hta.capabilities.",
@@ -9096,7 +9161,7 @@ proto_register_ieee80211 (void)
{&ht_info_primary_channel,
{"Primary Channel", "wlan_mgt.ht.info.primarychannel",
- FT_UINT8, BASE_HEX, NULL, 0xff, "Primary Channel", HFILL }},
+ FT_UINT8, BASE_DEC, NULL, 0xff, "Primary Channel", HFILL }},
{&ht_info_secondary_channel_offset,
{"Secondary channel offset", "wlan_mgt.ht.info.secchanoffset",
@@ -9178,10 +9243,6 @@ proto_register_ieee80211 (void)
{"Reserved", "wlan_mgt.ht.info.reserved3",
FT_UINT16, BASE_HEX, NULL, 0xf000, "Reserved", HFILL }},
- {&ht_basic_mcs_set,
- {"Modulation Coding Scheme (MCS) Set Bitfield", "wlan_mgt.ht.info.basicmcsset",
- FT_STRING, BASE_NONE, NULL, 0, "Modulation Coding Scheme (MCS) Set Bitfield", HFILL }},
-
{&hf_tag_secondary_channel_offset,
{"Secondary Channel Offset", "wlan_mgt.secchanoffset",
FT_UINT8, BASE_HEX, VALS (&hf_tag_secondary_channel_offset_flags), 0,
@@ -9900,6 +9961,7 @@ proto_register_ieee80211 (void)
&ett_tag_neighbor_report_sub_tag_tree,
&ett_ampduparam_tree,
&ett_mcsset_tree,
+ &ett_mcsbit_tree,
&ett_htex_cap_tree,
&ett_txbf_tree,
&ett_hta_cap_tree,