Skip to content

Commit 288a461

Browse files
committed
ospf6d: Disable and delete OSPFv3 areas that no longer have config.
This fix will delete an OSPFv3 area when all the interfaces and configuration (ranges, NSSA ranges, stub area, NSSA area, filter-list, import-list and export-list) have been removed. The changes provides a general solution to #18324. Signed-off-by: Acee Lindem <[email protected]>
1 parent 2ab8cce commit 288a461

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

ospf6d/ospf6_area.c

+29
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,17 @@ void ospf6_area_delete(struct ospf6_area *oa)
366366
XFREE(MTYPE_OSPF6_AREA, oa);
367367
}
368368

369+
void ospf6_area_no_config_delete(struct ospf6_area *oa)
370+
{
371+
if ((oa->if_list->count == 0) && (oa->range_table->count == 0) &&
372+
(oa->nssa_range_table->count == 0) && !IS_AREA_STUB(oa) && !IS_AREA_NSSA(oa) &&
373+
!PREFIX_NAME_IN(oa) && !PREFIX_NAME_OUT(oa) && !IMPORT_NAME(oa) && !EXPORT_NAME(oa)) {
374+
if (CHECK_FLAG((oa)->flag, OSPF6_AREA_ENABLE))
375+
ospf6_area_disable(oa);
376+
ospf6_area_delete(oa);
377+
}
378+
}
379+
369380
struct ospf6_area *ospf6_area_lookup_by_area_id(uint32_t area_id)
370381
{
371382
struct ospf6_area *oa;
@@ -646,6 +657,9 @@ DEFUN (no_area_range,
646657
}
647658
ospf6_route_remove(range, oa->range_table);
648659

660+
/* Delete area if no interfaces or configuration. */
661+
ospf6_area_no_config_delete(oa);
662+
649663
return CMD_SUCCESS;
650664
}
651665

@@ -814,6 +828,9 @@ DEFUN (no_area_filter_list,
814828
if (ospf6_check_and_set_router_abr(area->ospf6))
815829
ospf6_schedule_abr_task(ospf6);
816830

831+
/* Delete area if no interfaces or configuration. */
832+
ospf6_area_no_config_delete(area);
833+
817834
return CMD_SUCCESS;
818835
}
819836

@@ -939,6 +956,9 @@ DEFUN (no_area_import_list,
939956
if (ospf6_check_and_set_router_abr(area->ospf6))
940957
ospf6_schedule_abr_task(ospf6);
941958

959+
/* Delete area if no interfaces or configuration. */
960+
ospf6_area_no_config_delete(area);
961+
942962
return CMD_SUCCESS;
943963
}
944964

@@ -1002,6 +1022,9 @@ DEFUN (no_area_export_list,
10021022
if (ospf6_check_and_set_router_abr(area->ospf6))
10031023
ospf6_schedule_abr_task(ospf6);
10041024

1025+
/* Delete area if no interfaces or configuration. */
1026+
ospf6_area_no_config_delete(area);
1027+
10051028
return CMD_SUCCESS;
10061029
}
10071030

@@ -1338,6 +1361,9 @@ DEFUN (no_ospf6_area_stub_no_summary,
13381361
ospf6_area_stub_unset(ospf6, area);
13391362
ospf6_area_no_summary_unset(ospf6, area);
13401363

1364+
/* Delete area if no interfaces or configuration. */
1365+
ospf6_area_no_config_delete(area);
1366+
13411367
return CMD_SUCCESS;
13421368
}
13431369

@@ -1418,6 +1444,9 @@ DEFPY(no_ospf6_area_nssa, no_ospf6_area_nssa_cmd,
14181444
ospf6_area_no_summary_unset(ospf6, area);
14191445
ospf6_nssa_default_originate_unset(ospf6, area);
14201446

1447+
/* Delete area if no interfaces or configuration. */
1448+
ospf6_area_no_config_delete(area);
1449+
14211450
return CMD_SUCCESS;
14221451
}
14231452

ospf6d/ospf6_area.h

+1
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ extern int ospf6_area_cmp(void *va, void *vb);
144144
extern struct ospf6_area *ospf6_area_create(uint32_t area_id,
145145
struct ospf6 *ospf6, int df);
146146
extern void ospf6_area_delete(struct ospf6_area *oa);
147+
extern void ospf6_area_no_config_delete(struct ospf6_area *oa);
147148
extern struct ospf6_area *ospf6_area_lookup(uint32_t area_id,
148149
struct ospf6 *ospf6);
149150
extern struct ospf6_area *ospf6_area_lookup_by_area_id(uint32_t area_id);

ospf6d/ospf6_interface.c

+3
Original file line numberDiff line numberDiff line change
@@ -1823,6 +1823,9 @@ void ospf6_interface_stop(struct ospf6_interface *oi)
18231823
if (oa->if_list->count == 0) {
18241824
UNSET_FLAG(oa->flag, OSPF6_AREA_ENABLE);
18251825
ospf6_abr_disable_area(oa);
1826+
1827+
/* Delete area if no interfaces or configuration. */
1828+
ospf6_area_no_config_delete(oa);
18261829
}
18271830
}
18281831

0 commit comments

Comments
 (0)