diff options
Diffstat (limited to 'vnet')
-rw-r--r-- | vnet/Makefile.am | 1 | ||||
-rw-r--r-- | vnet/vnet/ip/ip.h | 2 | ||||
-rw-r--r-- | vnet/vnet/ip/tcp.h | 396 |
3 files changed, 0 insertions, 399 deletions
diff --git a/vnet/Makefile.am b/vnet/Makefile.am index decd3f5645d..bb138e6b0d7 100644 --- a/vnet/Makefile.am +++ b/vnet/Makefile.am @@ -263,7 +263,6 @@ nobase_include_HEADERS += \ vnet/ip/ip_packet.h \ vnet/ip/ports.def \ vnet/ip/protocols.def \ - vnet/ip/tcp.h \ vnet/ip/tcp_packet.h \ vnet/ip/udp.h \ vnet/ip/udp_error.def \ diff --git a/vnet/vnet/ip/ip.h b/vnet/vnet/ip/ip.h index a0b4ea6d5cb..35159bf24f5 100644 --- a/vnet/vnet/ip/ip.h +++ b/vnet/vnet/ip/ip.h @@ -63,8 +63,6 @@ #include <vnet/ip/ip6_error.h> #include <vnet/ip/icmp6.h> -#include <vnet/ip/tcp.h> - #if DPDK > 0 #include <vnet/devices/dpdk/dpdk.h> #endif diff --git a/vnet/vnet/ip/tcp.h b/vnet/vnet/ip/tcp.h deleted file mode 100644 index 98d8e34f0d5..00000000000 --- a/vnet/vnet/ip/tcp.h +++ /dev/null @@ -1,396 +0,0 @@ -/* - * Copyright (c) 2015 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: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * ip/tcp.h: tcp protocol - * - * Copyright (c) 2011 Eliot Dresselhaus - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef included_tcp_protocol_h -#define included_tcp_protocol_h - -#include <vppinfra/vector.h> - -/* No support for e.g. Altivec. */ -#if defined (__SSE2__) -#define TCP_HAVE_VEC128 -#endif - -typedef union { - struct { - u16 src, dst; - }; - u32 as_u32; -} tcp_udp_ports_t; - -typedef union { -#ifdef TCP_HAVE_VEC128 - u32x4 as_u32x4; -#endif - tcp_udp_ports_t as_ports[4]; -} tcp_udp_ports_x4_t; - -typedef struct { - union { -#ifdef TCP_HAVE_VEC128 - u32x4 as_u32x4; -#endif - ip4_address_t as_ip4_address[4]; - } src, dst; - tcp_udp_ports_x4_t ports; -} ip4_tcp_udp_address_x4_t; - -typedef struct { - union { -#ifdef TCP_HAVE_VEC128 - u32x4 as_u32x4[4]; -#endif - u32 as_u32[4][4]; - } src, dst; - tcp_udp_ports_x4_t ports; -} ip6_tcp_udp_address_x4_t; - -typedef struct { - u32 his, ours; -} tcp_sequence_pair_t; - -/* Time stamps saved from options. */ -typedef struct { - u32 ours_host_byte_order, his_net_byte_order; -} tcp_time_stamp_pair_t; - -typedef struct { - ip4_tcp_udp_address_x4_t address_x4; - u32 time_stamps[4]; -} ip4_tcp_udp_address_x4_and_timestamps_t; - -typedef struct { - ip6_tcp_udp_address_x4_t address_x4; - u32 time_stamps[4]; -} ip6_tcp_udp_address_x4_and_timestamps_t; - -#define foreach_tcp_connection_state \ - /* unused */ \ - _ (unused) \ - /* Sent SYN-ACK waiting for ACK if he ever feels like sending one. */ \ - _ (listen_ack_wait) \ - /* Sent SYN waiting for ACK or RST. */ \ - _ (connecting) \ - /* Pseudo-type for established connections. */ \ - _ (established) - -typedef enum { -#define _(f) TCP_CONNECTION_STATE_##f, - foreach_tcp_connection_state -#undef _ - TCP_N_CONNECTION_STATE, -} tcp_connection_state_t; - -/* Kept small to fight off syn flood attacks. */ -typedef struct { - tcp_sequence_pair_t sequence_numbers; - - tcp_time_stamp_pair_t time_stamps; - - /* segment size and window scale (saved from options - or set to defaults). */ - u16 max_segment_size; - - u8 window_scale; - - tcp_connection_state_t state : 8; -} tcp_mini_connection_t; - -typedef struct { - /* Sum and sum^2 of measurements. - Used to compute average and RMS. */ - f64 sum, sum2; - - /* Number of measurements. */ - f64 count; -} tcp_round_trip_time_stats_t; - -typedef struct { - u32 first_buffer_index_this_packet; - - u16 data_ip_checksum; - - u16 n_data_bytes; -} tcp_tx_packet_t; - -typedef struct { - tcp_sequence_pair_t sequence_numbers; - - tcp_time_stamp_pair_t time_stamps; - - tcp_tx_packet_t head_packet, tx_tail_packet, write_tail_packet; - - u32 write_tail_buffer_index; - - tcp_round_trip_time_stats_t round_trip_time_stats; - - /* Number of un-acknowledged bytes we've sent. */ - u32 n_tx_unacked_bytes; - - /* segment size and window scale (saved from options - or set to defaults). */ - u16 max_segment_size; - - /* Window from latest received packet. */ - u16 his_window; - - u16 my_window; - - u8 his_window_scale; - - u8 my_window_scale; - - /* ip4/ip6 tos/ttl to use for packets we send. */ - u8 tos, ttl; - - u16 flags; -#define foreach_tcp_connection_flag \ - _ (ack_pending) \ - _ (fin_received) \ - _ (fin_sent) \ - _ (application_requested_close) - - u8 listener_opaque[128 - - 1 * sizeof (tcp_sequence_pair_t) - - 1 * sizeof (tcp_time_stamp_pair_t) - - 3 * sizeof (tcp_tx_packet_t) - - 1 * sizeof (tcp_round_trip_time_stats_t) - - 2 * sizeof (u32) - - 4 * sizeof (u16) - - 4 * sizeof (u8)]; -} tcp_connection_t; - -typedef enum { - TCP_IP4, - TCP_IP6, - TCP_N_IP46, -} tcp_ip_4_or_6_t; - -typedef enum { -#define _(f) LOG2_TCP_CONNECTION_FLAG_##f, - foreach_tcp_connection_flag -#undef _ - N_TCP_CONNECTION_FLAG, -#define _(f) TCP_CONNECTION_FLAG_##f = 1 << LOG2_TCP_CONNECTION_FLAG_##f, - foreach_tcp_connection_flag -#undef _ -} tcp_connection_flag_t; - -typedef enum { - TCP_PACKET_TEMPLATE_SYN, - TCP_PACKET_TEMPLATE_SYN_ACK, - TCP_PACKET_TEMPLATE_ACK, - TCP_PACKET_TEMPLATE_FIN_ACK, - TCP_PACKET_TEMPLATE_RST_ACK, - TCP_N_PACKET_TEMPLATE, -} tcp_packet_template_type_t; - -typedef struct { - vlib_packet_template_t vlib; - - /* TCP checksum of template with zeros for all - variable fields. Network byte order. */ - u16 tcp_checksum_net_byte_order; - - /* IP4 checksum. */ - u16 ip4_checksum_net_byte_order; -} tcp_packet_template_t; - -typedef struct { - u8 log2_n_mini_connection_hash_elts; - u8 log2_n_established_connection_hash_elts; - u8 is_ip6; - - u32 mini_connection_hash_mask; - u32 established_connection_hash_mask; - - uword * established_connection_overflow_hash; - - tcp_mini_connection_t * mini_connections; - - tcp_connection_t * established_connections; - - /* Vector of established connection indices which need ACKs sent. */ - u32 * connections_pending_acks; - - /* Default valid_local_adjacency_bitmap for listeners who want to listen - for a given port in on all interfaces. */ - uword * default_valid_local_adjacency_bitmap; - - u32 output_node_index; - - tcp_packet_template_t packet_templates[TCP_N_PACKET_TEMPLATE]; -} ip46_tcp_main_t; - -#define foreach_tcp_event \ - /* Received a SYN-ACK after sending a SYN to connect. */ \ - _ (connection_established) \ - /* Received a reset (RST) after sending a SYN to connect. */ \ - _ (connect_failed) \ - /* Received a FIN from an established connection. */ \ - _ (fin_received) \ - _ (connection_closed) \ - /* Received a reset RST from an established connection. */ \ - _ (reset_received) - -typedef enum { -#define _(f) TCP_EVENT_##f, - foreach_tcp_event -#undef _ -} tcp_event_type_t; - -typedef void (tcp_event_function_t) - (u32 * connections, - tcp_event_type_t event_type); - -typedef struct { - /* Bitmap indicating which of local (interface) addresses - we should listen on for this destination port. */ - uword * valid_local_adjacency_bitmap; - - /* Destination tcp/udp port to listen for connections. */ - u16 dst_port; - - u16 next_index; - - u32 flags; - - /* Connection indices for which event in event_function applies to. */ - u32 * event_connections[TCP_N_IP46]; - u32 * eof_connections[TCP_N_IP46]; - u32 * close_connections[TCP_N_IP46]; - - tcp_event_function_t * event_function; -} tcp_listener_t; - -typedef struct { - u8 next, error; -} tcp_lookup_disposition_t; - -#define foreach_tcp_timer \ - /* Used to rank mini connections. */ \ - _ (mini_connection, 10e-3) \ - /* Used for timestamps. */ \ - _ (timestamp, 1e-6) - -typedef enum { -#define _(f,s) TCP_TIMER_##f, - foreach_tcp_timer -#undef _ - TCP_N_TIMER, -} tcp_timer_type_t; - -typedef struct { - ip46_tcp_main_t ip4, ip6; - - /* Array of non-established connections, but soon-to be established connections. */ - ip4_tcp_udp_address_x4_and_timestamps_t * ip4_mini_connection_address_hash; - ip6_tcp_udp_address_x4_and_timestamps_t * ip6_mini_connection_address_hash; - - /* Vector of size log2_n_established_connection_hash_elts plus overflow. */ - ip4_tcp_udp_address_x4_t * ip4_established_connection_address_hash; - ip6_tcp_udp_address_x4_t * ip6_established_connection_address_hash; - - /* Jenkins hash seeds for established and mini hash tables. */ - u32x4_union_t connection_hash_seeds[2][3]; - u32x4_union_t connection_hash_masks[2]; - - /* Pool of listeners. */ - tcp_listener_t * listener_pool; - - /* Table mapping destination port to listener index. */ - u16 * listener_index_by_dst_port; - - tcp_lookup_disposition_t disposition_by_state_and_flags[TCP_N_CONNECTION_STATE][64]; - - u8 log2_clocks_per_tick[TCP_N_TIMER]; - - f64 secs_per_tick[TCP_N_TIMER]; - - /* Holds pointers to default and per-packet TCP options while - parsing a TCP packet's options. */ - tcp_mini_connection_t option_decode_mini_connection_template; - - /* Count of currently established connections. */ - u32 n_established_connections[TCP_N_IP46]; - - u32 tx_buffer_free_list; - u32 tx_buffer_free_list_n_buffer_bytes; -} tcp_main_t; - -/* Global TCP main structure. */ -tcp_main_t tcp_main; - -typedef struct { - /* Listen on this port. */ - u16 port; - -#define TCP_LISTENER_IP4 (1 << 0) -#define TCP_LISTENER_IP6 (1 << 1) - u16 flags; - - /* Next node index for data packets. */ - u32 data_node_index; - - /* Event function: called on new connections, etc. */ - tcp_event_function_t * event_function; -} tcp_listener_registration_t; - -uword -tcp_register_listener (vlib_main_t * vm, tcp_listener_registration_t * r); - -always_inline tcp_ip_4_or_6_t -tcp_connection_is_ip6 (u32 h) -{ return h & 1; } - -always_inline tcp_ip_4_or_6_t -tcp_connection_handle_set (u32 iest, tcp_ip_4_or_6_t is_ip6) -{ return is_ip6 + 2*iest; } - -always_inline tcp_connection_t * -tcp_get_connection (u32 connection_handle) -{ - u32 iest = connection_handle / 2; - tcp_ip_4_or_6_t is_ip6 = tcp_connection_is_ip6 (connection_handle); - tcp_main_t * tm = &tcp_main; - ip46_tcp_main_t * tm46 = is_ip6 ? &tm->ip6 : &tm->ip4; - return vec_elt_at_index (tm46->established_connections, iest); -} - -#endif /* included_tcp_protocol_h */ |