aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-scsi-osd.c
diff options
context:
space:
mode:
authorJeff Morriss <jeff.morriss.ws@gmail.com>2013-07-26 01:09:41 +0000
committerJeff Morriss <jeff.morriss.ws@gmail.com>2013-07-26 01:09:41 +0000
commit1b278a3db0cb73290a3f291812f83183817367ee (patch)
tree586a7193f56c5b4b5ca67e1581d07aed71f6b15d /epan/dissectors/packet-scsi-osd.c
parenteffa86350ad5cb605a69f24ce1c8b0c0da2f0b1d (diff)
From Javier Godoy via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8951 :
Currently, the only attribute that is dissected is attribute 82 in page 1. The approach for dissecting an attribute requires defining a function that processes the attribute-specific fields. However, most attributes consists of a single field, and the only difference between attributes is because of their length and format (that is already defined for the header field). The current code also assumes that the attribute length is always correct (e.g. the attribute has 8 bytes if the field is registered as FT_UINT64). As a proof of concept, this patch adds support for 3 attributes in the Current Command attributes page (see OSD2r4 section 7.1.3.31) and prepares a framework for dissecting additional attributes (dissection of additional attributes will be delivered in a separate patch). From me: Move the new length checking up to the caller rather than repeating it in every attribute dissector. Use proto_tree_add_expert_format() instead of proto_tree_add_text() plus expert_add_info(). Fix checkfiltername.pl error: scsi_osd.scsi_osd_attribute_length.invalid duplicates PROTOABBREV of scsi_osd Remove trailing white space and fix up some indentation. svn path=/trunk/; revision=50900
Diffstat (limited to 'epan/dissectors/packet-scsi-osd.c')
-rw-r--r--epan/dissectors/packet-scsi-osd.c420
1 files changed, 234 insertions, 186 deletions
diff --git a/epan/dissectors/packet-scsi-osd.c b/epan/dissectors/packet-scsi-osd.c
index 0ed685bbee..71a92dca34 100644
--- a/epan/dissectors/packet-scsi-osd.c
+++ b/epan/dissectors/packet-scsi-osd.c
@@ -122,7 +122,10 @@ static int hf_scsi_osd_attributes_list_length = -1;
static int hf_scsi_osd_attributes_page = -1;
static int hf_scsi_osd_attribute_number = -1;
static int hf_scsi_osd_attribute_length = -1;
-static int hf_scsi_osd_user_object_logical_length = -1;
+static int hf_scsi_osd_attrval_user_object_logical_length = -1;
+static int hf_scsi_osd_attrval_object_type = -1;
+static int hf_scsi_osd_attrval_partition_id = -1;
+static int hf_scsi_osd_attrval_object_id = -1;
/* Fields that are defined in OSD-2 are prefixed with hf_scsi_osd2_ */
static int hf_scsi_osd2_attributes_list_length = -1;
@@ -158,12 +161,13 @@ static expert_field ei_osd2_continued_service_action_mismatch = EI_INIT;
static expert_field ei_osd2_cdb_continuation_descriptor_type_unknown = EI_INIT;
static expert_field ei_osd2_cdb_continuation_descriptor_length_invalid = EI_INIT;
static expert_field ei_osd2_cdb_continuation_length_invalid = EI_INIT;
+static expert_field ei_osd_attr_length_invalid = EI_INIT;
+#define PAGE_NUMBER_OBJECT 0x00000000
#define PAGE_NUMBER_PARTITION 0x30000000
#define PAGE_NUMBER_COLLECTION 0x60000000
#define PAGE_NUMBER_ROOT 0x90000000
-#define AP_USER_OBJECT_INFO 0x00000001
/* There will be one such structure create for each conversation ontop of which
* there is an OSD session
@@ -226,31 +230,50 @@ dissect_osd_user_object_id(tvbuff_t *tvb, int offset, proto_tree *tree)
}
+typedef struct _attribute_page_numbers_t attribute_page_numbers_t;
+typedef void (*attribute_dissector)(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+ scsi_osd_lun_info_t *lun_info, const attribute_page_numbers_t *att);
-static void
-attribute_1_82(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
-{
- int offset=0;
+struct _attribute_page_numbers_t {
+ guint32 number;
+ const char *name;
+ attribute_dissector dissector;
+ int* hf_index;
+ guint expected_length;
+};
- /* user object id */
- proto_tree_add_item(tree, hf_scsi_osd_user_object_logical_length, tvb, offset, 8, ENC_BIG_ENDIAN);
- /* offset+=8; */
+/*dissects an attribute that is defined as a pair of hf_index,length*/
+static void
+generic_attribute_dissector(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
+ scsi_osd_lun_info_t *lun_info _U_, const attribute_page_numbers_t *att)
+{
+ proto_tree_add_item(tree, *att->hf_index, tvb, 0, att->expected_length, ENC_BIG_ENDIAN);
}
+static proto_item *
+dissect_osd_partition_id(packet_info *pinfo, tvbuff_t *tvb, int offset,
+ proto_tree *tree, int hf_index,
+ scsi_osd_lun_info_t *lun_info, gboolean is_created,
+ gboolean is_removed);
-
-typedef void (*attribute_dissector)(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
-
-typedef struct _attribute_page_numbers_t {
- guint32 number;
- const char *name;
- attribute_dissector dissector;
-} attribute_page_numbers_t;
+static void
+partition_id_attribute_dissector(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+ scsi_osd_lun_info_t *lun_info, const attribute_page_numbers_t *att)
+{
+ dissect_osd_partition_id(pinfo, tvb, 0, tree, *att->hf_index, lun_info, FALSE, FALSE);
+}
static const attribute_page_numbers_t user_object_info_attributes[] = {
- {0x82, "User object logical length", attribute_1_82},
- {0, NULL, NULL}
+ {0x82, "User object logical length", generic_attribute_dissector, &hf_scsi_osd_attrval_user_object_logical_length,8},
+ {0, NULL, NULL, NULL, 0}
+};
+
+static const attribute_page_numbers_t current_command_attributes[] = {
+ {0x02, "Object Type", generic_attribute_dissector, &hf_scsi_osd_attrval_object_type, 1},
+ {0x03, "Partition ID", partition_id_attribute_dissector, &hf_scsi_osd_attrval_partition_id,8},
+ {0x04, "Collection Object ID or User Object ID", generic_attribute_dissector, &hf_scsi_osd_attrval_object_id,8},
+ {0, NULL, NULL, NULL, 0}
};
typedef struct _attribute_pages_t {
@@ -259,20 +282,22 @@ typedef struct _attribute_pages_t {
} attribute_pages_t;
static const attribute_pages_t attribute_pages[] = {
- {AP_USER_OBJECT_INFO, user_object_info_attributes},
+ {PAGE_NUMBER_OBJECT+1, user_object_info_attributes},
+ {0xFFFFFFFE, current_command_attributes},
{0,NULL}
};
static const value_string attributes_page_vals[] = {
- {0, "User Object Directory"},
- {AP_USER_OBJECT_INFO, "User Object Information"},
- {2, "User Object Quotas"},
- {3, "User Object Timestamps"},
- {4, "User Object Collections"},
- {5, "User Object Policy/Security"},
+ {PAGE_NUMBER_OBJECT+0, "User Object Directory"},
+ {PAGE_NUMBER_OBJECT+1, "User Object Information"},
+ {PAGE_NUMBER_OBJECT+2, "User Object Quotas"},
+ {PAGE_NUMBER_OBJECT+3, "User Object Timestamps"},
+ {PAGE_NUMBER_OBJECT+4, "User Object Collections"},
+ {PAGE_NUMBER_OBJECT+5, "User Object Policy/Security"},
{PAGE_NUMBER_COLLECTION, "Collection Directory"},
{PAGE_NUMBER_COLLECTION+1, "Collection Information"},
{PAGE_NUMBER_COLLECTION+2, "Collection Quotas"},
+ {PAGE_NUMBER_COLLECTION+4, "Collection Command Tracking"},
{PAGE_NUMBER_COLLECTION+5, "Collection Policy/Security"},
{PAGE_NUMBER_PARTITION, "Partition Directory"},
{PAGE_NUMBER_PARTITION+1, "Partition Information"},
@@ -285,6 +310,7 @@ static const value_string attributes_page_vals[] = {
{PAGE_NUMBER_ROOT+3, "Root Timestamps"},
{PAGE_NUMBER_ROOT+5, "Root Policy/Security"},
{0xFFFFFFFE, "Current Command"},
+ {0xFFFFFFFF, "All attribute pages"},
{0, NULL}
};
@@ -347,8 +373,10 @@ dissect_osd2_list_attr(tvbuff_t *tvb, int offset, proto_tree *tree)
}
-/* used by dissect_osd_attribute_value, dissect_osd_attributes_list and dissect_osd2_attribute_list_entry*/
-const attribute_page_numbers_t* osd_lookup_attribute(guint32 page, guint32 number) {
+/* used by dissect_osd_attributes_list and dissect_osd2_attribute_list_entry*/
+const attribute_page_numbers_t *
+osd_lookup_attribute(guint32 page, guint32 number)
+{
const attribute_pages_t *ap;
const attribute_page_numbers_t *apn;
@@ -374,28 +402,12 @@ const attribute_page_numbers_t* osd_lookup_attribute(guint32 page, guint32 numb
return apn;
}
-static void dissect_osd_attribute_value(packet_info *pinfo, proto_tree *tree, proto_item *item,
- tvbuff_t *tvb, int offset,
- guint32 page, guint32 number, guint16 attribute_length) {
- const attribute_page_numbers_t *apn;
- tvbuff_t *next_tvb;
-
- /* find the proper attributes page */
- apn=osd_lookup_attribute(page,number);
- if (!apn) {
- expert_add_info(pinfo, item, &ei_osd_attr_unknown);
- } else {
- proto_item_append_text(item, " (%s)", apn->name);
- if(attribute_length){
- next_tvb=tvb_new_subset(tvb, offset, attribute_length, attribute_length);
- apn->dissector(next_tvb, pinfo, tree);
- }
- }
-}
-
/* OSD-1: 7.1.3.3, OSD2 7.1.4.3 list entry format */
static guint32
-dissect_osd_attribute_list_entry(packet_info *pinfo, tvbuff_t *tvb, proto_tree *tree, proto_item* item, guint32 offset, gboolean osd2)
+dissect_osd_attribute_list_entry(packet_info *pinfo, tvbuff_t *tvb,
+ proto_tree *tree, proto_item* item,
+ guint32 offset, scsi_osd_lun_info_t *lun_info,
+ gboolean osd2)
{
guint16 attribute_length;
guint32 page, number;
@@ -430,8 +442,17 @@ dissect_osd_attribute_list_entry(packet_info *pinfo, tvbuff_t *tvb, proto_tree *
proto_item_append_text(item, " (Unknown)");
} else {
proto_item_append_text(item, " (%s)", apn->name);
+
/* attribute value*/
- dissect_osd_attribute_value(pinfo, tree, item, tvb, offset, page, number, attribute_length);
+ if (attribute_length) {
+ if (attribute_length != apn->expected_length) {
+ proto_tree_add_expert_format(tree, pinfo, &ei_osd_attr_length_invalid,
+ tvb, 0, attribute_length, "%s", apn->name);
+ } else {
+ tvbuff_t* next_tvb=tvb_new_subset(tvb, offset, attribute_length, attribute_length);
+ apn->dissector(next_tvb, pinfo, tree, lun_info, apn);
+ }
+ }
}
offset+=attribute_length;
@@ -446,7 +467,9 @@ dissect_osd_attribute_list_entry(packet_info *pinfo, tvbuff_t *tvb, proto_tree *
/* OSD1: 7.1.3.1
OSD2: 7.1.4.1*/
static void
-dissect_osd_attributes_list(packet_info *pinfo, tvbuff_t *tvb, int offset, proto_tree *tree, gboolean osd2)
+dissect_osd_attributes_list(packet_info *pinfo, tvbuff_t *tvb, int offset,
+ proto_tree *tree, scsi_osd_lun_info_t *lun_info,
+ gboolean osd2)
{
guint8 type;
guint32 length;
@@ -529,7 +552,7 @@ dissect_osd_attributes_list(packet_info *pinfo, tvbuff_t *tvb, int offset, proto
proto_item_append_text(ti, " 0x%08x", number);
/* find the proper attributes page */
- apn=osd_lookup_attribute(number,page);
+ apn=osd_lookup_attribute(page,number);
if (!apn) {
proto_item_append_text(ti, " (Unknown)");
proto_item_append_text(item, " (Unknown)");
@@ -544,7 +567,7 @@ dissect_osd_attributes_list(packet_info *pinfo, tvbuff_t *tvb, int offset, proto
offset+=8;
/* fallthrough to the next case */
case 0x09: /* retrieved/set attributes OSD-1: 7.1.3.3 OSD-2: 7.1.4.3*/
- offset=dissect_osd_attribute_list_entry(pinfo, tvb, tt, ti, offset, osd2);
+ offset=dissect_osd_attribute_list_entry(pinfo, tvb, tt, ti, offset, lun_info, osd2);
break;
}
}
@@ -616,7 +639,11 @@ dissect_osd_formatted_capacity(tvbuff_t *tvb, int offset, proto_tree *tree)
proto_tree_add_item(tree, hf_scsi_osd_formatted_capacity, tvb, offset, 8, ENC_BIG_ENDIAN);
}
-static void dissect_osd_offset(packet_info *pinfo, tvbuff_t *tvb, int offset, proto_tree *tree, int field, guint32 *raw_value_ptr, gboolean osd2) {
+static void
+dissect_osd_offset(packet_info *pinfo, tvbuff_t *tvb, int offset,
+ proto_tree *tree, int field, guint32 *raw_value_ptr,
+ gboolean osd2)
+{
/* dissects an OSD offset value, add proto item and updates *raw_value_ptr */
guint32 value = *raw_value_ptr;
@@ -661,7 +688,7 @@ dissect_osd_attribute_parameters(packet_info *pinfo, tvbuff_t *tvb, int offset,
"Attribute Parameters");
tree = proto_item_add_subtree(item, ett_osd_attribute_parameters);
}
-
+
if(cdata && cdata->itlq && cdata->itlq->extra_data){
extra_data=(scsi_osd_extra_data_t *)cdata->itlq->extra_data;
gsatype=extra_data->gsatype;
@@ -748,7 +775,9 @@ dissect_osd_attribute_parameters(packet_info *pinfo, tvbuff_t *tvb, int offset,
static void
-dissect_osd_attribute_data_out(packet_info *pinfo, tvbuff_t *tvb, int offset _U_, proto_tree *tree, scsi_task_data_t *cdata)
+dissect_osd_attribute_data_out(packet_info *pinfo, tvbuff_t *tvb, int offset _U_,
+ proto_tree *tree, scsi_task_data_t *cdata,
+ scsi_osd_lun_info_t *lun_info)
{
guint8 gsatype=0;
proto_tree *subtree;
@@ -770,12 +799,12 @@ dissect_osd_attribute_data_out(packet_info *pinfo, tvbuff_t *tvb, int offset _U_
if(extra_data->u.al.get_list_length){
item=proto_tree_add_text(tree, tvb, extra_data->u.al.get_list_offset, extra_data->u.al.get_list_length, "Get Attributes Segment");
subtree= proto_item_add_subtree(item, ett_osd_get_attributes);
- dissect_osd_attributes_list(pinfo, tvb, extra_data->u.al.get_list_offset, subtree, extra_data->osd2);
+ dissect_osd_attributes_list(pinfo, tvb, extra_data->u.al.get_list_offset, subtree, lun_info, extra_data->osd2);
}
if(extra_data->u.al.set_list_length){
item=proto_tree_add_text(tree, tvb, extra_data->u.al.set_list_offset, extra_data->u.al.set_list_length, "Set Attributes Segment");
subtree= proto_item_add_subtree(item, ett_osd_set_attributes);
- dissect_osd_attributes_list(pinfo, tvb, extra_data->u.al.set_list_offset, subtree, extra_data->osd2);
+ dissect_osd_attributes_list(pinfo, tvb, extra_data->u.al.set_list_offset, subtree, lun_info, extra_data->osd2);
}
break;
}
@@ -783,7 +812,7 @@ dissect_osd_attribute_data_out(packet_info *pinfo, tvbuff_t *tvb, int offset _U_
static void
-dissect_osd_attribute_data_in(packet_info *pinfo, tvbuff_t *tvb, int offset _U_, proto_tree *tree, scsi_task_data_t *cdata)
+dissect_osd_attribute_data_in(packet_info *pinfo, tvbuff_t *tvb, int offset _U_, proto_tree *tree, scsi_task_data_t *cdata, scsi_osd_lun_info_t *lun_info)
{
guint8 gsatype=0;
scsi_osd_extra_data_t *extra_data=NULL;
@@ -801,13 +830,17 @@ dissect_osd_attribute_data_in(packet_info *pinfo, tvbuff_t *tvb, int offset _U_,
break;
case 3: /* 5.2.2.3 attribute list */
if(extra_data->u.al.get_list_allocation_length){
- dissect_osd_attributes_list(pinfo, tvb, extra_data->u.al.retrieved_list_offset, tree, extra_data->osd2);
+ dissect_osd_attributes_list(pinfo, tvb, extra_data->u.al.retrieved_list_offset, tree, lun_info, extra_data->osd2);
}
break;
}
}
-static void dissect_osd2_cdb_continuation_length(packet_info *pinfo, tvbuff_t *tvb, guint32 offset, proto_tree *tree, scsi_task_data_t *cdata) {
+static void
+dissect_osd2_cdb_continuation_length(packet_info *pinfo, tvbuff_t *tvb,
+ guint32 offset, proto_tree *tree,
+ scsi_task_data_t *cdata)
+{
scsi_osd_extra_data_t *extra_data;
guint32 continuation_length;
proto_item* item;
@@ -823,7 +856,10 @@ static void dissect_osd2_cdb_continuation_length(packet_info *pinfo, tvbuff_t *t
}
}
-static void dissect_osd2_cdb_continuation(packet_info *pinfo, tvbuff_t *tvb, guint32 offset, proto_tree *tree, scsi_task_data_t *cdata) {
+static void
+dissect_osd2_cdb_continuation(packet_info *pinfo, tvbuff_t *tvb, guint32 offset,
+ proto_tree *tree, scsi_task_data_t *cdata)
+{
scsi_osd_extra_data_t *extra_data=NULL;
proto_item* item;
guint8 format;
@@ -884,7 +920,7 @@ static void dissect_osd2_cdb_continuation(packet_info *pinfo, tvbuff_t *tvb, gui
switch (type) {
case 0x0000: break;
case 0x0001: break;
- case 0x0002: break;
+ case 0x0002: break;
case 0x0100: break;
case 0x0101: break;
case 0xFFEE: break;
@@ -1090,10 +1126,10 @@ dissect_osd_security_parameters(tvbuff_t *tvb, int offset, proto_tree *parent_tr
static void
dissect_osd_format_osd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info _U_)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info _U_)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -1135,7 +1171,7 @@ dissect_osd_format_osd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for format osd */
}
@@ -1143,7 +1179,7 @@ dissect_osd_format_osd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for format osd */
}
@@ -1152,7 +1188,10 @@ dissect_osd_format_osd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
static proto_item*
-dissect_osd_partition_id(packet_info *pinfo, tvbuff_t *tvb, int offset, proto_tree *tree, int hf_index, scsi_osd_lun_info_t *lun_info, gboolean is_created, gboolean is_removed)
+dissect_osd_partition_id(packet_info *pinfo, tvbuff_t *tvb, int offset,
+ proto_tree *tree, int hf_index,
+ scsi_osd_lun_info_t *lun_info, gboolean is_created,
+ gboolean is_removed)
{
proto_item *item=NULL;
guint32 partition_id[2];
@@ -1210,10 +1249,10 @@ dissect_osd_partition_id(packet_info *pinfo, tvbuff_t *tvb, int offset, proto_tr
static void
dissect_osd_create_partition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -1255,7 +1294,7 @@ dissect_osd_create_partition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for create partition */
}
@@ -1263,7 +1302,7 @@ dissect_osd_create_partition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for create partition */
}
@@ -1364,10 +1403,10 @@ dissect_osd_collection_object_id(tvbuff_t *tvb, int offset, proto_tree *tree, co
static void
dissect_osd_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
guint svcaction = ((scsi_osd_extra_data_t *)cdata->itlq->extra_data)->svcaction;
gboolean list_collection = (svcaction==0x8817) || (svcaction==0x8897);
@@ -1449,7 +1488,7 @@ dissect_osd_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for LIST or LIST COLLECTION */
}
@@ -1464,7 +1503,7 @@ dissect_osd_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
guint8 format = 0;
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
allocation_length=cdata->itlq->alloc_len;
remaining_length=tvb_length_remaining(tvb, offset);
@@ -1554,7 +1593,7 @@ dissect_osd_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
guint32 attribute_length=tvb_get_ntohs(tvb, offset+14);
proto_item *att_item = proto_tree_add_text(subtree, tvb, offset, 16+attribute_length, "Attribute:");
proto_tree *att_tree = proto_item_add_subtree(att_item, ett_osd_attribute);
- offset=dissect_osd_attribute_list_entry(pinfo,tvb,att_tree,att_item,offset,TRUE);
+ offset=dissect_osd_attribute_list_entry(pinfo,tvb,att_tree,att_item,offset,lun_info,TRUE);
}
offset=attr_list_end;
}
@@ -1586,10 +1625,10 @@ dissect_osd_number_of_user_objects(tvbuff_t *tvb, int offset, proto_tree *tree)
static void
dissect_osd_create(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -1642,7 +1681,7 @@ dissect_osd_create(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for create */
}
@@ -1650,7 +1689,7 @@ dissect_osd_create(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for create */
}
@@ -1660,10 +1699,10 @@ dissect_osd_create(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
static void
dissect_osd_remove_partition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -1705,7 +1744,7 @@ dissect_osd_remove_partition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for remove partition */
}
@@ -1713,7 +1752,7 @@ dissect_osd_remove_partition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for remove partition */
}
@@ -1752,10 +1791,10 @@ dissect_osd_seed(tvbuff_t *tvb, int offset, proto_tree *tree)
static void
dissect_osd_set_key(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -1806,7 +1845,7 @@ dissect_osd_set_key(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for set key */
}
@@ -1814,7 +1853,7 @@ dissect_osd_set_key(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for set key */
}
@@ -1823,10 +1862,10 @@ dissect_osd_set_key(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
static void
dissect_osd_remove(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -1872,7 +1911,7 @@ dissect_osd_remove(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for remove */
}
@@ -1880,7 +1919,7 @@ dissect_osd_remove(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for remove */
}
@@ -1895,10 +1934,10 @@ dissect_osd_collection_fcr(tvbuff_t *tvb, int offset, proto_tree *tree)
static void
dissect_osd_remove_collection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -1945,7 +1984,7 @@ dissect_osd_remove_collection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for remove collection */
}
@@ -1953,7 +1992,7 @@ dissect_osd_remove_collection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for remove collection */
}
@@ -1984,10 +2023,10 @@ dissect_osd_starting_byte_address(tvbuff_t *tvb, int offset, proto_tree *tree)
static void
dissect_osd_write(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -2041,7 +2080,7 @@ dissect_osd_write(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* xxx should dissect the data ? */
}
@@ -2049,7 +2088,7 @@ dissect_osd_write(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for WRITE */
}
@@ -2058,10 +2097,10 @@ dissect_osd_write(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
static void
dissect_osd_create_collection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -2108,7 +2147,7 @@ dissect_osd_create_collection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for create collection */
}
@@ -2116,7 +2155,7 @@ dissect_osd_create_collection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for create collection */
}
@@ -2142,10 +2181,10 @@ dissect_osd_flush_scope(tvbuff_t *tvb, int offset, proto_tree *tree)
static void
dissect_osd_flush(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -2191,7 +2230,7 @@ dissect_osd_flush(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for flush */
}
@@ -2199,7 +2238,7 @@ dissect_osd_flush(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for flush */
}
@@ -2226,10 +2265,10 @@ dissect_osd_flush_collection_scope(tvbuff_t *tvb, int offset, proto_tree *tree)
static void
dissect_osd_flush_collection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -2276,7 +2315,7 @@ dissect_osd_flush_collection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for flush collection */
}
@@ -2284,7 +2323,7 @@ dissect_osd_flush_collection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for flush collection */
}
@@ -2294,10 +2333,10 @@ dissect_osd_flush_collection(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
static void
dissect_osd_append(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -2350,7 +2389,7 @@ dissect_osd_append(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* xxx should dissect the data ? */
}
@@ -2358,7 +2397,7 @@ dissect_osd_append(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for append */
}
@@ -2367,10 +2406,10 @@ dissect_osd_append(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
static void
dissect_osd_create_and_write(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -2424,7 +2463,7 @@ dissect_osd_create_and_write(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* should we dissect the data? */
}
@@ -2432,7 +2471,7 @@ dissect_osd_create_and_write(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for create and write*/
}
@@ -2459,10 +2498,10 @@ dissect_osd_flush_osd_scope(tvbuff_t *tvb, int offset, proto_tree *tree)
static void
dissect_osd_flush_osd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info _U_)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info _U_)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -2497,7 +2536,7 @@ dissect_osd_flush_osd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for flush osd */
}
@@ -2505,7 +2544,7 @@ dissect_osd_flush_osd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for flush osd */
}
@@ -2533,10 +2572,10 @@ dissect_osd_flush_partition_scope(tvbuff_t *tvb, int offset, proto_tree *tree)
static void
dissect_osd_flush_partition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -2578,7 +2617,7 @@ dissect_osd_flush_partition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for flush partition */
}
@@ -2586,7 +2625,7 @@ dissect_osd_flush_partition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for flush partition */
}
@@ -2596,10 +2635,10 @@ dissect_osd_flush_partition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
static void
dissect_osd_get_attributes(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -2645,7 +2684,7 @@ dissect_osd_get_attributes(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for get attributes */
}
@@ -2653,7 +2692,7 @@ dissect_osd_get_attributes(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for get attributes */
}
@@ -2663,10 +2702,10 @@ dissect_osd_get_attributes(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
static void
dissect_osd_read(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -2720,7 +2759,7 @@ dissect_osd_read(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for READ */
}
@@ -2728,7 +2767,7 @@ dissect_osd_read(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* xxx should dissect the data ? */
}
@@ -2738,10 +2777,10 @@ dissect_osd_read(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
static void
dissect_osd_set_attributes(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len _U_, scsi_task_data_t *cdata _U_,
- scsi_osd_conv_info_t *conv_info _U_,
- scsi_osd_lun_info_t *lun_info)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len _U_, scsi_task_data_t *cdata _U_,
+ scsi_osd_conv_info_t *conv_info _U_,
+ scsi_osd_lun_info_t *lun_info)
{
/* dissecting the CDB dissection starts at byte 10 of the CDB */
if(isreq && iscdb){
@@ -2787,7 +2826,7 @@ dissect_osd_set_attributes(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA OUT */
if(isreq && !iscdb){
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for set attributes */
}
@@ -2795,7 +2834,7 @@ dissect_osd_set_attributes(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for set attributes */
}
@@ -2869,7 +2908,7 @@ dissect_osd2_create_user_tracking_collection(tvbuff_t *tvb, packet_info *pinfo,
dissect_osd2_cdb_continuation(pinfo, tvb, offset, tree, cdata);
/* attribute data out */
- dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_out(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data out for create user tracking collection */
}
@@ -2877,7 +2916,7 @@ dissect_osd2_create_user_tracking_collection(tvbuff_t *tvb, packet_info *pinfo,
/* dissecting the DATA IN */
if(!isreq && !iscdb){
/* attribute data in */
- dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata);
+ dissect_osd_attribute_data_in(pinfo, tvb, offset, tree, cdata, lun_info);
/* no data in for create user tracking collection */
}
@@ -3000,7 +3039,7 @@ static const scsi_osd_svcaction_t scsi_osd_svcaction[] = {
{OSD_FLUSH_PARTITION, dissect_osd_flush_partition},
{OSD_FLUSH_OSD, dissect_osd_flush_osd},
{OSD_2_LIST, dissect_osd_list},
- {OSD_2_CREATE_USER_TRACKING_COLLECTION, dissect_osd2_create_user_tracking_collection},
+ {OSD_2_CREATE_USER_TRACKING_COLLECTION, dissect_osd2_create_user_tracking_collection},
{0, NULL},
};
@@ -3022,8 +3061,8 @@ find_svcaction_dissector(guint16 svcaction)
static void
dissect_osd_opcode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint offset, gboolean isreq, gboolean iscdb,
- guint payload_len, scsi_task_data_t *cdata)
+ guint offset, gboolean isreq, gboolean iscdb,
+ guint payload_len, scsi_task_data_t *cdata)
{
guint16 svcaction=0;
scsi_osd_dissector_t dissector;
@@ -3650,12 +3689,20 @@ proto_register_scsi_osd(void)
{ &hf_scsi_osd_attribute_length,
{"Attribute Length", "scsi_osd.attribute.length", FT_UINT16, BASE_DEC,
NULL, 0, NULL, HFILL}},
- { &hf_scsi_osd_user_object_logical_length,
- {"User Object Logical Length", "scsi_osd.user_object.logical_length", FT_UINT64, BASE_DEC,
- NULL, 0, NULL, HFILL}},
{ &hf_scsi_osd2_attributes_list_length,
{"Attributes List Length", "scsi_osd2.attributes_list.length", FT_UINT32, BASE_DEC,
NULL, 0, NULL, HFILL}},
+ { &hf_scsi_osd_attrval_user_object_logical_length,
+ {"User Object Logical Length", "scsi_osd.user_object.logical_length", FT_UINT64, BASE_DEC,
+ NULL, 0, NULL, HFILL}},
+ { &hf_scsi_osd_attrval_object_type,
+ {"Object Type", "scsi_osd.attr.object_type", FT_UINT8, BASE_HEX, VALS(scsi_osd_object_type_vals), 0, NULL, HFILL}},
+ { &hf_scsi_osd_attrval_partition_id,
+ {"Partition ID", "scsi_osd.attr.partition_id", FT_UINT64, BASE_HEX,
+ NULL, 0, NULL, HFILL}},
+ { &hf_scsi_osd_attrval_object_id,
+ {"Object ID", "scsi_osd.attr.object_id", FT_UINT64, BASE_HEX,
+ NULL, 0, NULL, HFILL}},
{ &hf_scsi_osd2_set_attribute_value,
{"Set Attributes Value", "scsi_osd.set_attribute_value", FT_BYTES, BASE_NONE, 0, 0, NULL, HFILL}},
{ &hf_scsi_osd2_isolation,
@@ -3704,6 +3751,7 @@ proto_register_scsi_osd(void)
{ &ei_osd2_cdb_continuation_descriptor_type_unknown, {"scsi_osd2.cdb_continuation.desc.type.unknown", PI_UNDECODED, PI_WARN, "Unknown descriptor type", EXPFILL }},
{ &ei_osd2_cdb_continuation_descriptor_length_invalid, {"scsi_osd2.cdb_continuation.desc.length.invalid", PI_PROTOCOL, PI_ERROR, "Invalid descriptor length (not a multiple of 8)", EXPFILL }},
{ &ei_osd2_cdb_continuation_length_invalid, {"scsi_osd2.cdb_continuation.length.invalid", PI_PROTOCOL, PI_ERROR, "Invalid CDB continuation length", EXPFILL }},
+ { &ei_osd_attr_length_invalid, {"scsi_osd.attribute_length.invalid", PI_PROTOCOL, PI_ERROR, "Invalid Attribute Length", EXPFILL }},
};
/* Register the protocol name and description */