diff options
author | Florin Coras <fcoras@cisco.com> | 2020-04-03 00:58:48 +0000 |
---|---|---|
committer | Dave Barach <openvpp@barachs.net> | 2020-04-03 14:57:12 +0000 |
commit | d85666fdfd49a2b0a3ce5166c22c9efadf6ca239 (patch) | |
tree | 128ed23230deee135908280bbac44649ebba1a4f /src/vnet/udp | |
parent | 888d9f05eff1801cbd6c5227eb22e464d3a117c3 (diff) |
session udp: fix transport flags and migration
Type: fix
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I840d43e79b1f826380bd56485441510e45bdfc7f
Diffstat (limited to 'src/vnet/udp')
-rw-r--r-- | src/vnet/udp/udp.c | 6 | ||||
-rw-r--r-- | src/vnet/udp/udp.h | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/vnet/udp/udp.c b/src/vnet/udp/udp.c index ba1821a5026..3632204f863 100644 --- a/src/vnet/udp/udp.c +++ b/src/vnet/udp/udp.c @@ -284,7 +284,11 @@ udp_session_cleanup (u32 connection_index, u32 thread_index) { udp_connection_t *uc; uc = udp_connection_get (connection_index, thread_index); - if (uc) + if (!uc) + return; + if (uc->flags & UDP_CONN_F_MIGRATED) + udp_connection_free (uc); + else udp_connection_cleanup (uc); } diff --git a/src/vnet/udp/udp.h b/src/vnet/udp/udp.h index 736e3ce94f1..9e1aad6fbe5 100644 --- a/src/vnet/udp/udp.h +++ b/src/vnet/udp/udp.h @@ -39,6 +39,7 @@ typedef enum _(OWNS_PORT, "OWNS_PORT") /**< port belong to conn (UDPC) */ \ _(CLOSING, "CLOSING") /**< conn closed with data */ \ _(LISTEN, "LISTEN") /**< conn is listening */ \ + _(MIGRATED, "MIGRATED") /**< cloned to another thread */ \ enum udp_conn_flags_bits { @@ -258,6 +259,7 @@ udp_connection_clone_safe (u32 connection_index, u32 thread_index) udp_pool_add_peeker (thread_index); old_c = udp_main.connections[thread_index] + connection_index; clib_memcpy_fast (new_c, old_c, sizeof (*new_c)); + old_c->flags |= UDP_CONN_F_MIGRATED; udp_pool_remove_peeker (thread_index); new_c->c_thread_index = current_thread_index; new_c->c_c_index = udp_connection_index (new_c); |