};
/* Show all interfaces to vty. */
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "show interface vrf NAME",
- * SHOW_STR
- * "Interface status and configuration\n"
- * VRF_CMD_HELP_STR
- *
- */
DEFUN (show_interface,
show_interface_cmd,
- "show interface",
+ "show interface [vrf NAME]",
SHOW_STR
- "Interface status and configuration\n")
+ "Interface status and configuration\n"
+ VRF_CMD_HELP_STR)
{
struct listnode *node;
struct interface *ifp;
interface_update_stats ();
- if (argc > 0)
- VRF_GET_ID (vrf_id, argv[2]->arg);
+ if (argc > 2)
+ VRF_GET_ID (vrf_id, argv[3]->arg);
/* All interface print. */
for (ALL_LIST_ELEMENTS_RO (vrf_iflist (vrf_id), node, ifp))
}
/* Show specified interface to vty. */
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "show interface IFNAME",
- * SHOW_STR
- * "Interface status and configuration\n"
- * "Interface name\n"
- *
- */
DEFUN (show_interface_name_vrf_all,
show_interface_name_vrf_all_cmd,
- "show interface IFNAME vrf all",
+ "show interface IFNAME [vrf all]",
SHOW_STR
"Interface status and configuration\n"
"Interface name\n"
}
}
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "show interface description vrf NAME",
- * SHOW_STR
- * "Interface status and configuration\n"
- * "Interface description\n"
- * VRF_CMD_HELP_STR
- *
- */
DEFUN (show_interface_desc,
show_interface_desc_cmd,
- "show interface description",
+ "show interface description [vrf NAME]",
SHOW_STR
"Interface status and configuration\n"
- "Interface description\n")
+ "Interface description\n"
+ VRF_CMD_HELP_STR)
{
vrf_id_t vrf_id = VRF_DEFAULT;
- if (argc > 0)
- VRF_GET_ID (vrf_id, argv[3]->arg);
+ if (argc > 3)
+ VRF_GET_ID (vrf_id, argv[4]->arg);
if_show_description (vty, vrf_id);
return CMD_SUCCESS;
}
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no bandwidth <1-100000>",
- * NO_STR
- * "Set bandwidth informational parameter\n"
- * "Bandwidth in megabits\n"
- *
- */
DEFUN (no_bandwidth_if,
no_bandwidth_if_cmd,
- "no bandwidth",
+ "no bandwidth [(1-100000)]",
NO_STR
- "Set bandwidth informational parameter\n")
+ "Set bandwidth informational parameter\n"
+ "Bandwidth in megabits\n")
{
struct interface *ifp;
}
/* RFC7471: OSPF Traffic Engineering (TE) Metric extensions & draft-ietf-isis-metric-extensions-07.txt */
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "delay <0-16777215> min <0-16777215> max <0-16777215>",
- * "Unidirectional Average Link Delay (optionally Minimum and Maximum delays)\n"
- * "Average delay in micro-second as decimal (0...16777215)\n"
- * "Minimum delay\n"
- * "Minimum delay in micro-second as decimal (0...16777215)\n"
- * "Maximum delay\n"
- * "Maximum delay in micro-second as decimal (0...16777215)\n"
- *
- */
DEFUN (link_params_delay,
link_params_delay_cmd,
- "delay (0-16777215)",
+ "delay (0-16777215) [min (0-16777215) max (0-16777215)]",
"Unidirectional Average Link Delay\n"
- "Average delay in micro-second as decimal (0...16777215)\n")
+ "Average delay in micro-second as decimal (0...16777215)\n"
+ "Minimum delay\n"
+ "Minimum delay in micro-second as decimal (0...16777215)\n"
+ "Maximum delay\n"
+ "Maximum delay in micro-second as decimal (0...16777215)\n")
{
- int idx_number = 1;
+ /* Get and Check new delay values */
+ u_int32_t delay = 0, low = 0, high = 0;
+ VTY_GET_ULONG("delay", delay, argv[1]->arg);
+ if (argc == 6)
+ {
+ VTY_GET_ULONG("minimum delay", low, argv[3]->arg);
+ VTY_GET_ULONG("maximum delay", high, argv[5]->arg);
+ }
struct interface *ifp = (struct interface *) vty->index;
struct if_link_params *iflp = if_link_params_get (ifp);
- u_int32_t delay = 0, low = 0, high = 0;
u_int8_t update = 0;
- /* Get and Check new delay values */
- VTY_GET_ULONG("delay", delay, argv[idx_number]->arg);
- switch (argc)
- {
- case 1:
- /* Check new delay value against old Min and Max delays if set */
- if (IS_PARAM_SET(iflp, LP_MM_DELAY)
- && (delay <= iflp->min_delay || delay >= iflp->max_delay))
- {
- vty_out (vty, "Average delay should be comprise between Min (%d) and Max (%d) delay%s",
- iflp->min_delay, iflp->max_delay, VTY_NEWLINE);
- return CMD_WARNING;
- }
- /* Update delay if value is not set or change */
- if (IS_PARAM_UNSET(iflp, LP_DELAY)|| iflp->av_delay != delay)
- {
- iflp->av_delay = delay;
- SET_PARAM(iflp, LP_DELAY);
- update = 1;
- }
- /* Unset Min and Max delays if already set */
- if (IS_PARAM_SET(iflp, LP_MM_DELAY))
- {
- iflp->min_delay = 0;
- iflp->max_delay = 0;
- UNSET_PARAM(iflp, LP_MM_DELAY);
- update = 1;
- }
- break;
- case 2:
- vty_out (vty, "You should specify both Minimum and Maximum delay with Average delay%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- break;
- case 3:
- VTY_GET_ULONG("minimum delay", low, argv[3]->arg);
- VTY_GET_ULONG("maximum delay", high, argv[5]->arg);
- /* Check new delays value coherency */
- if (delay <= low || delay >= high)
- {
- vty_out (vty, "Average delay should be comprise between Min (%d) and Max (%d) delay%s",
- low, high, VTY_NEWLINE);
- return CMD_WARNING;
- }
- /* Update Delays if needed */
- if (IS_PARAM_UNSET(iflp, LP_DELAY)
- || IS_PARAM_UNSET(iflp, LP_MM_DELAY)
- || iflp->av_delay != delay
- || iflp->min_delay != low
- || iflp->max_delay != high)
- {
- iflp->av_delay = delay;
- SET_PARAM(iflp, LP_DELAY);
- iflp->min_delay = low;
- iflp->max_delay = high;
- SET_PARAM(iflp, LP_MM_DELAY);
- update = 1;
- }
- break;
- default:
- return CMD_WARNING;
- break;
- }
+ if (argc == 2)
+ {
+ /* Check new delay value against old Min and Max delays if set */
+ if (IS_PARAM_SET(iflp, LP_MM_DELAY)
+ && (delay <= iflp->min_delay || delay >= iflp->max_delay))
+ {
+ vty_out (vty, "Average delay should be comprise between Min (%d) and Max (%d) delay%s",
+ iflp->min_delay, iflp->max_delay, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ /* Update delay if value is not set or change */
+ if (IS_PARAM_UNSET(iflp, LP_DELAY)|| iflp->av_delay != delay)
+ {
+ iflp->av_delay = delay;
+ SET_PARAM(iflp, LP_DELAY);
+ update = 1;
+ }
+ /* Unset Min and Max delays if already set */
+ if (IS_PARAM_SET(iflp, LP_MM_DELAY))
+ {
+ iflp->min_delay = 0;
+ iflp->max_delay = 0;
+ UNSET_PARAM(iflp, LP_MM_DELAY);
+ update = 1;
+ }
+ }
+ else
+ {
+ /* Check new delays value coherency */
+ if (delay <= low || delay >= high)
+ {
+ vty_out (vty, "Average delay should be comprise between Min (%d) and Max (%d) delay%s",
+ low, high, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ /* Update Delays if needed */
+ if (IS_PARAM_UNSET(iflp, LP_DELAY)
+ || IS_PARAM_UNSET(iflp, LP_MM_DELAY)
+ || iflp->av_delay != delay
+ || iflp->min_delay != low
+ || iflp->max_delay != high)
+ {
+ iflp->av_delay = delay;
+ SET_PARAM(iflp, LP_DELAY);
+ iflp->min_delay = low;
+ iflp->max_delay = high;
+ SET_PARAM(iflp, LP_MM_DELAY);
+ update = 1;
+ }
+ }
/* force protocols to update LINK STATE due to parameters change */
if (update == 1 && if_is_operative (ifp))
return CMD_SUCCESS;
}
-
DEFUN (no_link_params_delay,
no_link_params_delay_cmd,
"no delay",
}
/* Static unicast routes for multicast RPF lookup. */
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "ip mroute A.B.C.D/M (A.B.C.D|INTERFACE)",
- * IP_STR
- * "Configure static unicast route into MRIB for multicast RPF lookup\n"
- * "IP destination prefix (e.g. 10.0.0.0/8)\n"
- * "Nexthop address\n"
- * "Nexthop interface name\n"
- *
- */
DEFUN (ip_mroute_dist,
ip_mroute_dist_cmd,
- "ip mroute A.B.C.D/M <A.B.C.D|INTERFACE> (1-255)",
+ "ip mroute A.B.C.D/M <A.B.C.D|INTERFACE> [(1-255)]",
IP_STR
"Configure static unicast route into MRIB for multicast RPF lookup\n"
"IP destination prefix (e.g. 10.0.0.0/8)\n"
"Nexthop interface name\n"
"Distance\n")
{
- int idx_ipv4_prefixlen = 2;
- int idx_ipv4_ifname = 3;
- int idx_number = 4;
- return zebra_static_ipv4 (vty, SAFI_MULTICAST, 1, argv[idx_ipv4_prefixlen]->arg, NULL, argv[idx_ipv4_ifname]->arg, NULL, NULL, argc > 2 ? argv[idx_number]->arg : NULL, NULL);
-}
+ char *destprefix = argv[2]->arg;
+ char *nexthop = argv[3]->arg;
+ char *distance = (argc == 5) ? argv[4]->arg : NULL;
+ return zebra_static_ipv4 (vty, SAFI_MULTICAST, 1, destprefix, NULL, nexthop, NULL, NULL, distance, NULL);
+}
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no ip mroute A.B.C.D/M (A.B.C.D|INTERFACE)",
- * NO_STR
- * IP_STR
- * "Configure static unicast route into MRIB for multicast RPF lookup\n"
- * "IP destination prefix (e.g. 10.0.0.0/8)\n"
- * "Nexthop address\n"
- * "Nexthop interface name\n"
- *
- */
DEFUN (no_ip_mroute_dist,
no_ip_mroute_dist_cmd,
- "no ip mroute A.B.C.D/M <A.B.C.D|INTERFACE> (1-255)",
+ "no ip mroute A.B.C.D/M <A.B.C.D|INTERFACE> [(1-255)]",
IP_STR
"Configure static unicast route into MRIB for multicast RPF lookup\n"
"IP destination prefix (e.g. 10.0.0.0/8)\n"
"Nexthop interface name\n"
"Distance\n")
{
- int idx_ipv4_prefixlen = 3;
- int idx_ipv4_ifname = 4;
- int idx_number = 5;
- return zebra_static_ipv4 (vty, SAFI_MULTICAST, 0, argv[idx_ipv4_prefixlen]->arg, NULL, argv[idx_ipv4_ifname]->arg, NULL, NULL, argc > 2 ? argv[idx_number]->arg : NULL, NULL);
-}
+ char *destprefix = argv[2]->arg;
+ char *nexthop = argv[3]->arg;
+ char *distance = (argc == 5) ? argv[4]->arg : NULL;
+ return zebra_static_ipv4 (vty, SAFI_MULTICAST, 0, destprefix, NULL, nexthop, NULL, NULL, distance, NULL);
+}
DEFUN (ip_multicast_mode,
ip_multicast_mode_cmd,
"Lookup both, use entry with lower distance\n"
"Lookup both, use entry with longer prefix\n")
{
- int idx_rpf_lookup_mode = 3;
+ char *mode = argv[3]->text;
- if (!strncmp (argv[idx_rpf_lookup_mode]->arg, "u", 1))
+ if (strmatch (mode, "urib-only"))
multicast_mode_ipv4_set (MCAST_URIB_ONLY);
- else if (!strncmp (argv[idx_rpf_lookup_mode]->arg, "mrib-o", 6))
+ else if (strmatch (mode, "mrib-only"))
multicast_mode_ipv4_set (MCAST_MRIB_ONLY);
- else if (!strncmp (argv[idx_rpf_lookup_mode]->arg, "mrib-t", 6))
+ else if (strmatch (mode, "mrib-then-urib"))
multicast_mode_ipv4_set (MCAST_MIX_MRIB_FIRST);
- else if (!strncmp (argv[idx_rpf_lookup_mode]->arg, "low", 3))
+ else if (strmatch (mode, "lower-distance"))
multicast_mode_ipv4_set (MCAST_MIX_DISTANCE);
- else if (!strncmp (argv[idx_rpf_lookup_mode]->arg, "lon", 3))
+ else if (strmatch (mode, "longer-prefix"))
multicast_mode_ipv4_set (MCAST_MIX_PFXLEN);
else
{
return CMD_SUCCESS;
}
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no ip multicast rpf-lookup-mode",
- * NO_STR
- * IP_STR
- * "Multicast options\n"
- * "RPF lookup behavior\n"
- *
- */
DEFUN (no_ip_multicast_mode,
no_ip_multicast_mode_cmd,
- "no ip multicast rpf-lookup-mode <urib-only|mrib-only|mrib-then-urib|lower-distance|longer-prefix>",
+ "no ip multicast rpf-lookup-mode [<urib-only|mrib-only|mrib-then-urib|lower-distance|longer-prefix>]",
NO_STR
IP_STR
"Multicast options\n"
tag, distance, vrf);
}
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "show ipv6 route " VRF_CMD_STR " [json]",
- * SHOW_STR
- * IP_STR
- * "IPv6 routing table\n"
- * VRF_CMD_HELP_STR
- *
- */
DEFUN (show_ipv6_route,
show_ipv6_route_cmd,
- "show ipv6 route [json]",
+ "show ipv6 route [vrf NAME] [json]",
SHOW_STR
IP_STR
- "IPv6 routing table\n")
+ "IPv6 routing table\n"
+ VRF_CMD_HELP_STR
+ "Output JSON\n")
{
- int idx_json = 3;
struct route_table *table;
struct route_node *rn;
struct rib *rib;
char buf[BUFSIZ];
json_object *json = NULL;
json_object *json_prefix = NULL;
- u_char uj = use_json(argc, argv);
- if (argc > 0 && argv[idx_json]->arg && strcmp(argv[idx_json]->arg, "json") != 0)
- {
- if (!(zvrf = zebra_vrf_list_lookup_by_name (argv[idx_json]->arg)))
- {
- if (uj)
- vty_out (vty, "{}%s", VTY_NEWLINE);
- else
- vty_out (vty, "vrf %s not defined%s", argv[idx_json]->arg, VTY_NEWLINE);
- return CMD_SUCCESS;
- }
+ int vrf = (argc > 3 && strmatch (argv[3]->text, "vrf"));
+ int uj = vrf ? argc == 6 : argc == 4;
+ char *vrfname = vrf ? argv[4]->arg : NULL;
- if (zvrf->vrf_id == VRF_UNKNOWN)
- {
- if (uj)
- vty_out (vty, "{}%s", VTY_NEWLINE);
- else
- vty_out (vty, "vrf %s inactive%s", argv[idx_json]->arg, VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- else
- vrf_id = zvrf->vrf_id;
- }
+ if (vrf)
+ {
+ if (!(zvrf = zebra_vrf_list_lookup_by_name (vrfname)))
+ {
+ if (uj)
+ vty_out (vty, "{}%s", VTY_NEWLINE);
+ else
+ vty_out (vty, "vrf %s not defined%s", vrfname, VTY_NEWLINE);
+ return CMD_SUCCESS;
+ }
+
+ if (zvrf->vrf_id == VRF_UNKNOWN)
+ {
+ if (uj)
+ vty_out (vty, "{}%s", VTY_NEWLINE);
+ else
+ vty_out (vty, "vrf %s inactive%s", vrfname, VTY_NEWLINE);
+ return CMD_SUCCESS;
+ }
+ else
+ vrf_id = zvrf->vrf_id;
+ }
table = zebra_vrf_table (AFI_IP6, SAFI_UNICAST, vrf_id);
- if (! table)
+ if (!table)
{
if (uj)
vty_out (vty, "{}%s", VTY_NEWLINE);
return CMD_SUCCESS;
}
-
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "show ipv6 route " VRF_CMD_STR " " QUAGGA_IP6_REDIST_STR_ZEBRA,
- * SHOW_STR
- * IP_STR
- * "IP routing table\n"
- * VRF_CMD_HELP_STR
- * QUAGGA_IP6_REDIST_HELP_STR_ZEBRA
- *
- */
DEFUN (show_ipv6_route_protocol,
show_ipv6_route_protocol_cmd,
- "show ipv6 route <kernel|connected|static|ripng|ospf6|isis|bgp|table>",
+ "show ipv6 route [vrf NAME] <kernel|connected|static|ripng|ospf6|isis|bgp|table>",
SHOW_STR
IP_STR
"IP routing table\n"
+ VRF_CMD_HELP_STR
QUAGGA_IP6_REDIST_HELP_STR_ZEBRA)
{
- int idx_protocol = 3;
int type;
struct route_table *table;
struct route_node *rn;
int first = 1;
vrf_id_t vrf_id = VRF_DEFAULT;
- if ( argc >1 )
+ char *vrfname = (argc == 6) ? argv[4]->arg : NULL;
+ char *proto = argv[argc - 1]->text;
+
+ if (vrfname)
{
- VRF_GET_ID (vrf_id, argv[4]->arg);
- type = proto_redistnum (AFI_IP6, argv[idx_protocol]->arg);
+ VRF_GET_ID (vrf_id, vrfname);
+ type = proto_redistnum (AFI_IP6, proto);
}
else
- type = proto_redistnum (AFI_IP6, argv[4]->arg);
+ type = proto_redistnum (AFI_IP6, proto);
if (type < 0)
{
return write;
}
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "ip import-table <1-252>",
- * IP_STR
- * "import routes from non-main kernel table\n"
- * "kernel routing table id\n"
- *
- */
DEFUN (ip_zebra_import_table_distance,
ip_zebra_import_table_distance_cmd,
- "ip import-table (1-252) distance (1-255)",
- IP_STR
- "import routes from non-main kernel table\n"
- "kernel routing table id\n"
- "Distance for imported routes\n"
- "Default distance value\n")
-{
- int idx_number = 2;
- int idx_number_2 = 4;
- u_int32_t table_id = 0;
- int distance = ZEBRA_TABLE_DISTANCE_DEFAULT;
-
- if (argc)
- VTY_GET_INTEGER("table", table_id, argv[idx_number]->arg);
-
- if (!is_zebra_valid_kernel_table(table_id))
- {
- vty_out(vty, "Invalid routing table ID, %d. Must be in range 1-252%s",
- table_id, VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- if (is_zebra_main_routing_table(table_id))
- {
- vty_out(vty, "Invalid routing table ID, %d. Must be non-default table%s",
- table_id, VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- if (argc > 1)
- VTY_GET_INTEGER_RANGE("distance", distance, argv[idx_number_2]->arg, 1, 255);
- return (zebra_import_table(AFI_IP, table_id, distance, NULL, 1));
-
-}
-
-
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "ip import-table <1-252> route-map WORD",
- * IP_STR
- * "import routes from non-main kernel table\n"
- * "kernel routing table id\n"
- * "route-map for filtering\n"
- * "route-map name\n"
- *
- */
-DEFUN (ip_zebra_import_table_distance_routemap,
- ip_zebra_import_table_distance_routemap_cmd,
- "ip import-table (1-252) distance (1-255) route-map WORD",
+ "ip import-table (1-252) [distance (1-255)] [route-map WORD>]",
IP_STR
"import routes from non-main kernel table\n"
"kernel routing table id\n"
"route-map for filtering\n"
"route-map name\n")
{
- int idx_number = 2;
- int idx_number_2 = 4;
- int idx_word = 6;
u_int32_t table_id = 0;
- int distance = ZEBRA_TABLE_DISTANCE_DEFAULT;
- const char *rmap_name;
- if (argc)
- VTY_GET_INTEGER("table", table_id, argv[idx_number]->arg);
+ VTY_GET_INTEGER("table", table_id, argv[2]->arg);
+ int distance = ZEBRA_TABLE_DISTANCE_DEFAULT;
+ char *rmap = strmatch (argv[argc - 2]->text, "route-map") ?
+ XSTRDUP(MTYPE_ROUTE_MAP_NAME, argv[argc - 1]->arg) : NULL;
+ if (argc == 7 || (argc == 5 && !rmap))
+ VTY_GET_INTEGER_RANGE("distance", distance, argv[4]->arg, 1, 255);
if (!is_zebra_valid_kernel_table(table_id))
{
if (is_zebra_main_routing_table(table_id))
{
vty_out(vty, "Invalid routing table ID, %d. Must be non-default table%s",
- table_id, VTY_NEWLINE);
+ table_id, VTY_NEWLINE);
return CMD_WARNING;
}
- if (argc > 2)
- {
- VTY_GET_INTEGER_RANGE("distance", distance, argv[idx_number_2]->arg, 1, 255);
- rmap_name = XSTRDUP (MTYPE_ROUTE_MAP_NAME, argv[idx_word]->arg);
- }
- else
- rmap_name = XSTRDUP (MTYPE_ROUTE_MAP_NAME, argv[idx_number_2]->arg);
-
- return (zebra_import_table(AFI_IP, table_id, distance, rmap_name, 1));
+ return (zebra_import_table(AFI_IP, table_id, distance, rmap, 1));
}
-
-/*
- * CHECK ME - The following ALIASes need to be implemented in this DEFUN
- * "no ip import-table <1-252> distance <1-255> {route-map NAME}",
- * IP_STR
- * "import routes from non-main kernel table to main table"
- * "kernel routing table id\n"
- * "distance to be used\n"
- *
- */
DEFUN (no_ip_zebra_import_table,
no_ip_zebra_import_table_cmd,
- "no ip import-table (1-252) [route-map NAME]",
+ "no ip import-table (1-252) [distance (1-255)] [route-map NAME]",
NO_STR
IP_STR
"import routes from non-main kernel table\n"
"kernel routing table id\n")
{
- int idx_number = 3;
u_int32_t table_id = 0;
-
- if (argc)
- VTY_GET_INTEGER("table", table_id, argv[idx_number]->arg);
+ VTY_GET_INTEGER("table", table_id, argv[3]->arg);
if (!is_zebra_valid_kernel_table(table_id))
{
return (zebra_import_table(AFI_IP, table_id, 0, NULL, 0));
}
-
static int
config_write_protocol (struct vty *vty)
{
install_element (CONFIG_NODE, &no_ip_route_mask_cmd);
install_element (CONFIG_NODE, &no_ip_route_mask_flags2_cmd);
install_element (CONFIG_NODE, &ip_zebra_import_table_distance_cmd);
- install_element (CONFIG_NODE, &ip_zebra_import_table_distance_routemap_cmd);
install_element (CONFIG_NODE, &no_ip_zebra_import_table_cmd);
install_element (VIEW_NODE, &show_vrf_cmd);