summaryrefslogtreecommitdiffstats
path: root/plugins/snat-plugin/snat/out2in.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/snat-plugin/snat/out2in.c')
-rw-r--r--plugins/snat-plugin/snat/out2in.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/plugins/snat-plugin/snat/out2in.c b/plugins/snat-plugin/snat/out2in.c
index 13e596b9a0d..f1f4159cdce 100644
--- a/plugins/snat-plugin/snat/out2in.c
+++ b/plugins/snat-plugin/snat/out2in.c
@@ -877,9 +877,20 @@ snat_out2in_worker_handoff_fn (vlib_main_t * vm,
/* Ever heard of of the "user" before? */
if (clib_bihash_search_8_8 (&sm->worker_by_out, &kv0, &value0))
{
- /* No, assign next available worker (RR) */
- next_worker_index = sm->first_worker_index +
- sm->workers[sm->next_worker++ % vec_len (sm->workers)];
+ key0.port = 0;
+ kv0.key = key0.as_u64;
+
+ if (clib_bihash_search_8_8 (&sm->worker_by_out, &kv0, &value0))
+ {
+ /* No, assign next available worker (RR) */
+ next_worker_index = sm->first_worker_index +
+ sm->workers[sm->next_worker++ % vec_len (sm->workers)];
+ }
+ else
+ {
+ /* Static mapping without port */
+ next_worker_index = value0.value;
+ }
/* Add to translated packets worker lookup */
kv0.value = next_worker_index;