Destroying of neighbor moved from 'hello' to 'neighbor' and

improved.
This commit is contained in:
Ondrej Filip 2000-05-10 12:37:43 +00:00
parent 7f5f44bb92
commit c7e46aae66
4 changed files with 48 additions and 21 deletions

View file

@ -238,23 +238,3 @@ wait_timer_hook(timer *timer)
ospf_int_sm(ifa, ISM_WAITF); ospf_int_sm(ifa, ISM_WAITF);
} }
/* Neighbor is inactive for a long time. Remove it. */
void
neighbor_timer_hook(timer *timer)
{
struct ospf_neighbor *n;
struct ospf_iface *ifa;
struct proto *p;
n=(struct ospf_neighbor *)timer->data;
ifa=n->ifa;
p=(struct proto *)(ifa->proto);
debug("%s: Inactivity timer fired on interface %s for neighbor %I.\n",
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);
/* FIXME: Go on */
}

View file

@ -18,6 +18,5 @@ void ospf_hello_rx(struct ospf_hello_packet *ps, struct proto *p,
struct ospf_iface *ifa, int size, ip_addr faddr); struct ospf_iface *ifa, int size, ip_addr faddr);
void hello_timer_hook(timer *timer); void hello_timer_hook(timer *timer);
void wait_timer_hook(timer *timer); void wait_timer_hook(timer *timer);
void neighbor_timer_hook(timer *timer);
#endif /* _BIRD_OSPF_HELLO_H_ */ #endif /* _BIRD_OSPF_HELLO_H_ */

View file

@ -427,4 +427,51 @@ ospf_find_area(struct proto_ospf *po, u32 aid)
return NULL; return NULL;
} }
/* Neighbor is inactive for a long time. Remove it. */
void
neighbor_timer_hook(timer *timer)
{
struct ospf_neighbor *n;
struct ospf_iface *ifa;
struct proto *p;
n=(struct ospf_neighbor *)timer->data;
ifa=n->ifa;
p=(struct proto *)(ifa->proto);
debug("%s: Inactivity timer fired on interface %s for neighbor %I.\n",
p->name, ifa->iface->name, n->rid);
neigh_chstate(n, NEIGHBOR_DOWN);
tm_stop(n->inactim);
rfree(n->inactim);
if(n->rxmt_timer!=NULL)
{
tm_stop(n->rxmt_timer);
rfree(n->rxmt_timer);
}
if(n->lsrr_timer!=NULL)
{
tm_stop(n->lsrr_timer);
rfree(n->lsrr_timer);
}
if(n->ackd_timer!=NULL)
{
tm_stop(n->ackd_timer);
rfree(n->ackd_timer);
}
if(n->ldbdes!=NULL)
{
mb_free(n->ldbdes);
}
if(n->lsrqh!=NULL)
{
ospf_top_free(n->lsrqh);
}
if(n->lsrth!=NULL)
{
ospf_top_free(n->lsrth);
}
rem_node(NODE n);
mb_free(n);
debug("%s: Deleting neigbor.\n", p->name);
}

View file

@ -20,5 +20,6 @@ void bdr_election(struct ospf_iface *ifa, struct proto *p);
struct ospf_neighbor *find_neigh(struct ospf_iface *ifa, u32 rid); struct ospf_neighbor *find_neigh(struct ospf_iface *ifa, u32 rid);
struct ospf_neighbor *find_neigh_noifa(struct proto_ospf *po, u32 rid); struct ospf_neighbor *find_neigh_noifa(struct proto_ospf *po, u32 rid);
struct ospf_area *ospf_find_area(struct proto_ospf *po, u32 aid); struct ospf_area *ospf_find_area(struct proto_ospf *po, u32 aid);
void neighbor_timer_hook(timer *timer);
#endif /* _BIRD_OSPF_NEIGHBOR_H_ */ #endif /* _BIRD_OSPF_NEIGHBOR_H_ */