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

@ -716,6 +716,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);
@ -725,6 +727,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
bgp_decode_ext_community(struct bgp_parse_state *s, uint code UNUSED, uint flags, byte *data, uint len, ea_list **to) bgp_decode_ext_community(struct bgp_parse_state *s, uint code UNUSED, uint flags, byte *data, uint len, ea_list **to)