summaryrefslogtreecommitdiff
path: root/ospfd/ospf_vty.c
diff options
context:
space:
mode:
Diffstat (limited to 'ospfd/ospf_vty.c')
-rw-r--r--ospfd/ospf_vty.c77
1 files changed, 66 insertions, 11 deletions
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
index e6835ffc72..134d8b6d1d 100644
--- a/ospfd/ospf_vty.c
+++ b/ospfd/ospf_vty.c
@@ -577,6 +577,7 @@ DEFUN (ospf_network_area,
struct prefix_ipv4 p;
struct in_addr area_id;
int ret, format;
+ uint32_t count;
if (ospf->instance) {
vty_out(vty,
@@ -584,14 +585,15 @@ DEFUN (ospf_network_area,
return CMD_WARNING_CONFIG_FAILED;
}
- if (ospf->if_ospf_cli_count > 0) {
+ count = ospf_count_area_params(ospf);
+ if (count > 0) {
vty_out(vty,
"Please remove all ip ospf area x.x.x.x commands first.\n");
if (IS_DEBUG_OSPF_EVENT)
zlog_debug(
"%s ospf vrf %s num of %u ip ospf area x config",
__func__, ospf->name ? ospf->name : "NIL",
- ospf->if_ospf_cli_count);
+ count);
return CMD_WARNING_CONFIG_FAILED;
}
@@ -1574,6 +1576,58 @@ DEFUN (ospf_area_nssa,
return ospf_area_nssa_cmd_handler(vty, argc, argv, 0, 0);
}
+DEFUN(ospf_area_nssa_suppress_fa, ospf_area_nssa_suppress_fa_cmd,
+ "area <A.B.C.D|(0-4294967295)> nssa suppress-fa",
+ "OSPF area parameters\n"
+ "OSPF area ID in IP address format\n"
+ "OSPF area ID as a decimal value\n"
+ "Configure OSPF area as nssa\n"
+ "Suppress forwarding address\n")
+{
+ int idx_ipv4_number = 1;
+ struct in_addr area_id;
+ int format;
+
+ VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf);
+ VTY_GET_OSPF_AREA_ID_NO_BB("NSSA", area_id, format,
+ argv[idx_ipv4_number]->arg);
+
+ ospf_area_display_format_set(ospf, ospf_area_get(ospf, area_id),
+ format);
+ ospf_area_nssa_suppress_fa_set(ospf, area_id);
+
+ ospf_schedule_abr_task(ospf);
+
+ return CMD_SUCCESS;
+}
+
+DEFUN(no_ospf_area_nssa_suppress_fa, no_ospf_area_nssa_suppress_fa_cmd,
+ "no area <A.B.C.D|(0-4294967295)> nssa suppress-fa",
+ NO_STR
+ "OSPF area parameters\n"
+ "OSPF area ID in IP address format\n"
+ "OSPF area ID as a decimal value\n"
+ "Configure OSPF area as nssa\n"
+ "Suppress forwarding address\n")
+{
+ int idx_ipv4_number = 2;
+ struct in_addr area_id;
+ int format;
+
+ VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf);
+
+ VTY_GET_OSPF_AREA_ID_NO_BB("nssa", area_id, format,
+ argv[idx_ipv4_number]->arg);
+
+ ospf_area_display_format_set(ospf, ospf_area_get(ospf, area_id),
+ format);
+ ospf_area_nssa_suppress_fa_unset(ospf, area_id);
+
+ ospf_schedule_abr_task(ospf);
+
+ return CMD_SUCCESS;
+}
+
DEFUN (ospf_area_nssa_no_summary,
ospf_area_nssa_no_summary_cmd,
"area <A.B.C.D|(0-4294967295)> nssa no-summary",
@@ -7291,7 +7345,7 @@ DEFUN (show_ip_ospf_database_type_adv_router,
bool all_vrf = false;
int ret = CMD_SUCCESS;
int inst = 0;
- int idx = 0, idx_vrf = 0;
+ int idx_vrf = 0;
uint8_t use_vrf = 0;
bool uj = use_json(argc, argv);
json_object *json = NULL;
@@ -7336,7 +7390,7 @@ DEFUN (show_ip_ospf_database_type_adv_router,
}
ret = show_ip_ospf_database_type_adv_router_common(
- vty, ospf, idx ? 1 : 0, argc, argv, use_vrf, json, uj);
+ vty, ospf, 0, argc, argv, use_vrf, json, uj);
}
if (uj) {
@@ -8821,10 +8875,8 @@ DEFUN (ip_ospf_area,
if (count > 0) {
ospf = ospf_lookup_by_vrf_id(ifp->vrf_id);
- if (ospf) {
+ if (ospf)
ospf_interface_area_unset(ospf, ifp);
- ospf->if_ospf_cli_count -= count;
- }
}
return CMD_NOT_MY_INSTANCE;
@@ -8882,10 +8934,8 @@ DEFUN (ip_ospf_area,
params->if_area_id_fmt = format;
}
- if (ospf) {
+ if (ospf)
ospf_interface_area_set(ospf, ifp);
- ospf->if_ospf_cli_count++;
- }
return CMD_SUCCESS;
}
@@ -8951,7 +9001,6 @@ DEFUN (no_ip_ospf_area,
if (ospf) {
ospf_interface_area_unset(ospf, ifp);
- ospf->if_ospf_cli_count--;
ospf_area_check_free(ospf, area_id);
}
@@ -11823,6 +11872,10 @@ static int config_write_ospf_area(struct vty *vty, struct ospf *ospf)
vty_out(vty,
" area %s nssa no-summary\n",
buf);
+ if (area->suppress_fa)
+ vty_out(vty,
+ " area %s nssa suppress-fa\n",
+ buf);
}
if (area->default_cost != 1)
@@ -12684,6 +12737,8 @@ void ospf_vty_init(void)
install_element(OSPF_NODE, &ospf_area_nssa_translate_cmd);
install_element(OSPF_NODE, &ospf_area_nssa_no_summary_cmd);
install_element(OSPF_NODE, &no_ospf_area_nssa_no_summary_cmd);
+ install_element(OSPF_NODE, &ospf_area_nssa_suppress_fa_cmd);
+ install_element(OSPF_NODE, &no_ospf_area_nssa_suppress_fa_cmd);
install_element(OSPF_NODE, &no_ospf_area_nssa_cmd);
install_element(OSPF_NODE, &ospf_area_default_cost_cmd);