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:
parent
5ce881be82
commit
ec331acf48
1 changed files with 15 additions and 5 deletions
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue