return s;
}
-u8 *
-format_ip_lookup_next (u8 * s, va_list * args)
-{
- /* int promotion of ip_lookup_next_t */
- ip_lookup_next_t n = va_arg (*args, int);
- char *t = 0;
-
- switch (n)
- {
- default:
- s = format (s, "unknown %d", n);
- return s;
-
- case IP_LOOKUP_NEXT_DROP:
- t = "drop";
- break;
- case IP_LOOKUP_NEXT_PUNT:
- t = "punt";
- break;
- case IP_LOOKUP_NEXT_ARP:
- t = "arp";
- break;
- case IP_LOOKUP_NEXT_MIDCHAIN:
- t = "midchain";
- break;
- case IP_LOOKUP_NEXT_GLEAN:
- t = "glean";
- break;
- case IP_LOOKUP_NEXT_MCAST:
- t = "mcast";
- break;
- case IP_LOOKUP_NEXT_REWRITE:
- break;
- }
-
- if (t)
- vec_add (s, t, strlen (t));
-
- return s;
-}
-
u8 *
format_ip_adjacency_packet_data (u8 * s, va_list * args)
{
0, 0},
};
-clib_error_t *
+static clib_error_t *
vnet_ip_route_cmd (vlib_main_t * vm,
unformat_input_t * main_input, vlib_cli_command_t * cmd)
{
pfx.fp_proto = FIB_PROTOCOL_IP6;
pfx.fp_len = 128;
}
+ else if (unformat (line_input, "via %U %U",
+ unformat_ip4_address, &rpath.frp_addr.ip4,
+ unformat_vnet_sw_interface, vnm,
+ &rpath.frp_sw_if_index))
+ {
+ rpath.frp_weight = 1;
+ }
+ else if (unformat (line_input, "via %U %U",
+ unformat_ip6_address, &rpath.frp_addr.ip6,
+ unformat_vnet_sw_interface, vnm,
+ &rpath.frp_sw_if_index))
+ {
+ rpath.frp_weight = 1;
+ }
else if (unformat (line_input, "via %U",
unformat_vnet_sw_interface, vnm,
&rpath.frp_sw_if_index))
{
+ memset (&rpath.frp_addr, 0, sizeof (rpath.frp_addr));
rpath.frp_weight = 1;
}
else if (unformat (line_input, "via local"))
{
+ memset (&rpath.frp_addr, 0, sizeof (rpath.frp_addr));
rpath.frp_sw_if_index = ~0;
rpath.frp_weight = 1;
rpath.frp_flags |= FIB_ROUTE_PATH_LOCAL;
else if (unformat (line_input, "del"))
is_del = 1;
else
- return (clib_error_return (0, "unknown input '%U'",
- format_unformat_error, line_input));
+ {
+ unformat_free (line_input);
+ return (clib_error_return (0, "unknown input '%U'",
+ format_unformat_error, line_input));
+ }
}
if (~0 == sw_if_index || !addr_set)
{
+ unformat_free (line_input);
vlib_cli_output (vm, "interface and address must be set");
return 0;
}
unformat_vnet_sw_interface, vnm, &sw_if_index))
;
else
- return (clib_error_return (0, "unknown input '%U'",
- format_unformat_error, line_input));
+ {
+ unformat_free (line_input);
+ return (clib_error_return (0, "unknown input '%U'",
+ format_unformat_error, line_input));
+ }
}
if (~0 == sw_if_index)
{
+ unformat_free (line_input);
vlib_cli_output (vm, "no interface");
return (clib_error_return (0, "no interface"));
}