From 72a6e814bbdec6ba468beade83f9aa4695014619 Mon Sep 17 00:00:00 2001 From: Joerg Mayer Date: Wed, 24 Mar 2021 11:09:00 +0100 Subject: [PATCH] isis: Support for proprietary Avaya/Extremenetworks Fabric TLVs/NLIPD - TLV 129 NLPID decoding cleanup with multiple NLPIDs - NLPID 0x8f added (Avaya proprietary) - TLV 147 decoding added (Avaya proprietary) - TLV 184 Avaya prorietary IPVPN decoding added - TLV Types 185-186 Avaya proprietary IPVPN MC added without decoding --- epan/dissectors/packet-isis-clv.c | 36 ++-- epan/dissectors/packet-isis-clv.h | 6 +- epan/dissectors/packet-isis-hello.c | 8 +- epan/dissectors/packet-isis-lsp.c | 290 +++++++++++++++++++++++++++- epan/dissectors/packet-osi.c | 1 + epan/nlpid.h | 3 +- 6 files changed, 310 insertions(+), 34 deletions(-) diff --git a/epan/dissectors/packet-isis-clv.c b/epan/dissectors/packet-isis-clv.c index 54bb42021b..1c61506e2e 100644 --- a/epan/dissectors/packet-isis-clv.c +++ b/epan/dissectors/packet-isis-clv.c @@ -425,33 +425,31 @@ isis_dissect_te_router_id_clv(proto_tree *tree, packet_info* pinfo, tvbuff_t *tv * Output: * void, but we will add to proto tree if !NULL. */ -void -isis_dissect_nlpid_clv(tvbuff_t *tvb, proto_tree *tree, int hf_nlpid, int offset, int length) -{ - gboolean first; - proto_item *ti; - if ( !tree ) return; /* nothing to do! */ +#define PLURALIZE(n) (((n) > 1) ? "s" : "") + +void +isis_dissect_nlpid_clv(tvbuff_t *tvb, proto_tree *tree, int ett_nlpid, int hf_nlpid, int offset, int length) +{ + proto_tree *nlpid_tree; + proto_item *ti; + guint8 nlpid; if (length <= 0) { - proto_tree_add_item(tree, hf_nlpid, tvb, offset, length, ENC_NA); + nlpid_tree = proto_tree_add_subtree_format(tree, tvb, offset, 0, ett_nlpid, NULL, "No NLPIDs"); } else { - first = TRUE; - ti = proto_tree_add_bytes_format(tree, hf_nlpid, tvb, offset, length, NULL, "NLPID(s): "); + nlpid_tree = proto_tree_add_subtree_format(tree, tvb, offset, length, ett_nlpid, &ti, "NLPID%s: ", PLURALIZE(length)); while (length-- > 0 ) { - if (!first) { + nlpid = tvb_get_guint8(tvb, offset); + proto_item_append_text(ti, "%s (0x%02x)", + /* NLPID_IEEE_8021AQ conflicts with NLPID_SNDCF. In this context, we want the former. */ + (nlpid == NLPID_IEEE_8021AQ ? "IEEE 802.1aq (SPB)" : val_to_str_const(nlpid, nlpid_vals, "Unknown")), + nlpid); + if (length) { proto_item_append_text(ti, ", "); } - proto_item_append_text(ti, "%s (0x%02x)", - /* NLPID_IEEE_8021AQ conflicts with NLPID_SNDCF. - * In this context, we want the former. - */ - (tvb_get_guint8(tvb, offset) == NLPID_IEEE_8021AQ - ? "IEEE 802.1aq (SPB)" - : val_to_str_const(tvb_get_guint8(tvb, offset), nlpid_vals, "Unknown")), - tvb_get_guint8(tvb, offset)); + proto_tree_add_uint(nlpid_tree, hf_nlpid, tvb, offset, 1, nlpid); offset++; - first = FALSE; } } } diff --git a/epan/dissectors/packet-isis-clv.h b/epan/dissectors/packet-isis-clv.h index a683b80106..72fe378dca 100644 --- a/epan/dissectors/packet-isis-clv.h +++ b/epan/dissectors/packet-isis-clv.h @@ -57,8 +57,12 @@ #define ISIS_CLV_MT_PORT_CAP 143 /* rfc6165, rfc7176 */ #define ISIS_CLV_MT_CAP 144 /* rfc6329, rfc7176 */ #define ISIS_CLV_TRILL_NEIGHBOR 145 /* rfc7176 */ +#define ISIS_CLV_AVAYA_MAC 147 /* Avaya/Extremenetworks proprietary: Reverse engineered */ #define ISIS_CLV_BFD_ENABLED 148 /* rfc6213 */ #define ISIS_CLV_SID_LABEL_BINDING 149 /* draft-previdi-isis-segment-routing-extensions-05 */ +#define ISIS_CLV_AVAYA_IPVPN 184 /* Avaya/Extremenetworks proprietary: Reverse engineered */ +#define ISIS_CLV_AVAYA_IPVPN_MC 185 /* Avaya/Extremenetworks proprietary: Reverse engineered */ +#define ISIS_CLV_AVAYA_IP_GRT_MC 186 /* Avaya/Extremenetworks proprietary: Reverse engineered */ #define ISIS_CLV_RESTART 211 /* draft-ietf-isis-restart-01 */ #define ISIS_CLV_MT_IS_REACH 222 /* draft-ietf-isis-wg-multi-topology-05 */ #define ISIS_CLV_MT_SUPPORTED 229 /* draft-ietf-isis-wg-multi-topology-05 */ @@ -91,7 +95,7 @@ extern void isis_dissect_clvs(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tre const isis_clv_handle_t *opts, expert_field *expert_short_len, isis_data_t *isis, int unknown_tree_id, int tree_type, int tree_length, expert_field *ei_unknown); -extern void isis_dissect_nlpid_clv(tvbuff_t *tvb, proto_tree *tree, +extern void isis_dissect_nlpid_clv(tvbuff_t *tvb, proto_tree *tree, gint ett_nlpid, int hf_nlpid, int offset, int length); extern void isis_dissect_te_router_id_clv(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, expert_field* expert, int offset, int length, int tree_id); diff --git a/epan/dissectors/packet-isis-hello.c b/epan/dissectors/packet-isis-hello.c index d9f5be3dc8..2b7a22b22e 100644 --- a/epan/dissectors/packet-isis-hello.c +++ b/epan/dissectors/packet-isis-hello.c @@ -86,7 +86,7 @@ static int hf_isis_hello_bvid_m = -1; static int hf_isis_hello_area_address = -1; static int hf_isis_hello_instance_identifier = -1; static int hf_isis_hello_supported_itid = -1; -static int hf_isis_hello_clv_nlpid = -1; +static int hf_isis_hello_clv_nlpid_nlpid = -1; static int hf_isis_hello_clv_ip_authentication = -1; static int hf_isis_hello_authentication = -1; @@ -142,6 +142,7 @@ static gint ett_isis_hello_clv_is_neighbors = -1; static gint ett_isis_hello_clv_padding = -1; static gint ett_isis_hello_clv_unknown = -1; static gint ett_isis_hello_clv_nlpid = -1; +static gint ett_isis_hello_clv_nlpid_nlpid = -1; static gint ett_isis_hello_clv_authentication = -1; static gint ett_isis_hello_clv_ip_authentication = -1; static gint ett_isis_hello_clv_ipv4_int_addr = -1; @@ -566,7 +567,7 @@ static void dissect_hello_nlpid_clv(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree, int offset, isis_data_t *isis _U_, int length) { - isis_dissect_nlpid_clv(tvb, tree, hf_isis_hello_clv_nlpid, offset, length); + isis_dissect_nlpid_clv(tvb, tree, ett_isis_hello_clv_nlpid_nlpid, hf_isis_hello_clv_nlpid_nlpid, offset, length); } /* @@ -1580,7 +1581,7 @@ proto_register_isis_hello(void) { &hf_isis_hello_area_address, { "Area address", "isis.hello.area_address", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_hello_instance_identifier, { "Instance Identifier", "isis.hello.iid", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_isis_hello_supported_itid, { "Supported ITID", "isis.hello.supported_itid", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }}, - { &hf_isis_hello_clv_nlpid, { "NLPID", "isis.hello.clv_nlpid", FT_BYTES, BASE_NONE|BASE_ALLOW_ZERO, NULL, 0x0, NULL, HFILL }}, + { &hf_isis_hello_clv_nlpid_nlpid, { "NLPID", "isis.hello.clv_nlpid.nlpid", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }}, { &hf_isis_hello_clv_ip_authentication, { "NLPID", "isis.hello.clv_ip_authentication", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_hello_authentication, { "Authentication", "isis.hello.clv_authentication", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_hello_mtid, { "Topology ID", "isis.hello.mtid", FT_UINT16, BASE_DEC|BASE_RANGE_STRING, RVALS(mtid_strings), 0xfff, NULL, HFILL }}, @@ -1642,6 +1643,7 @@ proto_register_isis_hello(void) &ett_isis_hello_clv_padding, &ett_isis_hello_clv_unknown, &ett_isis_hello_clv_nlpid, + &ett_isis_hello_clv_nlpid_nlpid, &ett_isis_hello_clv_authentication, &ett_isis_hello_clv_ip_authentication, &ett_isis_hello_clv_ipv4_int_addr, diff --git a/epan/dissectors/packet-isis-lsp.c b/epan/dissectors/packet-isis-lsp.c index 1635919861..878aec740a 100644 --- a/epan/dissectors/packet-isis-lsp.c +++ b/epan/dissectors/packet-isis-lsp.c @@ -415,7 +415,7 @@ static int hf_isis_lsp_clv_srv6_endx_sid_subsubclvs_len = -1; static int hf_isis_lsp_area_address = -1; static int hf_isis_lsp_instance_identifier = -1; static int hf_isis_lsp_supported_itid = -1; -static int hf_isis_lsp_clv_nlpid = -1; +static int hf_isis_lsp_clv_nlpid_nlpid = -1; static int hf_isis_lsp_ip_authentication = -1; static int hf_isis_lsp_authentication = -1; static int hf_isis_lsp_area_address_str = -1; @@ -457,6 +457,25 @@ static int hf_isis_lsp_clv_srv6_end_sid_sid = -1; static int hf_isis_lsp_clv_srv6_end_sid_subsubclvs_len = -1; static int hf_isis_lsp_purge_orig_id_num = -1; static int hf_isis_lsp_purge_orig_id_system_id = -1; +/* Avaya proprietary */ +static int hf_isis_lsp_avaya_147_unknown = -1; +static int hf_isis_lsp_avaya_147_mac = -1; +static int hf_isis_lsp_avaya_147_fanmcast = -1; +static int hf_isis_lsp_avaya_ipvpn_unknown = -1; +static int hf_isis_lsp_avaya_ipvpn_system_id = -1; +static int hf_isis_lsp_avaya_ipvpn_vrfsid = -1; +static int hf_isis_lsp_avaya_ipvpn_subtlvbytes = -1; +static int hf_isis_lsp_avaya_ipvpn_subtlvtype = -1; +static int hf_isis_lsp_avaya_ipvpn_subtlvlength = -1; +static int hf_isis_lsp_avaya_ipvpn_unknown_sub = -1; +static int hf_isis_lsp_avaya_ipvpn_ipv4_metric = -1; +static int hf_isis_lsp_avaya_ipvpn_ipv4_addr = -1; +static int hf_isis_lsp_avaya_ipvpn_ipv4_mask = -1; +static int hf_isis_lsp_avaya_ipvpn_ipv6_metric = -1; +static int hf_isis_lsp_avaya_ipvpn_ipv6_prefixlen = -1; +static int hf_isis_lsp_avaya_ipvpn_ipv6_prefix = -1; +static int hf_isis_lsp_avaya_185_unknown = -1; +static int hf_isis_lsp_avaya_186_unknown = -1; static gint ett_isis_lsp = -1; static gint ett_isis_lsp_info = -1; @@ -476,7 +495,7 @@ static gint ett_isis_lsp_adj_sid_flags = -1; static gint ett_isis_lsp_clv_unknown = -1; static gint ett_isis_lsp_clv_partition_dis = -1; static gint ett_isis_lsp_clv_prefix_neighbors = -1; -static gint ett_isis_lsp_clv_nlpid = -1; +static gint ett_isis_lsp_clv_nlpid_nlpid = -1; static gint ett_isis_lsp_clv_hostname = -1; static gint ett_isis_lsp_clv_srlg = -1; static gint ett_isis_lsp_clv_te_router_id = -1; @@ -535,6 +554,12 @@ static gint ett_isis_lsp_clv_srv6_locator = -1; static gint ett_isis_lsp_clv_srv6_loc_flags = -1; static gint ett_isis_lsp_clv_srv6_loc_sub_tlv = -1; static gint ett_isis_lsp_clv_srv6_endx_sid_flags = -1; +static gint ett_isis_lsp_clv_avaya_mac = -1; +static gint ett_isis_lsp_clv_avaya_ipvpn = -1; +static gint ett_isis_lsp_clv_avaya_ipvpn_subtlv = -1; +static gint ett_isis_lsp_clv_avaya_ipvpn_mc = -1; +static gint ett_isis_lsp_clv_avaya_ip_grt_mc = -1; + static expert_field ei_isis_lsp_short_pdu = EI_INIT; static expert_field ei_isis_lsp_long_pdu = EI_INIT; @@ -543,9 +568,11 @@ static expert_field ei_isis_lsp_subtlv = EI_INIT; static expert_field ei_isis_lsp_authentication = EI_INIT; static expert_field ei_isis_lsp_short_clv = EI_INIT; static expert_field ei_isis_lsp_long_clv = EI_INIT; +static expert_field ei_isis_lsp_length_clv = EI_INIT; static expert_field ei_isis_lsp_clv_mt = EI_INIT; static expert_field ei_isis_lsp_clv_unknown = EI_INIT; static expert_field ei_isis_lsp_malformed_subtlv = EI_INIT; +static expert_field ei_isis_lsp_unknown_subtlv = EI_INIT; static expert_field ei_isis_lsp_reserved_not_zero = EI_INIT; static expert_field ei_isis_lsp_length_invalid = EI_INIT; @@ -748,6 +775,13 @@ static const value_string isis_lsp_bier_subsubtlv_type_vals[] = { { 0, NULL } }; +/* Avaya specific sub-TLV types */ +static const value_string isis_lsp_avaya_ipvpn_subtlv_code_vals[] = { + { 135, "IPv4 Reachability" }, + { 236, "IPv6 Reachability" }, + { 0, NULL } +}; + /* * Name: dissect_lsp_mt_id() * @@ -1921,7 +1955,7 @@ static void dissect_lsp_nlpid_clv(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree, int offset, isis_data_t *isis _U_, int length) { - isis_dissect_nlpid_clv(tvb, tree, hf_isis_lsp_clv_nlpid, offset, length); + isis_dissect_nlpid_clv(tvb, tree, ett_isis_lsp_clv_nlpid_nlpid, hf_isis_lsp_clv_nlpid_nlpid, offset, length); } /* @@ -3769,6 +3803,120 @@ dissect_lsp_purge_orig_id_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tre } } +static void +dissect_lsp_avaya_mac(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree, int offset, + isis_data_t *isis _U_, int length) +{ + if (length != 11 && length != 17) { + proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_length_clv, tvb, offset, length, + "Unexpected length of Avaya MAC TLV (%d vs 11 or 17)", + length); + return; + } + proto_tree_add_item(tree, hf_isis_lsp_avaya_147_unknown, tvb, offset, 5, ENC_NA); + proto_tree_add_item(tree, hf_isis_lsp_avaya_147_mac, tvb, offset + 5, 6, ENC_NA); + if (length == 17) + proto_tree_add_item(tree, hf_isis_lsp_avaya_147_fanmcast, tvb, offset + 11, 6, ENC_NA); +} + +static void +dissect_lsp_avaya_ipvpn(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree, int offset, + isis_data_t *isis _U_, int length) +{ + guint subtlvbytes; + proto_item *ti; + proto_item *ti_pfxlen, *ti_prefix; + proto_tree *subtlvtree; + guint subtype; + guint sublength; + + if (length < 15) { + proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_clv, tvb, offset, length, + "Too short LSP Avaya IPVPN (%d vs min 15)", + length); + return; + } + proto_tree_add_item(tree, hf_isis_lsp_avaya_ipvpn_unknown, tvb, offset, 4, ENC_NA); + offset += 4; + proto_tree_add_item(tree, hf_isis_lsp_avaya_ipvpn_system_id, tvb, offset, 7, ENC_NA); + offset += 7; + proto_tree_add_item(tree, hf_isis_lsp_avaya_ipvpn_vrfsid, tvb, offset, 3, ENC_BIG_ENDIAN); + offset += 3; + proto_tree_add_item_ret_uint(tree, hf_isis_lsp_avaya_ipvpn_subtlvbytes, tvb, offset, 1, ENC_NA, &subtlvbytes); + offset += 1; + + if ((guint)length != 15+subtlvbytes) { + proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_length_clv, tvb, offset, length, + "Inconsistent length of LSP Avaya IPVPN with subtlvs (%d vs min %d)", + length, 15 + subtlvbytes); + return; + } + while (subtlvbytes > 0) { + if (subtlvbytes == 1) { + proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_malformed_subtlv, tvb, offset, length, + "Too few bytes remaining for Sub-TLV header (1 vs 2)"); + return; + } + subtype = tvb_get_guint8(tvb, offset); + sublength = tvb_get_guint8(tvb, offset + 1); + subtlvtree = proto_tree_add_subtree_format(tree, tvb, offset, sublength + 2, ett_isis_lsp_clv_avaya_ipvpn_subtlv, &ti, "%s", + val_to_str(subtype, isis_lsp_avaya_ipvpn_subtlv_code_vals, "Unknown")); + proto_tree_add_item(subtlvtree, hf_isis_lsp_avaya_ipvpn_subtlvtype, tvb, offset, 1, ENC_NA); + proto_tree_add_item(subtlvtree, hf_isis_lsp_avaya_ipvpn_subtlvlength, tvb, offset + 1, 1, ENC_NA); + offset += 2; + switch (subtype) { + case 135: /* IPv4 */ + if (sublength != 12) { + proto_tree_add_expert_format(subtlvtree, pinfo, &ei_isis_lsp_malformed_subtlv, tvb, offset, sublength, + "Unexpected IPv4 Reachability sub-TLV length (%d vs 12)", sublength); + } + proto_tree_add_item(subtlvtree, hf_isis_lsp_avaya_ipvpn_ipv4_metric, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + ti_prefix = proto_tree_add_item(subtlvtree, hf_isis_lsp_avaya_ipvpn_ipv4_addr, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + ti_pfxlen = proto_tree_add_item(subtlvtree, hf_isis_lsp_avaya_ipvpn_ipv4_mask, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + proto_item_append_text(ti, ": %s/%s", proto_item_get_display_repr(wmem_packet_scope(), ti_prefix), + proto_item_get_display_repr(wmem_packet_scope(), ti_pfxlen)); + break; + case 236: /* IPv6 */ + if (sublength != 22) { + proto_tree_add_expert_format(subtlvtree, pinfo, &ei_isis_lsp_malformed_subtlv, tvb, offset, sublength, + "Unexpected IPv6 Reachability sub-TLV length (%d vs 22)", sublength); + } + proto_tree_add_item(subtlvtree, hf_isis_lsp_avaya_ipvpn_ipv6_metric, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + ti_pfxlen = proto_tree_add_item(subtlvtree, hf_isis_lsp_avaya_ipvpn_ipv6_prefixlen, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + ti_prefix = proto_tree_add_item(subtlvtree, hf_isis_lsp_avaya_ipvpn_ipv6_prefix, tvb, offset, 16, ENC_NA); + offset += 16; + proto_item_append_text(ti, ": %s/%s", proto_item_get_display_repr(wmem_packet_scope(), ti_prefix), + proto_item_get_display_repr(wmem_packet_scope(), ti_pfxlen)); + break; + default: + proto_tree_add_item(subtlvtree, hf_isis_lsp_avaya_ipvpn_unknown_sub, tvb, offset, 4, ENC_NA); + proto_tree_add_expert_format(subtlvtree, pinfo, &ei_isis_lsp_unknown_subtlv, tvb, offset, length, + "Unknown Avaya IPVPN subTLV (%d): Please report to Wireshark developers.", subtype); + offset += sublength; + } + subtlvbytes -= (2 + sublength); + } +} + +static void +dissect_lsp_avaya_ipvpn_mc(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree, int offset, + isis_data_t *isis _U_, int length) +{ + proto_tree_add_item(tree, hf_isis_lsp_avaya_185_unknown, tvb, offset, length, ENC_NA); +} + +static void +dissect_lsp_avaya_ip_grt_mc(tvbuff_t *tvb, packet_info* pinfo _U_, proto_tree *tree, int offset, + isis_data_t *isis _U_, int length) +{ + proto_tree_add_item(tree, hf_isis_lsp_avaya_186_unknown, tvb, offset, length, ENC_NA); +} + static const isis_clv_handle_t clv_l1_lsp_opts[] = { { ISIS_CLV_AREA_ADDRESS, @@ -3833,7 +3981,7 @@ static const isis_clv_handle_t clv_l1_lsp_opts[] = { { ISIS_CLV_PROTOCOLS_SUPPORTED, "Protocols supported", - &ett_isis_lsp_clv_nlpid, + &ett_isis_lsp_clv_nlpid_nlpid, dissect_lsp_nlpid_clv }, { @@ -3944,6 +4092,30 @@ static const isis_clv_handle_t clv_l1_lsp_opts[] = { &ett_isis_lsp_clv_purge_orig_id, dissect_lsp_purge_orig_id_clv }, + { + ISIS_CLV_AVAYA_MAC, + "Avaya MAC", + &ett_isis_lsp_clv_avaya_mac, + dissect_lsp_avaya_mac + }, + { + ISIS_CLV_AVAYA_IPVPN, + "Avaya IPVPN", + &ett_isis_lsp_clv_avaya_ipvpn, + dissect_lsp_avaya_ipvpn + }, + { + ISIS_CLV_AVAYA_IPVPN_MC, + "Avaya IPVPN MCast", + &ett_isis_lsp_clv_avaya_ipvpn_mc, + dissect_lsp_avaya_ipvpn_mc + }, + { + ISIS_CLV_AVAYA_IP_GRT_MC, + "Avaya IP GRT MCast", + &ett_isis_lsp_clv_avaya_ip_grt_mc, + dissect_lsp_avaya_ip_grt_mc + }, { 0, "", @@ -4010,7 +4182,7 @@ static const isis_clv_handle_t clv_l2_lsp_opts[] = { { ISIS_CLV_PROTOCOLS_SUPPORTED, "Protocols supported", - &ett_isis_lsp_clv_nlpid, + &ett_isis_lsp_clv_nlpid_nlpid, dissect_lsp_nlpid_clv }, { @@ -5778,9 +5950,9 @@ proto_register_isis_lsp(void) FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, - { &hf_isis_lsp_clv_nlpid, - { "NLPID", "isis.lsp.clv_nlpid", - FT_BYTES, BASE_NONE|BASE_ALLOW_ZERO, NULL, 0x0, + { &hf_isis_lsp_clv_nlpid_nlpid, + { "NLPID", "isis.lsp.clv_nlpid.nlpid", + FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_isis_lsp_ip_authentication, @@ -5910,6 +6082,97 @@ proto_register_isis_lsp(void) FT_UINT24, BASE_DEC, NULL, 0x0FFFFF, NULL, HFILL } }, + /* Avaya proprietary */ + { &hf_isis_lsp_avaya_147_unknown, + { "Unknown", "isis.lsp.avaya.147.unknown", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_147_mac, + { "Chassis MAC", "isis.lsp.avaya.147.chassismac", + FT_ETHER, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_147_fanmcast, + { "FAN Mcast", "isis.lsp.avaya.147.fanmcast", + FT_ETHER, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_ipvpn_unknown, + { "Unknown", "isis.lsp.avaya.ipvpn.unknown", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_ipvpn_system_id, + { "System-ID", "isis.lsp.avaya.ipvpn.system_id", + FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_ipvpn_vrfsid, + { "Vrf I-SID", "isis.lsp.avaya.ipvpn.vrfsid", + FT_UINT24, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_ipvpn_subtlvbytes, + { "SubTLV Bytes", "isis.lsp.avaya.ipvpn.subtlvbytes", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_ipvpn_subtlvtype, + { "SubTLV Type", "isis.lsp.avaya.ipvpn.subtlvtype", + FT_UINT8, BASE_DEC, VALS(isis_lsp_avaya_ipvpn_subtlv_code_vals), 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_ipvpn_subtlvlength, + { "SubTLV Length", "isis.lsp.avaya.ipvpn.subtlvlength", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_ipvpn_unknown_sub, + { "Unknown", "isis.lsp.avaya.ipvpn.sub.unknown", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_ipvpn_ipv4_metric, + { "Metric", "isis.lsp.avaya.ipvpn.ipv4.metric", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_ipvpn_ipv4_addr, + { "IPv4 Address", "isis.lsp.avaya.ipvpn.ipv4.address", + FT_IPv4, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_ipvpn_ipv4_mask, + { "IPv4 Mask", "isis.lsp.avaya.ipvpn.ipv4.mask", + FT_IPv4, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_ipvpn_ipv6_metric, + { "Metric", "isis.lsp.avaya.ipvpn.ipv6.metric", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_ipvpn_ipv6_prefixlen, + { "Prefix length", "isis.lsp.avaya.ipvpn.ipv6.prefixlen", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_ipvpn_ipv6_prefix, + { "Prefix", "isis.lsp.avaya.ipvpn.ipv6.prefix", + FT_IPv6, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_185_unknown, + { "Unknown", "isis.lsp.avaya.185.unknown", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_isis_lsp_avaya_186_unknown, + { "Unknown", "isis.lsp.avaya.186.unknown", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, }; static gint *ett[] = { &ett_isis_lsp, @@ -5932,7 +6195,7 @@ proto_register_isis_lsp(void) &ett_isis_lsp_clv_prefix_neighbors, &ett_isis_lsp_clv_authentication, &ett_isis_lsp_clv_ip_authentication, - &ett_isis_lsp_clv_nlpid, + &ett_isis_lsp_clv_nlpid_nlpid, &ett_isis_lsp_clv_hostname, &ett_isis_lsp_clv_srlg, &ett_isis_lsp_clv_ipv4_int_addr, @@ -5988,7 +6251,12 @@ proto_register_isis_lsp(void) &ett_isis_lsp_sl_flags, &ett_isis_lsp_sl_sub_tlv, &ett_isis_lsp_sl_sub_tlv_flags, - &ett_isis_lsp_clv_ipv6_te_router_id /* CLV 140, rfc6119 */ + &ett_isis_lsp_clv_ipv6_te_router_id, /* CLV 140, rfc6119 */ + &ett_isis_lsp_clv_avaya_mac, /* Avaya/Extremenetworks proprietary */ + &ett_isis_lsp_clv_avaya_ipvpn, + &ett_isis_lsp_clv_avaya_ipvpn_subtlv, + &ett_isis_lsp_clv_avaya_ipvpn_mc, + &ett_isis_lsp_clv_avaya_ip_grt_mc }; static ei_register_info ei[] = { @@ -5999,9 +6267,11 @@ proto_register_isis_lsp(void) { &ei_isis_lsp_authentication, { "isis.lsp.authentication.unknown", PI_PROTOCOL, PI_WARN, "Unknown authentication type", EXPFILL }}, { &ei_isis_lsp_short_clv, { "isis.lsp.short_clv", PI_MALFORMED, PI_ERROR, "Short CLV", EXPFILL }}, { &ei_isis_lsp_long_clv, { "isis.lsp.long_clv", PI_MALFORMED, PI_ERROR, "Long CLV", EXPFILL }}, + { &ei_isis_lsp_length_clv, { "isis.lsp.length_clv", PI_MALFORMED, PI_ERROR, "Wrong length CLV", EXPFILL }}, { &ei_isis_lsp_clv_mt, { "isis.lsp.clv_mt.malformed", PI_MALFORMED, PI_ERROR, "malformed MT-ID", EXPFILL }}, { &ei_isis_lsp_clv_unknown, { "isis.lsp.clv.unknown", PI_UNDECODED, PI_NOTE, "Unknown option", EXPFILL }}, { &ei_isis_lsp_malformed_subtlv, { "isis.lsp.subtlv.malformed", PI_MALFORMED, PI_ERROR, "malformed SubTLV", EXPFILL }}, + { &ei_isis_lsp_unknown_subtlv, { "isis.lsp.subtlv.unknown", PI_UNDECODED, PI_NOTE, "Unknown SubTLV", EXPFILL }}, { &ei_isis_lsp_reserved_not_zero, { "isis.lsp.reserved_not_zero", PI_PROTOCOL, PI_WARN, "Reserve bit not 0", EXPFILL }}, { &ei_isis_lsp_length_invalid, { "isis.lsp.length.invalid", PI_PROTOCOL, PI_WARN, "Invalid length", EXPFILL }}, }; diff --git a/epan/dissectors/packet-osi.c b/epan/dissectors/packet-osi.c index af847b9bdf..f2a4d10865 100644 --- a/epan/dissectors/packet-osi.c +++ b/epan/dissectors/packet-osi.c @@ -403,6 +403,7 @@ const value_string nlpid_vals[] = { { NLPID_ISO9542_ESIS, "ESIS" }, { NLPID_ISO10589_ISIS, "ISIS" }, { NLPID_ISO10747_IDRP, "IDRP" }, + { NLPID_AVAYA_MAC, "Avaya MAC" }, { NLPID_ISO9542X25_ESIS, "ESIS (X.25)" }, { NLPID_ISO10030, "ISO 10030" }, { NLPID_ISO11577, "ISO 11577" }, diff --git a/epan/nlpid.h b/epan/nlpid.h index 7f580a00e6..c5109a306c 100644 --- a/epan/nlpid.h +++ b/epan/nlpid.h @@ -29,11 +29,12 @@ #define NLPID_ISO8473_CLNP 0x81 /* X.233 */ #define NLPID_ISO9542_ESIS 0x82 #define NLPID_ISO10589_ISIS 0x83 -#define NLPID_ISO10747_IDRP 0x85 +#define NLPID_ISO10747_IDRP 0x85 #define NLPID_ISO9542X25_ESIS 0x8a #define NLPID_ISO10030 0x8c #define NLPID_ISO11577 0x8d /* X.273 */ #define NLPID_IP6 0x8e +#define NLPID_AVAYA_MAC 0x8f #define NLPID_COMPRESSED 0xb0 /* "Data compression protocol" */ #define NLPID_TRILL 0xc0 #define NLPID_SNDCF 0xc1 /* "SubNetwork Dependent Convergence Function */