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.c240
1 files changed, 100 insertions, 140 deletions
diff --git a/ospf6d/ospf6_area.c b/ospf6d/ospf6_area.c
index 685be58324..9ba7287656 100644
--- a/ospf6d/ospf6_area.c
+++ b/ospf6d/ospf6_area.c
@@ -435,25 +435,32 @@ ospf6_area_show (struct vty *vty, struct ospf6_area *oa)
DEFUN (area_range,
area_range_cmd,
- "area A.B.C.D range X:X::X:X/M",
- "OSPF area parameters\n"
- OSPF6_AREA_ID_STR
+ "area <A.B.C.D|(0-4294967295)> range X:X::X:X/M [<advertise|not-advertise|cost (0-16777215)>]",
+ "OSPF6 area parameters\n"
+ "OSPF6 area ID in IP address format\n"
+ "OSPF6 area ID as a decimal value\n"
"Configured address range\n"
"Specify IPv6 prefix\n"
- )
+ "Advertise\n"
+ "Do not advertise\n"
+ "User specified metric for this range\n"
+ "Advertised metric for this range\n")
{
+ int idx_ipv4 = 1;
+ int idx_ipv6_prefixlen = 3;
+ int idx_type = 4;
int ret;
struct ospf6_area *oa;
struct prefix prefix;
struct ospf6_route *range;
u_int32_t cost = OSPF_AREA_RANGE_COST_UNSPEC;
- OSPF6_CMD_AREA_GET (argv[0], oa);
+ OSPF6_CMD_AREA_GET (argv[idx_ipv4]->arg, oa);
- ret = str2prefix (argv[1], &prefix);
+ ret = str2prefix (argv[idx_ipv6_prefixlen]->arg, &prefix);
if (ret != 1 || prefix.family != AF_INET6)
{
- vty_out (vty, "Malformed argument: %s%s", argv[1], VNL);
+ vty_out (vty, "Malformed argument: %s%s", argv[idx_ipv6_prefixlen]->arg, VNL);
return CMD_SUCCESS;
}
@@ -469,26 +476,26 @@ DEFUN (area_range,
(u_int32_t) htonl(ospf6_new_range_ls_id (oa->range_table));
}
- if (argc > 2)
+ if (argc > idx_type)
{
- if (strcmp (argv[2], "not-advertise") == 0)
+ if (strmatch (argv[idx_type]->text, "not-advertise"))
{
SET_FLAG (range->flag, OSPF6_ROUTE_DO_NOT_ADVERTISE);
}
- else if (strcmp (argv[2], "advertise") == 0)
+ else if (strmatch (argv[idx_type]->text, "advertise"))
{
UNSET_FLAG (range->flag, OSPF6_ROUTE_DO_NOT_ADVERTISE);
}
else
{
- VTY_GET_INTEGER_RANGE ("cost", cost, argv[2], 0, OSPF_LS_INFINITY);
+ VTY_GET_INTEGER_RANGE ("cost", cost, argv[5]->arg, 0, OSPF_LS_INFINITY);
UNSET_FLAG (range->flag, OSPF6_ROUTE_DO_NOT_ADVERTISE);
}
}
range->path.u.cost_config = cost;
- zlog_debug ("%s: for prefix %s, flag = %x\n", __func__, argv[1], range->flag);
+ zlog_debug ("%s: for prefix %s, flag = %x\n", __func__, argv[idx_ipv6_prefixlen]->arg, range->flag);
if (range->rnode == NULL)
{
ospf6_route_add (range, oa->range_table);
@@ -503,64 +510,34 @@ DEFUN (area_range,
return CMD_SUCCESS;
}
-ALIAS (area_range,
- area_range_advertise_cmd,
- "area A.B.C.D range X:X::X:X/M (advertise|not-advertise)",
- "OSPF area parameters\n"
- OSPF6_AREA_ID_STR
- "Configured address range\n"
- "Specify IPv6 prefix\n"
- )
-
-ALIAS (area_range,
- area_range_cost_cmd,
- "area (A.B.C.D|<0-4294967295>) range X:X::X:X/M cost <0-16777215>",
- "OSPF area parameters\n"
- OSPF6_AREA_ID_STR
- "Summarize routes matching address/mask (border routers only)\n"
- "Area range prefix\n"
- "User specified metric for this range\n"
- "Advertised metric for this range\n")
-
-ALIAS (area_range,
- area_range_advertise_cost_cmd,
- "area (A.B.C.D|<0-4294967295>) range X:X::X:X/M advertise cost <0-16777215>",
- "OSPF area parameters\n"
- OSPF6_AREA_ID_STR
- "Summarize routes matching address/mask (border routers only)\n"
- "Area range prefix\n"
- "User specified metric for this range\n"
- "Advertised metric for this range\n")
-
DEFUN (no_area_range,
no_area_range_cmd,
- "no area A.B.C.D range X:X::X:X/M",
+ "no area A.B.C.D range X:X::X:X/M [<advertise|not-advertise>] [cost (0-16777215)]",
NO_STR
- "OSPF area parameters\n"
+ "OSPF6 area parameters\n"
OSPF6_AREA_ID_STR
"Configured address range\n"
"Specify IPv6 prefix\n")
{
+ int idx_ipv4 = 2;
int ret;
struct ospf6_area *oa;
struct prefix prefix;
struct ospf6_route *range, *route;
- OSPF6_CMD_AREA_GET (argv[0], oa);
- argc--;
- argv++;
+ OSPF6_CMD_AREA_GET (argv[idx_ipv4]->arg, oa);
- ret = str2prefix (argv[0], &prefix);
+ ret = str2prefix (argv[idx_ipv4]->arg, &prefix);
if (ret != 1 || prefix.family != AF_INET6)
{
- vty_out (vty, "Malformed argument: %s%s", argv[0], VNL);
+ vty_out (vty, "Malformed argument: %s%s", argv[idx_ipv4]->arg, VNL);
return CMD_SUCCESS;
}
range = ospf6_route_lookup (&prefix, oa->range_table);
if (range == NULL)
{
- vty_out (vty, "Range %s does not exists.%s", argv[0], VNL);
+ vty_out (vty, "Range %s does not exists.%s", argv[idx_ipv4]->arg, VNL);
return CMD_SUCCESS;
}
@@ -584,36 +561,8 @@ DEFUN (no_area_range,
return CMD_SUCCESS;
}
-ALIAS (no_area_range,
- no_area_range_advertise_cmd,
- "no area A.B.C.D range X:X::X:X/M (advertise|not-advertise)",
- NO_STR
- "OSPF area parameters\n"
- OSPF6_AREA_ID_STR
- "Configured address range\n"
- "Specify IPv6 prefix\n")
-ALIAS (no_area_range,
- no_area_range_cost_cmd,
- "no area (A.B.C.D|<0-4294967295>) range X:X::X:X/M cost <0-16777215>",
- NO_STR
- "OSPF area parameters\n"
- OSPF6_AREA_ID_STR
- "Summarize routes matching address/mask (border routers only)\n"
- "Area range prefix\n"
- "User specified metric for this range\n"
- "Advertised metric for this range\n")
-ALIAS (no_area_range,
- no_area_range_advertise_cost_cmd,
- "no area (A.B.C.D|<0-4294967295>) range X:X::X:X/M advertise cost <0-16777215>",
- NO_STR
- "OSPF area parameters\n"
- OSPF6_AREA_ID_STR
- "Summarize routes matching address/mask (border routers only)\n"
- "Area range prefix\n"
- "User specified metric for this range\n"
- "Advertised metric for this range\n")
void
ospf6_area_config_write (struct vty *vty)
@@ -668,30 +617,30 @@ ospf6_area_config_write (struct vty *vty)
DEFUN (area_filter_list,
area_filter_list_cmd,
- "area A.B.C.D filter-list prefix WORD (in|out)",
- "OSPFv6 area parameters\n"
- "OSPFv6 area ID in IP address format\n"
- "Filter networks between OSPFv6 areas\n"
- "Filter prefixes between OSPFv6 areas\n"
+ "area A.B.C.D filter-list prefix WORD <in|out>",
+ "OSPF6 area parameters\n"
+ "OSPF6 area ID in IP address format\n"
+ "Filter networks between OSPF6 areas\n"
+ "Filter prefixes between OSPF6 areas\n"
"Name of an IPv6 prefix-list\n"
"Filter networks sent to this area\n"
"Filter networks sent from this area\n")
{
+ int idx_ipv4 = 1;
+ int idx_word = 4;
struct ospf6_area *area;
struct prefix_list *plist;
- OSPF6_CMD_AREA_GET (argv[0], area);
- argc--;
- argv++;
+ OSPF6_CMD_AREA_GET (argv[idx_ipv4]->arg, area);
- plist = prefix_list_lookup (AFI_IP6, argv[0]);
- if (strncmp (argv[1], "in", 2) == 0)
+ plist = prefix_list_lookup (AFI_IP6, argv[idx_ipv4]->arg);
+ if (strncmp (argv[idx_word]->arg, "in", 2) == 0)
{
PREFIX_LIST_IN (area) = plist;
if (PREFIX_NAME_IN (area))
free (PREFIX_NAME_IN (area));
- PREFIX_NAME_IN (area) = strdup (argv[0]);
+ PREFIX_NAME_IN (area) = strdup (argv[idx_ipv4]->arg);
ospf6_abr_reimport (area);
}
else
@@ -700,7 +649,7 @@ DEFUN (area_filter_list,
if (PREFIX_NAME_OUT (area))
free (PREFIX_NAME_OUT (area));
- PREFIX_NAME_OUT (area) = strdup (argv[0]);
+ PREFIX_NAME_OUT (area) = strdup (argv[idx_ipv4]->arg);
ospf6_abr_enable_area (area);
}
@@ -709,26 +658,26 @@ DEFUN (area_filter_list,
DEFUN (no_area_filter_list,
no_area_filter_list_cmd,
- "no area A.B.C.D filter-list prefix WORD (in|out)",
+ "no area A.B.C.D filter-list prefix WORD <in|out>",
NO_STR
- "OSPFv6 area parameters\n"
- "OSPFv6 area ID in IP address format\n"
- "Filter networks between OSPFv6 areas\n"
- "Filter prefixes between OSPFv6 areas\n"
+ "OSPF6 area parameters\n"
+ "OSPF6 area ID in IP address format\n"
+ "Filter networks between OSPF6 areas\n"
+ "Filter prefixes between OSPF6 areas\n"
"Name of an IPv6 prefix-list\n"
"Filter networks sent to this area\n"
"Filter networks sent from this area\n")
{
+ int idx_ipv4 = 2;
+ int idx_word = 5;
struct ospf6_area *area;
- OSPF6_CMD_AREA_GET (argv[0], area);
- argc--;
- argv++;
+ OSPF6_CMD_AREA_GET (argv[idx_ipv4]->arg, area);
- if (strncmp (argv[1], "in", 2) == 0)
+ if (strncmp (argv[idx_word]->arg, "in", 2) == 0)
{
if (PREFIX_NAME_IN (area))
- if (strcmp (PREFIX_NAME_IN (area), argv[0]) != 0)
+ if (strcmp (PREFIX_NAME_IN (area), argv[idx_ipv4]->arg) != 0)
return CMD_SUCCESS;
PREFIX_LIST_IN (area) = NULL;
@@ -741,7 +690,7 @@ DEFUN (no_area_filter_list,
else
{
if (PREFIX_NAME_OUT (area))
- if (strcmp (PREFIX_NAME_OUT (area), argv[0]) != 0)
+ if (strcmp (PREFIX_NAME_OUT (area), argv[idx_ipv4]->arg) != 0)
return CMD_SUCCESS;
PREFIX_LIST_OUT (area) = NULL;
@@ -758,24 +707,26 @@ DEFUN (no_area_filter_list,
DEFUN (area_import_list,
area_import_list_cmd,
"area A.B.C.D import-list NAME",
- "OSPFv6 area parameters\n"
- "OSPFv6 area ID in IP address format\n"
+ "OSPF6 area parameters\n"
+ "OSPF6 area ID in IP address format\n"
"Set the filter for networks from other areas announced to the specified one\n"
"Name of the acess-list\n")
{
+ int idx_ipv4 = 1;
+ int idx_name = 3;
struct ospf6_area *area;
struct access_list *list;
- OSPF6_CMD_AREA_GET(argv[0], area);
+ OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, area);
- list = access_list_lookup (AFI_IP6, argv[1]);
+ list = access_list_lookup (AFI_IP6, argv[idx_name]->arg);
IMPORT_LIST (area) = list;
if (IMPORT_NAME (area))
free (IMPORT_NAME (area));
- IMPORT_NAME (area) = strdup (argv[1]);
+ IMPORT_NAME (area) = strdup (argv[idx_name]->arg);
ospf6_abr_reimport (area);
return CMD_SUCCESS;
@@ -784,14 +735,16 @@ DEFUN (area_import_list,
DEFUN (no_area_import_list,
no_area_import_list_cmd,
"no area A.B.C.D import-list NAME",
- "OSPFv6 area parameters\n"
- "OSPFv6 area ID in IP address format\n"
+ NO_STR
+ "OSPF6 area parameters\n"
+ "OSPF6 area ID in IP address format\n"
"Unset the filter for networks announced to other areas\n"
- "NAme of the access-list\n")
+ "Name of the access-list\n")
{
+ int idx_ipv4 = 2;
struct ospf6_area *area;
- OSPF6_CMD_AREA_GET(argv[0], area);
+ OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, area);
IMPORT_LIST (area) = 0;
@@ -807,24 +760,26 @@ DEFUN (no_area_import_list,
DEFUN (area_export_list,
area_export_list_cmd,
"area A.B.C.D export-list NAME",
- "OSPFv6 area parameters\n"
- "OSPFv6 area ID in IP address format\n"
+ "OSPF6 area parameters\n"
+ "OSPF6 area ID in IP address format\n"
"Set the filter for networks announced to other areas\n"
"Name of the acess-list\n")
{
+ int idx_ipv4 = 1;
+ int idx_name = 3;
struct ospf6_area *area;
struct access_list *list;
- OSPF6_CMD_AREA_GET(argv[0], area);
+ OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, area);
- list = access_list_lookup (AFI_IP6, argv[1]);
+ list = access_list_lookup (AFI_IP6, argv[idx_name]->arg);
EXPORT_LIST (area) = list;
if (EXPORT_NAME (area))
free (EXPORT_NAME (area));
- EXPORT_NAME (area) = strdup (argv[1]);
+ EXPORT_NAME (area) = strdup (argv[idx_name]->arg);
ospf6_abr_enable_area (area);
return CMD_SUCCESS;
@@ -833,14 +788,16 @@ DEFUN (area_export_list,
DEFUN (no_area_export_list,
no_area_export_list_cmd,
"no area A.B.C.D export-list NAME",
- "OSPFv6 area parameters\n"
- "OSPFv6 area ID in IP address format\n"
+ NO_STR
+ "OSPF6 area parameters\n"
+ "OSPF6 area ID in IP address format\n"
"Unset the filter for networks announced to other areas\n"
"Name of the access-list\n")
{
+ int idx_ipv4 = 2;
struct ospf6_area *area;
- OSPF6_CMD_AREA_GET(argv[0], area);
+ OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, area);
EXPORT_LIST (area) = 0;
@@ -899,6 +856,7 @@ DEFUN (show_ipv6_ospf6_area_spf_tree,
"Shortest Path First caculation\n"
"Show SPF tree\n")
{
+ int idx_ipv4 = 4;
u_int32_t area_id;
struct ospf6_area *oa;
struct ospf6_vertex *root;
@@ -909,15 +867,15 @@ DEFUN (show_ipv6_ospf6_area_spf_tree,
ospf6_linkstate_prefix (ospf6->router_id, htonl (0), &prefix);
- if (inet_pton (AF_INET, argv[0], &area_id) != 1)
+ if (inet_pton (AF_INET, argv[idx_ipv4]->arg, &area_id) != 1)
{
- vty_out (vty, "Malformed Area-ID: %s%s", argv[0], VNL);
+ vty_out (vty, "Malformed Area-ID: %s%s", argv[idx_ipv4]->arg, VNL);
return CMD_SUCCESS;
}
oa = ospf6_area_lookup (area_id, ospf6);
if (oa == NULL)
{
- vty_out (vty, "No such Area: %s%s", argv[0], VNL);
+ vty_out (vty, "No such Area: %s%s", argv[idx_ipv4]->arg, VNL);
return CMD_SUCCESS;
}
@@ -940,10 +898,14 @@ DEFUN (show_ipv6_ospf6_simulate_spf_tree_root,
SHOW_STR
IP6_STR
OSPF6_STR
- "Shortest Path First caculation\n"
+ "Shortest Path First calculation\n"
"Show SPF tree\n"
- "Specify root's router-id to calculate another router's SPF tree\n")
+ "Specify root's router-id to calculate another router's SPF tree\n"
+ "OSPF6 area parameters\n"
+ OSPF6_AREA_ID_STR)
{
+ int idx_ipv4 = 5;
+ int idx_ipv4_2 = 7;
u_int32_t area_id;
struct ospf6_area *oa;
struct ospf6_vertex *root;
@@ -955,18 +917,18 @@ DEFUN (show_ipv6_ospf6_simulate_spf_tree_root,
OSPF6_CMD_CHECK_RUNNING ();
- inet_pton (AF_INET, argv[0], &router_id);
+ inet_pton (AF_INET, argv[idx_ipv4]->arg, &router_id);
ospf6_linkstate_prefix (router_id, htonl (0), &prefix);
- if (inet_pton (AF_INET, argv[1], &area_id) != 1)
+ if (inet_pton (AF_INET, argv[idx_ipv4_2]->arg, &area_id) != 1)
{
- vty_out (vty, "Malformed Area-ID: %s%s", argv[1], VNL);
+ vty_out (vty, "Malformed Area-ID: %s%s", argv[idx_ipv4_2]->arg, VNL);
return CMD_SUCCESS;
}
oa = ospf6_area_lookup (area_id, ospf6);
if (oa == NULL)
{
- vty_out (vty, "No such Area: %s%s", argv[1], VNL);
+ vty_out (vty, "No such Area: %s%s", argv[idx_ipv4_2]->arg, VNL);
return CMD_SUCCESS;
}
@@ -996,15 +958,16 @@ DEFUN (show_ipv6_ospf6_simulate_spf_tree_root,
DEFUN (ospf6_area_stub,
ospf6_area_stub_cmd,
- "area (A.B.C.D|<0-4294967295>) stub",
+ "area <A.B.C.D|(0-4294967295)> stub",
"OSPF6 area parameters\n"
"OSPF6 area ID in IP address format\n"
"OSPF6 area ID as a decimal value\n"
"Configure OSPF6 area as stub\n")
{
+ int idx_ipv4_number = 1;
struct ospf6_area *area;
- OSPF6_CMD_AREA_GET(argv[0], area);
+ OSPF6_CMD_AREA_GET(argv[idx_ipv4_number]->arg, area);
if (!ospf6_area_stub_set (ospf6, area))
{
@@ -1020,16 +983,17 @@ DEFUN (ospf6_area_stub,
DEFUN (ospf6_area_stub_no_summary,
ospf6_area_stub_no_summary_cmd,
- "area (A.B.C.D|<0-4294967295>) stub no-summary",
+ "area <A.B.C.D|(0-4294967295)> stub no-summary",
"OSPF6 stub parameters\n"
"OSPF6 area ID in IP address format\n"
"OSPF6 area ID as a decimal value\n"
"Configure OSPF6 area as stub\n"
"Do not inject inter-area routes into stub\n")
{
+ int idx_ipv4_number = 1;
struct ospf6_area *area;
- OSPF6_CMD_AREA_GET(argv[0], area);
+ OSPF6_CMD_AREA_GET(argv[idx_ipv4_number]->arg, area);
if (!ospf6_area_stub_set (ospf6, area))
{
@@ -1045,16 +1009,17 @@ DEFUN (ospf6_area_stub_no_summary,
DEFUN (no_ospf6_area_stub,
no_ospf6_area_stub_cmd,
- "no area (A.B.C.D|<0-4294967295>) stub",
+ "no area <A.B.C.D|(0-4294967295)> stub",
NO_STR
"OSPF6 area parameters\n"
"OSPF6 area ID in IP address format\n"
"OSPF6 area ID as a decimal value\n"
"Configure OSPF6 area as stub\n")
{
+ int idx_ipv4_number = 2;
struct ospf6_area *area;
- OSPF6_CMD_AREA_GET(argv[0], area);
+ OSPF6_CMD_AREA_GET(argv[idx_ipv4_number]->arg, area);
ospf6_area_stub_unset (ospf6, area);
ospf6_area_no_summary_unset (ospf6, area);
@@ -1064,7 +1029,7 @@ DEFUN (no_ospf6_area_stub,
DEFUN (no_ospf6_area_stub_no_summary,
no_ospf6_area_stub_no_summary_cmd,
- "no area (A.B.C.D|<0-4294967295>) stub no-summary",
+ "no area <A.B.C.D|(0-4294967295)> stub no-summary",
NO_STR
"OSPF6 area parameters\n"
"OSPF6 area ID in IP address format\n"
@@ -1072,9 +1037,10 @@ DEFUN (no_ospf6_area_stub_no_summary,
"Configure OSPF6 area as stub\n"
"Do not inject inter-area routes into area\n")
{
+ int idx_ipv4_number = 2;
struct ospf6_area *area;
- OSPF6_CMD_AREA_GET(argv[0], area);
+ OSPF6_CMD_AREA_GET(argv[idx_ipv4_number]->arg, area);
ospf6_area_stub_unset (ospf6, area);
ospf6_area_no_summary_unset (ospf6, area);
@@ -1090,13 +1056,7 @@ ospf6_area_init (void)
install_element (VIEW_NODE, &show_ipv6_ospf6_simulate_spf_tree_root_cmd);
install_element (OSPF6_NODE, &area_range_cmd);
- install_element (OSPF6_NODE, &area_range_advertise_cmd);
- install_element (OSPF6_NODE, &area_range_cost_cmd);
- install_element (OSPF6_NODE, &area_range_advertise_cost_cmd);
install_element (OSPF6_NODE, &no_area_range_cmd);
- install_element (OSPF6_NODE, &no_area_range_advertise_cmd);
- install_element (OSPF6_NODE, &no_area_range_cost_cmd);
- install_element (OSPF6_NODE, &no_area_range_advertise_cost_cmd);
install_element (OSPF6_NODE, &ospf6_area_stub_no_summary_cmd);
install_element (OSPF6_NODE, &ospf6_area_stub_cmd);
install_element (OSPF6_NODE, &no_ospf6_area_stub_no_summary_cmd);