From ac73d8fbb6860ae1d60c3cd333d351aecbb7e4fc Mon Sep 17 00:00:00 2001 From: Lou Berger Date: Mon, 6 Feb 2017 21:29:43 -0500 Subject: [PATCH] bgpd rfapi: advertise encap attribute when TT is valid and not MPLS. Ensure tunnel type set based on rx'ed Ignore bad/mpls encap types. Signed-off-by: Lou Berger --- bgpd/bgp_attr.c | 16 ++++++++-------- bgpd/rfapi/vnc_import_bgp.c | 3 ++- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c index f4995faab0..7dc42e719f 100644 --- a/bgpd/bgp_attr.c +++ b/bgpd/bgp_attr.c @@ -2241,8 +2241,10 @@ bgp_attr_encap( stlv_last = tlv; } - if (attre && (BGP_ATTR_ENCAP == type)) { - attre->encap_tunneltype = tunneltype; + if (BGP_ATTR_ENCAP == type) { + if (!attre) + attre = bgp_attr_extra_get(attr); + attre->encap_tunneltype = tunneltype; } if (length) { @@ -2854,7 +2856,10 @@ bgp_packet_mpattr_tea( struct bgp_attr_encap_subtlv *st; const char *attrname; - if (!attr || !attr->extra) + if (!attr || !attr->extra || + (attrtype == BGP_ATTR_ENCAP && + (!attr->extra->encap_tunneltype || + attr->extra->encap_tunneltype == BGP_ENCAP_TYPE_MPLS))) return; switch (attrtype) { @@ -2885,11 +2890,6 @@ bgp_packet_mpattr_tea( assert(0); } - - /* if no tlvs, don't make attr */ - if (subtlvs == NULL) - return; - /* compute attr length */ for (st = subtlvs; st; st = st->next) { attrlenfield += (attrhdrlen + st->length); diff --git a/bgpd/rfapi/vnc_import_bgp.c b/bgpd/rfapi/vnc_import_bgp.c index 8c7fd9066d..10246758f3 100644 --- a/bgpd/rfapi/vnc_import_bgp.c +++ b/bgpd/rfapi/vnc_import_bgp.c @@ -514,7 +514,8 @@ vnc_import_bgp_add_route_mode_resolve_nve_one_bi ( if (bi->attr && bi->attr->extra) { encaptlvs = bi->attr->extra->vnc_subtlvs; - if (bi->attr->extra->encap_tunneltype != BGP_ENCAP_TYPE_MPLS) + if (bi->attr->extra->encap_tunneltype != BGP_ENCAP_TYPE_RESERVED && + bi->attr->extra->encap_tunneltype != BGP_ENCAP_TYPE_MPLS) { if (opt != NULL) opt->next = &optary[cur_opt]; -- 2.39.5