summaryrefslogtreecommitdiffstats
path: root/nest
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2008-10-26 22:45:09 +0100
committerOndrej Zajicek <santiago@crfreenet.org>2008-10-26 22:45:09 +0100
commit4847a894bf7d4852325c3f1ea4bb4890054a1f66 (patch)
tree46d0f400b9e6fc3dfaf64d7058c473e44501ddc1 /nest
parentd51aa2819005a03e4cfb6f62333be6ccadfb3c06 (diff)
downloadbird-4847a894bf7d4852325c3f1ea4bb4890054a1f66.tar
bird-4847a894bf7d4852325c3f1ea4bb4890054a1f66.zip
Implementation of route reflection for BGP
Diffstat (limited to 'nest')
-rw-r--r--nest/a-set.c8
-rw-r--r--nest/attrs.h3
2 files changed, 8 insertions, 3 deletions
diff --git a/nest/a-set.c b/nest/a-set.c
index 4440714..69c090b 100644
--- a/nest/a-set.c
+++ b/nest/a-set.c
@@ -40,10 +40,12 @@ int_set_format(struct adata *set, byte *buf, unsigned int size)
struct adata *
int_set_add(struct linpool *pool, struct adata *list, u32 val)
{
- struct adata *res = lp_alloc(pool, list->length + sizeof(struct adata) + 4);
- res->length = list->length+4;
+ int len = list ? list->length : 0;
+ struct adata *res = lp_alloc(pool, len + sizeof(struct adata) + 4);
+ res->length = len + 4;
* (u32 *) res->data = val;
- memcpy((char *) res->data + 4, list->data, list->length);
+ if (list)
+ memcpy((char *) res->data + 4, list->data, list->length);
return res;
}
diff --git a/nest/attrs.h b/nest/attrs.h
index f63f2e4..aaa5f4a 100644
--- a/nest/attrs.h
+++ b/nest/attrs.h
@@ -47,4 +47,7 @@ struct adata *int_set_add(struct linpool *pool, struct adata *list, u32 val);
int int_set_contains(struct adata *list, u32 val);
struct adata *int_set_del(struct linpool *pool, struct adata *list, u32 val);
+static inline int int_set_get_size(struct adata *list)
+{ return list->length / 4; }
+
#endif