summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--proto/ospf/dbdes.c22
-rw-r--r--proto/ospf/neighbor.c1
-rw-r--r--proto/ospf/ospf.h3
3 files changed, 16 insertions, 10 deletions
diff --git a/proto/ospf/dbdes.c b/proto/ospf/dbdes.c
index 4e0f2a49..9236da75 100644
--- a/proto/ospf/dbdes.c
+++ b/proto/ospf/dbdes.c
@@ -234,15 +234,19 @@ ospf_dbdes_reqladd(struct ospf_dbdes_packet *ps, struct proto *p,
for(i=0;i<j;i++)
{
- ntohlsah(plsa+i, &lsa);
- /* FIXME Test Checksum */
- if(((he=ospf_hash_find(gr,lsa.id,lsa.rt,lsa.type))==NULL)||
- (lsa_comp(&lsa, &(he->lsa))==1))
- {
- sn=sl_alloc(gr->hash_slab);
- ntohlsah(plsa+i, &(sn->lsa));
- s_add_tail(&(n->lsrql), SNODE sn);
- }
+ ntohlsah(plsa+i, &lsa);
+ /* FIXME Test Checksum */
+ if(((he=ospf_hash_find(gr,lsa.id,lsa.rt,lsa.type))==NULL)||
+ (lsa_comp(&lsa, &(he->lsa))==1))
+ {
+ /* Is this confition necessary? */
+ if(ospf_hash_find(n->lsrqh,lsa.id,lsa.rt,lsa.type)==NULL)
+ {
+ sn=ospf_hash_get(n->lsrqh,lsa.id,lsa.rt,lsa.type);
+ ntohlsah(plsa+i, &(sn->lsa));
+ s_add_tail(&(n->lsrql), SNODE sn);
+ }
+ }
}
}
diff --git a/proto/ospf/neighbor.c b/proto/ospf/neighbor.c
index 0f4bbcf0..b0726236 100644
--- a/proto/ospf/neighbor.c
+++ b/proto/ospf/neighbor.c
@@ -208,6 +208,7 @@ ospf_neigh_sm(struct ospf_neighbor *n, int event)
{
neigh_chstate(n,NEIGHBOR_EXCHANGE);
s_init_list(&(n->lsrql));
+ n->lsrqh=ospf_top_new(n->ifa->proto);
s_init_list(&(n->lsrtl));
s_init(&(n->dbsi), &(n->ifa->oa->lsal));
s_init(&(n->lsrqi), &(n->lsrql));
diff --git a/proto/ospf/ospf.h b/proto/ospf/ospf.h
index 0301154e..283ccc9a 100644
--- a/proto/ospf/ospf.h
+++ b/proto/ospf/ospf.h
@@ -272,7 +272,8 @@ struct ospf_neighbor
u32 bdr; /* Neigbour's idea of BDR */
u8 adj; /* built adjacency? */
siterator dbsi; /* Database summary list iterator */
- slist lsrql; /* Link state request */ /* FIXME add hashing? */
+ slist lsrql; /* Link state request */
+ struct top_graph *lsrqh; /* LSA graph */
siterator lsrqi;
slist lsrtl; /* Link state retransmission list */
siterator lsrti;