diff options
author | Ondrej Filip <feela@network.cz> | 2000-06-05 05:46:19 +0200 |
---|---|---|
committer | Ondrej Filip <feela@network.cz> | 2000-06-05 05:46:19 +0200 |
commit | 88048fb3c970842a16c65b1566ba817871a04eb5 (patch) | |
tree | 4fb39a2ba90bfe2c4e166b43ee52f46cf84887af /proto/ospf | |
parent | 273fd2c16475d3d1275a4fe17443c3ba2b93fbc4 (diff) | |
download | bird-88048fb3c970842a16c65b1566ba817871a04eb5.tar bird-88048fb3c970842a16c65b1566ba817871a04eb5.zip |
Small patch to better hash type=2 LSAs.
Diffstat (limited to 'proto/ospf')
-rw-r--r-- | proto/ospf/rt.c | 2 | ||||
-rw-r--r-- | proto/ospf/topology.c | 17 |
2 files changed, 18 insertions, 1 deletions
diff --git a/proto/ospf/rt.c b/proto/ospf/rt.c index 8a7f17c..d5b4626 100644 --- a/proto/ospf/rt.c +++ b/proto/ospf/rt.c @@ -126,7 +126,7 @@ ospf_rt_spfa(struct ospf_area *oa) continue; break; case LSART_NET: - tmp=ospf_hash_find(oa->gr,rtl->data,rtl->id,LSA_T_NET); + tmp=ospf_hash_find(oa->gr,rtl->id,rtl->id,LSA_T_NET); if(tmp==NULL) DBG("Fuck!\n"); else DBG("Found. :-)\n"); break; diff --git a/proto/ospf/topology.c b/proto/ospf/topology.c index 6f89a91..22ebc5e 100644 --- a/proto/ospf/topology.c +++ b/proto/ospf/topology.c @@ -439,7 +439,11 @@ ospf_top_hash_u32(u32 a) static inline unsigned ospf_top_hash(struct top_graph *f, u32 lsaid, u32 rtrid, u32 type) { +#if 1 /* Dirty patch to make rt table calculation work. */ +return (ospf_top_hash_u32(lsaid) + ospf_top_hash_u32((type==LSA_T_NET) ? lsaid : rtrid) + type) & f->hash_mask; +#else return (ospf_top_hash_u32(lsaid) + ospf_top_hash_u32(rtrid) + type) & f->hash_mask; +#endif } struct top_graph * @@ -510,8 +514,21 @@ ospf_hash_find(struct top_graph *f, u32 lsa, u32 rtr, u32 type) { struct top_hash_entry *e = f->hash_table[ospf_top_hash(f, lsa, rtr, type)]; +#if 1 /* Dirty patch to make rt table calculation work. */ + if(type==LSA_T_NET) + { + while (e && (e->lsa.id != lsa || e->lsa.type != LSA_T_NET )) + e = e->next; + } + else + { + while (e && (e->lsa.id != lsa || e->lsa.type != type || e->lsa.rt != rtr)) + e = e->next; + } +#else while (e && (e->lsa.id != lsa || e->lsa.rt != rtr || e->lsa.type != type)) e = e->next; +#endif return e; } |