diff options
Diffstat (limited to 'proto/ospf/ospf.c')
-rw-r--r-- | proto/ospf/ospf.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/proto/ospf/ospf.c b/proto/ospf/ospf.c index 80a0ccac..30be4597 100644 --- a/proto/ospf/ospf.c +++ b/proto/ospf/ospf.c @@ -247,12 +247,25 @@ ospf_rt_notify(struct proto *p, net *n, rte *new, rte *old, ea_list *attrs) u32 rtid=po->proto.cf->global->router_id; struct ospf_area *oa; struct top_hash_entry *en; + u32 pr=ipa_to_u32(n->n.prefix); + struct ospf_lsa_ext *ext; + int i; /* Flush old external LSA */ WALK_LIST(oa, po->area_list) { - if(en=ospf_hash_find(oa->gr, ipa_to_u32(n->n.prefix), rtid, LSA_T_EXT)) - net_flush_lsa(en,po,oa); + for(i=0;i<MAXNETS;i++,pr++) + { + if(en=ospf_hash_find(oa->gr, pr, rtid, LSA_T_EXT)) + { + ext=en->lsa_body; + if(ipa_compare(ext->netmask, ipa_mkmask(n->n.pxlen))==0) + { + net_flush_lsa(en,po,oa); + break; + } + } + } } } } |