X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fudp%2Fudp.h;h=9e1aad6fbe5f3684d8f3e36ea33fce919d17c650;hb=refs%2Fchanges%2F28%2F26328%2F2;hp=88a46db277e1e24787aa6f059152f6b18c687f13;hpb=c75423981ad2d44c4f2abc5dbe69d6a1a9930d1e;p=vpp.git diff --git a/src/vnet/udp/udp.h b/src/vnet/udp/udp.h index 88a46db277e..9e1aad6fbe5 100644 --- a/src/vnet/udp/udp.h +++ b/src/vnet/udp/udp.h @@ -34,11 +34,26 @@ typedef enum UDP_N_ERROR, } udp_error_t; -typedef enum +#define foreach_udp_connection_flag \ + _(CONNECTED, "CONNECTED") /**< connected mode */ \ + _(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 +{ +#define _(sym, str) UDP_CONN_F_BIT_##sym, + foreach_udp_connection_flag +#undef _ + UDP_CONN_N_FLAGS +}; + +typedef enum udp_conn_flags_ { - UDP_CONN_F_CONNECTED, /**< connected mode */ - UDP_CONN_F_OWNS_PORT, /**< port belong to conn (UDPC) */ - UDP_CONN_F_CLOSING, /**< conn closed with data */ +#define _(sym, str) UDP_CONN_F_##sym = 1 << UDP_CONN_F_BIT_##sym, + foreach_udp_connection_flag +#undef _ } udp_conn_flags_t; typedef struct @@ -106,7 +121,7 @@ typedef struct /* Name (a c string). */ char *name; - /* GRE protocol type in host byte order. */ + /* Port number in host byte order. */ udp_dst_port_t dst_port; /* Node which handles this type. */ @@ -115,6 +130,9 @@ typedef struct /* Next index for this type. */ u32 next_index; + /* UDP sessions refcount (not tunnels) */ + u32 n_connections; + /* Parser for packet generator edits for this protocol */ unformat_function_t *unformat_pg_edit; } udp_dst_port_info_t; @@ -141,6 +159,9 @@ typedef struct u8 punt_unknown4; u8 punt_unknown6; + /* Udp local to input arc index */ + u32 local_to_input_edge[N_UDP_AF]; + /* * Per-worker thread udp connection pools used with session layer */ @@ -238,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); @@ -257,6 +279,8 @@ format_function_t format_udp_header; format_function_t format_udp_rx_trace; unformat_function_t unformat_udp_header; +void udp_add_dst_port (udp_main_t * um, udp_dst_port_t dst_port, + char *dst_port_name, u8 is_ip4); void udp_register_dst_port (vlib_main_t * vm, udp_dst_port_t dst_port, u32 node_index, u8 is_ip4); @@ -264,6 +288,8 @@ void udp_unregister_dst_port (vlib_main_t * vm, udp_dst_port_t dst_port, u8 is_ip4); bool udp_is_valid_dst_port (udp_dst_port_t dst_port, u8 is_ip4); +void udp_connection_share_port (u16 lcl_port, u8 is_ip4); + void udp_punt_unknown (vlib_main_t * vm, u8 is_ip4, u8 is_add); always_inline void *