diff options
author | Ronnie Sahlberg <ronnie_sahlberg@ozemail.com.au> | 2012-08-17 03:51:43 +0000 |
---|---|---|
committer | Ronnie Sahlberg <ronnie_sahlberg@ozemail.com.au> | 2012-08-17 03:51:43 +0000 |
commit | a6c45b05820fe36c50ddcb4812caba2b81bd892e (patch) | |
tree | dba60956be3b6162e0d3ff16e536f84225629a17 /epan/dissectors/packet-iscsi.c | |
parent | a63c89d00442f436784dc6fe5b8c819c99c5f404 (diff) |
iSCSI: DATA-IN only contain LUN and TTT iff the A-bit is set
svn path=/trunk/; revision=44550
Diffstat (limited to 'epan/dissectors/packet-iscsi.c')
-rw-r--r-- | epan/dissectors/packet-iscsi.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/epan/dissectors/packet-iscsi.c b/epan/dissectors/packet-iscsi.c index 94fc6d76ed..7262574be5 100644 --- a/epan/dissectors/packet-iscsi.c +++ b/epan/dissectors/packet-iscsi.c @@ -724,6 +724,7 @@ dissect_iscsi_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint off proto_tree *ti = NULL; guint8 scsi_status = 0; gboolean S_bit=FALSE; + gboolean A_bit=FALSE; guint cdb_offset = offset + 32; /* offset of CDB from start of PDU */ guint end_offset = offset + tvb_length_remaining(tvb, offset); iscsi_conv_data_t *cdata = NULL; @@ -1306,6 +1307,10 @@ dissect_iscsi_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint off if(b&ISCSI_SCSI_DATA_FLAG_S){ S_bit=TRUE; } + + if(b&ISCSI_SCSI_DATA_FLAG_A){ + A_bit=TRUE; + } proto_tree_add_boolean(tt, hf_iscsi_SCSIData_F, tvb, offset + 1, 1, b); if(iscsi_protocol_version > ISCSI_PROTOCOL_DRAFT08) { proto_tree_add_boolean(tt, hf_iscsi_SCSIData_A, tvb, offset + 1, 1, b); @@ -1322,14 +1327,18 @@ dissect_iscsi_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint off } proto_tree_add_uint(ti, hf_iscsi_DataSegmentLength, tvb, offset + 5, 3, tvb_get_ntoh24(tvb, offset + 5)); if(iscsi_protocol_version > ISCSI_PROTOCOL_DRAFT09) { - dissect_scsi_lun(ti, tvb, offset + 8); + if (A_bit) { + dissect_scsi_lun(ti, tvb, offset + 8); + } } proto_tree_add_item(ti, hf_iscsi_InitiatorTaskTag, tvb, offset + 16, 4, ENC_BIG_ENDIAN); if(iscsi_protocol_version <= ISCSI_PROTOCOL_DRAFT09) { proto_tree_add_item(ti, hf_iscsi_SCSIData_ResidualCount, tvb, offset + 20, 4, ENC_BIG_ENDIAN); } else { - proto_tree_add_item(ti, hf_iscsi_TargetTransferTag, tvb, offset + 20, 4, ENC_BIG_ENDIAN); + if (A_bit) { + proto_tree_add_item(ti, hf_iscsi_TargetTransferTag, tvb, offset + 20, 4, ENC_BIG_ENDIAN); + } } proto_tree_add_item(ti, hf_iscsi_StatSN, tvb, offset + 24, 4, ENC_BIG_ENDIAN); proto_tree_add_item(ti, hf_iscsi_ExpCmdSN, tvb, offset + 28, 4, ENC_BIG_ENDIAN); |