Flush LSA when receive aged one.
This commit is contained in:
parent
3c6269b8fe
commit
62924172ae
2 changed files with 17 additions and 9 deletions
|
@ -24,5 +24,6 @@ int lsa_comp(struct ospf_lsa_header *l1, struct ospf_lsa_header *l2);
|
||||||
struct top_hash_entry *lsa_install_new(struct ospf_lsa_header *lsa, void *body,
|
struct top_hash_entry *lsa_install_new(struct ospf_lsa_header *lsa, void *body,
|
||||||
struct ospf_area *oa, struct proto *p);
|
struct ospf_area *oa, struct proto *p);
|
||||||
void ospf_age(struct ospf_area *oa);
|
void ospf_age(struct ospf_area *oa);
|
||||||
|
void flush_lsa(struct top_hash_entry *en, struct ospf_area *oa);
|
||||||
|
|
||||||
#endif /* _BIRD_OSPF_LSALIB_H_ */
|
#endif /* _BIRD_OSPF_LSALIB_H_ */
|
||||||
|
|
|
@ -393,15 +393,22 @@ ospf_lsupd_rx(struct ospf_lsupd_packet *ps, struct proto *p,
|
||||||
if(lsadb)
|
if(lsadb)
|
||||||
WALK_LIST(NODE ift,po->iface_list)
|
WALK_LIST(NODE ift,po->iface_list)
|
||||||
WALK_LIST(NODE ntmp,ift->neigh_list)
|
WALK_LIST(NODE ntmp,ift->neigh_list)
|
||||||
{
|
{
|
||||||
struct top_hash_entry *en;
|
struct top_hash_entry *en;
|
||||||
if(ntmp->state>NEIGHBOR_EXSTART)
|
if(ntmp->state>NEIGHBOR_EXSTART)
|
||||||
if((en=ospf_hash_find_header(ntmp->lsrth,&lsadb->lsa))!=NULL)
|
if((en=ospf_hash_find_header(ntmp->lsrth,&lsadb->lsa))!=NULL)
|
||||||
{
|
{
|
||||||
s_rem_node(SNODE en);
|
s_rem_node(SNODE en);
|
||||||
ospf_hash_delete(ntmp->lsrth,en);
|
ospf_hash_delete(ntmp->lsrth,en);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if((lsatmp.age==LSA_MAXAGE)&&(lsatmp.sn==LSA_MAXSEQNO)
|
||||||
|
&&lsadb&&can_flush_lsa(oa))
|
||||||
|
{
|
||||||
|
flush_lsa(lsadb,oa);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/* pg 144 (5d) */
|
/* pg 144 (5d) */
|
||||||
body=mb_alloc(p->pool,lsatmp.length-sizeof(struct ospf_lsa_header));
|
body=mb_alloc(p->pool,lsatmp.length-sizeof(struct ospf_lsa_header));
|
||||||
|
|
Loading…
Reference in a new issue