X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Flookup.c;h=e0d1ac06dfbcfe259243997c602d0198a662bdc0;hb=b6b04f0c2a64d6edd536add6900e9d458c2fe8d1;hp=95039bdf1166da7bf2dfee2d7b8e549fefc87282;hpb=70ed8aeff30c0eece0e19f0ad26c4cc8957278ae;p=vpp.git diff --git a/src/vnet/ip/lookup.c b/src/vnet/ip/lookup.c index 95039bdf116..e0d1ac06dfb 100644 --- a/src/vnet/ip/lookup.c +++ b/src/vnet/ip/lookup.c @@ -252,47 +252,6 @@ format_ip_flow_hash_config (u8 * s, va_list * args) 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) { @@ -361,7 +320,7 @@ const ip46_address_t zero_addr = { 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) { @@ -940,17 +899,37 @@ vnet_ip_mroute_cmd (vlib_main_t * vm, 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; + /* + * set the path proto appropriately for the prefix + */ + rpath.frp_proto = fib_proto_to_dpo (pfx.fp_proto); } else if (unformat (line_input, "%U", unformat_mfib_itf_flags, &iflags)) ; @@ -1122,7 +1101,7 @@ ip6_probe_neighbor_wait (vlib_main_t * vm, ip6_address_t * a, u32 sw_if_index, for (i = 0; i < retry_count; i++) { /* The interface may be down, etc. */ - e = ip6_probe_neighbor (vm, a, sw_if_index); + e = ip6_probe_neighbor (vm, a, sw_if_index, 0); if (e) return e; @@ -1174,7 +1153,7 @@ ip4_probe_neighbor_wait (vlib_main_t * vm, ip4_address_t * a, u32 sw_if_index, for (i = 0; i < retry_count; i++) { /* The interface may be down, etc. */ - e = ip4_probe_neighbor (vm, a, sw_if_index); + e = ip4_probe_neighbor (vm, a, sw_if_index, 0); if (e) return e; @@ -1398,12 +1377,16 @@ ip_container_cmd (vlib_main_t * vm, 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; } @@ -1456,12 +1439,16 @@ show_ip_container_cmd_fn (vlib_main_t * vm, unformat_input_t * main_input, 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")); }