diff options
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-extreme.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/epan/dissectors/packet-extreme.c b/epan/dissectors/packet-extreme.c index f925ce44ef..3c09fb12ce 100644 --- a/epan/dissectors/packet-extreme.c +++ b/epan/dissectors/packet-extreme.c @@ -222,6 +222,9 @@ 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; +/* ELSM (Extreme Link Status Monitoring) */ +static int hf_edp_elsm = -1; +static int hf_edp_elsm_unknown = -1; /* Unknown element */ static int hf_edp_unknown = -1; /* Null element */ @@ -237,6 +240,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_elsm = -1; static gint ett_edp_unknown = -1; static gint ett_edp_null = -1; @@ -271,7 +275,8 @@ typedef enum { EDP_TYPE_INFO, EDP_TYPE_VLAN = 5, EDP_TYPE_ESRP = 8, - EDP_TYPE_EAPS = 0xb + EDP_TYPE_EAPS = 0xb, + EDP_TYPE_ELSM = 0xf } edp_type_t; static const value_string edp_type_vals[] = { @@ -281,6 +286,7 @@ static const value_string edp_type_vals[] = { { EDP_TYPE_VLAN, "VL"}, { EDP_TYPE_ESRP, "ESRP"}, { EDP_TYPE_EAPS, "EAPS"}, + { EDP_TYPE_ELSM, "ELSM"}, { 0, NULL } }; @@ -680,6 +686,25 @@ dissect_eaps_tlv(tvbuff_t *tvb, packet_info *pinfo, int offset, int length _U_, } static void +dissect_elsm_tlv(tvbuff_t *tvb, packet_info *pinfo, int offset, int length _U_, proto_tree *tree) +{ + proto_item *elsm_item; + proto_tree *elsm_tree; + + elsm_item = proto_tree_add_protocol_format(tree, hf_edp_elsm, + tvb, offset, length, "ELSM"); + + elsm_tree = proto_item_add_subtree(elsm_item, ett_edp_elsm); + + dissect_tlv_header(tvb, pinfo, offset, 4, elsm_tree); + offset += 4; + + proto_tree_add_item(elsm_tree, hf_edp_elsm_unknown, tvb, offset, 4, + FALSE); + offset += 4; +} + +static void dissect_unknown_tlv(tvbuff_t *tvb, packet_info *pinfo, int offset, int length _U_, proto_tree *tree) { proto_item *unknown_item; @@ -834,6 +859,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_ELSM: /* Extreme Link Status Monitoring */ + dissect_elsm_tlv(tvb, pinfo, offset, tlv_length, edp_tree); + break; default: dissect_unknown_tlv(tvb, pinfo, offset, tlv_length, edp_tree); break; @@ -1084,6 +1112,15 @@ proto_register_edp(void) { "Reserved2", "edp.eaps.reserved2", FT_BYTES, BASE_NONE, NULL, 0x0, "", HFILL }}, + /* ELSM element */ + { &hf_edp_elsm, + { "ELWM", "edp.elsm", FT_PROTOCOL, BASE_NONE, NULL, + 0x0, "EAPS Element", HFILL }}, + + { &hf_edp_elsm_unknown, + { "Unknown", "edp.elsm.unknown", FT_BYTES, BASE_NONE, NULL, + 0x0, "", HFILL }}, + /* Unknown element */ { &hf_edp_unknown, { "Unknown", "edp.unknown", FT_PROTOCOL, BASE_NONE, NULL, @@ -1105,6 +1142,7 @@ proto_register_edp(void) &ett_edp_vlan, &ett_edp_esrp, &ett_edp_eaps, + &ett_edp_elsm, &ett_edp_unknown, &ett_edp_null, }; |