diff options
author | Michael Mann <mmann78@netscape.net> | 2014-12-06 15:39:26 -0500 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2014-12-10 08:50:27 +0000 |
commit | e050ad27a4a7b330bf7c4cb223958b0e9f656deb (patch) | |
tree | 75437d1b2c7f93f1bf52eb20e05ab6604ee48995 /epan/dissectors/packet-bgp.c | |
parent | d4476b1c4e8d1f8a27dac6acbe5de14e4fd647a7 (diff) | |
download | wireshark-e050ad27a4a7b330bf7c4cb223958b0e9f656deb.tar.gz |
Eliminate some proto_tree_add_text in packet-bgp.c
Change-Id: I05fabe9786125e2167fe4010733f61000d0e7914
Reviewed-on: https://code.wireshark.org/review/5670
Reviewed-by: Michael Mann <mmann78@netscape.net>
Reviewed-by: Matthieu Texier <matthieu@texier.tv>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-bgp.c')
-rw-r--r-- | epan/dissectors/packet-bgp.c | 169 |
1 files changed, 67 insertions, 102 deletions
diff --git a/epan/dissectors/packet-bgp.c b/epan/dissectors/packet-bgp.c index 10fc78ab1a..67be759ac6 100644 --- a/epan/dissectors/packet-bgp.c +++ b/epan/dissectors/packet-bgp.c @@ -1120,6 +1120,7 @@ static int proto_bgp = -1; static int hf_bgp_marker = -1; static int hf_bgp_length = -1; static int hf_bgp_prefix_length = -1; +static int hf_bgp_label_stack = -1; static int hf_bgp_type = -1; /* BGP open message header filed */ @@ -1164,6 +1165,7 @@ static int hf_bgp_route_refresh_orf_entry_match = -1; static int hf_bgp_route_refresh_orf_entry_sequence = -1; static int hf_bgp_route_refresh_orf_entry_prefixmask_lower = -1; static int hf_bgp_route_refresh_orf_entry_prefixmask_upper = -1; +static int hf_bgp_route_refresh_orf_entry_ip = -1; /* BGP capabilities header field */ @@ -1306,6 +1308,8 @@ static int hf_bgp_update_nlri = -1; static int hf_bgp_mp_reach_nlri_ipv4_prefix = -1; static int hf_bgp_mp_unreach_nlri_ipv4_prefix = -1; +static int hf_bgp_mp_reach_nlri_ipv6_prefix = -1; +static int hf_bgp_mp_unreach_nlri_ipv6_prefix = -1; static int hf_bgp_mp_nlri_tnl_id = -1; static int hf_bgp_withdrawn_prefix = -1; static int hf_bgp_nlri_prefix = -1; @@ -1631,6 +1635,7 @@ static expert_field ei_bgp_prefix_length_err = EI_INIT; static expert_field ei_bgp_attr_aigp_type = EI_INIT; static expert_field ei_bgp_attr_as_path_as_len_err = EI_INIT; +static expert_field ei_bgp_evpn_nlri_rt4_no_ip = EI_INIT; static expert_field ei_bgp_evpn_nlri_rt4_len_err = EI_INIT; static expert_field ei_bgp_evpn_nlri_rt_type_err = EI_INIT; /* desegmentation */ @@ -1720,22 +1725,12 @@ decode_path_prefix4(proto_tree *tree, packet_info *pinfo, int hf_path_id, int hf prefix_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 + 1 + length, ett_bgp_prefix, NULL, "%s/%u PathId %u ", ip_to_str(ip_addr.addr_bytes), plen, path_identifier); - if (hf_path_id != -1) { - proto_tree_add_uint(prefix_tree, hf_path_id, tvb, offset, 4, + proto_tree_add_uint(prefix_tree, hf_path_id, tvb, offset, 4, path_identifier); - } else { - proto_tree_add_text(prefix_tree, tvb, offset, 4, - "%s Path Id: %u", tag, path_identifier); - } proto_tree_add_uint_format(prefix_tree, hf_bgp_prefix_length, tvb, offset + 4, 1, plen, "%s prefix length: %u", tag, plen); - if (hf_addr != -1) { - proto_tree_add_ipv4(prefix_tree, hf_addr, tvb, offset + 4 + 1, length, + proto_tree_add_ipv4(prefix_tree, hf_addr, tvb, offset + 4 + 1, length, ip_addr.addr); - } else { - proto_tree_add_text(prefix_tree, tvb, offset + 4 + 1, length, - "%s prefix: %s", tag, ip_to_str(ip_addr.addr_bytes)); - } return(4 + 1 + length); } @@ -1774,13 +1769,8 @@ decode_prefix4(proto_tree *tree, packet_info *pinfo, proto_item *parent_item, in proto_tree_add_uint_format(prefix_tree, hf_bgp_prefix_length, tvb, offset, 1, plen, "%s prefix length: %u", tag, plen); - if (hf_addr != -1) { - proto_tree_add_ipv4(prefix_tree, hf_addr, tvb, offset + 1, length, + proto_tree_add_ipv4(prefix_tree, hf_addr, tvb, offset + 1, length, ip_addr.addr); - } else { - proto_tree_add_text(prefix_tree, tvb, offset + 1, length, - "%s prefix: %s", tag, ip_to_str(ip_addr.addr_bytes)); - } return(1 + length); } @@ -1811,13 +1801,8 @@ decode_prefix6(proto_tree *tree, packet_info *pinfo, int hf_addr, tvbuff_t *tvb, ip6_to_str(&addr), plen); proto_tree_add_uint_format(prefix_tree, hf_bgp_prefix_length, tvb, offset, 1, plen, "%s prefix length: %u", tag, plen); - if (hf_addr != -1) { - proto_tree_add_ipv6(prefix_tree, hf_addr, tvb, offset + 1, length, + proto_tree_add_ipv6(prefix_tree, hf_addr, tvb, offset + 1, length, addr.bytes); - } else { - proto_tree_add_text(prefix_tree, tvb, offset + 1, length, - "%s prefix: %s", tag, ip6_to_str(&addr)); - } return(1 + length); } @@ -2361,8 +2346,6 @@ decode_flowspec_nlri(proto_tree *tree, tvbuff_t *tvb, gint offset, guint16 afi, filter_len = decode_bgp_nlri_op_fflag_value(filter_tree, filter_item, tvb, offset+cursor_fspec); break; default: - proto_tree_add_text(filter_tree, tvb, offset+cursor_fspec,1, - "NLRI Type unknown (%u)",tvb_get_guint8(tvb,offset+cursor_fspec)); return -1; } if (filter_len>0) @@ -3708,9 +3691,8 @@ static int decode_evpn_nlri(proto_tree *tree, tvbuff_t *tvb, gint offset, packet stack_strbuf = wmem_strbuf_new_label(wmem_packet_scope()); labnum = decode_MPLS_stack(tvb, offset + 24, stack_strbuf); - item = proto_tree_add_item(prefix_tree, hf_bgp_evpn_nlri_mpls_ls, tvb, start_offset+24, - labnum*3, ENC_NA); - proto_item_set_text(item, "MPLS Label Stack: %s", wmem_strbuf_get_str(stack_strbuf)); + proto_tree_add_string(prefix_tree, hf_bgp_evpn_nlri_mpls_ls, tvb, start_offset+24, + labnum*3, wmem_strbuf_get_str(stack_strbuf)); /*Add 2 for Route Type and Length fields*/ total_length = 25 + 2; @@ -3769,8 +3751,7 @@ static int decode_evpn_nlri(proto_tree *tree, tvbuff_t *tvb, gint offset, packet total_length += 16; } else if (ip_len == 0) { /*IP not included*/ - proto_tree_add_text(prefix_tree, tvb, start_offset+32, 1, - "IP Address: NOT INCLUDED"); + proto_tree_add_expert(prefix_tree, pinfo, &ei_bgp_evpn_nlri_rt4_no_ip, tvb, start_offset+32, 1); } else { return -1; } @@ -3778,9 +3759,8 @@ static int decode_evpn_nlri(proto_tree *tree, tvbuff_t *tvb, gint offset, packet stack_strbuf = wmem_strbuf_new_label(wmem_packet_scope()); labnum = decode_MPLS_stack(tvb, offset + total_length + 1, stack_strbuf); - item = proto_tree_add_item(prefix_tree, hf_bgp_evpn_nlri_mpls_ls, tvb, start_offset+total_length+1, - labnum*3, ENC_NA); - proto_item_set_text(item, "MPLS Label Stack: %s", wmem_strbuf_get_str(stack_strbuf)); + proto_tree_add_string(prefix_tree, hf_bgp_evpn_nlri_mpls_ls, tvb, start_offset+total_length+1, + labnum*3, wmem_strbuf_get_str(stack_strbuf)); total_length = total_length + 4; break; @@ -3820,8 +3800,7 @@ static int decode_evpn_nlri(proto_tree *tree, tvbuff_t *tvb, gint offset, packet total_length += 16; } else if (ip_len == 0) { /*IP not included*/ - proto_tree_add_text(prefix_tree, tvb, start_offset, 1, - "IP Address: NOT INCLUDED"); + proto_tree_add_expert(prefix_tree, pinfo, &ei_bgp_evpn_nlri_rt4_no_ip, tvb, start_offset, 1); } else { expert_add_info_format(pinfo, prefix_tree, &ei_bgp_evpn_nlri_rt4_len_err, "Invalid length of IP Address (%u) in EVPN NLRI Route Type 3 (Iclusive Multicast Tree Route)!", ip_len); @@ -3863,8 +3842,7 @@ static int decode_evpn_nlri(proto_tree *tree, tvbuff_t *tvb, gint offset, packet total_length += 16; } else if (ip_len == 0) { /*IP not included*/ - proto_tree_add_text(prefix_tree, tvb, start_offset, 1, - "IP Address: NOT INCLUDED"); + proto_tree_add_expert(prefix_tree, pinfo, &ei_bgp_evpn_nlri_rt4_no_ip, tvb, start_offset, 1); } else { expert_add_info_format(pinfo, prefix_tree, &ei_bgp_evpn_nlri_rt4_len_err, "Invalid length of IP Address (%u) in EVPN NLRI Route Type 4 (Ethernet Segment Route)!", ip_len); @@ -3958,16 +3936,10 @@ decode_prefix_MP(proto_tree *tree, int hf_addr4, int hf_addr6, ip_to_str(ip4addr.addr_bytes), plen); proto_tree_add_uint_format(prefix_tree, hf_bgp_prefix_length, tvb, start_offset, 1, plen + labnum * 3 * 8, "%s Prefix length: %u", tag, plen + labnum * 3 * 8); - proto_tree_add_text(prefix_tree, tvb, start_offset + 1, 3 * labnum, "%s Label Stack: %s", - tag, wmem_strbuf_get_str(stack_strbuf)); - if (hf_addr4 != -1) { - proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, offset, + proto_tree_add_string_format(prefix_tree, hf_bgp_label_stack, tvb, start_offset + 1, 3 * labnum, wmem_strbuf_get_str(stack_strbuf), + "%s Label Stack: %s", tag, wmem_strbuf_get_str(stack_strbuf)); + proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, offset, length, ip4addr.addr); - } else { - proto_tree_add_text(prefix_tree, tvb, offset, length, - "%s IPv4 prefix: %s", - tag, ip_to_str(ip4addr.addr_bytes)); - } total_length = (1 + labnum*3) + length; break; case SAFNUM_MCAST_VPN: @@ -4079,14 +4051,8 @@ decode_prefix_MP(proto_tree *tree, int hf_addr4, int hf_addr6, tag, plen + 16); proto_tree_add_item(prefix_tree, hf_bgp_mp_nlri_tnl_id, tvb, start_offset + 1, 2, ENC_BIG_ENDIAN); - if (hf_addr4 != -1) { - proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, offset, + proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, offset, length, ip4addr.addr); - } else { - proto_tree_add_text(prefix_tree, tvb, offset, length, - "%s IPv4 prefix: %s", - tag, ip_to_str(ip4addr.addr_bytes)); - } total_length = 1 + 2 + length; /* length field + Tunnel Id + IPv4 len */ break; @@ -4137,19 +4103,13 @@ decode_prefix_MP(proto_tree *tree, int hf_addr4, int hf_addr6, proto_tree_add_uint_format(prefix_tree, hf_bgp_prefix_length, tvb, start_offset, 1, plen + labnum * 3 * 8 + 8 * 8, "%s Prefix length: %u", tag, plen + labnum * 3 * 8 + 8 * 8); - proto_tree_add_text(prefix_tree, tvb, start_offset + 1, 3 * labnum, - "%s Label Stack: %s", tag, wmem_strbuf_get_str(stack_strbuf)); + proto_tree_add_string_format(prefix_tree, hf_bgp_label_stack, tvb, start_offset + 1, 3 * labnum, + wmem_strbuf_get_str(stack_strbuf), "%s Label Stack: %s", tag, wmem_strbuf_get_str(stack_strbuf)); proto_tree_add_text(prefix_tree, tvb, start_offset + 1 + 3 * labnum, 8, "%s Route Distinguisher: %u:%u", tag, tvb_get_ntohs(tvb, offset + 2), tvb_get_ntohl(tvb, offset + 4)); - if (hf_addr4 != -1) { - proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, + proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, offset + 8, length, ip4addr.addr); - } else { - proto_tree_add_text(prefix_tree, tvb, offset + 8, - length, "%s IPv4 prefix: %s", tag, - ip_to_str(ip4addr.addr_bytes)); - } total_length = (1 + labnum * 3 + 8) + length; break; @@ -4176,19 +4136,13 @@ decode_prefix_MP(proto_tree *tree, int hf_addr4, int hf_addr6, proto_tree_add_uint_format(prefix_tree, hf_bgp_prefix_length, tvb, start_offset, 1, plen + labnum * 3 * 8 + 8 * 8, "%s Prefix length: %u", tag, plen + labnum * 3 * 8 + 8 * 8); - proto_tree_add_text(prefix_tree, tvb, start_offset + 1, 3 * labnum, - "%s Label Stack: %s", tag, wmem_strbuf_get_str(stack_strbuf)); + proto_tree_add_string_format(prefix_tree, hf_bgp_label_stack, tvb, start_offset + 1, 3 * labnum, + wmem_strbuf_get_str(stack_strbuf), "%s Label Stack: %s", tag, wmem_strbuf_get_str(stack_strbuf)); proto_tree_add_text(prefix_tree, tvb, start_offset + 1 + 3 * labnum, 8, "%s Route Distinguisher: %s:%u", tag, ip_to_str(ip4addr.addr_bytes), tvb_get_ntohs(tvb, offset + 6)); - if (hf_addr4 != -1) { - proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, + proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, offset + 8, length, ip4addr2.addr); - } else { - proto_tree_add_text(prefix_tree, tvb, offset + 8, - length, "%s IPv4 prefix: %s", tag, - ip_to_str(ip4addr2.addr_bytes)); - } total_length = (1 + labnum * 3 + 8) + length; break; @@ -4213,19 +4167,13 @@ decode_prefix_MP(proto_tree *tree, int hf_addr4, int hf_addr6, proto_tree_add_uint_format(prefix_tree, hf_bgp_prefix_length, tvb, start_offset, 1, plen + labnum * 3 * 8 + 8 * 8, "%s Prefix length: %u", tag, plen + labnum * 3 * 8 + 8 * 8); - proto_tree_add_text(prefix_tree, tvb, start_offset + 1, 3 * labnum, - "%s Label Stack: %s", tag, wmem_strbuf_get_str(stack_strbuf)); + proto_tree_add_string_format(prefix_tree, hf_bgp_label_stack, tvb, start_offset + 1, 3 * labnum, + wmem_strbuf_get_str(stack_strbuf), "%s Label Stack: %s", tag, wmem_strbuf_get_str(stack_strbuf)); proto_tree_add_text(prefix_tree, tvb, start_offset + 1 + 3 * labnum, 8, "%s Route Distinguisher: %u.%u:%u", tag, tvb_get_ntohs(tvb, offset + 2), tvb_get_ntohs(tvb, offset + 4), tvb_get_ntohs(tvb, offset + 6)); - if (hf_addr4 != -1) { - proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, + proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, offset + 8, length, ip4addr.addr); - } else { - proto_tree_add_text(prefix_tree, tvb, offset + 8, - length, "%s IPv4 prefix: %s", tag, - ip_to_str(ip4addr.addr_bytes)); - } total_length = (1 + labnum * 3 + 8) + length; break; @@ -4283,9 +4231,10 @@ decode_prefix_MP(proto_tree *tree, int hf_addr4, int hf_addr6, return -1; } - proto_tree_add_text(tree, tvb, start_offset, + /* XXX - break off IPv6 into its own field */ + proto_tree_add_string_format(tree, hf_bgp_label_stack, tvb, start_offset, (offset + length) - start_offset, - "Label Stack=%s, IPv6=%s/%u", + wmem_strbuf_get_str(stack_strbuf), "Label Stack=%s, IPv6=%s/%u", wmem_strbuf_get_str(stack_strbuf), ip6_to_str(&ip6addr), plen); total_length = (1 + labnum * 3) + length; @@ -4368,9 +4317,10 @@ decode_prefix_MP(proto_tree *tree, int hf_addr4, int hf_addr6, return -1; } - proto_tree_add_text(tree, tvb, start_offset, + /* XXX - break up into multiple fields */ + proto_tree_add_string_format(tree, hf_bgp_label_stack, tvb, start_offset, (offset + 8 + length) - start_offset, - "Label Stack=%s RD=%u:%u, IPv6=%s/%u", + wmem_strbuf_get_str(stack_strbuf), "Label Stack=%s RD=%u:%u, IPv6=%s/%u", wmem_strbuf_get_str(stack_strbuf), tvb_get_ntohs(tvb, offset + 2), tvb_get_ntohl(tvb, offset + 4), @@ -4389,9 +4339,10 @@ decode_prefix_MP(proto_tree *tree, int hf_addr4, int hf_addr6, return -1; } - proto_tree_add_text(tree, tvb, start_offset, + /* XXX - break up into multiple fields */ + proto_tree_add_string_format(tree, hf_bgp_label_stack, tvb, start_offset, (offset + 8 + length) - start_offset, - "Label Stack=%s RD=%s:%u, IPv6=%s/%u", + wmem_strbuf_get_str(stack_strbuf), "Label Stack=%s RD=%s:%u, IPv6=%s/%u", wmem_strbuf_get_str(stack_strbuf), ip_to_str(ip4addr.addr_bytes), tvb_get_ntohs(tvb, offset + 6), @@ -4408,7 +4359,8 @@ decode_prefix_MP(proto_tree *tree, int hf_addr4, int hf_addr6, return -1; } - proto_tree_add_text(tree, tvb, start_offset, + /* XXX - break up into multiple fields */ + proto_tree_add_string_format(tree, hf_bgp_label_stack, tvb, start_offset, (offset + 8 + length) - start_offset, "Label Stack=%s RD=%u.%u:%u, IPv6=%s/%u", wmem_strbuf_get_str(stack_strbuf), @@ -5716,7 +5668,7 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo) switch (bgpa_type) { case BGPTYPE_ORIGIN: if (tlen != 1) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + proto_tree_add_expert_format(subtree2, pinfo, &ei_bgp_length_invalid, tvb, o + i + aoff, tlen, "Origin (invalid): %u byte%s", tlen, plurality(tlen, "", "s")); } else { @@ -5827,7 +5779,7 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo) break; case BGPTYPE_NEXT_HOP: if (tlen != 4) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + proto_tree_add_expert_format(subtree2, pinfo, &ei_bgp_length_invalid, tvb, o + i + aoff, tlen, "Next hop (invalid): %u byte%s", tlen, plurality(tlen, "", "s")); } else { @@ -5838,7 +5790,7 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo) break; case BGPTYPE_MULTI_EXIT_DISC: if (tlen != 4) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + proto_tree_add_expert_format(subtree2, pinfo, &ei_bgp_length_invalid, tvb, o + i + aoff, tlen, "Multiple exit discriminator (invalid): %u byte%s", tlen, plurality(tlen, "", "s")); } else { @@ -5849,7 +5801,7 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo) break; case BGPTYPE_LOCAL_PREF: if (tlen != 4) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + proto_tree_add_expert_format(subtree2, pinfo, &ei_bgp_length_invalid, tvb, o + i + aoff, tlen, "Local preference (invalid): %u byte%s", tlen, plurality(tlen, "", "s")); } else { @@ -5860,21 +5812,21 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo) break; case BGPTYPE_ATOMIC_AGGREGATE: if (tlen != 0) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + proto_tree_add_expert_format(subtree2, pinfo, &ei_bgp_length_invalid, tvb, o + i + aoff, tlen, "Atomic aggregate (invalid): %u byte%s", tlen, plurality(tlen, "", "s")); } break; case BGPTYPE_AGGREGATOR: if (tlen != 6 && tlen != 8) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + proto_tree_add_expert_format(subtree2, pinfo, &ei_bgp_length_invalid, tvb, o + i + aoff, tlen, "Aggregator (invalid): %u byte%s", tlen, plurality(tlen, "", "s")); break; } case BGPTYPE_AS4_AGGREGATOR: if (bgpa_type == BGPTYPE_AS4_AGGREGATOR && tlen != 8) - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + proto_tree_add_expert_format(subtree2, pinfo, &ei_bgp_length_invalid, tvb, o + i + aoff, tlen, "Aggregator (invalid): %u byte%s", tlen, plurality(tlen, "", "s")); else { @@ -5893,7 +5845,7 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo) break; case BGPTYPE_COMMUNITIES: if (tlen % 4 != 0) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + proto_tree_add_expert_format(subtree2, pinfo, &ei_bgp_length_invalid, tvb, o + i + aoff, tlen, "Communities (invalid): %u byte%s", tlen, plurality(tlen, "", "s")); break; @@ -5947,7 +5899,7 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo) break; case BGPTYPE_ORIGINATOR_ID: if (tlen != 4) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + proto_tree_add_expert_format(subtree2, pinfo, &ei_bgp_length_invalid, tvb, o + i + aoff, tlen, "Originator identifier (invalid): %u byte%s", tlen, plurality(tlen, "", "s")); } else { @@ -6054,7 +6006,7 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo) while (tlen > 0) { advance = decode_prefix_MP(subtree3, hf_bgp_mp_reach_nlri_ipv4_prefix, - -1, + hf_bgp_mp_reach_nlri_ipv6_prefix, af, saf, tvb, o + i + aoff, "MP Reach NLRI", pinfo); if (advance < 0) @@ -6088,7 +6040,7 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo) while (tlen > 0) { advance = decode_prefix_MP(subtree3, hf_bgp_mp_unreach_nlri_ipv4_prefix, - -1, + hf_bgp_mp_unreach_nlri_ipv6_prefix, af, saf, tvb, o + i + aoff, "MP Unreach NLRI", pinfo); if (advance < 0) @@ -6101,7 +6053,7 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo) break; case BGPTYPE_CLUSTER_LIST: if (tlen % 4 != 0) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + proto_tree_add_expert_format(subtree2, pinfo, &ei_bgp_length_invalid, tvb, o + i + aoff, tlen, "Cluster list (invalid): %u byte%s", tlen, plurality(tlen, "", "s")); break; @@ -6179,7 +6131,7 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo) proto_tree_add_item(subtree3, hf_bgp_ssa_l2tpv3_cookie_len, tvb, q + 7, 1, ENC_BIG_ENDIAN); } else { - proto_tree_add_text(subtree3, tvb, q + 7, 1, + proto_tree_add_expert_format(subtree3, pinfo, &ei_bgp_length_invalid, tvb, q + 7, 1, "Invalid Cookie Length of %u", ssa_v3_len); q += ssa_len + 4; /* 4 from type and length */ break; @@ -6506,7 +6458,7 @@ example 2 proto_tree_add_item(subtree1, hf_bgp_route_refresh_orf_entry_prefixmask_upper, tvb, p, 1, ENC_BIG_ENDIAN); p++; - advance = decode_prefix4(subtree1, pinfo, NULL, -1, tvb, p, 0, "ORF"); + advance = decode_prefix4(subtree1, pinfo, NULL, hf_bgp_route_refresh_orf_entry_ip, tvb, p, 0, "ORF"); if (advance < 0) break; entrylen = 7 + 1 + advance; @@ -6830,6 +6782,9 @@ proto_register_bgp(void) { &hf_bgp_prefix_length, { "Prefix Length", "bgp.prefix_length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, + { &hf_bgp_label_stack, + { "Label Stack", "bgp.label_stack", FT_STRING, BASE_NONE, + NULL, 0x0, NULL, HFILL }}, { &hf_bgp_type, { "Type", "bgp.type", FT_UINT8, BASE_DEC, VALS(bgptypevals), 0x0, "BGP message type", HFILL }}, @@ -6939,6 +6894,9 @@ proto_register_bgp(void) { &hf_bgp_route_refresh_orf_entry_prefixmask_upper, { "ORFEntry PrefixMask length upper bound", "bgp.route_refresh.orf.entry.prefixmask_upper", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, + { &hf_bgp_route_refresh_orf_entry_ip, + { "ORFEntry IP address", "bgp.route_refresh.orf.entry.ip", FT_UINT8, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, /* Capability */ { &hf_bgp_cap, @@ -7278,6 +7236,12 @@ proto_register_bgp(void) { &hf_bgp_mp_unreach_nlri_ipv4_prefix, { "MP Unreach NLRI IPv4 prefix", "bgp.mp_unreach_nlri_ipv4_prefix", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL}}, + { &hf_bgp_mp_reach_nlri_ipv6_prefix, + { "MP Reach NLRI IPv6 prefix", "bgp.mp_reach_nlri_ipv6_prefix", FT_IPv6, BASE_NONE, + NULL, 0x0, NULL, HFILL}}, + { &hf_bgp_mp_unreach_nlri_ipv6_prefix, + { "MP Unreach NLRI IPv6 prefix", "bgp.mp_unreach_nlri_ipv6_prefix", FT_IPv6, BASE_NONE, + NULL, 0x0, NULL, HFILL}}, { &hf_bgp_mp_nlri_tnl_id, { "MP Reach NLRI Tunnel Identifier", "bgp.mp_nlri_tnl_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}}, @@ -8052,6 +8016,7 @@ proto_register_bgp(void) { &ei_bgp_ext_com_len_bad, { "bgp.ext_com.length.bad", PI_PROTOCOL, PI_ERROR, "Extended community length is wrong", EXPFILL }}, { &ei_bgp_evpn_nlri_rt4_len_err, { "bgp.evpn.len", PI_MALFORMED, PI_ERROR, "Length is invalid", EXPFILL }}, { &ei_bgp_evpn_nlri_rt_type_err, { "bgp.evpn.type", PI_MALFORMED, PI_ERROR, "EVPN Route Type is invalid", EXPFILL }}, + { &ei_bgp_evpn_nlri_rt4_no_ip, { "bgp.evpn.no_ip", PI_PROTOCOL, PI_NOTE, "IP Address: NOT INCLUDED", EXPFILL }}, { &ei_bgp_attr_pmsi_tunnel_type, { "bgp.attr.pmsi.tunnel_type", PI_PROTOCOL, PI_ERROR, "Unknown Tunnel type", EXPFILL }}, { &ei_bgp_attr_pmsi_opaque_type, { "bgp.attr.pmsi.opaque_type", PI_PROTOCOL, PI_ERROR, "Unvalid pmsi opaque type", EXPFILL }}, { &ei_bgp_attr_aigp_type, {"bgp.attr.aigp.type", PI_MALFORMED, PI_NOTE, "Unknown AIGP attribute type", EXPFILL}}, |