Improve HP Switch Protocol Dissection.

svn path=/trunk/; revision=19870
This commit is contained in:
Jaap Keuter 2006-11-09 12:27:52 +00:00
parent 28e73ca8d2
commit a29881ba55
1 changed files with 32 additions and 6 deletions

View File

@ -57,6 +57,8 @@ static gint ett_hpsw_tlv = -1;
#define HPFOO_FIELD_8 0x8
#define HPFOO_FIELD_9 0x9
#define HPFOO_FIELD_10 0xa
#define HPFOO_FIELD_12 0xc
#define HPFOO_DEVICE_ID 0xd /* Interpretation of this field is an educated guess */
#define HPFOO_MAC_ADDR 0xe
static const value_string hpsw_tlv_type_vals[] = {
@ -68,6 +70,8 @@ static const value_string hpsw_tlv_type_vals[] = {
{ HPFOO_FIELD_8, "Field 8" },
{ HPFOO_FIELD_9, "Field 9" },
{ HPFOO_FIELD_10, "Field 10" },
{ HPFOO_FIELD_12, "Field 12" },
{ HPFOO_DEVICE_ID, "Device ID" },
{ HPFOO_MAC_ADDR, "MAC Addr" },
{ 0x00, NULL }
};
@ -194,8 +198,8 @@ dissect_hpsw_tlv(tvbuff_t *tvb, int offset, int length,
case HPFOO_FIELD_8:
if (length == 2) {
proto_item_set_text(ti, "Field 8: 0x%02x", tvb_get_ntohs(tvb,offset));
proto_tree_add_text(tree, tvb, offset, length, "Field 8: 0x%02x", tvb_get_ntohs(tvb,offset));
proto_item_set_text(ti, "Field 8: 0x%04x", tvb_get_ntohs(tvb,offset));
proto_tree_add_text(tree, tvb, offset, length, "Field 8: 0x%04x", tvb_get_ntohs(tvb,offset));
} else {
proto_item_set_text(ti, "Field 8: Bad length %u", length);
proto_tree_add_text(tree, tvb, offset, length, "Field 8: Bad length %u", length);
@ -204,8 +208,8 @@ dissect_hpsw_tlv(tvbuff_t *tvb, int offset, int length,
case HPFOO_FIELD_9:
if (length == 2) {
proto_item_set_text(ti, "Field 9: 0x%02x", tvb_get_ntohs(tvb,offset));
proto_tree_add_text(tree, tvb, offset, length, "Field 9: 0x%02x", tvb_get_ntohs(tvb,offset));
proto_item_set_text(ti, "Field 9: 0x%04x", tvb_get_ntohs(tvb,offset));
proto_tree_add_text(tree, tvb, offset, length, "Field 9: 0x%04x", tvb_get_ntohs(tvb,offset));
} else {
proto_item_set_text(ti, "Field 9: Bad length %u", length);
proto_tree_add_text(tree, tvb, offset, length, "Field 9: Bad length %u", length);
@ -214,14 +218,36 @@ dissect_hpsw_tlv(tvbuff_t *tvb, int offset, int length,
case HPFOO_FIELD_10:
if (length == 4) {
proto_item_set_text(ti, "Field 10: 0x%04x", tvb_get_ntohl(tvb,offset));
proto_tree_add_text(tree, tvb, offset, length, "Field 9: 0x%04x", tvb_get_ntohl(tvb,offset));
proto_item_set_text(ti, "Field 10: 0x%08x", tvb_get_ntohl(tvb,offset));
proto_tree_add_text(tree, tvb, offset, length, "Field 10: 0x%08x", tvb_get_ntohl(tvb,offset));
} else {
proto_item_set_text(ti, "Field 10: Bad length %u", length);
proto_tree_add_text(tree, tvb, offset, length, "Field 10: Bad length %u", length);
}
break;
case HPFOO_FIELD_12:
if (length == 1) {
proto_item_set_text(ti, "Field 12: 0x%02x", tvb_get_guint8(tvb,offset));
proto_tree_add_text(tree, tvb, offset, length, "Field 12: 0x%02x", tvb_get_guint8(tvb,offset));
} else {
proto_item_set_text(ti, "Field 12: Bad length %u", length);
proto_tree_add_text(tree, tvb, offset, length, "Field 12: Bad length %u", length);
}
break;
case HPFOO_DEVICE_ID:
if (length == 10) {
const guint8 *macptr=tvb_get_ptr(tvb,offset,6);
guint32 id=tvb_get_ntohl(tvb, offset+6);
proto_item_set_text(ti, "Device ID: %s / %u", ether_to_str(macptr), id);
proto_tree_add_text(tree, tvb, offset, 10, "Device ID: %s / %u", ether_to_str(macptr), id);
} else {
proto_item_set_text(ti, "Device ID: Bad length %u", length);
proto_tree_add_text(tree, tvb, offset, length, "Device ID: Bad length %u", length);
}
break;
case HPFOO_MAC_ADDR:
if (length == 6) {
const guint8 *macptr=tvb_get_ptr(tvb,offset,length);