BGP: Fix handling of transitive extended communities

Transitive extended communities should be removed on external sessions,
the old code them in all cases.

Thanks to Jean-Daniel Pauget for the original patch.
This commit is contained in:
Ondrej Zajicek (work) 2019-10-24 17:47:45 +02:00
parent 5ce881be82
commit ec331acf48

View file

@ -717,6 +717,8 @@ bgp_decode_mp_unreach_nlri(struct bgp_parse_state *s, uint code UNUSED, uint fla
static void static void
bgp_export_ext_community(struct bgp_export_state *s, eattr *a) bgp_export_ext_community(struct bgp_export_state *s, eattr *a)
{ {
if (!s->proto->is_interior)
{
struct adata *ad = ec_set_del_nontrans(s->pool, a->u.ptr); struct adata *ad = ec_set_del_nontrans(s->pool, a->u.ptr);
if (ad->length == 0) if (ad->length == 0)
@ -724,6 +726,14 @@ bgp_export_ext_community(struct bgp_export_state *s, eattr *a)
ec_set_sort_x(ad); ec_set_sort_x(ad);
a->u.ptr = ad; a->u.ptr = ad;
}
else
{
if (a->u.ptr->length == 0)
UNSET(a);
a->u.ptr = ec_set_sort(s->pool, a->u.ptr);
}
} }
static void static void