diff options
Diffstat (limited to 'proto/bgp/attrs.c')
-rw-r--r-- | proto/bgp/attrs.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/proto/bgp/attrs.c b/proto/bgp/attrs.c index b8921363..9a4e12d2 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 |