From 25a3f3da7a2312e5ae21ada2aeccc412e2d1d867 Mon Sep 17 00:00:00 2001 From: Ondrej Filip Date: Wed, 7 Jun 2000 23:34:43 +0000 Subject: [PATCH] I mark all LSA as in distance INFINITY in process of aging. I don't have to WALK twice through it. --- proto/ospf/lsalib.c | 12 ++++++++++++ proto/ospf/rt.c | 22 +++++++--------------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/proto/ospf/lsalib.c b/proto/ospf/lsalib.c index cd294214..3cd62a9e 100644 --- a/proto/ospf/lsalib.c +++ b/proto/ospf/lsalib.c @@ -29,6 +29,9 @@ flush_lsa(struct top_hash_entry *en, struct ospf_area *oa) * * RFC says, that router should check checksum of every LSA to detect some * hardware problem. BIRD does not do it to minimalize CPU utilization. + * + * If routing table calculation is scheduled, it also invalidates old routing + * table calculation results. */ void ospf_age(struct ospf_area *oa) @@ -41,6 +44,15 @@ ospf_age(struct ospf_area *oa) WALK_SLIST_DELSAFE(en,nxt,oa->lsal) { + if(oa->calcrt) + { + en->color=OUTSPF; + en->dist=LSINFINITY; + en->nhi=NULL; + en->nh=ipa_from_u32(0); + DBG("Infinitying Type: %u, Id: %I, Rt: %I\n", en->lsa.type, en->lsa.id, + en->lsa.rt); + } if(en->lsa.age==LSA_MAXAGE) { if(flush) flush_lsa(en,oa); diff --git a/proto/ospf/rt.c b/proto/ospf/rt.c index 46fd134b..91036692 100644 --- a/proto/ospf/rt.c +++ b/proto/ospf/rt.c @@ -59,16 +59,6 @@ ospf_rt_spfa(struct ospf_area *oa) if(oa->rt==NULL) return; - WALK_SLIST(SNODE en, oa->lsal) - { - en->color=OUTSPF; - en->dist=LSINFINITY; - en->nhi=NULL; - en->nh=ipa_from_u32(0); - DBG("Infinitying Type: %u, Id: %I, Rt: %I\n", en->lsa.type, en->lsa.id, - en->lsa.rt); - } - FIB_WALK(in,nftmp) { nf=(struct infib *)nftmp; @@ -85,7 +75,8 @@ ospf_rt_spfa(struct ospf_area *oa) oa->rt->dist=0; oa->rt->color=CANDIDATE; add_head(&oa->cand, &oa->rt->cn); - DBG("RT LSA: rt: %I, id: %I, type: %u\n",oa->rt->lsa.rt,oa->rt->lsa.id,oa->rt->lsa.type); + DBG("RT LSA: rt: %I, id: %I, type: %u\n",oa->rt->lsa.rt, + oa->rt->lsa.id,oa->rt->lsa.type); while(!EMPTY_LIST(oa->cand)) { @@ -97,7 +88,8 @@ ospf_rt_spfa(struct ospf_area *oa) act=SKIP_BACK(struct top_hash_entry, cn, n); rem_node(n); - DBG("Working on LSA: rt: %I, id: %I, type: %u\n",act->lsa.rt,act->lsa.id,act->lsa.type); + DBG("Working on LSA: rt: %I, id: %I, type: %u\n",act->lsa.rt, + act->lsa.id,act->lsa.type); act->color=INSPF; switch(act->lsa.type) @@ -176,7 +168,7 @@ ospf_rt_spfa(struct ospf_area *oa) } } /* Now sync our fib with nest's */ - DBG("\nNow syncing my rt table with nest's\n\n"); + DBG("Now syncing my rt table with nest's\n"); FIB_ITERATE_INIT(&fit,in); again: FIB_ITERATE_START(in,&fit,nftmp) @@ -382,7 +374,7 @@ ospf_ext_spfa(struct proto_ospf *po) /* FIXME looking into inter-area */ if(nf==NULL) { - DBG("Cannot find network route (GW=%I\n",lt->fwaddr); + DBG("Cannot find network route (GW=%I)\n",lt->fwaddr); continue; } @@ -441,7 +433,7 @@ ospf_ext_spfa(struct proto_ospf *po) /* FIXME looking into inter-area */ } } - DBG("\nNow syncing my rt table with nest's\n\n"); + DBG("Now syncing my rt table with nest's\n"); FIB_ITERATE_INIT(&fit,ef); noch: FIB_ITERATE_START(ef,&fit,nftmp)