aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-scsi.c
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2006-04-07 10:15:15 +0000
committerRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2006-04-07 10:15:15 +0000
commit9481eac669a24c1f5efad7f65ce080afc45b7c5a (patch)
treecfa9cae3a8a9686a83878129690d0e39ea782fa1 /epan/dissectors/packet-scsi.c
parent5683612f368d1c86765a531cd75d2b6aff9acdbe (diff)
make dissect_scsi_rsp() take an exchange structure as parameter instead of just a lun.
this finally allows us to have scsi.time for scsi transactions but we need to cleanup and refactor the other three scsi entrypoints before we should implement scsi srt to make the other three also take an exchange data structure as parameter from their transports (and get rid of the pinfo->private_data ) svn path=/trunk/; revision=17838
Diffstat (limited to 'epan/dissectors/packet-scsi.c')
-rw-r--r--epan/dissectors/packet-scsi.c39
1 files changed, 32 insertions, 7 deletions
diff --git a/epan/dissectors/packet-scsi.c b/epan/dissectors/packet-scsi.c
index a3b3e6b1f2..dfb531d248 100644
--- a/epan/dissectors/packet-scsi.c
+++ b/epan/dissectors/packet-scsi.c
@@ -47,10 +47,10 @@
* The final parameter is the length of the response field that is negotiated
* as part of the SCSI transport layer. If this is not tracked by the
* transport, it can be set to 0.
- * o dissect_scsi_rsp - invoked to destroy the data structures associated with a
+ * o dissect_scsi_rsp - invoked to dissect the scsi status code in a response
* SCSI task.
- * void dissect_scsi_rsp (tvbuff_t *, packet_info *, proto_tree *, guint16,
- * guint8);
+ * void dissect_scsi_rsp (tvbuff_t *, packet_info *, proto_tree *,
+ * fc_exchange_data *, guint8);
* o dissect_scsi_snsinfo - invoked to decode the sense data provided in case of
* an error.
* void dissect_scsi_snsinfo (tvbuff_t *, packet_info *, proto_tree *, guint,
@@ -88,9 +88,13 @@
#include <epan/packet.h>
#include <epan/prefs.h>
#include <epan/emem.h>
+#include "packet-fc.h"
#include "packet-scsi.h"
static int proto_scsi = -1;
+static int hf_scsi_time = -1;
+static int hf_scsi_request_frame = -1;
+static int hf_scsi_response_frame = -1;
static int hf_scsi_lun = -1;
static int hf_scsi_status = -1;
static int hf_scsi_spcopcode = -1;
@@ -6431,13 +6435,12 @@ dissect_smc2_readelementstatus (tvbuff_t *tvb, packet_info *pinfo,
void
dissect_scsi_rsp (tvbuff_t *tvb, packet_info *pinfo,
- proto_tree *tree, guint16 lun, guint8 scsi_status)
+ proto_tree *tree, fc_exchange_data *scsi_ed, guint8 scsi_status)
{
proto_item *ti;
proto_tree *scsi_tree = NULL;
/* Nothing really to do here, just print some stuff passed to us
- * and blow up the data structures for this SCSI task.
*/
if (tree) {
ti = proto_tree_add_protocol_format (tree, proto_scsi, tvb, 0,
@@ -6445,12 +6448,22 @@ dissect_scsi_rsp (tvbuff_t *tvb, packet_info *pinfo,
scsi_tree = proto_item_add_subtree (ti, ett_scsi);
}
- ti=proto_tree_add_uint(scsi_tree, hf_scsi_lun, tvb, 0, 0, lun);
+ ti=proto_tree_add_uint(scsi_tree, hf_scsi_lun, tvb, 0, 0, scsi_ed->lun);
PROTO_ITEM_SET_GENERATED(ti);
+
+ if(scsi_ed->first_exchange_frame){
+ nstime_t delta_time;
+ ti=proto_tree_add_uint(scsi_tree, hf_scsi_request_frame, tvb, 0, 0, scsi_ed->first_exchange_frame);
+ PROTO_ITEM_SET_GENERATED(ti);
+ nstime_delta(&delta_time, &pinfo->fd->abs_ts, &scsi_ed->fc_time);
+ ti=proto_tree_add_time(scsi_tree, hf_scsi_time, tvb, 0, 0, &delta_time);
+ PROTO_ITEM_SET_GENERATED(ti);
+ }
+
ti=proto_tree_add_uint(scsi_tree, hf_scsi_status, tvb, 0, 0, scsi_status);
PROTO_ITEM_SET_GENERATED(ti);
if (check_col (pinfo->cinfo, COL_INFO)) {
- col_add_fstr (pinfo->cinfo, COL_INFO, "SCSI: Response LUN: 0x%02x (%s)", lun, val_to_str(scsi_status, scsi_status_val, "Unknown (0x%08x)"));
+ col_add_fstr (pinfo->cinfo, COL_INFO, "SCSI: Response LUN: 0x%02x (%s)", scsi_ed->lun, val_to_str(scsi_status, scsi_status_val, "Unknown (0x%08x)"));
col_set_fence(pinfo->cinfo, COL_INFO);
}
@@ -8851,6 +8864,18 @@ proto_register_scsi (void)
{ &hf_ssc3_locate16_loid,
{"Logical Identifier", "scsi.locate16.loid", FT_UINT64, BASE_DEC, NULL, 0x0,
"", HFILL}},
+ { &hf_scsi_request_frame,
+ { "Request in", "scsi.request_frame", FT_FRAMENUM, BASE_NONE, NULL, 0,
+ "The request to this transaction is in this frame", HFILL }},
+
+ { &hf_scsi_time,
+ { "Time from request", "scsi.time", FT_RELATIVE_TIME, BASE_NONE, NULL, 0,
+ "Time between the Command and the Response", HFILL }},
+
+ { &hf_scsi_response_frame,
+ { "Response in", "scsi.response_frame", FT_FRAMENUM, BASE_NONE, NULL, 0,
+ "The response to this transaction is in this frame", HFILL }},
+
};
/* Setup protocol subtree array */