diff options
author | Benoît Ganne <bganne@cisco.com> | 2021-08-05 15:06:36 +0200 |
---|---|---|
committer | Neale Ranns <neale@graphiant.com> | 2021-08-05 14:01:23 +0000 |
commit | 41a54f6a0b16b36f55461f0ce0a2303081a4fb6c (patch) | |
tree | be639e9e4b2d11d8302c141590e0b2787aaa4764 /src/vnet | |
parent | 2621acc510a270ae6ae8d2e5f8107ecb0c883167 (diff) |
ip: fix ip punt redirect cli
- restore fib paths support for ip4
- initialize payload_proto to the relevant default protocol so that
'via <dev>' paths are supported
- fix 'rx all'
- fix temp path vector mem leak
Type: fix
Change-Id: I564d88dc4dce86884ff6791af69974e6d70ff7ca
Signed-off-by: Benoît Ganne <bganne@cisco.com>
Diffstat (limited to 'src/vnet')
-rw-r--r-- | src/vnet/ip/ip4_punt_drop.c | 20 | ||||
-rw-r--r-- | src/vnet/ip/ip6_punt_drop.c | 5 |
2 files changed, 12 insertions, 13 deletions
diff --git a/src/vnet/ip/ip4_punt_drop.c b/src/vnet/ip/ip4_punt_drop.c index 20430adb2f3..c8d65921183 100644 --- a/src/vnet/ip/ip4_punt_drop.c +++ b/src/vnet/ip/ip4_punt_drop.c @@ -358,10 +358,10 @@ ip4_punt_redirect_cmd (vlib_main_t * vm, vlib_cli_command_t * cmd) { unformat_input_t _line_input, *line_input = &_line_input; - ip46_address_t nh = { 0 }; + fib_route_path_t *rpaths = NULL, rpath; + dpo_proto_t payload_proto = DPO_PROTO_IP4; clib_error_t *error = 0; u32 rx_sw_if_index = ~0; - u32 tx_sw_if_index = ~0; vnet_main_t *vnm; u8 is_add; @@ -378,17 +378,13 @@ ip4_punt_redirect_cmd (vlib_main_t * vm, else if (unformat (line_input, "add")) is_add = 1; else if (unformat (line_input, "rx all")) - rx_sw_if_index = ~0; + rx_sw_if_index = 0; else if (unformat (line_input, "rx %U", unformat_vnet_sw_interface, vnm, &rx_sw_if_index)) ; - else if (unformat (line_input, "via %U %U", - unformat_ip4_address, &nh.ip4, - unformat_vnet_sw_interface, vnm, &tx_sw_if_index)) - ; - else if (unformat (line_input, "via %U", - unformat_vnet_sw_interface, vnm, &tx_sw_if_index)) - ; + else if (unformat (line_input, "via %U", unformat_fib_route_path, &rpath, + &payload_proto)) + vec_add1 (rpaths, rpath); else { error = unformat_parse_error (line_input); @@ -404,7 +400,8 @@ ip4_punt_redirect_cmd (vlib_main_t * vm, if (is_add) { - ip4_punt_redirect_add (rx_sw_if_index, tx_sw_if_index, &nh); + if (vec_len (rpaths)) + ip4_punt_redirect_add_paths (rx_sw_if_index, rpaths); } else { @@ -412,6 +409,7 @@ ip4_punt_redirect_cmd (vlib_main_t * vm, } done: + vec_free (rpaths); unformat_free (line_input); return (error); } diff --git a/src/vnet/ip/ip6_punt_drop.c b/src/vnet/ip/ip6_punt_drop.c index 107703a7b6d..31f5d37bf02 100644 --- a/src/vnet/ip/ip6_punt_drop.c +++ b/src/vnet/ip/ip6_punt_drop.c @@ -351,7 +351,7 @@ ip6_punt_redirect_cmd (vlib_main_t * vm, { unformat_input_t _line_input, *line_input = &_line_input; fib_route_path_t *rpaths = NULL, rpath; - dpo_proto_t payload_proto; + dpo_proto_t payload_proto = DPO_PROTO_IP6; clib_error_t *error = 0; u32 rx_sw_if_index = ~0; vnet_main_t *vnm; @@ -370,7 +370,7 @@ ip6_punt_redirect_cmd (vlib_main_t * vm, else if (unformat (line_input, "add")) is_add = 1; else if (unformat (line_input, "rx all")) - rx_sw_if_index = ~0; + rx_sw_if_index = 0; else if (unformat (line_input, "rx %U", unformat_vnet_sw_interface, vnm, &rx_sw_if_index)) ; @@ -401,6 +401,7 @@ ip6_punt_redirect_cmd (vlib_main_t * vm, } done: + vec_free (rpaths); unformat_free (line_input); return (error); } |