diff --git a/epan/dissectors/packet-ieee80211.c b/epan/dissectors/packet-ieee80211.c index d181fa193c..807f84e868 100644 --- a/epan/dissectors/packet-ieee80211.c +++ b/epan/dissectors/packet-ieee80211.c @@ -4332,6 +4332,12 @@ static int hf_ieee80211_vs_meru_subtype = -1; static int hf_ieee80211_vs_meru_sublength = -1; static int hf_ieee80211_vs_meru_subdata = -1; +static int hf_ieee80211_vs_extreme_subtype = -1; +static int hf_ieee80211_vs_extreme_subdata = -1; +static int hf_ieee80211_vs_extreme_unknown = -1; +static int hf_ieee80211_vs_extreme_ap_length = -1; +static int hf_ieee80211_vs_extreme_ap_name = -1; + static int hf_ieee80211_rsn_ie_pmkid = -1; static int hf_ieee80211_rsn_ie_unknown = -1; @@ -10581,6 +10587,50 @@ dissect_vendor_ie_meru(proto_item *item _U_, proto_tree *ietree, } } +static const value_string ieee80211_vs_extreme_subtype_vals[] = { + { 1, "AP Name"}, + { 0, NULL } +}; + +static void +dissect_vendor_ie_extreme(proto_item *item _U_, proto_tree *ietree, + tvbuff_t *tvb, int offset, guint32 tag_len, + packet_info *pinfo) +{ + guint32 type, length; + proto_item *ti_len; + + proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_extreme_subtype, tvb, offset, 1, ENC_NA, &type); + offset += 1; + tag_len -= 1; + + proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_subdata, tvb, offset, tag_len, ENC_NA); + + switch(type){ + case 1: /* Unknown (7 bytes) + AP Name Length (1 byte) + AP Name */ + + proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_unknown, tvb, offset, 7, ENC_NA); + offset += 7; + tag_len -= 1; + + ti_len = proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_extreme_ap_length, tvb, offset, 1, ENC_NA, &length); + offset += 1; + tag_len -= 1; + + if (tag_len < length) { + expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < AP Length"); + length = tag_len; + } + + proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_ap_name, tvb, offset, length, ENC_ASCII|ENC_NA); + + break; + default: + /* Expert info ? */ + break; + } +} + /* 802.11-2012 8.4.2.37 QoS Capability element */ static int dissect_qos_capability(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype) @@ -15221,6 +15271,9 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset case OUI_MERU: dissect_vendor_ie_meru(ti, tree, tvb, offset, tag_vs_len, pinfo); break; + case OUI_ZEBRA_EXTREME: + dissect_vendor_ie_extreme(ti, tree, tvb, offset, tag_vs_len, pinfo); + break; default: proto_tree_add_item(tree, hf_ieee80211_tag_vendor_data, tvb, offset, tag_vs_len, ENC_NA); break; @@ -26056,6 +26109,32 @@ proto_register_ieee80211(void) FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}, + /* Vendor Specific : Extreme (Zebra) */ + {&hf_ieee80211_vs_extreme_subtype, + {"Subtype", "wlan.vs.extreme.subtype", + FT_UINT8, BASE_DEC, VALS(ieee80211_vs_extreme_subtype_vals), 0, + NULL, HFILL }}, + + {&hf_ieee80211_vs_extreme_subdata, + {"Subdata", "wlan.vs.extreme.subdata", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + + {&hf_ieee80211_vs_extreme_unknown, + {"Unknown", "wlan.vs.extreme.unknown", + FT_BYTES, BASE_NONE, NULL, 0, + NULL, HFILL }}, + + {&hf_ieee80211_vs_extreme_ap_length, + {"AP Length", "wlan.vs.extreme.ap_length", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL }}, + + {&hf_ieee80211_vs_extreme_ap_name, + {"AP Name", "wlan.vs.extreme.ap_name", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL }}, + {&hf_ieee80211_tsinfo, {"Traffic Stream (TS) Info", "wlan.ts_info", FT_UINT24, BASE_HEX, NULL, 0, diff --git a/epan/oui.c b/epan/oui.c index 535c671bd0..26c1157db8 100644 --- a/epan/oui.c +++ b/epan/oui.c @@ -87,6 +87,7 @@ http://www.cisco.com/univercd/cc/td/doc/product/software/ios113ed/113ed_cr/ibm_r { OUI_DCBX, "Data Center Bridging Capabilities Exchange" }, { OUI_AVAYA, "Avaya" }, { OUI_MERU, "Meru Network (Fortinet)" }, + { OUI_ZEBRA_EXTREME, "Extreme (Zebra)" }, { 0, NULL } }; diff --git a/epan/oui.h b/epan/oui.h index c0c6a9f5a4..3417993873 100644 --- a/epan/oui.h +++ b/epan/oui.h @@ -88,6 +88,7 @@ #define OUI_WFA 0x506F9A /* Wi-Fi Alliance */ #define OUI_3GPP2 0xCF0002 /* 3GPP2 */ #define OUI_MERU 0x000ce6 /* Meru Network (Fortinet) */ +#define OUI_ZEBRA_EXTREME 0x00A0F8 /* Extreme/WING (Zebra) */ extern const value_string oui_vals[];