From 7148e0d77bd8e90b426418c062dc3e8726317a7f Mon Sep 17 00:00:00 2001 From: Martin Buck Date: Tue, 25 Mar 2025 16:32:47 +0100 Subject: ospf6d: Fix LSA memory leaks related to graceful restart Fixes leaks reported by ospf6_gr_topo1 topotest. Signed-off-by: Martin Buck (cherry picked from commit 0db0e7fbd7c6d6c5ba32c741385bc1b2d1acfa77) --- ospf6d/ospf6_flood.c | 1 + ospf6d/ospf6_gr.c | 1 + 2 files changed, 2 insertions(+) diff --git a/ospf6d/ospf6_flood.c b/ospf6d/ospf6_flood.c index 04ff35083f..261eed30ea 100644 --- a/ospf6d/ospf6_flood.c +++ b/ospf6d/ospf6_flood.c @@ -1061,6 +1061,7 @@ void ospf6_receive_lsa(struct ospf6_neighbor *from, zlog_debug( "%s, Not moving to HELPER role, So dicarding GraceLSA", __func__); + ospf6_lsa_delete(new); return; } } diff --git a/ospf6d/ospf6_gr.c b/ospf6d/ospf6_gr.c index 64eb90d5f2..27b8df0828 100644 --- a/ospf6d/ospf6_gr.c +++ b/ospf6d/ospf6_gr.c @@ -371,6 +371,7 @@ void ospf6_gr_check_lsdb_consistency(struct ospf6 *ospf6, snprintfrr(reason, sizeof(reason), "detected inconsistent LSA %s [area %pI4]", lsa->name, &area->area_id); + ospf6_lsa_unlock(&lsa); ospf6_gr_restart_exit(ospf6, reason); return; } -- cgit v1.2.3 From d35493ad517c1485b43bebddf398dfcdb13e0177 Mon Sep 17 00:00:00 2001 From: Martin Buck Date: Tue, 25 Mar 2025 16:53:12 +0100 Subject: tests: Fix wait times in test_ospf6_gr_topo1 topotest Increase wait times to at least the minimum wait time accepted by topotest.run_and_expect(). Also change poll interval to 1s, no point in doings this more frequently. Finally, slightly improve the topology diagram to also include area numbers. Signed-off-by: Martin Buck (cherry picked from commit b73e3ae69dfd2050dc061b81040a4748d8992ddd) --- .../ospf6_gr_topo1/test_ospf6_gr_topo1.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/topotests/ospf6_gr_topo1/test_ospf6_gr_topo1.py b/tests/topotests/ospf6_gr_topo1/test_ospf6_gr_topo1.py index ba705e3dfc..a5715e6d88 100755 --- a/tests/topotests/ospf6_gr_topo1/test_ospf6_gr_topo1.py +++ b/tests/topotests/ospf6_gr_topo1/test_ospf6_gr_topo1.py @@ -17,14 +17,14 @@ test_ospf6_gr_topo1.py: | 1.1.1.1 | +---------+ |eth-rt2 - | + |area 1 |eth-rt1 +---------+ | RT2 | | 2.2.2.2 | +---------+ |eth-rt3 - | + |area 0 |eth-rt2 +---------+ | RT3 | @@ -33,14 +33,14 @@ test_ospf6_gr_topo1.py: eth-rt4| |eth-rt6 | | +---------+ +--------+ - | | + |area 0 |area 0 |eth-rt3 |eth-rt3 +---------+ +---------+ | RT4 | | RT6 | | 4.4.4.4 | | 6.6.6.6 | +---------+ +---------+ |eth-rt5 |eth-rt7 - | | + |area 2 |area 3 |eth-rt4 |eth-rt6 +---------+ +---------+ | RT5 | | RT7 | @@ -153,7 +153,7 @@ def router_compare_json_output(rname, command, reference, tries): expected = json.loads(open(filename).read()) test_func = partial(topotest.router_json_cmp, tgen.gears[rname], command, expected) - _, diff = topotest.run_and_expect(test_func, None, count=tries, wait=0.5) + _, diff = topotest.run_and_expect(test_func, None, count=tries, wait=1) assertmsg = '"{}" JSON output mismatches the expected result'.format(rname) assert diff is None, assertmsg @@ -206,12 +206,12 @@ def check_routers(initial_convergence=False, exiting=None, restarting=None): # processing it. Let's give it a few seconds to allow this to happen # under load. if initial_convergence == True: - tries = 240 + tries = 120 else: if restarting != None: - tries = 40 + tries = 20 else: - tries = 10 + tries = 15 router_compare_json_output( rname, "show ipv6 route ospf json", "show_ipv6_route.json", tries ) @@ -219,7 +219,7 @@ def check_routers(initial_convergence=False, exiting=None, restarting=None): # Check that all adjacencies are up and running (except when there's # an OSPF instance that is shutting down). if exiting == None: - tries = 240 + tries = 120 router_compare_json_output( rname, "show ipv6 ospf neighbor json", @@ -231,9 +231,9 @@ def check_routers(initial_convergence=False, exiting=None, restarting=None): # In the restarting router, wait up to one minute for the LSDB to converge. if exiting != rname: if initial_convergence == True or restarting == rname: - tries = 240 + tries = 120 else: - tries = 10 + tries = 15 router_compare_json_output( rname, "show ipv6 ospf database json", -- cgit v1.2.3