ieee80211: add support of Fortinet Vendor Specific

Only support type 10 (SYSTEM ?) with subtype 1 (AP-NAME)

See https://www.nickjvturner.com/ap-name-broadcast-support for pcap
This commit is contained in:
Alexis La Goutte 2022-02-09 15:54:39 +01:00 committed by A Wireshark GitLab Utility
parent 1e0d117eb7
commit 84569f3ab8
2 changed files with 96 additions and 0 deletions

View File

@ -6107,6 +6107,12 @@ static int hf_ieee80211_vs_mist_data = -1;
static int hf_ieee80211_vs_ruckus_ap_name = -1;
static int hf_ieee80211_vs_ruckus_data = -1;
static int hf_ieee80211_vs_fortinet_subtype = -1;
static int hf_ieee80211_vs_fortinet_system_type = -1;
static int hf_ieee80211_vs_fortinet_system_length = -1;
static int hf_ieee80211_vs_fortinet_system_apname = -1;
static int hf_ieee80211_vs_fortinet_data = -1;
static int hf_ieee80211_rsn_ie_ptk_keyid = -1;
static int hf_ieee80211_rsn_ie_gtk_keyid = -1;
@ -18209,6 +18215,66 @@ dissect_vendor_ie_extreme(proto_item *item _U_, proto_tree *ietree,
}
}
#define FORTINET_SYSTEM 10
static const value_string ieee80211_vs_fortinet_subtype_vals[] = {
{ FORTINET_SYSTEM, "SYSTEM"},
{ 0, NULL }
};
#define FORTINET_SYSTEM_APNAME 1
static const value_string ieee80211_vs_fortinet_system_type_vals[] = {
{ FORTINET_SYSTEM_APNAME, "AP NAME"},
{ 0, NULL }
};
static void
dissect_vendor_ie_fortinet(proto_item *item, proto_tree *ietree,
tvbuff_t *tvb, int offset, guint32 tag_len)
{
guint32 type;
proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_subtype, tvb, offset, 2, ENC_LITTLE_ENDIAN, &type);
proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_fortinet_subtype_vals, "Unknown"));
offset += 2;
tag_len -= 2;
switch (type) {
case FORTINET_SYSTEM:
while (tag_len > 2) {
guint32 system_type, system_length;
proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_system_type, tvb, offset, 1, ENC_NA, &system_type);
proto_item_append_text(item, " - %s:", val_to_str_const(system_type, ieee80211_vs_fortinet_system_type_vals, "Unknown"));
offset += 1;
tag_len -= 1;
proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_system_length, tvb, offset, 1, ENC_NA, &system_length);
offset += 1;
tag_len -= 1;
switch (system_type) {
case FORTINET_SYSTEM_APNAME:{
const guint8* name;
proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_fortinet_system_apname, tvb,
offset, system_length, ENC_ASCII|ENC_NA, wmem_packet_scope(), &name);
proto_item_append_text(item, " (%s)", name);
}
}
offset += system_length;
tag_len -= system_length;
}
break;
default:
proto_tree_add_item(ietree, hf_ieee80211_vs_fortinet_data, tvb, offset,
tag_len, ENC_NA);
if (tag_len > 0)
proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(wmem_packet_scope(), tvb, offset, tag_len));
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)
@ -27387,6 +27453,9 @@ ieee80211_tag_vendor_specific_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
case OUI_SGDSN:
dissect_vendor_ie_sgdsn(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
break;
case OUI_FORTINET:
dissect_vendor_ie_fortinet(field_data->item_tag, tree, tvb, offset, tag_vs_len);
break;
default:
proto_tree_add_item(tree, hf_ieee80211_tag_vendor_data, tvb, offset, tag_vs_len, ENC_NA);
@ -47211,6 +47280,32 @@ proto_register_ieee80211(void)
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
/* Vendor Specific : Fortinet */
{&hf_ieee80211_vs_fortinet_subtype,
{"Subtype", "wlan.vs.fortinet.subtype",
FT_UINT16, BASE_DEC, VALS(ieee80211_vs_fortinet_subtype_vals), 0,
NULL, HFILL }},
{&hf_ieee80211_vs_fortinet_system_type,
{"Type", "wlan.vs.fortinet.system.type",
FT_UINT8, BASE_DEC, VALS(ieee80211_vs_fortinet_system_type_vals), 0,
NULL, HFILL }},
{&hf_ieee80211_vs_fortinet_system_length,
{"Length", "wlan.vs.fortinet.system.length",
FT_UINT8, BASE_DEC, NULL, 0,
NULL, HFILL }},
{&hf_ieee80211_vs_fortinet_system_apname,
{"AP Name", "wlan.vs.fortinet.system.ap_name",
FT_STRINGZ, BASE_NONE, NULL, 0,
NULL, HFILL }},
{&hf_ieee80211_vs_fortinet_data,
{"Data", "wlan.vs.fortinet.data",
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
{&hf_ieee80211_tsinfo,
{"Traffic Stream (TS) Info", "wlan.ts_info",
FT_UINT24, BASE_HEX, NULL, 0,

View File

@ -45,6 +45,7 @@
#define OUI_PROFINET 0x000ECF /* PROFIBUS Nutzerorganisation e.V. */
#define OUI_RSN 0x000FAC /* Wi-Fi : RSN */
#define OUI_SONY_ERICSSON_3 0x000FDE /* Sony Ericsson Mobile Communications AB */
#define OUI_FORTINET 0x00090F /* Fortinet */
#define OUI_CIMETRICS 0x001090 /* Cimetrics, Inc. */
#define OUI_IEEE_802_3 0x00120F /* IEEE 802.3 */
#define OUI_MEDIA_ENDPOINT 0x0012BB /* Media (TIA TR-41 Committee) */