diff options
Diffstat (limited to 'proto/ospf')
-rw-r--r-- | proto/ospf/lsupd.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/proto/ospf/lsupd.c b/proto/ospf/lsupd.c index b6037419..d9babc95 100644 --- a/proto/ospf/lsupd.c +++ b/proto/ospf/lsupd.c @@ -301,9 +301,36 @@ ospf_lsupd_rx(struct ospf_lsupd_packet *ps, struct proto *p, { struct ospf_iface *ift=NULL; void *body; + struct ospf_iface *nifa; + int self=0; DBG("PG143(5): Received LSA is newer\n"); + if(lsatmp.rt==p->cf->global->router_id) self=1; + + if(lsatmp.type==LSA_T_NET) + { + WALK_LIST(nifa,po->iface_list) + { + if(ipa_compare(nifa->iface->addr->ip,ipa_from_u32(lsatmp.id))==0) + { + self=1; + break; + } + } + } + + if(self) + { + lsa->age=(htons(LSA_MAXAGE)); + lsatmp.age=LSA_MAXAGE; + debug("Premature aging self originated lsa.\n"); + flood_lsa(NULL,lsa,&lsatmp,po,NULL,oa); + continue; + } + + + /* pg 144 (5a) */ if(lsadb && ((now-lsadb->inst_t)<MINLSARRIVAL)) { @@ -344,8 +371,6 @@ ospf_lsupd_rx(struct ospf_lsupd_packet *ps, struct proto *p, lsadb=lsa_install_new(&lsatmp,body, oa, p); DBG("New LSA installed in DB\n"); - /* FIXME 145 (5f) self originated? */ - continue; } |