aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-hpsw.c
diff options
context:
space:
mode:
authorjake <jake@f5534014-38df-0310-8fa8-9805f1628bb7>2006-11-09 12:27:52 +0000
committerjake <jake@f5534014-38df-0310-8fa8-9805f1628bb7>2006-11-09 12:27:52 +0000
commiteb762d29afd84c3a8e9e7691103df2f29bf964b8 (patch)
tree84fd4acdeee271d41fcea08d75e9ad0d2e047a6a /epan/dissectors/packet-hpsw.c
parentbd5c35d1abbe525f97ddfc75f247bb03036c6103 (diff)
Improve HP Switch Protocol Dissection.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@19870 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-hpsw.c')
-rw-r--r--epan/dissectors/packet-hpsw.c38
1 files changed, 32 insertions, 6 deletions
diff --git a/epan/dissectors/packet-hpsw.c b/epan/dissectors/packet-hpsw.c
index 678437e73e..805a1b204b 100644
--- a/epan/dissectors/packet-hpsw.c
+++ b/epan/dissectors/packet-hpsw.c
@@ -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);