Commit d807ea08 authored by Ondrej Zajicek (work)'s avatar Ondrej Zajicek (work)
Browse files

BGP: Fix non-transitive ext communities

parent 3e792350
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -536,6 +536,13 @@ ec_set_sort(struct linpool *pool, struct adata *src)
  return dst;
}

void
ec_set_sort_x(struct adata *set)
{
  /* Sort in place */
  qsort(set->data, set->length / 8, 8, ec_set_cmp);
}


static int
lc_set_cmp(const void *X, const void *Y)
+2 −0
Original line number Diff line number Diff line
@@ -197,4 +197,6 @@ struct adata *int_set_sort(struct linpool *pool, struct adata *src);
struct adata *ec_set_sort(struct linpool *pool, struct adata *src);
struct adata *lc_set_sort(struct linpool *pool, struct adata *src);

void ec_set_sort_x(struct adata *set); /* Sort in place */

#endif
+3 −1
Original line number Diff line number Diff line
@@ -550,10 +550,12 @@ 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)
{
  a->u.ptr = ec_set_del_nontrans(s->pool, a->u.ptr);

  if (a->u.ptr->length == 0)
    UNSET(a);

  a->u.ptr = ec_set_sort(s->pool, a->u.ptr);
  ec_set_sort_x(a->u.ptr);
}

static void