Neigbor deleting done. (I have some problems with timers, so it does not

send hello.)
This commit is contained in:
Ondrej Filip 1999-06-01 17:29:56 +00:00
parent cd70d93470
commit bae0f7dbb1

View file

@ -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->rid=nrid;
n->dr=ntohl(ps->dr); n->dr=ntohl(ps->dr);
n->bdr=ntohl(ps->bdr); n->bdr=ntohl(ps->bdr);
n->priority=ps->priority; n->priority=ps->priority;
n->options=ps->options; 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)