diff options
author | Jörg Mayer <jmayer@loplof.de> | 2007-09-26 07:10:40 +0000 |
---|---|---|
committer | Jörg Mayer <jmayer@loplof.de> | 2007-09-26 07:10:40 +0000 |
commit | ec3d698c56832c0cf1ec2fea4f364164f9c267e3 (patch) | |
tree | 7541b5157986eaa443d8d60db2473a6d44ca2ebd /epan/dissectors/packet-extreme.c | |
parent | 6bb9369681964667c97514ae890e17af3554095c (diff) | |
download | wireshark-ec3d698c56832c0cf1ec2fea4f364164f9c267e3.tar.gz |
Beginnings of EAPS shared link packet dissection (EAPSv2)
svn path=/trunk/; revision=22984
Diffstat (limited to 'epan/dissectors/packet-extreme.c')
-rw-r--r-- | epan/dissectors/packet-extreme.c | 229 |
1 files changed, 219 insertions, 10 deletions
diff --git a/epan/dissectors/packet-extreme.c b/epan/dissectors/packet-extreme.c index a24fd80eee..89a426244d 100644 --- a/epan/dissectors/packet-extreme.c +++ b/epan/dissectors/packet-extreme.c @@ -33,8 +33,8 @@ - Things seen in traces Flags in the EDP Vlan field (value 0x01) Meaning of special MAC adresses: - ExtremeN:00:00:06 - TLV type 0x0e (XOS only?) (EAPSv2?) + TLV type 0x0e (EAPSv2), actually, it seems to be EAPSv1 + shared link managemnt TLV type 0x15 (XOS only?) EAPS type 0x10 (EAPSv2?) ESRP state 0x03 @@ -222,6 +222,24 @@ static int hf_edp_eaps_state = -1; static int hf_edp_eaps_reserved1 = -1; static int hf_edp_eaps_helloseq = -1; static int hf_edp_eaps_reserved2 = -1; +/* EAPSv2 element */ +static int hf_edp_eaps2 = -1; +static int hf_edp_eaps2_ver = -1; +static int hf_edp_eaps2_type = -1; +static int hf_edp_eaps2_ctrlvlanid = -1; +static int hf_edp_eaps2_reserved0 = -1; +static int hf_edp_eaps2_sysmac = -1; +static int hf_edp_eaps2_reserved1 = -1; +static int hf_edp_eaps2_reserved2 = -1; +static int hf_edp_eaps2_linkid1 = -1; +static int hf_edp_eaps2_failed1 = -1; +static int hf_edp_eaps2_failed2 = -1; +static int hf_edp_eaps2_reserved4 = -1; +static int hf_edp_eaps2_linkid2 = -1; +static int hf_edp_eaps2_reserved5 = -1; +static int hf_edp_eaps2_linkid3 = -1; +static int hf_edp_eaps2_linkid4 = -1; +static int hf_edp_eaps2_rest = -1; /* ELSM (Extreme Link Status Monitoring) */ static int hf_edp_elsm = -1; static int hf_edp_elsm_type = -1; @@ -246,6 +264,7 @@ static gint ett_edp_vlan = -1; static gint ett_edp_vlan_flags = -1; static gint ett_edp_esrp = -1; static gint ett_edp_eaps = -1; +static gint ett_edp_eaps2 = -1; static gint ett_edp_elrp = -1; static gint ett_edp_elsm = -1; static gint ett_edp_unknown = -1; @@ -284,7 +303,8 @@ typedef enum { EDP_TYPE_ESRP = 8, EDP_TYPE_EAPS = 0xb, EDP_TYPE_ELRP = 0xd, - EDP_TYPE_ELSM = 0xf + EDP_TYPE_EAPS2, + EDP_TYPE_ELSM } edp_type_t; static const value_string edp_type_vals[] = { @@ -293,8 +313,9 @@ static const value_string edp_type_vals[] = { { EDP_TYPE_INFO, "Info"}, { EDP_TYPE_VLAN, "VL"}, { EDP_TYPE_ESRP, "ESRP"}, - { EDP_TYPE_ELRP, "ELRP"}, { EDP_TYPE_EAPS, "EAPS"}, + { EDP_TYPE_ELRP, "ELRP"}, + { EDP_TYPE_EAPS2, "EAPSv2"}, { EDP_TYPE_ELSM, "ELSM"}, { 0, NULL } @@ -327,14 +348,14 @@ static const value_string eaps_state_vals[] = { }; static const value_string elsm_type_vals[] = { - { 0x01, "Hello" }, + { 0x01, "Hello" }, { 0, NULL } }; static const value_string elsm_subtype_vals[] = { - { 0x00, "-" }, - { 0x01, "+" }, + { 0x00, "-" }, + { 0x01, "+" }, { 0, NULL } }; @@ -648,11 +669,14 @@ dissect_eaps_tlv(tvbuff_t *tvb, packet_info *pinfo, int offset, int length _U_, proto_item *eaps_item; proto_tree *eaps_tree; guint16 ctrlvlanid; + const guint8 *sysmac; - ctrlvlanid = tvb_get_ntohs(tvb, offset + 2 + 4); + ctrlvlanid = tvb_get_ntohs(tvb, offset + 1 + 1 + 4); + sysmac = tvb_get_ptr(tvb, offset + 12, 6); eaps_item = proto_tree_add_protocol_format(tree, hf_edp_eaps, - tvb, offset, length, "EAPS: Ctrlvlan %d", ctrlvlanid); + tvb, offset, length, "EAPS: Ctrlvlan %d, Sysmac %s", + ctrlvlanid, ether_to_str(sysmac)); eaps_tree = proto_item_add_subtree(eaps_item, ett_edp_eaps); @@ -705,6 +729,117 @@ dissect_eaps_tlv(tvbuff_t *tvb, packet_info *pinfo, int offset, int length _U_, if (check_col(pinfo->cinfo, COL_PROTOCOL)) col_set_str(pinfo->cinfo, COL_PROTOCOL, "EAPS"); + if (check_col(pinfo->cinfo, COL_INFO)) + col_append_fstr(pinfo->cinfo, COL_INFO, " ID: %d, MAC: %s", + ctrlvlanid, ether_to_str(sysmac)); +} + +static void +dissect_eaps2_tlv(tvbuff_t *tvb, packet_info *pinfo, int offset, int length, proto_tree *tree) +{ + proto_item *eaps2_item; + proto_tree *eaps2_tree; + guint16 ctrlvlanid; + const guint8 *sysmac; + + ctrlvlanid = tvb_get_ntohs(tvb, offset + 2 + 4); + sysmac = tvb_get_ptr(tvb, offset + 12, 6); + + eaps2_item = proto_tree_add_protocol_format(tree, hf_edp_eaps2, + tvb, offset, length, "EAPSv2: Ctrlvlan %d, Sysmac %s", + ctrlvlanid, ether_to_str(sysmac)); + + eaps2_tree = proto_item_add_subtree(eaps2_item, ett_edp_eaps2); + + dissect_tlv_header(tvb, pinfo, offset, 4, eaps2_tree); + offset += 4; + length -= 4; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_ver, tvb, offset, 1, + FALSE); + offset += 1; + length -= 1; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_type, tvb, offset, 1, + FALSE); + offset += 1; + length -= 1; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps_ctrlvlanid, tvb, offset, 2, + FALSE); + offset += 2; + length -= 2; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_reserved0, tvb, offset, 4, + FALSE); + offset += 4; + length -= 4; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_sysmac, tvb, offset, 6, + FALSE); + offset += 6; + length -= 6; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_reserved1, tvb, offset, 4, + FALSE); + offset += 4; + length -= 4; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_reserved2, tvb, offset, 2, + FALSE); + offset += 2; + length -= 2; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_linkid1, tvb, offset, 2, + FALSE); + offset += 2; + length -= 2; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_failed1, tvb, offset, 2, + FALSE); + offset += 2; + length -= 2; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_failed2, tvb, offset, 2, + FALSE); + offset += 2; + length -= 2; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_reserved4, tvb, offset, 2, + FALSE); + offset += 2; + length -= 2; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_linkid2, tvb, offset, 2, + FALSE); + offset += 2; + length -= 2; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_reserved5, tvb, offset, 4, + FALSE); + offset += 4; + length -= 4; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_linkid3, tvb, offset, 2, + FALSE); + offset += 2; + length -= 2; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_linkid4, tvb, offset, 2, + FALSE); + offset += 2; + length -= 2; + + proto_tree_add_item(eaps2_tree, hf_edp_eaps2_rest, tvb, offset, length, + FALSE); + offset += length; + length = 0; + + if (check_col(pinfo->cinfo, COL_PROTOCOL)) + col_set_str(pinfo->cinfo, COL_PROTOCOL, "EAPSv2"); + if (check_col(pinfo->cinfo, COL_INFO)) + col_append_fstr(pinfo->cinfo, COL_INFO, " ID: %d, MAC: %s", + ctrlvlanid, ether_to_str(sysmac)); } static void @@ -905,7 +1040,8 @@ dissect_edp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) last = TRUE; break; } - if (check_col(pinfo->cinfo, COL_INFO)) + if (check_col(pinfo->cinfo, COL_INFO) && + tlv_type != EDP_TYPE_NULL) col_append_fstr(pinfo->cinfo, COL_INFO, " %s", val_to_str(tlv_type, edp_type_vals, "[0x%02x]")); @@ -929,6 +1065,9 @@ dissect_edp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) case EDP_TYPE_EAPS: /* Ethernet Automatic Protection Swtiching */ dissect_eaps_tlv(tvb, pinfo, offset, tlv_length, edp_tree); break; + case EDP_TYPE_EAPS2: /* Ethernet Automatic Protection Swtiching version 2 */ + dissect_eaps2_tlv(tvb, pinfo, offset, tlv_length, edp_tree); + break; case EDP_TYPE_ELSM: /* Extreme Link Status Monitoring */ dissect_elsm_tlv(tvb, pinfo, offset, tlv_length, edp_tree, seqno); break; @@ -1185,6 +1324,75 @@ proto_register_edp(void) { "Reserved2", "edp.eaps.reserved2", FT_BYTES, BASE_NONE, NULL, 0x0, "", HFILL }}, + /* EAPSv2 element */ + { &hf_edp_eaps2, + { "EAPSv2", "edp.eaps2", FT_PROTOCOL, BASE_NONE, NULL, + 0x0, "Ethernet Automatic Protection Switching v2 element", HFILL }}, + + { &hf_edp_eaps2_ver, + { "Version", "edp.eaps2.ver", FT_UINT8, BASE_DEC, NULL, + 0x0, "", HFILL }}, + + { &hf_edp_eaps2_type, + { "Type", "edp.eaps2.type", FT_UINT8, BASE_DEC, VALS(eaps_type_vals), + 0x0, "", HFILL }}, + + { &hf_edp_eaps2_ctrlvlanid, + { "Vlan ID", "edp.eaps2.vlanid", FT_UINT16, BASE_DEC, NULL, + 0x0, "Control Vlan ID", HFILL }}, + + { &hf_edp_eaps2_reserved0, + { "Reserved0", "edp.eaps2.reserved0", FT_BYTES, BASE_NONE, NULL, + 0x0, "", HFILL }}, + + { &hf_edp_eaps2_sysmac, + { "Sys MAC", "edp.eaps2.sysmac", FT_ETHER, BASE_NONE, NULL, + 0x0, "System MAC address", HFILL }}, + + { &hf_edp_eaps2_reserved1, + { "Reserved1", "edp.eaps2.reserved1", FT_BYTES, BASE_NONE, NULL, + 0x0, "", HFILL }}, + + { &hf_edp_eaps2_reserved2, + { "Reserved2", "edp.eaps2.reserved2", FT_BYTES, BASE_NONE, NULL, + 0x0, "", HFILL }}, + + { &hf_edp_eaps2_linkid1, + { "Link ID 1", "edp.eaps2.linkid1", FT_UINT16, BASE_DEC, NULL, + 0x0, "Shared link ID 1", HFILL }}, + + { &hf_edp_eaps2_failed1, + { "Failed ID 1", "edp.eaps2.failed1", FT_UINT16, BASE_DEC, NULL, + 0x0, "Failed link ID 1", HFILL }}, + + { &hf_edp_eaps2_failed2, + { "Failed ID 2", "edp.eaps2.failed2", FT_UINT16, BASE_DEC, NULL, + 0x0, "Failed link ID 2", HFILL }}, + + { &hf_edp_eaps2_reserved4, + { "Reserved4", "edp.eaps2.reserved4", FT_BYTES, BASE_NONE, NULL, + 0x0, "", HFILL }}, + + { &hf_edp_eaps2_linkid2, + { "Link ID 2", "edp.eaps2.linkid2", FT_UINT16, BASE_DEC, NULL, + 0x0, "Shared link ID 2", HFILL }}, + + { &hf_edp_eaps2_reserved5, + { "Reserved5", "edp.eaps2.reserved5", FT_BYTES, BASE_NONE, NULL, + 0x0, "", HFILL }}, + + { &hf_edp_eaps2_linkid3, + { "Link ID 3", "edp.eaps2.linkid3", FT_UINT16, BASE_DEC, NULL, + 0x0, "Shared link ID 3", HFILL }}, + + { &hf_edp_eaps2_linkid4, + { "Link ID 4", "edp.eaps2.linkid4", FT_UINT16, BASE_DEC, NULL, + 0x0, "Shared link ID 4", HFILL }}, + + { &hf_edp_eaps2_rest, + { "Rest", "edp.eaps2.rest", FT_BYTES, BASE_NONE, NULL, + 0x0, "", HFILL }}, + /* ELSM element */ { &hf_edp_elsm, { "ELSM", "edp.elsm", FT_PROTOCOL, BASE_NONE, NULL, @@ -1236,6 +1444,7 @@ proto_register_edp(void) &ett_edp_vlan, &ett_edp_esrp, &ett_edp_eaps, + &ett_edp_eaps2, &ett_edp_elrp, &ett_edp_elsm, &ett_edp_unknown, |