Ethereal-dev: [Ethereal-dev] Updates to SCSI Dissector
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Ming Zhang <mingz@xxxxxxxxxxx>
Date: Wed, 01 Mar 2006 12:56:05 -0500
Changes on SCSI dissector to add following commands support SPACE6 SPACE16 ERASE6 LOCATE10 LOCATE16 Patch base on svn code r17430. Please apply. Thanks Ming
Index: epan/dissectors/packet-scsi.c =================================================================== --- epan/dissectors/packet-scsi.c (revision 17430) +++ epan/dissectors/packet-scsi.c (working copy) @@ -309,7 +309,10 @@ static int hf_sbc2_wrverify_xferlen = -1 static int hf_sbc2_wrverify_lba64 = -1; static int hf_sbc2_wrverify_xferlen32 = -1; static int hf_sbc2_verify_bytchk = -1; - +static int hf_ssc3_space6_count = -1; +static int hf_ssc3_space16_count = -1; +static int hf_ssc3_locate10_loid = -1; +static int hf_ssc3_locate16_loid = -1; static gint ett_scsi = -1; static gint ett_scsi_page = -1; @@ -4976,6 +4979,97 @@ dissect_ssc2_rewind (tvbuff_t *tvb, pack } static void +dissect_ssc2_locate10 (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, + guint offset, gboolean isreq, gboolean iscdb, + guint payload_len _U_, scsi_task_data_t *cdata _U_) +{ + guint8 flags; + + if (isreq && iscdb) { + if (!tree) + return; + + flags = tvb_get_guint8 (tvb, offset); + proto_tree_add_text (tree, tvb, offset, 1, + "BT: %u, CP: %u, IMMED: %u", + (flags & 0x04) >> 2, + (flags & 0x02) >> 1, + flags & 0x01); + + proto_tree_add_item (tree, hf_ssc3_locate10_loid, tvb, offset+2, 4, 0); + + flags = tvb_get_guint8 (tvb, offset+7); + proto_tree_add_text (tree, tvb, offset+7, 1, + "Partition: %u", + flags); + + flags = tvb_get_guint8 (tvb, offset+8); + proto_tree_add_uint_format (tree, hf_scsi_control, tvb, offset+8, 1, + flags, + "Vendor Unique = %u, NACA = %u, Link = %u", + flags & 0xC0, flags & 0x4, flags & 0x1); + } +} + +static void +dissect_ssc2_locate16 (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, + guint offset, gboolean isreq, gboolean iscdb, + guint payload_len _U_, scsi_task_data_t *cdata _U_) +{ + guint8 flags; + + if (isreq && iscdb) { + if (!tree) + return; + + flags = tvb_get_guint8 (tvb, offset); + proto_tree_add_text (tree, tvb, offset, 1, + "DEST_TYPE: %u, CP: %u, IMMED: %u", + (flags & 0x18) >> 3, + (flags & 0x02) >> 1, + flags & 0x01); + + flags = tvb_get_guint8 (tvb, offset+2); + proto_tree_add_text (tree, tvb, offset+2, 1, + "Partition: %u", + flags); + + proto_tree_add_item (tree, hf_ssc3_locate16_loid, tvb, offset+3, 8, 0); + + flags = tvb_get_guint8 (tvb, offset+14); + proto_tree_add_uint_format (tree, hf_scsi_control, tvb, offset+14, 1, + flags, + "Vendor Unique = %u, NACA = %u, Link = %u", + flags & 0xC0, flags & 0x4, flags & 0x1); + } +} + +static void +dissect_ssc2_erase6 (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, + guint offset, gboolean isreq, gboolean iscdb, + guint payload_len _U_, scsi_task_data_t *cdata _U_) +{ + guint8 flags; + + if (isreq && iscdb) { + if (!tree) + return; + + flags = tvb_get_guint8 (tvb, offset); + proto_tree_add_text (tree, tvb, offset, 1, + "IMMED: %u, LONG: %u", + (flags & 0x02) >> 1, + flags & 0x01); + + flags = tvb_get_guint8 (tvb, offset+4); + proto_tree_add_uint_format (tree, hf_scsi_control, tvb, offset+4, 1, + flags, + "Vendor Unique = %u, NACA = %u, Link = %u", + flags & 0xC0, flags & 0x4, flags & 0x1); + } +} + +static void dissect_ssc2_erase16 (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint offset, gboolean isreq, gboolean iscdb, guint payload_len _U_, scsi_task_data_t *cdata _U_) @@ -5017,6 +5111,62 @@ dissect_ssc2_erase16 (tvbuff_t *tvb, pac } static void +dissect_ssc2_space6 (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, + guint offset, gboolean isreq, gboolean iscdb, + guint payload_len _U_, scsi_task_data_t *cdata _U_) +{ + guint8 flags; + + if (isreq && iscdb) { + if (!tree) + return; + + flags = tvb_get_guint8 (tvb, offset); + proto_tree_add_text (tree, tvb, offset, 1, + "CODE: %u", + flags & 0x0f); + + proto_tree_add_item (tree, hf_ssc3_space6_count, tvb, offset+1, 3, 0); + + flags = tvb_get_guint8 (tvb, offset+4); + proto_tree_add_uint_format (tree, hf_scsi_control, tvb, offset+4, 1, + flags, + "Vendor Unique = %u, NACA = %u, Link = %u", + flags & 0xC0, flags & 0x4, flags & 0x1); + } +} + +static void +dissect_ssc2_space16 (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, + guint offset, gboolean isreq, gboolean iscdb, + guint payload_len _U_, scsi_task_data_t *cdata _U_) +{ + guint8 flags; + + if (isreq && iscdb) { + if (!tree) + return; + + flags = tvb_get_guint8 (tvb, offset); + proto_tree_add_text (tree, tvb, offset, 1, + "CODE: %u", + flags & 0x0f); + + proto_tree_add_item (tree, hf_ssc3_space16_count, tvb, offset+3, 8, 0); + + proto_tree_add_text (tree, tvb, offset+11, 2, + "Parameter Len: %u", + tvb_get_ntohs (tvb, offset+11)); + + flags = tvb_get_guint8 (tvb, offset+14); + proto_tree_add_uint_format (tree, hf_scsi_control, tvb, offset+14, 1, + flags, + "Vendor Unique = %u, NACA = %u, Link = %u", + flags & 0xC0, flags & 0x4, flags & 0x1); + } +} + +static void dissect_ssc2_formatmedium (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, guint offset, gboolean isreq, gboolean iscdb, guint payload_len _U_, scsi_task_data_t *cdata _U_) @@ -6064,7 +6214,7 @@ static scsi_cdb_table_t ssc[256] = { /*SSC 0x0e*/{NULL}, /*SSC 0x0f*/{NULL}, /*SSC 0x10*/{dissect_ssc2_writefilemarks6}, -/*SSC 0x11*/{NULL}, +/*SSC 0x11*/{dissect_ssc2_space6}, /*SSC 0x12*/{NULL}, /*SSC 0x13*/{NULL}, /*SSC 0x14*/{NULL}, @@ -6072,7 +6222,7 @@ static scsi_cdb_table_t ssc[256] = { /*SSC 0x16*/{NULL}, /*SSC 0x17*/{NULL}, /*SSC 0x18*/{NULL}, -/*SSC 0x19*/{NULL}, +/*SSC 0x19*/{dissect_ssc2_erase6}, /*SSC 0x1a*/{NULL}, /*SSC 0x1b*/{dissect_ssc2_loadunload}, /*SSC 0x1c*/{NULL}, @@ -6090,7 +6240,7 @@ static scsi_cdb_table_t ssc[256] = { /*SSC 0x28*/{NULL}, /*SSC 0x29*/{NULL}, /*SSC 0x2a*/{NULL}, -/*SSC 0x2b*/{NULL}, +/*SSC 0x2b*/{dissect_ssc2_locate10}, /*SSC 0x2c*/{NULL}, /*SSC 0x2d*/{NULL}, /*SSC 0x2e*/{NULL}, @@ -6192,8 +6342,8 @@ static scsi_cdb_table_t ssc[256] = { /*SSC 0x8e*/{NULL}, /*SSC 0x8f*/{NULL}, /*SSC 0x90*/{NULL}, -/*SSC 0x91*/{NULL}, -/*SSC 0x92*/{NULL}, +/*SSC 0x91*/{dissect_ssc2_space16}, +/*SSC 0x92*/{dissect_ssc2_locate16}, /*SSC 0x93*/{dissect_ssc2_erase16}, /*SSC 0x94*/{NULL}, /*SSC 0x95*/{NULL}, @@ -7728,6 +7878,18 @@ proto_register_scsi (void) { &hf_sbc2_wrverify_xferlen32, {"Transfer Length", "scsi.sbc2.wrverify.xferlen32", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}}, + { &hf_ssc3_space6_count, + {"Count", "scsi.space6.count", FT_UINT24, BASE_DEC, NULL, 0x0, + "", HFILL}}, + { &hf_ssc3_space16_count, + {"Count", "scsi.space16.count", FT_UINT64, BASE_DEC, NULL, 0x0, + "", HFILL}}, + { &hf_ssc3_locate10_loid, + {"Logical Object Identifier", "scsi.locate10.loid", FT_UINT32, BASE_DEC, NULL, 0x0, + "", HFILL}}, + { &hf_ssc3_locate16_loid, + {"Logical Identifier", "scsi.locate16.loid", FT_UINT64, BASE_DEC, NULL, 0x0, + "", HFILL}}, }; /* Setup protocol subtree array */
- Follow-Ups:
- [Ethereal-dev] Re: Updates to SCSI Dissector
- From: Ming Zhang
- [Ethereal-dev] Re: Updates to SCSI Dissector
- From: ronnie sahlberg
- [Ethereal-dev] Re: Updates to SCSI Dissector
- Prev by Date: Re: [Ethereal-dev] Patch for Sebek V3
- Next by Date: Re: [Ethereal-dev] Patch for Sebek V3
- Previous by thread: SV: [Ethereal-dev] Updates to NCP Dissector
- Next by thread: [Ethereal-dev] Re: Updates to SCSI Dissector
- Index(es):