Minor fixes in OSPF.
This commit is contained in:
parent
a421ec33cb
commit
28008482a9
2 changed files with 23 additions and 16 deletions
|
@ -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);
|
struct ospf_lsreq_header *plsr = (void *) (pkt + 1);
|
||||||
int i, j;
|
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);
|
sizeof(struct ospf_lsreq_header);
|
||||||
|
|
||||||
for (i = 0; i < j; i++)
|
for (i = 0; i < j; i++)
|
||||||
|
|
|
@ -456,27 +456,34 @@ ospf_lsupd_receive(struct ospf_lsupd_packet *ps,
|
||||||
|
|
||||||
if (self)
|
if (self)
|
||||||
{
|
{
|
||||||
struct top_hash_entry *en;
|
|
||||||
|
|
||||||
if ((lsatmp.age == LSA_MAXAGE) && (lsatmp.sn == LSA_MAXSEQNO))
|
if ((lsatmp.age == LSA_MAXAGE) && (lsatmp.sn == LSA_MAXSEQNO))
|
||||||
{
|
{
|
||||||
ospf_lsack_enqueue(n, lsa, ACKL_DIRECT);
|
ospf_lsack_enqueue(n, lsa, ACKL_DIRECT);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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_TRACE(D_EVENTS, "Premature aging it");
|
||||||
lsatmp.age = LSA_MAXAGE;
|
lsatmp.age = LSA_MAXAGE;
|
||||||
lsatmp.sn = LSA_MAXSEQNO;
|
lsatmp.sn = LSA_MAXSEQNO;
|
||||||
lsa->age = htons(LSA_MAXAGE);
|
lsa->age = htons(LSA_MAXAGE);
|
||||||
lsa->sn = htonl(LSA_MAXSEQNO);
|
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! */
|
lsasum_check(lsa, (lsa + 1)); /* It also calculates chsum! */
|
||||||
lsatmp.checksum = ntohs(lsa->checksum);
|
lsatmp.checksum = ntohs(lsa->checksum);
|
||||||
ospf_lsupd_flood(NULL, lsa, &lsatmp, NULL, oa, 0);
|
ospf_lsupd_flood(NULL, lsa, &lsatmp, NULL, oa, 0);
|
||||||
if (en = ospf_hash_find_header(po->gr, oa->areaid, &lsatmp))
|
|
||||||
{
|
|
||||||
ospf_lsupd_flood(NULL, NULL, &en->lsa, NULL, oa, 1);
|
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -484,7 +491,7 @@ ospf_lsupd_receive(struct ospf_lsupd_packet *ps,
|
||||||
/* pg 144 (5a) */
|
/* pg 144 (5a) */
|
||||||
if (lsadb && ((now - lsadb->inst_t) <= MINLSARRIVAL)) /* FIXME: test for flooding? */
|
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;
|
sendreq = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue