diff options
author | Tomasz Moń <desowin@gmail.com> | 2020-01-06 14:47:55 +0100 |
---|---|---|
committer | Alexis La Goutte <alexis.lagoutte@gmail.com> | 2020-01-06 19:47:07 +0000 |
commit | 05d772ce7b40008dcb99f492aece86507166c233 (patch) | |
tree | 2adf0b36c7982715a95af0dec66d09d2cc158fd3 /epan | |
parent | 13703434da30977805ed44f8252c6ea94e119d72 (diff) |
USB MSC: Dissect subclass and protocol codes
Change-Id: I7a818a11352e437a9492f896557c3348abe33c95
Reviewed-on: https://code.wireshark.org/review/35668
Petri-Dish: Tomasz Moń <desowin@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-usb-masstorage.c | 44 | ||||
-rw-r--r-- | epan/dissectors/packet-usb.c | 21 |
2 files changed, 64 insertions, 1 deletions
diff --git a/epan/dissectors/packet-usb-masstorage.c b/epan/dissectors/packet-usb-masstorage.c index 854c02dbb4..ceef788246 100644 --- a/epan/dissectors/packet-usb-masstorage.c +++ b/epan/dissectors/packet-usb-masstorage.c @@ -52,7 +52,49 @@ static const value_string status_vals[] = { {0, NULL} }; - +#define MSC_SUBCLASS_SCSI_COMMAND_SET_NOT_REPORTED 0x00 +#define MSC_SUBCLASS_RBC 0x01 +#define MSC_SUBCLASS_MMC_5_ATAPI 0x02 +#define MSC_SUBCLASS_OBSOLETE_QIC_157 0x03 +#define MSC_SUBCLASS_UFI 0x04 +#define MSC_SUBCLASS_OBSOLETE_SFF_8070I 0x05 +#define MSC_SUBCLASS_SCSI_TRANSPARENT_COMMAND_SET 0x06 +#define MSC_SUBCLASS_LSD_FS 0x07 +#define MSC_SUBCLASS_IEEE_1667 0x08 +#define MSC_SUBCLASS_VENDOR 0xFF + +static const value_string usb_massstorage_subclass_vals[] = { + {MSC_SUBCLASS_SCSI_COMMAND_SET_NOT_REPORTED, "SCSI command set not reported"}, + {MSC_SUBCLASS_RBC, "RBC"}, + {MSC_SUBCLASS_MMC_5_ATAPI, "MMC-5 (ATAPI)"}, + {MSC_SUBCLASS_OBSOLETE_QIC_157, "Obsolete (was QIC-157)"}, + {MSC_SUBCLASS_UFI, "UFI"}, + {MSC_SUBCLASS_OBSOLETE_SFF_8070I, "Obsolete (was SFF-8070i)"}, + {MSC_SUBCLASS_SCSI_TRANSPARENT_COMMAND_SET, "SCSI transparent command set"}, + {MSC_SUBCLASS_LSD_FS, "LSD FS"}, + {MSC_SUBCLASS_IEEE_1667, "IEEE 1667"}, + {MSC_SUBCLASS_VENDOR, "Specific to device vendor"}, + {0, NULL} +}; +value_string_ext ext_usb_massstorage_subclass_vals = VALUE_STRING_EXT_INIT(usb_massstorage_subclass_vals); + +#define MSC_PROTOCOL_CBI_NO_INTERRUPT 0x00 +#define MSC_PROTOCOL_CBI_WITH_INTERRUPT 0x01 +#define MSC_PROTOCOL_OBSOLETE 0x02 +#define MSC_PROTOCOL_BULK_ONLY 0x50 +#define MSC_PROTOCOL_UAS 0x62 +#define MSC_PROTOCOL_VENDOR 0xFF + +static const value_string usb_massstorage_protocol_vals[] = { + {MSC_PROTOCOL_CBI_NO_INTERRUPT, "Control/Bulk/Interrupt (CBI) Transport with command completion interrupt"}, + {MSC_PROTOCOL_CBI_WITH_INTERRUPT, "Control/Bulk/Interrupt (CBI) Transport with no command completion interrupt"}, + {MSC_PROTOCOL_OBSOLETE, "Obsolete"}, + {MSC_PROTOCOL_BULK_ONLY, "Bulk-Only (BBB) Transport"}, + {MSC_PROTOCOL_UAS, "UAS"}, + {MSC_PROTOCOL_VENDOR, "Specific to device vendor"}, + {0, NULL} +}; +value_string_ext usb_massstorage_protocol_vals_ext = VALUE_STRING_EXT_INIT(usb_massstorage_protocol_vals); static void diff --git a/epan/dissectors/packet-usb.c b/epan/dissectors/packet-usb.c index 2fe30a110f..c2dd59b066 100644 --- a/epan/dissectors/packet-usb.c +++ b/epan/dissectors/packet-usb.c @@ -220,11 +220,13 @@ static int hf_usb_bInterfaceClass = -1; static int hf_usb_bInterfaceSubClass = -1; static int hf_usb_bInterfaceSubClass_audio = -1; static int hf_usb_bInterfaceSubClass_cdc = -1; +static int hf_usb_bInterfaceSubClass_massstorage = -1; static int hf_usb_bInterfaceSubClass_hid = -1; static int hf_usb_bInterfaceSubClass_misc = -1; static int hf_usb_bInterfaceSubClass_app = -1; static int hf_usb_bInterfaceProtocol = -1; static int hf_usb_bInterfaceProtocol_cdc = -1; +static int hf_usb_bInterfaceProtocol_massstorage = -1; static int hf_usb_bInterfaceProtocol_cdc_data = -1; static int hf_usb_bInterfaceProtocol_hid_boot = -1; static int hf_usb_bInterfaceProtocol_app_dfu = -1; @@ -877,6 +879,7 @@ extern value_string_ext ext_usb_vendors_vals; extern value_string_ext ext_usb_products_vals; extern value_string_ext ext_usb_audio_subclass_vals; extern value_string_ext ext_usb_com_subclass_vals; +extern value_string_ext ext_usb_massstorage_subclass_vals; extern value_string_ext linux_negative_errno_vals_ext; /* @@ -1199,6 +1202,8 @@ static const value_string usb_cdc_protocol_vals[] = { }; static value_string_ext usb_cdc_protocol_vals_ext = VALUE_STRING_EXT_INIT(usb_cdc_protocol_vals); +extern value_string_ext usb_massstorage_protocol_vals_ext; + static const value_string usb_cdc_data_protocol_vals[] = { {0x00, "No class specific protocol required"}, {0x01, "Network Transfer Block"}, @@ -2336,6 +2341,9 @@ dissect_usb_interface_descriptor(packet_info *pinfo, proto_tree *parent_tree, case IF_CLASS_COMMUNICATIONS: proto_tree_add_item(tree, hf_usb_bInterfaceSubClass_cdc, tvb, offset, 1, ENC_LITTLE_ENDIAN); break; + case IF_CLASS_MASS_STORAGE: + proto_tree_add_item(tree, hf_usb_bInterfaceSubClass_massstorage, tvb, offset, 1, ENC_LITTLE_ENDIAN); + break; case IF_CLASS_HID: proto_tree_add_item(tree, hf_usb_bInterfaceSubClass_hid, tvb, offset, 1, ENC_LITTLE_ENDIAN); break; @@ -2358,6 +2366,9 @@ dissect_usb_interface_descriptor(packet_info *pinfo, proto_tree *parent_tree, case IF_CLASS_COMMUNICATIONS: proto_tree_add_item(tree, hf_usb_bInterfaceProtocol_cdc, tvb, offset, 1, ENC_LITTLE_ENDIAN); break; + case IF_CLASS_MASS_STORAGE: + proto_tree_add_item(tree, hf_usb_bInterfaceProtocol_massstorage, tvb, offset, 1, ENC_LITTLE_ENDIAN); + break; case IF_CLASS_CDC_DATA: proto_tree_add_item(tree, hf_usb_bInterfaceProtocol_cdc_data, tvb, offset, 1, ENC_LITTLE_ENDIAN); break; @@ -6157,6 +6168,11 @@ proto_register_usb(void) FT_UINT8, BASE_HEX | BASE_EXT_STRING, &ext_usb_com_subclass_vals, 0x0, NULL, HFILL }}, + { &hf_usb_bInterfaceSubClass_massstorage , + { "bInterfaceSubClass", "usb.bInterfaceSubClass", + FT_UINT8, BASE_HEX | BASE_EXT_STRING, &ext_usb_massstorage_subclass_vals, 0x0, + NULL, HFILL }}, + { &hf_usb_bInterfaceSubClass_hid, { "bInterfaceSubClass", "usb.bInterfaceSubClass", FT_UINT8, BASE_HEX | BASE_EXT_STRING, &usb_hid_subclass_vals_ext, 0x0, @@ -6182,6 +6198,11 @@ proto_register_usb(void) FT_UINT8, BASE_HEX | BASE_EXT_STRING, &usb_cdc_protocol_vals_ext, 0x0, NULL, HFILL }}, + { &hf_usb_bInterfaceProtocol_massstorage, + { "bInterfaceProtocol", "usb.bInterfaceProtocol", + FT_UINT8, BASE_HEX | BASE_EXT_STRING, &usb_massstorage_protocol_vals_ext, 0x0, + NULL, HFILL }}, + { &hf_usb_bInterfaceProtocol_cdc_data, { "bInterfaceProtocol", "usb.bInterfaceProtocol", FT_UINT8, BASE_HEX | BASE_EXT_STRING, &usb_cdc_data_protocol_vals_ext, 0x0, |