X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fudp%2Fudp.c;h=8fa1147b03050aec5274ac6b6a76b327a4c66b48;hb=refs%2Fchanges%2F40%2F25840%2F12;hp=949c6356d330a4c1df9c819fcc4ea66408741899;hpb=c75423981ad2d44c4f2abc5dbe69d6a1a9930d1e;p=vpp.git diff --git a/src/vnet/udp/udp.c b/src/vnet/udp/udp.c index 949c6356d33..8fa1147b030 100644 --- a/src/vnet/udp/udp.c +++ b/src/vnet/udp/udp.c @@ -58,9 +58,10 @@ udp_connection_alloc (u32 thread_index) void udp_connection_free (udp_connection_t * uc) { - pool_put (udp_main.connections[uc->c_thread_index], uc); + u32 thread_index = uc->c_thread_index; if (CLIB_DEBUG) clib_memset (uc, 0xFA, sizeof (*uc)); + pool_put (udp_main.connections[thread_index], uc); } void @@ -85,7 +86,8 @@ udp_session_bind (u32 session_index, transport_endpoint_t * lcl) void *iface_ip; udp_dst_port_info_t *pi; - pi = udp_get_dst_port_info (um, lcl->port, lcl->is_ip4); + pi = + udp_get_dst_port_info (um, clib_net_to_host_u16 (lcl->port), lcl->is_ip4); if (pi) return -1; @@ -112,7 +114,7 @@ udp_session_bind (u32 session_index, transport_endpoint_t * lcl) node_index = lcl->is_ip4 ? udp4_input_node.index : udp6_input_node.index; udp_register_dst_port (vm, clib_net_to_host_u16 (lcl->port), node_index, - 1 /* is_ipv4 */ ); + lcl->is_ip4); return listener->c_c_index; } @@ -271,18 +273,17 @@ format_udp_listener_session (u8 * s, va_list * args) return format (s, "%U", format_udp_connection, uc, verbose); } -u16 -udp_send_mss (transport_connection_t * t) -{ - /* TODO figure out MTU of output interface */ - return 1460; -} - -u32 -udp_send_space (transport_connection_t * t) +static int +udp_session_send_params (transport_connection_t * tconn, + transport_send_params_t * sp) { /* No constraint on TX window */ - return ~0; + sp->snd_space = ~0; + /* TODO figure out MTU of output interface */ + sp->snd_mss = 1460; + sp->tx_offset = 0; + sp->flags = 0; + return 0; } int @@ -355,12 +356,13 @@ static const transport_proto_vft_t udp_proto = { .get_half_open = udp_session_get_half_open, .close = udp_session_close, .cleanup = udp_session_cleanup, - .send_mss = udp_send_mss, - .send_space = udp_send_space, + .send_params = udp_session_send_params, .format_connection = format_udp_session, .format_half_open = format_udp_half_open_session, .format_listener = format_udp_listener_session, .transport_options = { + .name = "udp", + .short_name = "U", .tx_type = TRANSPORT_TX_DGRAM, .service_type = TRANSPORT_SERVICE_CL, }, @@ -393,6 +395,9 @@ udpc_connection_listen (u32 session_index, transport_endpoint_t * lcl) return -1; listener = udp_listener_get (li_index); listener->flags |= UDP_CONN_F_CONNECTED; + /* Fake udp listener, i.e., make sure session layer adds a udp instead of + * udpc listener to the lookup table */ + ((session_endpoint_cfg_t *) lcl)->transport_proto = TRANSPORT_PROTO_UDP; return li_index; } @@ -407,12 +412,13 @@ static const transport_proto_vft_t udpc_proto = { .get_half_open = udp_session_get_half_open, .close = udp_session_close, .cleanup = udp_session_cleanup, - .send_mss = udp_send_mss, - .send_space = udp_send_space, + .send_params = udp_session_send_params, .format_connection = format_udp_session, .format_half_open = format_udp_half_open_session, .format_listener = format_udp_listener_session, .transport_options = { + .name = "udpc", + .short_name = "U", .tx_type = TRANSPORT_TX_DGRAM, .service_type = TRANSPORT_SERVICE_VC, .half_open_has_fifos = 1