Fixed a couple of bugs in static protocol. All static routes except device
ones seem to work well.
This commit is contained in:
parent
618533af91
commit
980297d289
2 changed files with 29 additions and 16 deletions
|
@ -65,30 +65,42 @@ static_start(struct proto *P)
|
|||
|
||||
DBG("Static: take off!\n");
|
||||
WALK_LIST(r, p->other_routes)
|
||||
if (r->dest == RTD_ROUTER)
|
||||
switch (r->dest)
|
||||
{
|
||||
case RTD_ROUTER:
|
||||
{
|
||||
struct neighbor *n = neigh_find(P, &r->via, NEF_STICKY);
|
||||
if (n)
|
||||
{
|
||||
r->chain = n->data;
|
||||
n->data = r;
|
||||
r->neigh = n;
|
||||
static_install(p, r, n->iface);
|
||||
}
|
||||
else
|
||||
log(L_ERR "Static route destination %I is invalid. Ignoring.\n", r->via);
|
||||
break;
|
||||
}
|
||||
else
|
||||
case RTD_DEVICE:
|
||||
die("Static device routes are not supported");
|
||||
/* FIXME: Static device routes */
|
||||
default:
|
||||
static_install(p, r, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
static_neigh_notify(struct neighbor *n)
|
||||
{
|
||||
struct static_proto *p = (struct static_proto *) n->proto;
|
||||
struct static_route *r;
|
||||
|
||||
DBG("Static: neighbor notify for %I: iface %p\n", n->addr, n->iface);
|
||||
for(r=n->data; r; r=r->chain)
|
||||
if (n->iface)
|
||||
static_install((struct static_proto *) n->proto, n->data, n->iface);
|
||||
static_install(p, r, n->iface);
|
||||
else
|
||||
static_remove((struct static_proto *) n->proto, n->data);
|
||||
static_remove(p, r);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -19,6 +19,7 @@ void static_init_instance(struct static_proto *);
|
|||
|
||||
struct static_route {
|
||||
node n;
|
||||
struct static_route *chain; /* Next for the same neighbor */
|
||||
ip_addr net; /* Network we route */
|
||||
int masklen; /* Mask length */
|
||||
int dest; /* Destination type (RTD_*) */
|
||||
|
|
Loading…
Reference in a new issue