From 07bc8bb1edff6d50b45116a36bb973d06968c3c5 Mon Sep 17 00:00:00 2001 From: Klement Sekera Date: Wed, 24 Mar 2021 16:46:22 +0100 Subject: nat: fix vnet_feature_next in source hairpinning Avoid erroneous double vnet_feature_next if routing buffer manually. Type: fix Change-Id: I3f56c12bf57f59a1e5ddad63a2565fa195934cf6 Signed-off-by: Klement Sekera --- src/plugins/nat/nat44-ei/nat44_ei_hairpinning.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src/plugins/nat/nat44-ei') diff --git a/src/plugins/nat/nat44-ei/nat44_ei_hairpinning.c b/src/plugins/nat/nat44-ei/nat44_ei_hairpinning.c index 0de2de1faf4..a049e4659a7 100644 --- a/src/plugins/nat/nat44-ei/nat44_ei_hairpinning.c +++ b/src/plugins/nat/nat44-ei/nat44_ei_hairpinning.c @@ -440,7 +440,6 @@ VLIB_NODE_FN (nat44_ei_hairpin_src_node) b0 = vlib_get_buffer (vm, bi0); sw_if_index0 = vnet_buffer (b0)->sw_if_index[VLIB_RX]; - vnet_feature_next (&next0, b0); pool_foreach (i, nm->output_feature_interfaces) { @@ -452,14 +451,23 @@ VLIB_NODE_FN (nat44_ei_hairpin_src_node) NAT44_EI_FLAG_HAIRPINNING)) { if (PREDICT_TRUE (nm->num_workers > 1)) - next0 = NAT44_EI_HAIRPIN_SRC_NEXT_SNAT_IN2OUT_WH; + { + next0 = NAT44_EI_HAIRPIN_SRC_NEXT_SNAT_IN2OUT_WH; + goto skip_feature_next; + } else - next0 = NAT44_EI_HAIRPIN_SRC_NEXT_SNAT_IN2OUT; + { + next0 = NAT44_EI_HAIRPIN_SRC_NEXT_SNAT_IN2OUT; + goto skip_feature_next; + } } break; } } + vnet_feature_next (&next0, b0); + skip_feature_next: + if (next0 != NAT44_EI_HAIRPIN_SRC_NEXT_DROP) { vlib_increment_simple_counter ( -- cgit 1.2.3-korg