From 6898507b421667a883d87cc879e800fa40b83929 Mon Sep 17 00:00:00 2001 From: Matus Fabian Date: Fri, 26 Jan 2018 05:07:23 -0800 Subject: [PATCH] NAT: replace format_vnet_sw_interface_name with format_vnet_sw_if_index_name (VPP-1149) Avoid crash when interface was deleted. Change-Id: I2ac3031c13ca5ad3360495e1c4cb90b0002be5ff Signed-off-by: Matus Fabian --- src/plugins/nat/nat.c | 8 +++----- src/plugins/nat/nat44_cli.c | 36 ++++++++++++++++-------------------- src/plugins/nat/nat64_cli.c | 28 ++++++++++++++-------------- 3 files changed, 33 insertions(+), 39 deletions(-) diff --git a/src/plugins/nat/nat.c b/src/plugins/nat/nat.c index 95004da26d8..0520ded0f29 100644 --- a/src/plugins/nat/nat.c +++ b/src/plugins/nat/nat.c @@ -2560,16 +2560,14 @@ u8 * format_snat_static_map_to_resolve (u8 * s, va_list * args) if (m->addr_only) s = format (s, "local %U external %U vrf %d", format_ip4_address, &m->l_addr, - format_vnet_sw_interface_name, vnm, - vnet_get_sw_interface (vnm, m->sw_if_index), + format_vnet_sw_if_index_name, vnm, m->sw_if_index, m->vrf_id); else s = format (s, "%U local %U:%d external %U:%d vrf %d", format_snat_protocol, m->proto, format_ip4_address, &m->l_addr, m->l_port, - format_vnet_sw_interface_name, vnm, - vnet_get_sw_interface (vnm, m->sw_if_index), m->e_port, - m->vrf_id); + format_vnet_sw_if_index_name, vnm, m->sw_if_index, + m->e_port, m->vrf_id); return s; } diff --git a/src/plugins/nat/nat44_cli.c b/src/plugins/nat/nat44_cli.c index 5114615eb57..f61f59b8d6a 100644 --- a/src/plugins/nat/nat44_cli.c +++ b/src/plugins/nat/nat44_cli.c @@ -371,9 +371,8 @@ snat_feature_command_fn (vlib_main_t * vm, { error = clib_error_return (0, "%s %U failed", is_del ? "del" : "add", - format_vnet_sw_interface_name, - vnm, vnet_get_sw_interface (vnm, - sw_if_index)); + format_vnet_sw_if_index_name, + vnm, sw_if_index); goto done; } } @@ -383,9 +382,8 @@ snat_feature_command_fn (vlib_main_t * vm, { error = clib_error_return (0, "%s %U failed", is_del ? "del" : "add", - format_vnet_sw_interface_name, - vnm, vnet_get_sw_interface (vnm, - sw_if_index)); + format_vnet_sw_if_index_name, + vnm, sw_if_index); goto done; } } @@ -404,9 +402,8 @@ snat_feature_command_fn (vlib_main_t * vm, { error = clib_error_return (0, "%s %U failed", is_del ? "del" : "add", - format_vnet_sw_interface_name, - vnm, vnet_get_sw_interface (vnm, - sw_if_index)); + format_vnet_sw_if_index_name, + vnm, sw_if_index); goto done; } } @@ -416,9 +413,8 @@ snat_feature_command_fn (vlib_main_t * vm, { error = clib_error_return (0, "%s %U failed", is_del ? "del" : "add", - format_vnet_sw_interface_name, - vnm, vnet_get_sw_interface (vnm, - sw_if_index)); + format_vnet_sw_if_index_name, + vnm, sw_if_index); goto done; } } @@ -445,8 +441,8 @@ nat44_show_interfaces_command_fn (vlib_main_t * vm, unformat_input_t * input, /* *INDENT-OFF* */ pool_foreach (i, sm->interfaces, ({ - vlib_cli_output (vm, " %U %s", format_vnet_sw_interface_name, vnm, - vnet_get_sw_interface (vnm, i->sw_if_index), + vlib_cli_output (vm, " %U %s", format_vnet_sw_if_index_name, vnm, + i->sw_if_index, (nat_interface_is_inside(i) && nat_interface_is_outside(i)) ? "in out" : (nat_interface_is_inside(i) ? "in" : "out")); @@ -455,8 +451,8 @@ nat44_show_interfaces_command_fn (vlib_main_t * vm, unformat_input_t * input, pool_foreach (i, sm->output_feature_interfaces, ({ vlib_cli_output (vm, " %U output-feature %s", - format_vnet_sw_interface_name, vnm, - vnet_get_sw_interface (vnm, i->sw_if_index), + format_vnet_sw_if_index_name, vnm, + i->sw_if_index, (nat_interface_is_inside(i) && nat_interface_is_outside(i)) ? "in out" : (nat_interface_is_inside(i) ? "in" : "out")); @@ -830,14 +826,14 @@ nat44_show_interface_address_command_fn (vlib_main_t * vm, vlib_cli_output (vm, "NAT44 pool address interfaces:"); vec_foreach (sw_if_index, sm->auto_add_sw_if_indices) { - vlib_cli_output (vm, " %U", format_vnet_sw_interface_name, vnm, - vnet_get_sw_interface (vnm, *sw_if_index)); + vlib_cli_output (vm, " %U", format_vnet_sw_if_index_name, vnm, + *sw_if_index); } vlib_cli_output (vm, "NAT44 twice-nat pool address interfaces:"); vec_foreach (sw_if_index, sm->auto_add_sw_if_indices_twice_nat) { - vlib_cli_output (vm, " %U", format_vnet_sw_interface_name, vnm, - vnet_get_sw_interface (vnm, *sw_if_index)); + vlib_cli_output (vm, " %U", format_vnet_sw_if_index_name, vnm, + *sw_if_index); } /* *INDENT-ON* */ diff --git a/src/plugins/nat/nat64_cli.c b/src/plugins/nat/nat64_cli.c index d1acca963a1..5b46feddb49 100644 --- a/src/plugins/nat/nat64_cli.c +++ b/src/plugins/nat/nat64_cli.c @@ -181,22 +181,22 @@ nat64_interface_feature_command_fn (vlib_main_t * vm, case VNET_API_ERROR_NO_SUCH_ENTRY: error = clib_error_return (0, "%U NAT64 feature not enabled.", - format_vnet_sw_interface_name, vnm, - vnet_get_sw_interface (vnm, sw_if_index)); + format_vnet_sw_if_index_name, vnm, + sw_if_index); goto done; case VNET_API_ERROR_VALUE_EXIST: error = clib_error_return (0, "%U NAT64 feature already enabled.", - format_vnet_sw_interface_name, vnm, - vnet_get_sw_interface (vnm, sw_if_index)); + format_vnet_sw_if_index_name, vnm, + vnm, sw_if_index); goto done; case VNET_API_ERROR_INVALID_VALUE: case VNET_API_ERROR_INVALID_VALUE_2: error = clib_error_return (0, "%U NAT64 feature enable/disable failed.", - format_vnet_sw_interface_name, vnm, - vnet_get_sw_interface (vnm, sw_if_index)); + format_vnet_sw_if_index_name, vnm, + sw_if_index); goto done; default: break; @@ -216,22 +216,22 @@ nat64_interface_feature_command_fn (vlib_main_t * vm, case VNET_API_ERROR_NO_SUCH_ENTRY: error = clib_error_return (0, "%U NAT64 feature not enabled.", - format_vnet_sw_interface_name, vnm, - vnet_get_sw_interface (vnm, sw_if_index)); + format_vnet_sw_if_index_name, vnm, + sw_if_index); goto done; case VNET_API_ERROR_VALUE_EXIST: error = clib_error_return (0, "%U NAT64 feature already enabled.", - format_vnet_sw_interface_name, vnm, - vnet_get_sw_interface (vnm, sw_if_index)); + format_vnet_sw_if_index_name, vnm, + sw_if_index); goto done; case VNET_API_ERROR_INVALID_VALUE: case VNET_API_ERROR_INVALID_VALUE_2: error = clib_error_return (0, "%U NAT64 feature enable/disable failed.", - format_vnet_sw_interface_name, vnm, - vnet_get_sw_interface (vnm, sw_if_index)); + format_vnet_sw_if_index_name, vnm, + sw_if_index); goto done; default: break; @@ -254,8 +254,8 @@ nat64_cli_interface_walk (snat_interface_t * i, void *ctx) vlib_main_t *vm = ctx; vnet_main_t *vnm = vnet_get_main (); - vlib_cli_output (vm, " %U %s", format_vnet_sw_interface_name, vnm, - vnet_get_sw_interface (vnm, i->sw_if_index), + vlib_cli_output (vm, " %U %s", format_vnet_sw_if_index_name, vnm, + i->sw_if_index, (nat_interface_is_inside (i) && nat_interface_is_outside (i)) ? "in out" : nat_interface_is_inside (i) ? "in" : "out"); -- 2.16.6