summaryrefslogtreecommitdiffstats
path: root/src/plugins/nat/nat64.c
diff options
context:
space:
mode:
authorMatus Fabian <matfabia@cisco.com>2018-01-05 05:03:35 -0800
committerOle Trøan <otroan@employees.org>2018-01-08 09:20:24 +0000
commit43ad007a0ce57ed54864ece41714440cf838f356 (patch)
treec665187dad7d864a4d6d9de6ccc59066fbc09314 /src/plugins/nat/nat64.c
parent37aa1ffae6e5cc05f6e0c4e9c3da758bb864c9be (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/nat64.c')
-rw-r--r--src/plugins/nat/nat64.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/plugins/nat/nat64.c b/src/plugins/nat/nat64.c
index e60d9ec0219..571e0717826 100644
--- a/src/plugins/nat/nat64.c
+++ b/src/plugins/nat/nat64.c
@@ -202,7 +202,7 @@ nat64_get_worker_out2in (ip4_header_t * ip)
/* worker by outside port (TCP/UDP) */
port = clib_net_to_host_u16 (port);
if (port > 1024)
- return (u32) ((port - 1024) / sm->port_per_thread);
+ return nm->sm->first_worker_index + ((port - 1024) / sm->port_per_thread);
return vlib_get_thread_index ();
}
@@ -497,13 +497,17 @@ nat64_alloc_out_addr_and_port (u32 fib_index, snat_protocol_t proto,
snat_main_t *sm = nm->sm;
snat_session_key_t k;
u32 ai;
+ u32 worker_index = 0;
int rv;
k.protocol = proto;
+ if (sm->num_workers > 1)
+ worker_index = thread_index - sm->first_worker_index;
+
rv =
sm->alloc_addr_and_port (nm->addr_pool, fib_index, thread_index, &k, &ai,
- sm->port_per_thread, thread_index);
+ sm->port_per_thread, worker_index);
if (!rv)
{