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 <lberger@labn.net>
This commit is contained in:
Lou Berger 2017-02-06 21:29:43 -05:00
parent 22e9f17c7f
commit ac73d8fbb6
2 changed files with 10 additions and 9 deletions

View file

@ -2241,8 +2241,10 @@ bgp_attr_encap(
stlv_last = tlv; stlv_last = tlv;
} }
if (attre && (BGP_ATTR_ENCAP == type)) { if (BGP_ATTR_ENCAP == type) {
attre->encap_tunneltype = tunneltype; if (!attre)
attre = bgp_attr_extra_get(attr);
attre->encap_tunneltype = tunneltype;
} }
if (length) { if (length) {
@ -2854,7 +2856,10 @@ bgp_packet_mpattr_tea(
struct bgp_attr_encap_subtlv *st; struct bgp_attr_encap_subtlv *st;
const char *attrname; 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; return;
switch (attrtype) { switch (attrtype) {
@ -2885,11 +2890,6 @@ bgp_packet_mpattr_tea(
assert(0); assert(0);
} }
/* if no tlvs, don't make attr */
if (subtlvs == NULL)
return;
/* compute attr length */ /* compute attr length */
for (st = subtlvs; st; st = st->next) { for (st = subtlvs; st; st = st->next) {
attrlenfield += (attrhdrlen + st->length); attrlenfield += (attrhdrlen + st->length);

View file

@ -514,7 +514,8 @@ vnc_import_bgp_add_route_mode_resolve_nve_one_bi (
if (bi->attr && bi->attr->extra) if (bi->attr && bi->attr->extra)
{ {
encaptlvs = bi->attr->extra->vnc_subtlvs; 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) if (opt != NULL)
opt->next = &optary[cur_opt]; opt->next = &optary[cur_opt];