aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-wps.c
diff options
context:
space:
mode:
authorJaap Keuter <jaap.keuter@xs4all.nl>2011-02-07 22:47:43 +0000
committerJaap Keuter <jaap.keuter@xs4all.nl>2011-02-07 22:47:43 +0000
commitd265580072409311527c0e9d90177d6a8e2b1874 (patch)
treea0d01fb8c81fe27bfd4056345746fd6109057ab9 /epan/dissectors/packet-wps.c
parent3312fc1bfe5dafec937108078f19be4b5136db16 (diff)
From Masashi Honma:
Currently the Wireshark does not support Primary Device Type dissection. I made a patch for the dissection based on "Wi-Fi Simple Configuration Specification DRAFT Version 2.0.0.51". svn path=/trunk/; revision=35867
Diffstat (limited to 'epan/dissectors/packet-wps.c')
-rw-r--r--epan/dissectors/packet-wps.c172
1 files changed, 156 insertions, 16 deletions
diff --git a/epan/dissectors/packet-wps.c b/epan/dissectors/packet-wps.c
index b4163aefbe..38006827e0 100644
--- a/epan/dissectors/packet-wps.c
+++ b/epan/dissectors/packet-wps.c
@@ -273,7 +273,7 @@ static const value_string eapwps_wfa_ext_types[] = {
{ WPS_WFA_EXT_SETTINGS_DELAY_TIME, "Settings Delay Time" },
{ 0, NULL }
};
-
+#define WFA_OUI 0x0050F204
static int proto_wps = -1;
@@ -382,8 +382,8 @@ static int hf_eapwps_tlv_permitted_config_methods = -1;
static int hf_eapwps_tlv_selected_registrar_config_methods = -1;
static int hf_eapwps_tlv_primary_device_type = -1;
static int hf_eapwps_tlv_primary_device_type_category = -1;
-static int hf_eapwps_tlv_primary_device_type_oui = -1;
-static int hf_eapwps_tlv_primary_device_type_subcategory = -1;
+#define WPS_DEVICE_TYPE_CATEGORY_MAX 11
+static int hf_eapwps_tlv_primary_device_type_subcategory[WPS_DEVICE_TYPE_CATEGORY_MAX] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
static int hf_eapwps_tlv_secondary_device_type_list = -1;
static int hf_eapwps_tlv_portable_device = -1;
static int hf_eapwps_tlv_ap_setup_locked = -1;
@@ -647,6 +647,117 @@ static const value_string eapwps_tlv_wifi_protected_setup_state[] = {
{ 0, NULL }
};
+static const value_string eapwps_tlv_primary_device_type_category[] = {
+ { 0x01, "Computer" },
+ { 0x02, "Input Device" },
+ { 0x03, "Printers, Scanners, Faxes and Copiers" },
+ { 0x04, "Camera" },
+ { 0x05, "Storage" },
+ { 0x06, "Network Infrastructure" },
+ { 0x07, "Displays" },
+ { 0x08, "Multimedia Devices" },
+ { 0x09, "Gaming Devices" },
+ { 0x0A, "Telephone" },
+ { 0x0B, "Audio Devices" },
+ { 0, NULL }
+};
+
+#define WPS_DEVICE_TYPE_SUB_CATEGORY_MAX 9
+static const value_string eapwps_tlv_primary_device_type_subcategory[WPS_DEVICE_TYPE_CATEGORY_MAX][WPS_DEVICE_TYPE_SUB_CATEGORY_MAX + 1] = {
+ {
+ { 0x01, "PC" },
+ { 0x02, "Server" },
+ { 0x03, "Media Center" },
+ { 0x04, "Ultra-mobile PC" },
+ { 0x05, "Notebook" },
+ { 0x06, "Desktop" },
+ { 0x07, "MID (Mobile Internet Device)" },
+ { 0x08, "Netbook" },
+ { 0, NULL }
+ },
+ {
+ { 0x01, "Keyboard" },
+ { 0x02, "Mouse" },
+ { 0x03, "Joystick" },
+ { 0x04, "Trackball" },
+ { 0x05, "Gaming controller" },
+ { 0x06, "Remote" },
+ { 0x07, "Touchscreen" },
+ { 0x08, "Biometric reader" },
+ { 0x09, "Barcode reader" },
+ { 0, NULL }
+ },
+ {
+ { 0x01, "Printer or Print Server" },
+ { 0x02, "Scanner" },
+ { 0x03, "Fax" },
+ { 0x04, "Copier" },
+ { 0x05, "All-in-one (Printer, Scanner, Fax, Copier)" },
+ { 0, NULL }
+ },
+ {
+ { 0x01, "Digital Still Camera" },
+ { 0x02, "Video Camera" },
+ { 0x03, "Web Camera" },
+ { 0x04, "Security Camera" },
+ { 0, NULL }
+ },
+ {
+ { 0x01, "NAS" },
+ { 0, NULL }
+ },
+ {
+ { 0x01, "AP" },
+ { 0x02, "Router" },
+ { 0x03, "Switch" },
+ { 0x04, "Gateway" },
+ { 0x05, "Bridge" },
+ { 0, NULL }
+ },
+ {
+ { 0x01, "Television" },
+ { 0x02, "Electronic Picture Frame" },
+ { 0x03, "Projector" },
+ { 0x04, "Monitor" },
+ { 0, NULL }
+ },
+ {
+ { 0x01, "DAR" },
+ { 0x02, "PVR" },
+ { 0x03, "MCX" },
+ { 0x04, "Set-top box" },
+ { 0x05, "Media Server/Media Adapter/Media Extender" },
+ { 0x06, "Portable Video Player" },
+ { 0, NULL }
+ },
+ {
+ { 0x01, "Xbox" },
+ { 0x02, "Xbox360" },
+ { 0x03, "Playstation" },
+ { 0x04, "Game Console/Game Console Adapter" },
+ { 0x05, "Portable Gaming Device" },
+ { 0, NULL }
+ },
+ {
+ { 0x01, "Windows Mobile" },
+ { 0x02, "Phone - single mode" },
+ { 0x03, "Phone - dual mode" },
+ { 0x04, "Smartphone - single mode" },
+ { 0x05, "Smartphone - dual mode" },
+ { 0, NULL }
+ },
+ {
+ { 0x01, "Audio tuner/receiver" },
+ { 0x02, "Speakers" },
+ { 0x03, "Portable Music Player (PMP)" },
+ { 0x04, "Headset (headphones + microphone)" },
+ { 0x05, "Headphones" },
+ { 0x06, "Microphone" },
+ { 0x07, "Home Theater Systems" },
+ { 0, NULL }
+ }
+};
+
/* ********************************************************************** */
/* pinfo may be NULL ! */
/* ********************************************************************** */
@@ -1345,12 +1456,14 @@ dissect_wps_tlvs(proto_tree *eap_tree, tvbuff_t *tvb, int offset,
case WPS_TLV_TYPE_PRIMARY_DEVICE_TYPE:
tmp_item = proto_tree_add_item(tlv_root, hf_eapwps_tlv_primary_device_type, tvb, offset+4, 8, FALSE);
hfindex = hf_eapwps_tlv_primary_device_type;
-
- /* NYI: Implement vals for OUI==WFA */
- proto_tree_add_item(tlv_root, hf_eapwps_tlv_primary_device_type_category, tvb, offset+4, 2, FALSE);
- proto_tree_add_item(tlv_root, hf_eapwps_tlv_primary_device_type_oui, tvb, offset+6, 4, FALSE);
- proto_tree_add_item(tlv_root, hf_eapwps_tlv_primary_device_type_subcategory,tvb, offset+10, 2, FALSE);
-
+ if (tvb_get_ntohl(tvb, offset+6) == WFA_OUI) {
+ guint16 dev_cat = tvb_get_ntohs(tvb, offset+4);
+ if (dev_cat > 0 && dev_cat <= WPS_DEVICE_TYPE_CATEGORY_MAX) {
+ proto_tree_add_item(tlv_root, hf_eapwps_tlv_primary_device_type_category, tvb, offset+4, 2, FALSE);
+ proto_tree_add_item(tlv_root, hf_eapwps_tlv_primary_device_type_subcategory[dev_cat-1], tvb, offset+10, 2, FALSE);
+ }
+ }
+
break;
case WPS_TLV_TYPE_SECONDARY_DEVICE_TYPE_LIST:
@@ -1942,13 +2055,40 @@ proto_register_wps(void)
FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
{ &hf_eapwps_tlv_primary_device_type_category,
{ "Category", "wps.primary_device_type.category",
- FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
- { &hf_eapwps_tlv_primary_device_type_oui,
- { "OUI", "wps.primary_device_type.oui",
- FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_eapwps_tlv_primary_device_type_subcategory,
- { "Subcategory", "wps.primary_device_type.subcategory",
- FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
+ FT_UINT16, BASE_HEX, VALS(eapwps_tlv_primary_device_type_category), 0x0, NULL, HFILL }},
+ { &hf_eapwps_tlv_primary_device_type_subcategory[0],
+ { "Subcategory", "wps.primary_device_type.subcategory_1",
+ FT_UINT16, BASE_HEX, VALS(eapwps_tlv_primary_device_type_subcategory[0]), 0x0, NULL, HFILL }},
+ { &hf_eapwps_tlv_primary_device_type_subcategory[1],
+ { "Subcategory", "wps.primary_device_type.subcategory_2",
+ FT_UINT16, BASE_HEX, VALS(eapwps_tlv_primary_device_type_subcategory[1]), 0x0, NULL, HFILL }},
+ { &hf_eapwps_tlv_primary_device_type_subcategory[2],
+ { "Subcategory", "wps.primary_device_type.subcategory_3",
+ FT_UINT16, BASE_HEX, VALS(eapwps_tlv_primary_device_type_subcategory[2]), 0x0, NULL, HFILL }},
+ { &hf_eapwps_tlv_primary_device_type_subcategory[3],
+ { "Subcategory", "wps.primary_device_type.subcategory_4",
+ FT_UINT16, BASE_HEX, VALS(eapwps_tlv_primary_device_type_subcategory[3]), 0x0, NULL, HFILL }},
+ { &hf_eapwps_tlv_primary_device_type_subcategory[4],
+ { "Subcategory", "wps.primary_device_type.subcategory_5",
+ FT_UINT16, BASE_HEX, VALS(eapwps_tlv_primary_device_type_subcategory[4]), 0x0, NULL, HFILL }},
+ { &hf_eapwps_tlv_primary_device_type_subcategory[5],
+ { "Subcategory", "wps.primary_device_type.subcategory_6",
+ FT_UINT16, BASE_HEX, VALS(eapwps_tlv_primary_device_type_subcategory[5]), 0x0, NULL, HFILL }},
+ { &hf_eapwps_tlv_primary_device_type_subcategory[6],
+ { "Subcategory", "wps.primary_device_type.subcategory_7",
+ FT_UINT16, BASE_HEX, VALS(eapwps_tlv_primary_device_type_subcategory[6]), 0x0, NULL, HFILL }},
+ { &hf_eapwps_tlv_primary_device_type_subcategory[7],
+ { "Subcategory", "wps.primary_device_type.subcategory_8",
+ FT_UINT16, BASE_HEX, VALS(eapwps_tlv_primary_device_type_subcategory[7]), 0x0, NULL, HFILL }},
+ { &hf_eapwps_tlv_primary_device_type_subcategory[8],
+ { "Subcategory", "wps.primary_device_type.subcategory_9",
+ FT_UINT16, BASE_HEX, VALS(eapwps_tlv_primary_device_type_subcategory[8]), 0x0, NULL, HFILL }},
+ { &hf_eapwps_tlv_primary_device_type_subcategory[9],
+ { "Subcategory", "wps.primary_device_type.subcategory_10",
+ FT_UINT16, BASE_HEX, VALS(eapwps_tlv_primary_device_type_subcategory[9]), 0x0, NULL, HFILL }},
+ { &hf_eapwps_tlv_primary_device_type_subcategory[10],
+ { "Subcategory", "wps.primary_device_type.subcategory_11",
+ FT_UINT16, BASE_HEX, VALS(eapwps_tlv_primary_device_type_subcategory[10]), 0x0, NULL, HFILL }},
{ &hf_eapwps_tlv_secondary_device_type_list,
{ "Secondary Device Type List", "wps.secondary_device_type_list",