diff options
| author | Mobashshera Rasool <mrasool@vmware.com> | 2021-08-06 05:15:10 -0700 |
|---|---|---|
| committer | Mobashshera Rasool <mrasool@vmware.com> | 2021-08-06 05:15:10 -0700 |
| commit | d125213c8a45d46797bb11e2fb37875410544020 (patch) | |
| tree | 4008fbd9ca16206489cd89290bdc0e60dc3bdbee /ospfd/ospf_nsm.c | |
| parent | 6696b16bf0672ae16e7d1c852c25e4f424721b39 (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.c | 8 |
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 |
