summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMobashshera Rasool <mrasool@vmware.com>2022-11-14 21:00:55 -0800
committerMobashshera Rasool <mrasool@vmware.com>2022-11-21 03:19:33 -0800
commitca5997cd018ec66534285130d02de168a3a4ed5c (patch)
treebcf182ce91c8ca8e408f59ff50ae78ef40a603f8
parent9961cffbe0ef0d1398b8ba047ed86aeb9162afad (diff)
ospfd: Fix RFC conformance test cases 25.19 and 27.6
Steps to reproduce: -------------------------- 1. ANVL: Establish full adjacency with DUT for neighbor Rtr-0-A on DIface-0 with DUT as DR. 2. ANVL: Listen (for up to 2 * <RxmtInterval> seconds) on DIface-0. 3. DUT: Send <OSPF-LSU> packet. 4. ANVL: Verify that the received <OSPF-LSU> packet contains a Network- LSA for network N1 originated by DUT, and the LS Sequence Number is set to <InitialSequenceNumber>. 5. ANVL: Establish full adjacency with DUT for neighbor Rtr-0-B on DIface-0 with DUT as DR. 6. ANVL: Listen (for up to 2 * <RxmtInterval> seconds) on DIface-0. 7. DUT: Send <OSPF-LSU> packet. 8. ANVL: Verify that the received <OSPF-LSU> packet contains a new instance of the Network-LSA for network N1 originated by DUT, and the LS Sequence Number is set to (<InitialSequenceNumber> + 1). Both the test cases were failing while verifying the initial sequence number for network LSA. This is because currently OSPF does not reset its LSA sequence number when it is going down. Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
-rw-r--r--lib/libospf.h1
-rw-r--r--ospfd/ospf_lsa.c7
2 files changed, 8 insertions, 0 deletions
diff --git a/lib/libospf.h b/lib/libospf.h
index c8ada9d3c5..161c7635d8 100644
--- a/lib/libospf.h
+++ b/lib/libospf.h
@@ -52,6 +52,7 @@ extern "C" {
#define OSPF_DEFAULT_DESTINATION 0x00000000 /* 0.0.0.0 */
#define OSPF_INITIAL_SEQUENCE_NUMBER 0x80000001U
#define OSPF_MAX_SEQUENCE_NUMBER 0x7fffffffU
+#define OSPF_INVALID_SEQUENCE_NUMBER 0x80000000U
/* OSPF Interface Types */
#define OSPF_IFTYPE_NONE 0
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c
index a67b6c6c19..92558e3c51 100644
--- a/ospfd/ospf_lsa.c
+++ b/ospfd/ospf_lsa.c
@@ -3648,6 +3648,7 @@ void ospf_flush_self_originated_lsas_now(struct ospf *ospf)
struct ospf_interface *oi;
struct ospf_lsa *lsa;
struct route_node *rn;
+ struct ospf_if_params *oip;
int need_to_flush_ase = 0;
ospf->inst_shutdown = 1;
@@ -3680,6 +3681,12 @@ void ospf_flush_self_originated_lsas_now(struct ospf *ospf)
ospf_lsa_flush_area(oi->network_lsa_self, area);
ospf_lsa_unlock(&oi->network_lsa_self);
oi->network_lsa_self = NULL;
+
+ oip = ospf_lookup_if_params(
+ oi->ifp, oi->address->u.prefix4);
+ if (oip)
+ oip->network_lsa_seqnum = htonl(
+ OSPF_INVALID_SEQUENCE_NUMBER);
}
if (oi->type != OSPF_IFTYPE_VIRTUALLINK