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.
This commit is contained in:
parent
0a505706bc
commit
39a6b19d6d
1 changed files with 1 additions and 1 deletions
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue