1
0
mirror of https://gitlab.labs.nic.cz/labs/bird.git synced 2024-05-11 16:54:54 +00:00

BGP: Cluster list item should be prepended

Commit 3c09af41... changed behavior of int_set_add() from prepend to
append, which makes more sense for community list, but prepend must be
used for cluster list. Add int_set_prepend() and use it in cluster list
handling code.
This commit is contained in:
Ondrej Zajicek (work)
2016-11-15 16:24:39 +01:00
parent c8cafc8ebb
commit 261816b0d4
3 changed files with 23 additions and 3 deletions

View File

@@ -231,6 +231,26 @@ lc_set_contains(struct adata *list, lcomm val)
return 0;
}
struct adata *
int_set_prepend(struct linpool *pool, struct adata *list, u32 val)
{
struct adata *res;
int len;
if (int_set_contains(list, val))
return list;
len = list ? list->length : 0;
res = lp_alloc(pool, sizeof(struct adata) + len + 4);
res->length = len + 4;
if (list)
memcpy(res->data + 4, list->data, list->length);
* (u32 *) res->data = val;
return res;
}
struct adata *
int_set_add(struct linpool *pool, struct adata *list, u32 val)
@@ -248,8 +268,7 @@ int_set_add(struct linpool *pool, struct adata *list, u32 val)
if (list)
memcpy(res->data, list->data, list->length);
u32 *c = (u32 *) (res->data + len);
*c = val;
* (u32 *) (res->data + len) = val;
return res;
}