summaryrefslogtreecommitdiffstats
path: root/proto/ospf
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2009-12-12 01:35:51 +0100
committerOndrej Zajicek <santiago@crfreenet.org>2009-12-12 01:35:51 +0100
commit28008482a97c0ac70e648759fe37bad0633ed9f7 (patch)
tree613b7083b89bbf764d1e276003a8f1633a195a67 /proto/ospf
parenta421ec33cb9029899122d0ab63bab0fa268348d2 (diff)
downloadbird-28008482a97c0ac70e648759fe37bad0633ed9f7.tar
bird-28008482a97c0ac70e648759fe37bad0633ed9f7.zip
Minor fixes in OSPF.
Diffstat (limited to 'proto/ospf')
-rw-r--r--proto/ospf/lsreq.c2
-rw-r--r--proto/ospf/lsupd.c37
2 files changed, 23 insertions, 16 deletions
diff --git a/proto/ospf/lsreq.c b/proto/ospf/lsreq.c
index 5eeb06f..e7d7af2 100644
--- a/proto/ospf/lsreq.c
+++ b/proto/ospf/lsreq.c
@@ -18,7 +18,7 @@ static void ospf_dump_lsreq(struct proto *p, struct ospf_lsreq_packet *pkt)
struct ospf_lsreq_header *plsr = (void *) (pkt + 1);
int i, j;
- j = (ntohs(op->length) - sizeof(struct ospf_dbdes_packet)) /
+ j = (ntohs(op->length) - sizeof(struct ospf_lsreq_packet)) /
sizeof(struct ospf_lsreq_header);
for (i = 0; i < j; i++)
diff --git a/proto/ospf/lsupd.c b/proto/ospf/lsupd.c
index ba09fec..f8195dc 100644
--- a/proto/ospf/lsupd.c
+++ b/proto/ospf/lsupd.c
@@ -456,27 +456,34 @@ ospf_lsupd_receive(struct ospf_lsupd_packet *ps,
if (self)
{
- struct top_hash_entry *en;
-
if ((lsatmp.age == LSA_MAXAGE) && (lsatmp.sn == LSA_MAXSEQNO))
{
ospf_lsack_enqueue(n, lsa, ACKL_DIRECT);
continue;
}
- lsatmp.age = LSA_MAXAGE;
- lsatmp.sn = LSA_MAXSEQNO;
- lsa->age = htons(LSA_MAXAGE);
- lsa->sn = htonl(LSA_MAXSEQNO);
- OSPF_TRACE(D_EVENTS, "Premature aging self originated lsa.");
- OSPF_TRACE(D_EVENTS, "Type: %d, Id: %R, Rt: %R",
- lsatmp.type, lsatmp.id, lsatmp.rt);
- lsasum_check(lsa, (lsa + 1)); /* It also calculates chsum! */
- lsatmp.checksum = ntohs(lsa->checksum);
- ospf_lsupd_flood(NULL, lsa, &lsatmp, NULL, oa, 0);
- if (en = ospf_hash_find_header(po->gr, oa->areaid, &lsatmp))
+ OSPF_TRACE(D_EVENTS, "Received old self-originated LSA (Type: %04x, Id: %R, Rt: %R)", lsatmp.type, lsatmp.id, lsatmp.rt);
+
+ if (lsadb)
+ {
+ OSPF_TRACE(D_EVENTS, "Reflooding new self-originated LSA with newer SN");
+ lsadb->lsa.sn = lsatmp.sn + 1;
+ lsadb->lsa.age = 0;
+ lsadb->inst_t = now;
+ lsadb->ini_age = 0;
+ lsasum_calculate(&lsadb->lsa, lsadb->lsa_body);
+ ospf_lsupd_flood(NULL, NULL, &lsadb->lsa, NULL, oa, 1);
+ }
+ else
{
- ospf_lsupd_flood(NULL, NULL, &en->lsa, NULL, oa, 1);
+ OSPF_TRACE(D_EVENTS, "Premature aging it");
+ lsatmp.age = LSA_MAXAGE;
+ lsatmp.sn = LSA_MAXSEQNO;
+ lsa->age = htons(LSA_MAXAGE);
+ lsa->sn = htonl(LSA_MAXSEQNO);
+ lsasum_check(lsa, (lsa + 1)); /* It also calculates chsum! */
+ lsatmp.checksum = ntohs(lsa->checksum);
+ ospf_lsupd_flood(NULL, lsa, &lsatmp, NULL, oa, 0);
}
continue;
}
@@ -484,7 +491,7 @@ ospf_lsupd_receive(struct ospf_lsupd_packet *ps,
/* pg 144 (5a) */
if (lsadb && ((now - lsadb->inst_t) <= MINLSARRIVAL)) /* FIXME: test for flooding? */
{
- DBG("I got it in less that MINLSARRIVAL\n");
+ OSPF_TRACE(D_EVENTS, "Skipping LSA received in less that MINLSARRIVAL");
sendreq = 0;
continue;
}