From: Ondrej Zajicek (work) Date: Thu, 24 Oct 2019 15:47:45 +0000 (+0200) Subject: BGP: Fix handling of transitive extended communities X-Git-Tag: v2.0.8~139 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ec331acf48535211fb5b50c87e74bf1c8370283a;p=thirdparty%2Fbird.git 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. --- diff --git a/proto/bgp/attrs.c b/proto/bgp/attrs.c index b89213638..9a4e12d2e 100644 --- a/proto/bgp/attrs.c +++ b/proto/bgp/attrs.c @@ -717,13 +717,23 @@ bgp_decode_mp_unreach_nlri(struct bgp_parse_state *s, uint code UNUSED, uint fla static void bgp_export_ext_community(struct bgp_export_state *s, eattr *a) { - struct adata *ad = ec_set_del_nontrans(s->pool, a->u.ptr); + if (!s->proto->is_interior) + { + struct adata *ad = ec_set_del_nontrans(s->pool, a->u.ptr); - if (ad->length == 0) - UNSET(a); + if (ad->length == 0) + UNSET(a); - ec_set_sort_x(ad); - a->u.ptr = ad; + ec_set_sort_x(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