diff options
Diffstat (limited to 'src/vnet/tcp/tcp_input.c')
-rw-r--r-- | src/vnet/tcp/tcp_input.c | 92 |
1 files changed, 45 insertions, 47 deletions
diff --git a/src/vnet/tcp/tcp_input.c b/src/vnet/tcp/tcp_input.c index 3a32e62d243..73642df8ca9 100644 --- a/src/vnet/tcp/tcp_input.c +++ b/src/vnet/tcp/tcp_input.c @@ -1388,8 +1388,8 @@ tcp_session_enqueue_data (tcp_connection_t * tc, vlib_buffer_t * b, return TCP_ERROR_PURE_ACK; } - written = stream_session_enqueue_data (&tc->connection, b, 0, - 1 /* queue event */ , 1); + written = session_enqueue_stream_connection (&tc->connection, b, 0, + 1 /* queue event */ , 1); TCP_EVT_DBG (TCP_EVT_INPUT, tc, 0, data_len, written); @@ -1450,9 +1450,10 @@ tcp_session_enqueue_ooo (tcp_connection_t * tc, vlib_buffer_t * b, } /* Enqueue out-of-order data with relative offset */ - rv = stream_session_enqueue_data (&tc->connection, b, - vnet_buffer (b)->tcp.seq_number - - tc->rcv_nxt, 0 /* queue event */ , 0); + rv = session_enqueue_stream_connection (&tc->connection, b, + vnet_buffer (b)->tcp.seq_number - + tc->rcv_nxt, 0 /* queue event */ , + 0); /* Nothing written */ if (rv) @@ -1669,15 +1670,16 @@ tcp_set_rx_trace_data (tcp_rx_trace_t * t0, tcp_connection_t * tc0, } always_inline void -tcp_established_inc_counter (vlib_main_t * vm, u8 is_ip4, u8 evt, u8 val) +tcp_node_inc_counter (vlib_main_t * vm, u32 tcp4_node, u32 tcp6_node, + u8 is_ip4, u8 evt, u8 val) { if (PREDICT_TRUE (!val)) return; if (is_ip4) - vlib_node_increment_counter (vm, tcp4_established_node.index, evt, val); + vlib_node_increment_counter (vm, tcp4_node, evt, val); else - vlib_node_increment_counter (vm, tcp6_established_node.index, evt, val); + vlib_node_increment_counter (vm, tcp6_node, evt, val); } always_inline uword @@ -1787,8 +1789,11 @@ tcp46_established_inline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_put_next_frame (vm, node, next_index, n_left_to_next); } - errors = session_manager_flush_enqueue_events (my_thread_index); - tcp_established_inc_counter (vm, is_ip4, TCP_ERROR_EVENT_FIFO_FULL, errors); + errors = session_manager_flush_enqueue_events (TRANSPORT_PROTO_TCP, + my_thread_index); + tcp_node_inc_counter (vm, is_ip4, tcp4_established_node.index, + tcp6_established_node.index, + TCP_ERROR_EVENT_FIFO_FULL, errors); tcp_flush_frame_to_output (vm, my_thread_index, is_ip4); return from_frame->n_vectors; @@ -1873,8 +1878,7 @@ tcp_lookup_is_valid (tcp_connection_t * tc, tcp_header_t * hdr) { handle = session_lookup_half_open_handle (&tc->connection); tmp = session_lookup_half_open_connection (handle & 0xFFFFFFFF, - tc->c_transport_proto, - tc->c_is_ip4); + tc->c_proto, tc->c_is_ip4); if (tmp) { @@ -2117,7 +2121,7 @@ tcp46_syn_sent_inline (vlib_main_t * vm, vlib_node_runtime_t * node, /* Notify app that we have connection. If session layer can't * allocate session send reset */ - if (stream_session_connect_notify (&new_tc0->connection, 0)) + if (session_stream_connect_notify (&new_tc0->connection, 0)) { clib_warning ("connect notify fail"); tcp_send_reset_w_pkt (new_tc0, b0, is_ip4); @@ -2138,7 +2142,7 @@ tcp46_syn_sent_inline (vlib_main_t * vm, vlib_node_runtime_t * node, new_tc0->state = TCP_STATE_SYN_RCVD; /* Notify app that we have connection */ - if (stream_session_connect_notify (&new_tc0->connection, 0)) + if (session_stream_connect_notify (&new_tc0->connection, 0)) { tcp_connection_cleanup (new_tc0); tcp_send_reset_w_pkt (tc0, b0, is_ip4); @@ -2187,17 +2191,11 @@ tcp46_syn_sent_inline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_put_next_frame (vm, node, next_index, n_left_to_next); } - errors = session_manager_flush_enqueue_events (my_thread_index); - if (errors) - { - if (is_ip4) - vlib_node_increment_counter (vm, tcp4_established_node.index, - TCP_ERROR_EVENT_FIFO_FULL, errors); - else - vlib_node_increment_counter (vm, tcp6_established_node.index, - TCP_ERROR_EVENT_FIFO_FULL, errors); - } - + errors = session_manager_flush_enqueue_events (TRANSPORT_PROTO_TCP, + my_thread_index); + tcp_node_inc_counter (vm, is_ip4, tcp4_syn_sent_node.index, + tcp6_syn_sent_node.index, + TCP_ERROR_EVENT_FIFO_FULL, errors); return from_frame->n_vectors; } @@ -2259,6 +2257,9 @@ VLIB_REGISTER_NODE (tcp6_syn_sent_node) = VLIB_NODE_FUNCTION_MULTIARCH (tcp6_syn_sent_node, tcp6_syn_sent_rcv); +vlib_node_registration_t tcp4_rcv_process_node; +vlib_node_registration_t tcp6_rcv_process_node; + /** * Handles reception for all states except LISTEN, SYN-SENT and ESTABLISHED * as per RFC793 p. 64 @@ -2583,16 +2584,11 @@ tcp46_rcv_process_inline (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_put_next_frame (vm, node, next_index, n_left_to_next); } - errors = session_manager_flush_enqueue_events (my_thread_index); - if (errors) - { - if (is_ip4) - vlib_node_increment_counter (vm, tcp4_established_node.index, - TCP_ERROR_EVENT_FIFO_FULL, errors); - else - vlib_node_increment_counter (vm, tcp6_established_node.index, - TCP_ERROR_EVENT_FIFO_FULL, errors); - } + errors = session_manager_flush_enqueue_events (TRANSPORT_PROTO_TCP, + my_thread_index); + tcp_node_inc_counter (vm, is_ip4, tcp4_rcv_process_node.index, + tcp6_rcv_process_node.index, + TCP_ERROR_EVENT_FIFO_FULL, errors); return from_frame->n_vectors; } @@ -2966,12 +2962,13 @@ tcp46_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node, + tcp_header_bytes (tcp0)); n_data_bytes0 = clib_net_to_host_u16 (ip40->length) - n_advance_bytes0; - tconn = - session_lookup_connection_wt4 (fib_index0, &ip40->dst_address, - &ip40->src_address, - tcp0->dst_port, tcp0->src_port, - TRANSPORT_PROTO_TCP, - my_thread_index); + tconn = session_lookup_connection_wt4 (fib_index0, + &ip40->dst_address, + &ip40->src_address, + tcp0->dst_port, + tcp0->src_port, + TRANSPORT_PROTO_TCP, + my_thread_index); tc0 = tcp_get_connection_from_transport (tconn); ASSERT (tcp_lookup_is_valid (tc0, tcp0)); } @@ -2983,12 +2980,13 @@ tcp46_input_inline (vlib_main_t * vm, vlib_node_runtime_t * node, n_data_bytes0 = clib_net_to_host_u16 (ip60->payload_length) - n_advance_bytes0; n_advance_bytes0 += sizeof (ip60[0]); - tconn = - session_lookup_connection_wt6 (fib_index0, &ip60->dst_address, - &ip60->src_address, - tcp0->dst_port, tcp0->src_port, - TRANSPORT_PROTO_TCP, - my_thread_index); + tconn = session_lookup_connection_wt6 (fib_index0, + &ip60->dst_address, + &ip60->src_address, + tcp0->dst_port, + tcp0->src_port, + TRANSPORT_PROTO_TCP, + my_thread_index); tc0 = tcp_get_connection_from_transport (tconn); ASSERT (tcp_lookup_is_valid (tc0, tcp0)); } |