]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
as_path_prepend is usable outside bgp.
authorPavel Machek <pavel@ucw.cz>
Wed, 12 Apr 2000 14:12:37 +0000 (14:12 +0000)
committerPavel Machek <pavel@ucw.cz>
Wed, 12 Apr 2000 14:12:37 +0000 (14:12 +0000)
filter/filter.c
proto/bgp/attrs.c

index 4f6434f1f7c30f12eef6b259be456cb2f39610f2..cfb502fc47a809ac5d76eac9fa83ec860bbd292b 100644 (file)
@@ -764,7 +764,7 @@ comlist_del(struct linpool *pool, struct adata *list, u32 val)
 }
 
 struct adata *
-comlist_empty(struct linpool *pool)
+adata_empty(struct linpool *pool)
 {
   struct adata *res = lp_alloc(pool, sizeof(struct adata));
   res->length = 0;
index e42a6eae3de25e74e7fe6aa6e6a6099108247934..41f06447979aad8d6431ca19efaa020decf05f04 100644 (file)
@@ -278,19 +278,11 @@ bgp_create_attrs(struct bgp_proto *p, rte *e, ea_list **attrs, struct linpool *p
   return 0;                            /* Leave decision to the filters */
 }
 
-ea_list *
-bgp_path_prepend(struct linpool *pool, eattr *a, ea_list *old, int as)
+struct adata *
+as_path_prepend(struct linpool *pool, struct adata *olda, int as)
 {
-  struct ea_list *e = lp_alloc(pool, sizeof(ea_list) + sizeof(eattr));
-  struct adata *olda = a->u.ptr;
   struct adata *newa;
 
-  e->next = old;
-  e->flags = EALF_SORTED;
-  e->count = 1;
-  e->attrs[0].id = EA_CODE(EAP_BGP, BA_AS_PATH);
-  e->attrs[0].flags = BAF_TRANSITIVE;
-  e->attrs[0].type = EAF_TYPE_AS_PATH;
   if (olda->length && olda->data[0] == 2 && olda->data[1] < 255) /* Starting with sequence => just prepend the AS number */
     {
       newa = lp_alloc(pool, sizeof(struct adata) + olda->length + 2);
@@ -308,7 +300,22 @@ bgp_path_prepend(struct linpool *pool, eattr *a, ea_list *old, int as)
       memcpy(newa->data+4, olda->data, olda->length);
     }
   put_u16(newa->data+2, as);
-  e->attrs[0].u.ptr = newa;
+  return newa;
+}
+
+static ea_list *
+bgp_path_prepend(struct linpool *pool, eattr *a, ea_list *old, int as)
+{
+  struct ea_list *e = lp_alloc(pool, sizeof(ea_list) + sizeof(eattr));
+  struct adata *olda = a->u.ptr;
+
+  e->next = old;
+  e->flags = EALF_SORTED;
+  e->count = 1;
+  e->attrs[0].id = EA_CODE(EAP_BGP, BA_AS_PATH);
+  e->attrs[0].flags = BAF_TRANSITIVE;
+  e->attrs[0].type = EAF_TYPE_AS_PATH;
+  e->attrs[0].u.ptr = path_prepend(pool, olda, as);
   return e;
 }