diff options
author | Ondrej Filip <feela@network.cz> | 2000-05-09 23:06:48 +0200 |
---|---|---|
committer | Ondrej Filip <feela@network.cz> | 2000-05-09 23:06:48 +0200 |
commit | 32fa4a5a461eb1af4146d9985663d90fcddd9697 (patch) | |
tree | f79f091cf7c428a4fd831930c34d623a97041347 /proto | |
parent | 3b8b1bd03709d2fa2eab8ec81321717e3b58dcaf (diff) | |
download | bird-32fa4a5a461eb1af4146d9985663d90fcddd9697.tar bird-32fa4a5a461eb1af4146d9985663d90fcddd9697.zip |
Premature aging of self-originated LSA received in flooding.
Diffstat (limited to 'proto')
-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 b603741..d9babc9 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; } |