diff options
author | Yann Lejeune <ylejeune@netyl.org> | 2014-12-10 23:15:07 +0100 |
---|---|---|
committer | Alexis La Goutte <alexis.lagoutte@gmail.com> | 2014-12-11 13:55:22 +0000 |
commit | 0ef1aef2dfebae71aee2563e5b1bbedd5e42ea63 (patch) | |
tree | bcfdb429376873fc750902d93494d2d375e1132d /epan/dissectors/packet-bgp.c | |
parent | 9036f093359a44e2ef845bec6be858228436957b (diff) | |
download | wireshark-0ef1aef2dfebae71aee2563e5b1bbedd5e42ea63.tar.gz |
BGP: add support of RFC6368 - Internal BGP as the Provider/Customer Edge
Protocol for BGP/MPLS IP Virtual Private Networks (VPNs).
Bug: 10762
Change-Id: Ifbe2af639ee5a2d96ec3546708060cadcc349df2
Reviewed-on: https://code.wireshark.org/review/5664
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-bgp.c')
-rw-r--r-- | epan/dissectors/packet-bgp.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/epan/dissectors/packet-bgp.c b/epan/dissectors/packet-bgp.c index e748d0e2e9..c6548a8826 100644 --- a/epan/dissectors/packet-bgp.c +++ b/epan/dissectors/packet-bgp.c @@ -35,6 +35,8 @@ * RFC5512 BGP Encapsulation SAFI and the BGP Tunnel Encapsulation Attribute * RFC5575 Dissemination of flow specification rules * RFC5640 Load-Balancing for Mesh Softwires + * RFC6368 Internal BGP as the Provider/Customer Edge Protocol for + BGP/MPLS IP Virtual Private Networks (VPNs) * RFC6608 Subcodes for BGP Finite State Machine Error * RFC6793 BGP Support for Four-Octet Autonomous System (AS) Number Space * draft-ietf-idr-dynamic-cap @@ -198,6 +200,7 @@ void proto_reg_handoff_bgp(void); #define BGPTYPE_TUNNEL_ENCAPS_ATTR 23 /* RFC5512 */ #define BGPTYPE_AIGP 26 /* draft-ietf-idr-aigp-18 */ #define BGPTYPE_LINK_STATE_ATTR 99 /* FIXME: draft-ietf-idr-ls-distribution-03 temp. value no IANA assignee yet */ +#define BGPTYPE_ATTR_SET 128 /* RFC6368 */ /*EVPN Route Types */ #define EVPN_AD_ROUTE 1 @@ -713,6 +716,7 @@ static const value_string bgpattr_type[] = { { BGPTYPE_PMSI_TUNNEL_ATTR, "PMSI_TUNNEL_ATTRIBUTE" }, { BGPTYPE_AIGP, "AIGP"}, { BGPTYPE_LINK_STATE_ATTR, "LINK_STATE" }, + { BGPTYPE_ATTR_SET, "ATTR_SET" }, { 0, NULL } }; @@ -1227,6 +1231,7 @@ static int hf_bgp_update_path_attribute_cluster_list = -1; static int hf_bgp_update_path_attribute_cluster_id = -1; static int hf_bgp_update_path_attribute_originator_id = -1; static int hf_bgp_update_path_attribute_local_pref = -1; +static int hf_bgp_update_path_attribute_attrset_origin_as = -1; static int hf_bgp_update_path_attribute_multi_exit_disc = -1; static int hf_bgp_update_path_attribute_aggregator_as = -1; static int hf_bgp_update_path_attribute_aggregator_origin = -1; @@ -5546,6 +5551,7 @@ dissect_bgp_path_attr(proto_tree *subtree, tvbuff_t *tvb, guint16 path_attr_len, proto_tree *subtree4; /* subtree for attributes */ proto_tree *subtree5; /* subtree for attributes */ proto_tree *subtree6; /* subtree for attributes */ + proto_tree *attr_set_subtree; /* subtree for attr_set */ proto_tree *as_path_segment_tree; /* subtree for AS_PATH segments */ gint number_as_segment=0; /* Number As segment */ proto_tree *communities_tree; /* subtree for COMMUNITIES */ @@ -6211,6 +6217,22 @@ dissect_bgp_path_attr(proto_tree *subtree, tvbuff_t *tvb, guint16 path_attr_len, case BGPTYPE_PMSI_TUNNEL_ATTR: dissect_bgp_update_pmsi_attr(pinfo, subtree2, tvb, tlen, o+i+aoff); break; + + case BGPTYPE_ATTR_SET: + if (alen >= 4) { + proto_tree_add_item(subtree2, hf_bgp_update_path_attribute_attrset_origin_as, tvb, + o + i + aoff, 4, ENC_BIG_ENDIAN); + if (alen > 4) { + ti = proto_tree_add_item(subtree2, hf_bgp_update_path_attributes, tvb, o+i+aoff+4, alen-4, ENC_NA); + attr_set_subtree = proto_item_add_subtree(ti, ett_bgp_attrs); + dissect_bgp_path_attr(attr_set_subtree, tvb, alen-4, o+i+aoff+4, pinfo); + } + } else { + proto_tree_add_expert_format(subtree2, pinfo, &ei_bgp_length_invalid, tvb, o + i + aoff, alen, + "Attribute set (invalid): %u bytes%s", + alen, plurality(alen, "", "s")); + } + break; default: proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, "Unknown (%u byte%s)", tlen, plurality(tlen, "", "s")); @@ -7045,6 +7067,9 @@ proto_register_bgp(void) { &hf_bgp_update_path_attribute_local_pref, { "Local preference", "bgp.update.path_attribute.local_pref", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}}, + { &hf_bgp_update_path_attribute_attrset_origin_as, + { "Origin AS", "bgp.update.path_attribute.attr_set.origin_as", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL}}, { &hf_bgp_update_path_attribute_multi_exit_disc, { "Multiple exit discriminator", "bgp.update.path_attribute.multi_exit_disc", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}}, |