X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fudp%2Fudp.c;h=85a22a982b31c91432905697e0b2b71707a7d11f;hb=b7b929931a07fbb27b43d5cd105f366c3e29807e;hp=947cc1e38e17835b0a122db9a74cd775d99a0ba7;hpb=7fb0fe1f6972a7a35146fa9115b866ba29a6fbb7;p=vpp.git diff --git a/src/vnet/udp/udp.c b/src/vnet/udp/udp.c index 947cc1e38e1..85a22a982b3 100644 --- a/src/vnet/udp/udp.c +++ b/src/vnet/udp/udp.c @@ -45,7 +45,7 @@ udp_connection_alloc (u32 thread_index) pool_get_aligned (um->connections[thread_index], uc, CLIB_CACHE_LINE_BYTES); } - memset (uc, 0, sizeof (*uc)); + clib_memset (uc, 0, sizeof (*uc)); uc->c_c_index = uc - um->connections[thread_index]; uc->c_thread_index = thread_index; uc->c_proto = TRANSPORT_PROTO_UDP; @@ -58,7 +58,7 @@ udp_connection_free (udp_connection_t * uc) { pool_put (udp_main.connections[uc->c_thread_index], uc); if (CLIB_DEBUG) - memset (uc, 0xFA, sizeof (*uc)); + clib_memset (uc, 0xFA, sizeof (*uc)); } u32 @@ -76,7 +76,7 @@ udp_session_bind (u32 session_index, transport_endpoint_t * lcl) return -1; pool_get (um->listener_pool, listener); - memset (listener, 0, sizeof (udp_connection_t)); + clib_memset (listener, 0, sizeof (udp_connection_t)); listener->c_lcl_port = lcl->port; listener->c_c_index = listener - um->listener_pool; @@ -265,7 +265,7 @@ udp_open_connection (transport_endpoint_t * rmt) { udp_main_t *um = vnet_get_udp_main (); vlib_main_t *vm = vlib_get_main (); - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; udp_connection_t *uc; ip46_address_t lcl_addr; u32 node_index; @@ -288,6 +288,10 @@ udp_open_connection (transport_endpoint_t * rmt) node_index = rmt->is_ip4 ? udp4_input_node.index : udp6_input_node.index; udp_register_dst_port (vm, lcl_port, node_index, 1 /* is_ipv4 */ ); + /* We don't poll main thread if we have workers */ + if (vlib_num_workers ()) + thread_index = 1; + uc = udp_connection_alloc (thread_index); ip_copy (&uc->c_rmt_ip, &rmt->ip, rmt->is_ip4); ip_copy (&uc->c_lcl_ip, &lcl_addr, rmt->is_ip4); @@ -301,10 +305,14 @@ udp_open_connection (transport_endpoint_t * rmt) } transport_connection_t * -udp_half_open_session_get_transport (u32 conn_index) +udp_session_get_half_open (u32 conn_index) { udp_connection_t *uc; - uc = udp_connection_get (conn_index, vlib_get_thread_index ()); + u32 thread_index; + + /* We don't poll main thread if we have workers */ + thread_index = vlib_num_workers ()? 1 : 0; + uc = udp_connection_get (conn_index, thread_index); return &uc->connection; } @@ -316,7 +324,7 @@ const static transport_proto_vft_t udp_proto = { .push_header = udp_push_header, .get_connection = udp_session_get, .get_listener = udp_session_get_listener, - .get_half_open = udp_half_open_session_get_transport, + .get_half_open = udp_session_get_half_open, .close = udp_session_close, .cleanup = udp_session_cleanup, .send_mss = udp_send_mss, @@ -360,7 +368,7 @@ const static transport_proto_vft_t udpc_proto = { .push_header = udp_push_header, .get_connection = udp_session_get, .get_listener = udp_session_get_listener, - .get_half_open = udp_half_open_session_get_transport, + .get_half_open = udp_session_get_half_open, .close = udp_session_close, .cleanup = udp_session_cleanup, .send_mss = udp_send_mss,