diff options
Diffstat (limited to 'ospf6d/ospf6_area.c')
| -rw-r--r-- | ospf6d/ospf6_area.c | 240 |
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); |
