aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsahlberg <sahlberg@f5534014-38df-0310-8fa8-9805f1628bb7>2007-02-03 16:21:21 +0000
committersahlberg <sahlberg@f5534014-38df-0310-8fa8-9805f1628bb7>2007-02-03 16:21:21 +0000
commit2fa60e9ea7238f95e4996a2c6cedb0e0d72a3240 (patch)
treea99606c21f9bc77080e7d1588e9f22cf03beab03
parenta38ac2221a5a470ca9bbcdff0bb289d2fa870247 (diff)
updates to the LOG SELECT CDB decoding
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@20696 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r--epan/dissectors/packet-scsi.c94
1 files changed, 66 insertions, 28 deletions
diff --git a/epan/dissectors/packet-scsi.c b/epan/dissectors/packet-scsi.c
index 3f72b72a88..316cb2eb13 100644
--- a/epan/dissectors/packet-scsi.c
+++ b/epan/dissectors/packet-scsi.c
@@ -118,7 +118,6 @@ static int hf_scsi_alloclen = -1;
static int hf_scsi_logsel_flags = -1;
static int hf_scsi_logsel_pc = -1;
static int hf_scsi_paramlen = -1;
-static int hf_scsi_logsns_flags = -1;
static int hf_scsi_logsns_pc = -1;
static int hf_scsi_logsns_pagecode = -1;
static int hf_scsi_paramlen16 = -1;
@@ -209,6 +208,12 @@ static int hf_scsi_fragment_multiple_tails = -1;
static int hf_scsi_fragment_too_long_fragment = -1;
static int hf_scsi_fragment_error = -1;
static int hf_scsi_reassembled_in = -1;
+static int hf_scsi_logsense_ppc_flags = -1;
+static int hf_scsi_logsense_pc_flags = -1;
+static int hf_scsi_logsense_ppc = -1;
+static int hf_scsi_logsense_sp = -1;
+static int hf_scsi_logsense_pc = -1;
+static int hf_scsi_logsense_page_code = -1;
static gint ett_scsi = -1;
static gint ett_scsi_page = -1;
@@ -218,6 +223,8 @@ static gint ett_scsi_inq_rmbflags = -1;
static gint ett_scsi_inq_sccsflags = -1;
static gint ett_scsi_inq_bqueflags = -1;
static gint ett_scsi_inq_reladrflags = -1;
+static gint ett_scsi_logsense_ppc = -1;
+static gint ett_scsi_logsense_pc = -1;
static gint ett_scsi_fragments = -1;
static gint ett_scsi_fragment = -1;
@@ -346,19 +353,24 @@ static const value_string scsi_logsns_pc_val[] = {
};
static const value_string scsi_logsns_page_val[] = {
- {0xF, "Application Client Page"},
- {0x1, "Buffer Overrun/Underrun Page"},
- {0x3, "Error Counter (read) Page"},
- {0x4, "Error Counter (read reverse) Page"},
- {0x5, "Error Counter (verify) Page"},
- {0x2, "Error Counter (write) Page"},
- {0xB, "Last n Deferred Errors or Async Events Page"},
- {0x7, "Last n Error Events Page"},
- {0x6, "Non-medium Error Page"},
+ {0x00, "Supported Log Pages"},
+ {0x01, "Buffer Overrun/Underrun Page"},
+ {0x02, "Error Counter (write) Page"},
+ {0x03, "Error Counter (read) Page"},
+ {0x04, "Error Counter (read reverse) Page"},
+ {0x05, "Error Counter (verify) Page"},
+ {0x06, "Non-medium Error Page"},
+ {0x07, "Last n Error Events Page"},
+ {0x08, "Format Status Log Page"},
+ {0x0B, "Last n Deferred Errors or Async Events Page"},
+ {0x0C, "Sequential-Access Device Log Page"},
+ {0x0D, "Temperature Page"},
+ {0x0E, "Start-Stop Cycle Counter Page"},
+ {0x0F, "Application Client Page"},
{0x10, "Self-test Results Page"},
- {0xE, "Start-Stop Cycle Counter Page"},
- {0x0, "Supported Log Pages"},
- {0xD, "Temperature Page"},
+ {0x11, "DTD Status Log Page"},
+ {0x2e, "Tape-Alert Log Page (SSC)"},
+ {0x2f, "Informational Exceptions Log Page"},
{0, NULL},
};
@@ -1721,27 +1733,40 @@ dissect_spc3_logselect (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
}
}
+static const true_false_string scsi_logsense_ppc_tfs = {
+ "Return only parameters that have changed since last LOG SELECT/SENSE",
+ "Return parameters even if they are unchanged"
+};
+static const true_false_string scsi_logsense_sp_tfs = {
+ "Device shall save all log parameters",
+ "Device should not save any of the logged parameters"
+};
+
void
dissect_spc3_logsense (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;
+ static const int *ppcflags_fields[] = {
+ &hf_scsi_logsense_ppc,
+ &hf_scsi_logsense_sp,
+ NULL
+ };
+ static const int *pcflags_fields[] = {
+ &hf_scsi_logsns_pc,
+ &hf_scsi_logsns_pagecode,
+ NULL
+ };
if (!tree)
return;
if (isreq && iscdb) {
- flags = tvb_get_guint8 (tvb, offset);
+ proto_tree_add_bitmask(tree, tvb, offset, hf_scsi_logsense_ppc_flags, ett_scsi_logsense_ppc, ppcflags_fields, FALSE);
+
+ proto_tree_add_bitmask(tree, tvb, offset+1, hf_scsi_logsense_pc_flags, ett_scsi_logsense_pc, pcflags_fields, FALSE);
- proto_tree_add_uint_format (tree, hf_scsi_logsns_flags, tvb, offset, 1,
- flags, "PPC = %u, SP = %u", flags & 0x2,
- flags & 0x1);
- proto_tree_add_uint_format (tree, hf_scsi_logsns_pc, tvb, offset+1, 1,
- tvb_get_guint8 (tvb, offset+1),
- "PC: 0x%x", flags & 0xC0);
- proto_tree_add_item (tree, hf_scsi_logsns_pagecode, tvb, offset+1,
- 1, 0);
proto_tree_add_text (tree, tvb, offset+4, 2, "Parameter Pointer: 0x%04x",
tvb_get_ntohs (tvb, offset+4));
proto_tree_add_item (tree, hf_scsi_alloclen16, tvb, offset+6, 2, 0);
@@ -1751,8 +1776,10 @@ dissect_spc3_logsense (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
flags,
"Vendor Unique = %u, NACA = %u, Link = %u",
flags & 0xC0, flags & 0x4, flags & 0x1);
- }
- else {
+ } else if (!isreq) {
+ if (!cdata) {
+ return;
+ }
}
}
@@ -4182,9 +4209,6 @@ proto_register_scsi (void)
{ &hf_scsi_paramlen,
{"Parameter Length", "scsi.cdb.paramlen", FT_UINT8, BASE_DEC, NULL,
0x0, "", HFILL}},
- { &hf_scsi_logsns_flags,
- {"Flags", "scsi.logsns.flags", FT_UINT16, BASE_HEX, NULL, 0x0, "",
- HFILL}},
{ &hf_scsi_logsns_pc,
{"Page Control", "scsi.logsns.pc", FT_UINT8, BASE_DEC,
VALS (scsi_logsns_pc_val), 0xC0, "", HFILL}},
@@ -4479,7 +4503,19 @@ proto_register_scsi (void)
{ &hf_scsi_reassembled_in,
{ "Reassembled SCSI DATA in frame", "scsi.reassembled_in", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
- "This SCSI DATA packet is reassembled in this frame", HFILL }}
+ "This SCSI DATA packet is reassembled in this frame", HFILL }},
+ { &hf_scsi_logsense_ppc_flags,
+ {"PPC Flags", "scsi.logsense.ppc.flags", FT_UINT8, BASE_HEX, NULL, 0,
+ "", HFILL}},
+ { &hf_scsi_logsense_ppc,
+ {"PPC", "scsi.logsense.ppc", FT_BOOLEAN, 8,
+ TFS (&scsi_logsense_ppc_tfs), 0x02, "", HFILL}},
+ { &hf_scsi_logsense_sp,
+ {"SP", "scsi.logsense.sp", FT_BOOLEAN, 8,
+ TFS (&scsi_logsense_sp_tfs), 0x01, "", HFILL}},
+ { &hf_scsi_logsense_pc_flags,
+ {"PC Flags", "scsi.logsense.pc.flags", FT_UINT8, BASE_HEX, NULL, 0,
+ "", HFILL}},
};
/* Setup protocol subtree array */
@@ -4492,6 +4528,8 @@ proto_register_scsi (void)
&ett_scsi_inq_sccsflags,
&ett_scsi_inq_bqueflags,
&ett_scsi_inq_reladrflags,
+ &ett_scsi_logsense_ppc,
+ &ett_scsi_logsense_pc,
&ett_scsi_fragments,
&ett_scsi_fragment,
};