From b10dbb861457736991943fbddb13356ff6eb4c81 Mon Sep 17 00:00:00 2001 From: Richard Sharpe Date: Sun, 13 May 2018 15:02:12 -0700 Subject: ieee80211: Conform with IEEE802.11-2016 around VHT MCS Set in VHT Capabilities. There were a few undissected fields in the VHT MCS Set and some of the fields were not being placed under the correct sub tree. Change-Id: I0dc4be1b69d371f59cc74fa06205a3cba2a65c54 Reviewed-on: https://code.wireshark.org/review/27385 Petri-Dish: Alexis La Goutte Tested-by: Petri Dish Buildbot Reviewed-by: Peter Wu --- epan/dissectors/packet-ieee80211.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/epan/dissectors/packet-ieee80211.c b/epan/dissectors/packet-ieee80211.c index 1c58e3a9c4..9b89aa5827 100644 --- a/epan/dissectors/packet-ieee80211.c +++ b/epan/dissectors/packet-ieee80211.c @@ -4112,6 +4112,10 @@ static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss = -1; static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss = -1; static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss = -1; +static int hf_ieee80211_vht_mcsset_max_nsts_total = -1; +static int hf_ieee80211_vht_mcsset_ext_nss_bw_cap = -1; +static int hf_ieee80211_vht_mcsset_reserved = -1; + static int hf_ieee80211_vht_mcsset_rx_highest_long_gi = -1; static int hf_ieee80211_vht_mcsset_tx_mcs_map = -1; @@ -13283,7 +13287,7 @@ dissect_vht_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset) mcs_tree = proto_item_add_subtree(ti, ett_vht_mcsset_tree); /* B0 - B15 */ - proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_vht_mcsset_rx_mcs_map, + proto_tree_add_bitmask_with_flags(mcs_tree, tvb, offset, hf_ieee80211_vht_mcsset_rx_mcs_map, ett_vht_rx_mcsbit_tree, ieee80211_vht_mcsset_rx_max_mcs, ENC_LITTLE_ENDIAN, BMT_NO_APPEND); offset += 2; @@ -13291,18 +13295,24 @@ dissect_vht_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset) /* B16 - B28 13 bits*/ proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_rx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN); - /* B29 - B31 2 reserved bits*/ + /* B29 - B31 Max NSTS Total*/ + proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_max_nsts_total, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; /* B32 - B47 */ - proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_vht_mcsset_tx_mcs_map, + proto_tree_add_bitmask_with_flags(mcs_tree, tvb, offset, hf_ieee80211_vht_mcsset_tx_mcs_map, ett_vht_tx_mcsbit_tree, ieee80211_vht_mcsset_tx_max_mcs, ENC_LITTLE_ENDIAN, BMT_NO_APPEND); offset += 2; /* B48 - B60 13 bits */ proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_tx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN); - /* B61 - B63 2 reserved bits*/ + + /* B61 */ + proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_ext_nss_bw_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN); + + /* B62 - B63 2 reserved bits*/ + proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; return offset; @@ -28022,6 +28032,10 @@ proto_register_ieee80211(void) FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0xc000, NULL, HFILL }}, + {&hf_ieee80211_vht_mcsset_max_nsts_total, + {"MaX NSTS Total", "wlan.vht.mcsset.max_nsts_total", + FT_UINT16, BASE_DEC, NULL, 0xe000, NULL, HFILL }}, + {&hf_ieee80211_vht_mcsset_rx_highest_long_gi, {"Rx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan.vht.mcsset.rxhighestlonggirate", FT_UINT16, BASE_HEX, NULL, 0x1fff, @@ -28077,6 +28091,14 @@ proto_register_ieee80211(void) FT_UINT16, BASE_HEX, NULL, 0x1fff, NULL, HFILL }}, + {&hf_ieee80211_vht_mcsset_ext_nss_bw_cap, + {"Extended NSS BW Capable", "wlan.vht.ncsset.ext_nss_bw_cap", + FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable), 0x2000, NULL, HFILL }}, + + {&hf_ieee80211_vht_mcsset_reserved, + {"Reserved", "wlan.vht.ncsset.reserved", + FT_UINT16, BASE_HEX, NULL, 0xc000, NULL, HFILL }}, + {&hf_ieee80211_vht_op, {"VHT Operation Info", "wlan.vht.op", FT_NONE, BASE_NONE, NULL, 0, -- cgit v1.2.3