Destroying of neighbor moved from 'hello' to 'neighbor' and
improved.
This commit is contained in:
parent
7f5f44bb92
commit
c7e46aae66
4 changed files with 48 additions and 21 deletions
|
@ -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 */
|
|
||||||
}
|
|
||||||
|
|
|
@ -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_ */
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -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_ */
|
||||||
|
|
Loading…
Reference in a new issue