]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Adapted to new rt_notify semantics.
authorMartin Mares <mj@ucw.cz>
Sat, 13 May 2000 11:02:02 +0000 (11:02 +0000)
committerMartin Mares <mj@ucw.cz>
Sat, 13 May 2000 11:02:02 +0000 (11:02 +0000)
TODO
proto/bgp/attrs.c
proto/pipe/pipe.c
sysdep/unix/krt.c

diff --git a/TODO b/TODO
index 51802994242d3c8f27396516e519ca9daa7fc600..972afae709c3013cc431dd899dc0f84a441286d1 100644 (file)
--- a/TODO
+++ b/TODO
@@ -18,7 +18,6 @@ Core
 - client: data losses on large dumps?
 
 - table: ocassional core dumps in rt_prune()
-- table: filtering of old routes during updates?
 - table: do feeding by parts
 
 - bgp: timing of updates?
index ce11202813afd1f84c61c960d2a48780c16b95ea..4dda0ac0e0fdcb36713c75655248973581a11c43 100644 (file)
@@ -402,7 +402,7 @@ bgp_export_check(struct bgp_proto *p, ea_list *new)
 }
 
 static struct bgp_bucket *
-bgp_get_bucket(struct bgp_proto *p, ea_list *old, ea_list *tmp, int originate)
+bgp_get_bucket(struct bgp_proto *p, ea_list *attrs, int originate)
 {
   ea_list *t, *new;
   unsigned i, cnt, hash, code;
@@ -410,21 +410,9 @@ bgp_get_bucket(struct bgp_proto *p, ea_list *old, ea_list *tmp, int originate)
   u32 seen = 0;
   struct bgp_bucket *b;
 
-  /* Merge the attribute lists */
-  if (tmp)
-    {
-      for(t=tmp; t->next; t=t->next)
-       ;
-      t->next = old;
-      new = alloca(ea_scan(tmp));
-      ea_merge(tmp, new);
-      t->next = NULL;
-    }
-  else
-    {
-      new = alloca(ea_scan(old));
-      ea_merge(old, new);
-    }
+  /* Merge the attribute list */
+  new = alloca(ea_scan(attrs));
+  ea_merge(attrs, new);
   ea_sort(new);
 
   /* Normalize attributes */
@@ -516,7 +504,7 @@ bgp_free_bucket(struct bgp_proto *p, struct bgp_bucket *buck)
 }
 
 void
-bgp_rt_notify(struct proto *P, net *n, rte *new, rte *old, ea_list *tmpa)
+bgp_rt_notify(struct proto *P, net *n, rte *new, rte *old, ea_list *attrs)
 {
   struct bgp_proto *p = (struct bgp_proto *) P;
   struct bgp_bucket *buck;
@@ -526,7 +514,7 @@ bgp_rt_notify(struct proto *P, net *n, rte *new, rte *old, ea_list *tmpa)
 
   if (new)
     {
-      buck = bgp_get_bucket(p, new->attrs->eattrs, tmpa, new->attrs->source != RTS_BGP);
+      buck = bgp_get_bucket(p, attrs, new->attrs->source != RTS_BGP);
       if (!buck)                       /* Inconsistent attribute list */
        return;
     }
index dde2ee7c7e5b7ffa01c464f7e9776fac6e91c203..3f41faaf19959520ff6fb2e50c0d1f32fa81d784 100644 (file)
@@ -19,7 +19,7 @@
 #include "pipe.h"
 
 static void
-pipe_send(struct pipe_proto *p, rtable *dest, net *n, rte *new, rte *old)
+pipe_send(struct pipe_proto *p, rtable *dest, net *n, rte *new, rte *old, ea_list *attrs)
 {
   net *nn;
   rte *e;
@@ -38,6 +38,7 @@ pipe_send(struct pipe_proto *p, rtable *dest, net *n, rte *new, rte *old)
       a.proto = &p->p;
       a.source = RTS_PIPE;
       a.aflags = 0;
+      a.eattrs = attrs;
       e = rte_get_temp(&a);
       e->net = nn;
     }
@@ -49,21 +50,21 @@ pipe_send(struct pipe_proto *p, rtable *dest, net *n, rte *new, rte *old)
 }
 
 static void
-pipe_rt_notify_pri(struct proto *P, net *net, rte *new, rte *old, ea_list *tmpa)
+pipe_rt_notify_pri(struct proto *P, net *net, rte *new, rte *old, ea_list *attrs)
 {
   struct pipe_proto *p = (struct pipe_proto *) P;
 
   DBG("PIPE %c> %I/%d\n", (new ? '+' : '-'), net->n.prefix, net->n.pxlen);
-  pipe_send(p, p->peer, net, new, old);
+  pipe_send(p, p->peer, net, new, old, attrs);
 }
 
 static void
-pipe_rt_notify_sec(struct proto *P, net *net, rte *new, rte *old, ea_list *tmpa)
+pipe_rt_notify_sec(struct proto *P, net *net, rte *new, rte *old, ea_list *attrs)
 {
   struct pipe_proto *p = ((struct pipe_proto *) P)->phantom;
 
   DBG("PIPE %c< %I/%d\n", (new ? '+' : '-'), net->n.prefix, net->n.pxlen);
-  pipe_send(p, p->p.table, net, new, old);
+  pipe_send(p, p->p.table, net, new, old, attrs);
 }
 
 static int
index 6d8c696daecb4bf7ac925e537142a8a1bd9f1e66..74ab2239157ab57a51c4f64b5eb7c8e7b3235398 100644 (file)
@@ -663,7 +663,7 @@ krt_scan(timer *t)
  */
 
 static void
-krt_notify(struct proto *P, net *net, rte *new, rte *old, struct ea_list *tmpa)
+krt_notify(struct proto *P, net *net, rte *new, rte *old, struct ea_list *attrs)
 {
   struct krt_proto *p = (struct krt_proto *) P;