summaryrefslogtreecommitdiffstats
path: root/src/plugins/nat/nat.c
diff options
context:
space:
mode:
authorMatus Fabian <matfabia@cisco.com>2018-01-05 05:03:35 -0800
committerMatus Fabian <matfabia@cisco.com>2018-01-08 07:08:09 +0000
commit1049139a6d323e07bfb87710c9d2f1d467e980a9 (patch)
treedf71d408dd7e6a437fb577b982c4b6fd7c277b31 /src/plugins/nat/nat.c
parent9cfb11787f24e90ad14697afefbb2dd5969b2951 (diff)
NAT: fixed get_worker_out2in bug (VPP-1116)
Change-Id: I5e080d69f28661cc0b1846885d5001526b54fbd9 Signed-off-by: Matus Fabian <matfabia@cisco.com>
Diffstat (limited to 'src/plugins/nat/nat.c')
-rw-r--r--src/plugins/nat/nat.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/plugins/nat/nat.c b/src/plugins/nat/nat.c
index 721ad16d3dc..9993de06128 100644
--- a/src/plugins/nat/nat.c
+++ b/src/plugins/nat/nat.c
@@ -1586,7 +1586,7 @@ int snat_set_workers (uword * bitmap)
clib_bitmap_foreach (i, bitmap,
({
vec_add1(sm->workers, i);
- sm->per_thread_data[i].snat_thread_index = j;
+ sm->per_thread_data[sm->first_worker_index + i].snat_thread_index = j;
j++;
}));
@@ -2758,6 +2758,7 @@ snat_get_worker_out2in_cb (ip4_header_t * ip0, u32 rx_fib_index0)
snat_session_t *s;
int i;
u32 proto;
+ u32 next_worker_index = 0;
/* first try static mappings without port */
if (PREDICT_FALSE (pool_elts (sm->static_mappings)))
@@ -2873,7 +2874,10 @@ snat_get_worker_out2in_cb (ip4_header_t * ip0, u32 rx_fib_index0)
}
/* worker by outside port */
- return (u32) ((clib_net_to_host_u16 (port) - 1024) / sm->port_per_thread);
+ next_worker_index = sm->first_worker_index;
+ next_worker_index +=
+ sm->workers[(clib_net_to_host_u16 (port) - 1024) / sm->port_per_thread];
+ return next_worker_index;
}
static clib_error_t *