summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--proto/ospf/lsalib.c5
-rw-r--r--proto/ospf/lsalib.h2
-rw-r--r--proto/ospf/rt.c26
-rw-r--r--proto/ospf/rt.h8
-rw-r--r--proto/ospf/topology.c2
5 files changed, 24 insertions, 19 deletions
diff --git a/proto/ospf/lsalib.c b/proto/ospf/lsalib.c
index 8c5ec68..4c41677 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 1b8699e..f9cc8f3 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 5a6aa37..bd2aa87 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 aa6ec0d..7fe482f 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 6a20a63..57ac088 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;
}
}