]> git.puffer.fish Git - mirror/frr.git/commitdiff
ospfd: Summarised External LSA is not flushed in one scenario 9408/head
authorMobashshera Rasool <mrasool@vmware.com>
Mon, 16 Aug 2021 11:27:45 +0000 (04:27 -0700)
committerMobashshera Rasool <mrasool@vmware.com>
Tue, 17 Aug 2021 09:15:42 +0000 (02:15 -0700)
Fix CI Failure test_ospf_type5_summary_tc45_p0

Problem Statement:
==================
Summarised LSA is not flushed in OSPFv2 in below scenario:
1. Configure summary-address in ospfv2
2. redistribute static and connected.
3. Check the LSAs are received on neighbor.
4. Now remove all OSPFv2 configs, so neighbor will still have the summarised LSA.
5. Configure router ospf with redistribute static and connected.
6. Check the DB, summarised LSA is present although the configuration is not present.
7. Now configure the summary-address and remove the configuration after sometime.
8. The summarised LSA will be still present.

RCA:
==================
When self originated LSA is received from the neighbor and that
LSA is summarised one, the LSA is refreshed but a flag is not set
due to which it was not able to remove it later.

Fix:
==================
Set the originated flag when refreshing summarised LSA.

Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
ospfd/ospf_flood.c
ospfd/ospf_lsa.c

index 7fddb65a862cb8e25217ec0ac619d117f75a588f..8f9153d766ae64d49c6219d8e8b20f6f323a684c 100644 (file)
@@ -267,6 +267,8 @@ static void ospf_process_self_originated_lsa(struct ospf *ospf,
 
                                ospf_external_lsa_refresh(ospf, new, &ei_aggr,
                                                  LSA_REFRESH_FORCE, true);
+                               SET_FLAG(aggr->flags,
+                                        OSPF_EXTERNAL_AGGRT_ORIGINATED);
                        } else
                                ospf_lsa_flush_as(ospf, new);
                }
index 9ef2a6520adc1393bf112b04a81bd01734d5c482..d209ae053c54359feb35726f7b7843e1900bef4a 100644 (file)
@@ -3631,6 +3631,8 @@ struct ospf_lsa *ospf_lsa_refresh(struct ospf *ospf, struct ospf_lsa *lsa)
 
                                ospf_external_lsa_refresh(ospf, lsa, &ei_aggr,
                                                  LSA_REFRESH_FORCE, true);
+                               SET_FLAG(aggr->flags,
+                                        OSPF_EXTERNAL_AGGRT_ORIGINATED);
                        } else
                                ospf_lsa_flush_as(ospf, lsa);
                }