Compare commits

...

2 Commits

Author SHA1 Message Date
Simon Zhang
ef080e1f9b fix dpdk cryptodev enable issue
Change-Id: I47d021522cfc92cfb3877449333cbf31022c06f4
Signed-off-by: Simon Zhang <yuwei1.zhang@intel.com>
2019-01-16 18:32:44 +00:00
Dmitry Vakhrushev
f5641398ae NAT: Fixed issues with dropping reverse packets with output-feature.
Fixed NAT issues with dropping reverse packets in case NAT worked
in 'endpoint-dependent' mode and outside interface has FIB different
from 0 when the output-feature is set.

In this case, the out2in_ed dynamic hash key was not being created
correctly.

Change-Id: I6362967f4b09a375a4606eedaa8e264795b25453
Signed-off-by: Dmitry Vakhrushev <dmitry@netgate.com>
2019-01-16 09:44:03 -05:00
2 changed files with 41 additions and 6 deletions

View File

@ -1041,12 +1041,15 @@ dpdk_ipsec_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
}
ipsec_register_esp_backend (vm, im, "dpdk backend",
"dpdk-esp4-encrypt",
"dpdk-esp4-decrypt",
"dpdk-esp6-encrypt",
"dpdk-esp6-decrypt",
dpdk_ipsec_check_support, add_del_sa_session);
u32 idx = ipsec_register_esp_backend (vm, im, "dpdk backend",
"dpdk-esp4-encrypt",
"dpdk-esp4-decrypt",
"dpdk-esp6-encrypt",
"dpdk-esp6-decrypt",
dpdk_ipsec_check_support,
add_del_sa_session);
int rv = ipsec_select_esp_backend (im, idx);
ASSERT (rv);
vlib_node_t *node = vlib_get_node_by_name (vm, (u8 *) "dpdk-crypto-input");
ASSERT (node);

View File

@ -1968,6 +1968,10 @@ snat_interface_add_del_output_feature (u32 sw_if_index,
snat_interface_t *i;
snat_address_t *ap;
snat_static_mapping_t *m;
nat_outside_fib_t *outside_fib;
u32 fib_index = fib_table_get_index_for_sw_if_index (FIB_PROTOCOL_IP4,
sw_if_index);
if (sm->deterministic ||
(sm->static_mapping_only && !(sm->static_mapping_connection_tracking)))
@ -1981,6 +1985,34 @@ snat_interface_add_del_output_feature (u32 sw_if_index,
}));
/* *INDENT-ON* */
if (!is_inside)
{
/* *INDENT-OFF* */
vec_foreach (outside_fib, sm->outside_fibs)
{
if (outside_fib->fib_index == fib_index)
{
if (is_del)
{
outside_fib->refcount--;
if (!outside_fib->refcount)
vec_del1 (sm->outside_fibs, outside_fib - sm->outside_fibs);
}
else
outside_fib->refcount++;
goto feature_set;
}
}
/* *INDENT-ON* */
if (!is_del)
{
vec_add2 (sm->outside_fibs, outside_fib, 1);
outside_fib->refcount = 1;
outside_fib->fib_index = fib_index;
}
}
feature_set:
if (is_inside)
{
if (sm->endpoint_dependent)