Adapted to new rt_notify semantics.

This commit is contained in:
Martin Mares 2000-05-13 11:02:02 +00:00
parent e4bfafa100
commit 02bd064ab7
4 changed files with 13 additions and 25 deletions

1
TODO
View file

@ -18,7 +18,6 @@ Core
- client: data losses on large dumps? - client: data losses on large dumps?
- table: ocassional core dumps in rt_prune() - table: ocassional core dumps in rt_prune()
- table: filtering of old routes during updates?
- table: do feeding by parts - table: do feeding by parts
- bgp: timing of updates? - bgp: timing of updates?

View file

@ -402,7 +402,7 @@ bgp_export_check(struct bgp_proto *p, ea_list *new)
} }
static struct bgp_bucket * 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; ea_list *t, *new;
unsigned i, cnt, hash, code; 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; u32 seen = 0;
struct bgp_bucket *b; struct bgp_bucket *b;
/* Merge the attribute lists */ /* Merge the attribute list */
if (tmp) new = alloca(ea_scan(attrs));
{ ea_merge(attrs, new);
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);
}
ea_sort(new); ea_sort(new);
/* Normalize attributes */ /* Normalize attributes */
@ -516,7 +504,7 @@ bgp_free_bucket(struct bgp_proto *p, struct bgp_bucket *buck)
} }
void 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_proto *p = (struct bgp_proto *) P;
struct bgp_bucket *buck; 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) 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 */ if (!buck) /* Inconsistent attribute list */
return; return;
} }

View file

@ -19,7 +19,7 @@
#include "pipe.h" #include "pipe.h"
static void 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; net *nn;
rte *e; 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.proto = &p->p;
a.source = RTS_PIPE; a.source = RTS_PIPE;
a.aflags = 0; a.aflags = 0;
a.eattrs = attrs;
e = rte_get_temp(&a); e = rte_get_temp(&a);
e->net = nn; e->net = nn;
} }
@ -49,21 +50,21 @@ pipe_send(struct pipe_proto *p, rtable *dest, net *n, rte *new, rte *old)
} }
static void 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; struct pipe_proto *p = (struct pipe_proto *) P;
DBG("PIPE %c> %I/%d\n", (new ? '+' : '-'), net->n.prefix, net->n.pxlen); 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 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; struct pipe_proto *p = ((struct pipe_proto *) P)->phantom;
DBG("PIPE %c< %I/%d\n", (new ? '+' : '-'), net->n.prefix, net->n.pxlen); 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 static int

View file

@ -663,7 +663,7 @@ krt_scan(timer *t)
*/ */
static void 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; struct krt_proto *p = (struct krt_proto *) P;