diff options
Diffstat (limited to 'plugins/snat-plugin/snat/out2in.c')
-rw-r--r-- | plugins/snat-plugin/snat/out2in.c | 17 |
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; |