summaryrefslogtreecommitdiff
path: root/ospf6d/ospf6_area.c
diff options
context:
space:
mode:
Diffstat (limited to 'ospf6d/ospf6_area.c')
-rw-r--r--ospf6d/ospf6_area.c40
1 files changed, 34 insertions, 6 deletions
diff --git a/ospf6d/ospf6_area.c b/ospf6d/ospf6_area.c
index c38ce09a27..d65e40279d 100644
--- a/ospf6d/ospf6_area.c
+++ b/ospf6d/ospf6_area.c
@@ -661,7 +661,9 @@ DEFUN (area_filter_list,
XFREE(MTYPE_OSPF6_PLISTNAME, PREFIX_NAME_OUT(area));
PREFIX_NAME_OUT(area) =
XSTRDUP(MTYPE_OSPF6_PLISTNAME, plistname);
- ospf6_abr_enable_area(area);
+
+ /* Redo summaries if required */
+ ospf6_abr_reexport(area);
}
return CMD_SUCCESS;
@@ -703,12 +705,32 @@ DEFUN (no_area_filter_list,
return CMD_SUCCESS;
XFREE(MTYPE_OSPF6_PLISTNAME, PREFIX_NAME_OUT(area));
- ospf6_abr_enable_area(area);
+ PREFIX_LIST_OUT(area) = NULL;
+ ospf6_abr_reexport(area);
}
return CMD_SUCCESS;
}
+void ospf6_filter_update(struct access_list *access)
+{
+ struct ospf6_area *oa;
+ struct listnode *n, *node, *nnode;
+ struct ospf6 *ospf6;
+
+ for (ALL_LIST_ELEMENTS(om6->ospf6, node, nnode, ospf6)) {
+ for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, n, oa)) {
+ if (IMPORT_NAME(oa)
+ && strcmp(IMPORT_NAME(oa), access->name) == 0)
+ ospf6_abr_reimport(oa);
+
+ if (EXPORT_NAME(oa)
+ && strcmp(EXPORT_NAME(oa), access->name) == 0)
+ ospf6_abr_reexport(oa);
+ }
+ }
+}
+
void ospf6_area_plist_update(struct prefix_list *plist, int add)
{
struct listnode *node, *nnode;
@@ -724,11 +746,15 @@ void ospf6_area_plist_update(struct prefix_list *plist, int add)
for (ALL_LIST_ELEMENTS(om6->ospf6, node, nnode, ospf6)) {
for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, n, oa)) {
if (PREFIX_NAME_IN(oa)
- && !strcmp(PREFIX_NAME_IN(oa), name))
+ && !strcmp(PREFIX_NAME_IN(oa), name)) {
PREFIX_LIST_IN(oa) = add ? plist : NULL;
+ ospf6_abr_reexport(oa);
+ }
if (PREFIX_NAME_OUT(oa)
- && !strcmp(PREFIX_NAME_OUT(oa), name))
+ && !strcmp(PREFIX_NAME_OUT(oa), name)) {
PREFIX_LIST_OUT(oa) = add ? plist : NULL;
+ ospf6_abr_reexport(oa);
+ }
}
}
}
@@ -818,7 +844,9 @@ DEFUN (area_export_list,
free(EXPORT_NAME(area));
EXPORT_NAME(area) = strdup(argv[idx_name]->arg);
- ospf6_abr_enable_area(area);
+
+ /* Redo summaries if required */
+ ospf6_abr_reexport(area);
return CMD_SUCCESS;
}
@@ -846,7 +874,7 @@ DEFUN (no_area_export_list,
free(EXPORT_NAME(area));
EXPORT_NAME(area) = NULL;
- ospf6_abr_enable_area(area);
+ ospf6_abr_reexport(area);
return CMD_SUCCESS;
}