summaryrefslogtreecommitdiff
path: root/proto/ospf/topology.c
diff options
context:
space:
mode:
authorOndrej Filip <feela@network.cz>2000-05-31 14:06:33 +0000
committerOndrej Filip <feela@network.cz>2000-05-31 14:06:33 +0000
commit70a383198ae08bed395f2a083c1bea5b37447705 (patch)
tree1a67b5135a041977a5928d5885f702718d28b21a /proto/ospf/topology.c
parentaa185265f1cb310c053edb1a3bde28b4dab94964 (diff)
LSArt origination and routing table calculation is now not doing so
often. Instead of calculation I just schedule it latter.
Diffstat (limited to 'proto/ospf/topology.c')
-rw-r--r--proto/ospf/topology.c38
1 files changed, 11 insertions, 27 deletions
diff --git a/proto/ospf/topology.c b/proto/ospf/topology.c
index cf08ed7e..901f4ae7 100644
--- a/proto/ospf/topology.c
+++ b/proto/ospf/topology.c
@@ -151,24 +151,6 @@ originate_rt_lsa_body(struct ospf_area *oa, u16 *length, struct proto_ospf *p)
}
void
-age_timer_hook(timer *timer)
-{
- struct ospf_area *oa=timer->data;
- bird_clock_t delta;
- struct top_hash_entry *en,*nxt;
- int flush=0;
-
- flush=can_flush_lsa(oa);
-
- if((delta=now-oa->lage)>=AGINGDELTA)
- {
- WALK_SLIST_DELSAFE(en,nxt,oa->lsal) ospf_age(en,delta,flush,oa);
- oa->lage=now;
- }
-}
-
-
-void
addifa_rtlsa(struct ospf_iface *ifa)
{
struct ospf_area *oa;
@@ -196,14 +178,15 @@ addifa_rtlsa(struct ospf_iface *ifa)
oa->gr=ospf_top_new(po);
s_init_list(&(oa->lsal));
oa->rt=NULL;
- oa->lage=now;
oa->po=po;
- oa->age_timer=tm_new(po->proto.pool);
- oa->age_timer->data=oa;
- oa->age_timer->randomize=0;
- oa->age_timer->hook=age_timer_hook;
- oa->age_timer->recurrent=AGINGDELTA;
- tm_start(oa->age_timer,AGINGDELTA);
+ oa->disp_timer=tm_new(po->proto.pool);
+ oa->disp_timer->data=oa;
+ oa->disp_timer->randomize=0;
+ oa->disp_timer->hook=area_disp;
+ oa->disp_timer->recurrent=DISPTICK;
+ tm_start(oa->disp_timer,DISPTICK);
+ oa->calcrt=1;
+ oa->origrt=0;
fib_init(&oa->infib,po->proto.pool,sizeof(struct infib),16,init_infib);
/* FIXME 16?? (Oh, sweet 16.... :-) */
po->areano++;
@@ -212,15 +195,16 @@ addifa_rtlsa(struct ospf_iface *ifa)
ifa->oa=oa;
- originate_rt_lsa(oa,po);
+ originate_rt_lsa(oa);
DBG("RT LSA: rt: %I, id: %I, type: %u\n",oa->rt->lsa.rt,oa->rt->lsa.id,oa->rt->lsa.type);
flood_lsa(NULL,NULL,&oa->rt->lsa,po,NULL,oa,1);
}
void
-originate_rt_lsa(struct ospf_area *oa, struct proto_ospf *po)
+originate_rt_lsa(struct ospf_area *oa)
{
struct ospf_lsa_header lsa;
+ struct proto_ospf *po=oa->po;
u32 rtid=po->proto.cf->global->router_id;
struct top_hash_entry *en;
void *body;