Neigbor deleting done. (I have some problems with timers, so it does not
send hello.)
This commit is contained in:
parent
cd70d93470
commit
bae0f7dbb1
1 changed files with 25 additions and 15 deletions
|
@ -35,6 +35,11 @@ neighbor_timer_hook(timer *timer)
|
||||||
p=(struct proto *)(ifa->proto);
|
p=(struct proto *)(ifa->proto);
|
||||||
debug("%s: Inactivity timer fired on interface %s for neighbor %d.\n",
|
debug("%s: Inactivity timer fired on interface %s for neighbor %d.\n",
|
||||||
p->name, ifa->iface->name, n->rid);
|
p->name, ifa->iface->name, n->rid);
|
||||||
|
tm_stop(n->inactim);
|
||||||
|
rfree(n->inactim);
|
||||||
|
rem_node(NODE n);
|
||||||
|
mb_free(n);
|
||||||
|
debug("%s: Deleting neigbor.\n", p->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -101,17 +106,16 @@ ospf_hello_rx(struct ospf_hello_packet *ps, struct proto *p,
|
||||||
n->inactim->data=n;
|
n->inactim->data=n;
|
||||||
n->inactim->randomize=0;
|
n->inactim->randomize=0;
|
||||||
n->inactim->hook=neighbor_timer_hook;
|
n->inactim->hook=neighbor_timer_hook;
|
||||||
n->inactim->recurrent=ifa->deadc*ifa->helloint;
|
n->inactim->recurrent=0;
|
||||||
n->inactim->expires=0;
|
|
||||||
tm_start(ifa->hello_timer,ifa->deadc*ifa->helloint);
|
|
||||||
DBG("%s: Installing inactivity timer.\n", p->name);
|
DBG("%s: Installing inactivity timer.\n", p->name);
|
||||||
n->state=NEIGHBOR_INIT;
|
n->state=NEIGHBOR_INIT;
|
||||||
n->rid=nrid;
|
|
||||||
n->dr=ntohl(ps->dr);
|
|
||||||
n->bdr=ntohl(ps->bdr);
|
|
||||||
n->priority=ps->priority;
|
|
||||||
n->options=ps->options;
|
|
||||||
}
|
}
|
||||||
|
n->rid=nrid;
|
||||||
|
n->dr=ntohl(ps->dr);
|
||||||
|
n->bdr=ntohl(ps->bdr);
|
||||||
|
n->priority=ps->priority;
|
||||||
|
n->options=ps->options;
|
||||||
|
tm_start(ifa->hello_timer,ifa->deadc*ifa->helloint);
|
||||||
|
|
||||||
/* XXXX */
|
/* XXXX */
|
||||||
|
|
||||||
|
@ -467,7 +471,6 @@ ospf_add_timers(struct ospf_iface *ifa, pool *pool, int wait)
|
||||||
if(ifa->helloint==0) ifa->helloint=HELLOINT_D;
|
if(ifa->helloint==0) ifa->helloint=HELLOINT_D;
|
||||||
ifa->hello_timer->hook=hello_timer_hook;
|
ifa->hello_timer->hook=hello_timer_hook;
|
||||||
ifa->hello_timer->recurrent=ifa->helloint;
|
ifa->hello_timer->recurrent=ifa->helloint;
|
||||||
ifa->hello_timer->expires=0;
|
|
||||||
tm_start(ifa->hello_timer,ifa->helloint);
|
tm_start(ifa->hello_timer,ifa->helloint);
|
||||||
DBG("%s: Installing hello timer.\n", p->name);
|
DBG("%s: Installing hello timer.\n", p->name);
|
||||||
if((ifa->type!=OSPF_IT_PTP))
|
if((ifa->type!=OSPF_IT_PTP))
|
||||||
|
@ -475,10 +478,9 @@ ospf_add_timers(struct ospf_iface *ifa, pool *pool, int wait)
|
||||||
/* Install wait timer on NOT-PtP interfaces */
|
/* Install wait timer on NOT-PtP interfaces */
|
||||||
ifa->wait_timer=tm_new(pool);
|
ifa->wait_timer=tm_new(pool);
|
||||||
ifa->wait_timer->data=ifa;
|
ifa->wait_timer->data=ifa;
|
||||||
ifa->wait_timer->randomize=1;
|
ifa->wait_timer->randomize=0;
|
||||||
ifa->wait_timer->hook=wait_timer_hook;
|
ifa->wait_timer->hook=wait_timer_hook;
|
||||||
ifa->wait_timer->recurrent=0;
|
ifa->wait_timer->recurrent=0;
|
||||||
ifa->wait_timer->expires=0;
|
|
||||||
ifa->state=OSPF_IS_WAITING;
|
ifa->state=OSPF_IS_WAITING;
|
||||||
tm_start(ifa->wait_timer,(wait!=0 ? wait : WAIT_DMH*ifa->helloint));
|
tm_start(ifa->wait_timer,(wait!=0 ? wait : WAIT_DMH*ifa->helloint));
|
||||||
DBG(p->name);
|
DBG(p->name);
|
||||||
|
@ -540,21 +542,29 @@ ospf_if_notify(struct proto *p, unsigned flags, struct iface *iface)
|
||||||
ifa=mb_alloc(p->pool, sizeof(struct ospf_iface));
|
ifa=mb_alloc(p->pool, sizeof(struct ospf_iface));
|
||||||
ifa->proto=(struct proto_ospf *)p;
|
ifa->proto=(struct proto_ospf *)p;
|
||||||
ifa->iface=iface;
|
ifa->iface=iface;
|
||||||
add_tail(&((struct proto_ospf *)p)->iface_list, NODE ifa);
|
|
||||||
ospf_iface_default(ifa);
|
ospf_iface_default(ifa);
|
||||||
/* FIXME: This should read config */
|
|
||||||
ospf_add_timers(ifa,p->pool,0);
|
|
||||||
if(ifa->type!=OSPF_IT_NBMA)
|
if(ifa->type!=OSPF_IT_NBMA)
|
||||||
{
|
{
|
||||||
if((mcsk=ospf_open_socket(p, ifa))!=NULL)
|
if((mcsk=ospf_open_socket(p, ifa))!=NULL)
|
||||||
{
|
{
|
||||||
ifa->hello_sk=mcsk;
|
ifa->hello_sk=mcsk;
|
||||||
}
|
}
|
||||||
else log("Huh? could not open socket?");
|
else
|
||||||
|
{
|
||||||
|
log("%s: Huh? could not open socket on interface %s?", p->name,
|
||||||
|
iface->name);
|
||||||
|
mb_free(ifa);
|
||||||
|
log("%s: Ignoring this interface\n", p->name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
/* FIXME: In fail case??? */
|
/* FIXME: In fail case??? */
|
||||||
init_list(&(ifa->neigh_list));
|
init_list(&(ifa->neigh_list));
|
||||||
}
|
}
|
||||||
/* FIXME: NBMA? */
|
/* FIXME: NBMA? */
|
||||||
|
/* FIXME: This should read config */
|
||||||
|
ifa->helloint=0;
|
||||||
|
ospf_add_timers(ifa,p->pool,0);
|
||||||
|
add_tail(&((struct proto_ospf *)p)->iface_list, NODE ifa);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flags & IF_CHANGE_DOWN)
|
if(flags & IF_CHANGE_DOWN)
|
||||||
|
|
Loading…
Reference in a new issue