summaryrefslogtreecommitdiff
path: root/ospfd/ospf_nsm.c
diff options
context:
space:
mode:
authorMobashshera Rasool <mrasool@vmware.com>2021-08-06 05:15:10 -0700
committerMobashshera Rasool <mrasool@vmware.com>2021-08-06 05:15:10 -0700
commitd125213c8a45d46797bb11e2fb37875410544020 (patch)
tree4008fbd9ca16206489cd89290bdc0e60dc3bdbee /ospfd/ospf_nsm.c
parent6696b16bf0672ae16e7d1c852c25e4f424721b39 (diff)
ospfd: NSSA area should not exchange Type-4 LSAs in DD
Problem Statement: ================== OSPF Peer gets stuck in EXSTART with ARISTA Device. Root Cause: ================= First peer is form with Arista device in normal area and then the area type is changed to NSSA. Due to this Type-4 and Type-5 LSAs advertised by Arista router is still present in the OSPF DB. While DD exchange the Type-5 LSAs are omitted but the Type-4 LSAs are not omitted due to which Arista device gets stuck in EXSTART and it keeps moving between EXCHANGE And EXSTART. Fix: ================= When the area is NSSA, we should not send Type-4 LSAs in DD exchange packet. Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
Diffstat (limited to 'ospfd/ospf_nsm.c')
-rw-r--r--ospfd/ospf_nsm.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c
index 892d264a2d..268fb81e52 100644
--- a/ospfd/ospf_nsm.c
+++ b/ospfd/ospf_nsm.c
@@ -298,8 +298,6 @@ static int nsm_negotiation_done(struct ospf_neighbor *nbr)
ospf_db_summary_add(nbr, lsa);
LSDB_LOOP (SUMMARY_LSDB(area), rn, lsa)
ospf_db_summary_add(nbr, lsa);
- LSDB_LOOP (ASBR_SUMMARY_LSDB(area), rn, lsa)
- ospf_db_summary_add(nbr, lsa);
/* Process only if the neighbor is opaque capable. */
if (CHECK_FLAG(nbr->options, OSPF_OPTION_O)) {
@@ -314,10 +312,14 @@ static int nsm_negotiation_done(struct ospf_neighbor *nbr)
ospf_db_summary_add(nbr, lsa);
}
+ /* For Stub/NSSA area, we should not send Type-4 and Type-5 LSAs */
if (nbr->oi->type != OSPF_IFTYPE_VIRTUALLINK
- && area->external_routing == OSPF_AREA_DEFAULT)
+ && area->external_routing == OSPF_AREA_DEFAULT) {
+ LSDB_LOOP (ASBR_SUMMARY_LSDB(area), rn, lsa)
+ ospf_db_summary_add(nbr, lsa);
LSDB_LOOP (EXTERNAL_LSDB(nbr->oi->ospf), rn, lsa)
ospf_db_summary_add(nbr, lsa);
+ }
if (CHECK_FLAG(nbr->options, OSPF_OPTION_O)
&& (nbr->oi->type != OSPF_IFTYPE_VIRTUALLINK