Adapted to new rt_notify semantics.
This commit is contained in:
parent
e4bfafa100
commit
02bd064ab7
4 changed files with 13 additions and 25 deletions
1
TODO
1
TODO
|
@ -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?
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue