diff --git a/proto/ospf/lsalib.c b/proto/ospf/lsalib.c index 8c5ec680..4c416777 100644 --- a/proto/ospf/lsalib.c +++ b/proto/ospf/lsalib.c @@ -17,8 +17,9 @@ flush_lsa(struct top_hash_entry *en) void ospf_age(struct top_hash_entry *en, bird_clock_t delta, int flush, - struct proto *p) + struct ospf_area *oa) { + struct proto *p=&oa->po->proto; if(en->lsa.age==LSA_MAXAGE) { if(flush) flush_lsa(en); @@ -391,7 +392,7 @@ lsa_install_new(struct ospf_lsa_header *lsa, void *body, struct ospf_area *oa, if(oa->rt!=NULL) { DBG("Starting routing table calculation.\n"); - ospf_rt_spfa(oa, p); + ospf_rt_spfa(oa); } } diff --git a/proto/ospf/lsalib.h b/proto/ospf/lsalib.h index 1b8699eb..f9cc8f39 100644 --- a/proto/ospf/lsalib.h +++ b/proto/ospf/lsalib.h @@ -24,6 +24,6 @@ int lsa_comp(struct ospf_lsa_header *l1, struct ospf_lsa_header *l2); struct top_hash_entry *lsa_install_new(struct ospf_lsa_header *lsa, void *body, struct ospf_area *oa, struct proto *p); void ospf_age(struct top_hash_entry *en, bird_clock_t delta, int flush, - struct proto *p); + struct ospf_area *oa); #endif /* _BIRD_OSPF_LSALIB_H_ */ diff --git a/proto/ospf/rt.c b/proto/ospf/rt.c index 5a6aa373..bd2aa876 100644 --- a/proto/ospf/rt.c +++ b/proto/ospf/rt.c @@ -18,7 +18,7 @@ init_stub_fib(struct fib_node *fn) } void -ospf_rt_spfa(struct ospf_area *oa, struct proto *p) +ospf_rt_spfa(struct ospf_area *oa) { struct top_hash_entry *en, *nx; u32 i,*rts; @@ -28,6 +28,7 @@ ospf_rt_spfa(struct ospf_area *oa, struct proto *p) struct stub_fib *sf; bird_clock_t delta; int age=0,flush=0; + struct proto *p=&oa->po->proto; /* FIXME if I'm not in LOADING or EXCHANGE set flush=1 */ if((delta=now-oa->lage)>=AGINGDELTA) @@ -40,7 +41,7 @@ ospf_rt_spfa(struct ospf_area *oa, struct proto *p) { en->color=OUTSPF; en->dist=LSINFINITY; - if(age) ospf_age(en,delta,flush,p); + if(age) ospf_age(en,delta,flush,oa); } init_list(&oa->cand); /* Empty list of candidates */ @@ -99,7 +100,7 @@ ospf_rt_spfa(struct ospf_area *oa, struct proto *p) log("Unknown link type in router lsa.\n"); break; } - add_cand(&oa->cand,tmp,act,act->dist+rtl->metric,p,oa); + add_cand(&oa->cand,tmp,act,act->dist+rtl->metric,oa); } break; case LSA_T_NET: @@ -112,7 +113,7 @@ ospf_rt_spfa(struct ospf_area *oa, struct proto *p) tmp=ospf_hash_find(oa->gr, *(rts+i), *(rts+i), LSA_T_RT); if(tmp!=NULL) DBG("Found :-)\n"); else DBG("Fuck!\n"); - add_cand(&oa->cand,tmp,act,act->dist,p,oa); + add_cand(&oa->cand,tmp,act,act->dist,oa); } break; } @@ -199,7 +200,7 @@ ospf_rt_spfa(struct ospf_area *oa, struct proto *p) if(sf->metric>(en->dist+rtl->metric)) { sf->metric=en->dist+rtl->metric; - calc_next_hop_fib(en,sf,p,oa); + calc_next_hop_fib(en,sf,oa); if(sf->nhi!=NULL) { net *ne; @@ -240,11 +241,12 @@ ospf_rt_spfa(struct ospf_area *oa, struct proto *p) void add_cand(list *l, struct top_hash_entry *en, struct top_hash_entry *par, - u16 dist, struct proto *p, struct ospf_area *oa) + u16 dist, struct ospf_area *oa) { node *prev,*n; int flag=0,added=0; struct top_hash_entry *act; + struct proto *p=&oa->po->proto; if(en==NULL) return; if(en->lsa.age==LSA_MAXAGE) return; @@ -260,7 +262,7 @@ add_cand(list *l, struct top_hash_entry *en, struct top_hash_entry *par, en->nhi=NULL; - calc_next_hop(par,en,p,oa); + calc_next_hop(par,en,oa); if(en->color==CANDIDATE) /* We found a shorter path */ { @@ -302,10 +304,11 @@ add_cand(list *l, struct top_hash_entry *en, struct top_hash_entry *par, void calc_next_hop(struct top_hash_entry *par, struct top_hash_entry *en, - struct proto *p, struct ospf_area *oa) + struct ospf_area *oa) { struct ospf_neighbor *neigh; - struct proto_ospf *po=(struct proto_ospf *)p; + struct proto *p=&oa->po->proto; + struct proto_ospf *po=oa->po; DBG(" Next hop called\n"); if(par==oa->rt) return; if(par->nhi==NULL) @@ -327,10 +330,11 @@ calc_next_hop(struct top_hash_entry *par, struct top_hash_entry *en, void calc_next_hop_fib(struct top_hash_entry *par, struct stub_fib *en, - struct proto *p, struct ospf_area *oa) + struct ospf_area *oa) { struct ospf_neighbor *neigh; - struct proto_ospf *po=(struct proto_ospf *)p; + struct proto *p=&oa->po->proto; + struct proto_ospf *po=oa->po; DBG(" Next hop called\n"); if(par==oa->rt) return; if(par->nhi==NULL) diff --git a/proto/ospf/rt.h b/proto/ospf/rt.h index aa6ec0d6..7fe482f7 100644 --- a/proto/ospf/rt.h +++ b/proto/ospf/rt.h @@ -18,12 +18,12 @@ struct stub_fib { struct iface *nhi; }; -void ospf_rt_spfa(struct ospf_area *oa, struct proto *p); +void ospf_rt_spfa(struct ospf_area *oa); void add_cand(list *l, struct top_hash_entry *en, struct top_hash_entry *par, - u16 dist, struct proto *p, struct ospf_area *oa); + u16 dist, struct ospf_area *oa); void calc_next_hop(struct top_hash_entry *par, struct top_hash_entry *en, - struct proto *p, struct ospf_area *oa); + struct ospf_area *oa); void calc_next_hop_fib(struct top_hash_entry *par, struct stub_fib *en, - struct proto *p, struct ospf_area *oa); + struct ospf_area *oa); #endif /* _BIRD_OSPF_RT_H_ */ diff --git a/proto/ospf/topology.c b/proto/ospf/topology.c index 6a20a63d..57ac0888 100644 --- a/proto/ospf/topology.c +++ b/proto/ospf/topology.c @@ -163,7 +163,7 @@ age_timer_hook(timer *timer) if((delta=now-oa->lage)>=AGINGDELTA) { - WALK_SLIST_DELSAFE(en,nxt,oa->lsal) ospf_age(en,delta,flush,&oa->po->proto); + WALK_SLIST_DELSAFE(en,nxt,oa->lsal) ospf_age(en,delta,flush,oa); oa->lage=now; } }