X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fudp%2Fudp.h;fp=src%2Fvnet%2Fip%2Fudp.h;h=7ab26ce96f0b0404fd32195f9b4221c4c5059341;hb=68b0fb0c620c7451ef1a6380c43c39de6614db51;hp=bad58b5d440392302d44c6e37c3d5483e497fd16;hpb=f869028740aaebeb0375077d4d84fa07a17fff1a;p=vpp.git diff --git a/src/vnet/ip/udp.h b/src/vnet/udp/udp.h similarity index 85% rename from src/vnet/ip/udp.h rename to src/vnet/udp/udp.h index bad58b5d440..7ab26ce96f0 100644 --- a/src/vnet/ip/udp.h +++ b/src/vnet/udp/udp.h @@ -1,7 +1,5 @@ /* - * ip/udp.h: udp protocol - * - * Copyright (c) 2013 Cisco and/or its affiliates. + * Copyright (c) 2017 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -14,22 +12,67 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -#ifndef included_udp_h -#define included_udp_h +#ifndef __included_udp_h__ +#define __included_udp_h__ #include -#include +#include #include #include #include #include #include +#include +#include + +typedef struct +{ + transport_connection_t connection; /** must be first */ + + /** ersatz MTU to limit fifo pushes to test data size */ + u32 mtu; +} udp_connection_t; + +typedef struct _udp_uri_main +{ + /* Per-worker thread udp connection pools */ + udp_connection_t **udp_sessions; + udp_connection_t *udp_listeners; + + /* convenience */ + vlib_main_t *vlib_main; + vnet_main_t *vnet_main; + ip4_main_t *ip4_main; + ip6_main_t *ip6_main; +} udp_uri_main_t; + +extern udp_uri_main_t udp_uri_main; +extern vlib_node_registration_t udp4_uri_input_node; + +always_inline udp_uri_main_t * +vnet_get_udp_main () +{ + return &udp_uri_main; +} + +always_inline udp_connection_t * +udp_connection_get (u32 conn_index, u32 thread_index) +{ + return pool_elt_at_index (udp_uri_main.udp_sessions[thread_index], + conn_index); +} + +always_inline udp_connection_t * +udp_listener_get (u32 conn_index) +{ + return pool_elt_at_index (udp_uri_main.udp_listeners, conn_index); +} + typedef enum { #define udp_error(n,s) UDP_ERROR_##n, -#include +#include #undef udp_error UDP_N_ERROR, } udp_error_t; @@ -123,6 +166,10 @@ void udp_register_dst_port (vlib_main_t * vm, udp_dst_port_t dst_port, u32 node_index, u8 is_ip4); +void +udp_unregister_dst_port (vlib_main_t * vm, + udp_dst_port_t dst_port, u8 is_ip4); + void udp_punt_unknown (vlib_main_t * vm, u8 is_ip4, u8 is_add); always_inline void @@ -304,8 +351,6 @@ ip_udp_encap_two (vlib_main_t * vm, vlib_buffer_t * b0, vlib_buffer_t * b1, } } -#endif /* included_udp_h */ - /* * fd.io coding-style-patch-verification: ON * @@ -313,3 +358,5 @@ ip_udp_encap_two (vlib_main_t * vm, vlib_buffer_t * b0, vlib_buffer_t * b1, * eval: (c-set-style "gnu") * End: */ + +#endif /* __included_udp_h__ */