Commit 39a6b19d authored by Ondřej Zajíček's avatar Ondřej Zajíček

OSPF: Fix bogus LSA ID collisions between received and originated LSAs

After restart, LSAs locally originated by the previous instance are
received from neighbors. They are installed to LSA db and flushed. If
export of a route triggers origination of a new external LSA before flush
of the received one is complete, the check in ospf_originate_lsa() causes
origination to fail (because en->nf is NULL for the old LSA and non-NULL
for the new LSA). The patch fixes this by updating the en->nf for LSAs
being flushed (as is already done for empty ones). Generally, en->nf
field deserves some better description in the code.

Thanks to Jigar Mehta for analyzing the problem.
parent 0a505706
...@@ -278,7 +278,7 @@ ospf_originate_lsa(struct ospf_proto *p, struct ospf_new_lsa *lsa) ...@@ -278,7 +278,7 @@ ospf_originate_lsa(struct ospf_proto *p, struct ospf_new_lsa *lsa)
if (!SNODE_VALID(en)) if (!SNODE_VALID(en))
s_add_tail(&p->lsal, SNODE en); s_add_tail(&p->lsal, SNODE en);
if (en->lsa_body == NULL) if (!en->nf || !en->lsa_body)
en->nf = lsa->nf; en->nf = lsa->nf;
if (en->nf != lsa->nf) if (en->nf != lsa->nf)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment