tcp: fix reset sending in syn-sent 70/17370/1
authorFlorin Coras <fcoras@cisco.com>
Thu, 7 Feb 2019 08:15:53 +0000 (00:15 -0800)
committerFlorin Coras <fcoras@cisco.com>
Thu, 7 Feb 2019 08:16:30 +0000 (00:16 -0800)
Change-Id: I468b1015bca5f95b162fb49e904aa4e4d38db75e
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/vnet/tcp/tcp.h
src/vnet/tcp/tcp_input.c
src/vnet/tcp/tcp_output.c

index f5f8520..68750ce 100644 (file)
@@ -615,7 +615,7 @@ tcp_half_open_connection_get (u32 conn_index)
 void tcp_make_fin (tcp_connection_t * tc, vlib_buffer_t * b);
 void tcp_make_synack (tcp_connection_t * ts, vlib_buffer_t * b);
 void tcp_send_reset_w_pkt (tcp_connection_t * tc, vlib_buffer_t * pkt,
-                          u8 is_ip4);
+                          u32 thread_index, u8 is_ip4);
 void tcp_send_reset (tcp_connection_t * tc);
 void tcp_send_syn (tcp_connection_t * tc);
 void tcp_send_synack (tcp_connection_t * tc);
index 84a286b..7fd6925 100644 (file)
@@ -2394,7 +2394,7 @@ tcp46_syn_sent_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
          if (seq_leq (ack0, tc0->iss) || seq_gt (ack0, tc0->snd_nxt))
            {
              if (!tcp_rst (tcp0))
-               tcp_send_reset_w_pkt (tc0, b0, is_ip4);
+               tcp_send_reset_w_pkt (tc0, b0, my_thread_index, is_ip4);
              error0 = TCP_ERROR_RCV_WND;
              goto drop;
            }
@@ -2497,7 +2497,7 @@ tcp46_syn_sent_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
          if (session_stream_connect_notify (&new_tc0->connection, 0))
            {
              clib_warning ("connect notify fail");
-             tcp_send_reset_w_pkt (new_tc0, b0, is_ip4);
+             tcp_send_reset_w_pkt (new_tc0, b0, my_thread_index, is_ip4);
              tcp_connection_cleanup (new_tc0);
              goto drop;
            }
@@ -2518,7 +2518,7 @@ tcp46_syn_sent_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
          if (session_stream_connect_notify (&new_tc0->connection, 0))
            {
              tcp_connection_cleanup (new_tc0);
-             tcp_send_reset_w_pkt (tc0, b0, is_ip4);
+             tcp_send_reset_w_pkt (tc0, b0, my_thread_index, is_ip4);
              TCP_EVT_DBG (TCP_EVT_RST_SENT, tc0);
              goto drop;
            }
index 96ffd2c..9f38851 100644 (file)
@@ -777,9 +777,10 @@ tcp_make_reset_in_place (vlib_main_t * vm, vlib_buffer_t * b0,
  *  It extracts connection info out of original packet
  */
 void
-tcp_send_reset_w_pkt (tcp_connection_t * tc, vlib_buffer_t * pkt, u8 is_ip4)
+tcp_send_reset_w_pkt (tcp_connection_t * tc, vlib_buffer_t * pkt,
+                     u32 thread_index, u8 is_ip4)
 {
-  tcp_worker_ctx_t *wrk = tcp_get_worker (tc->c_thread_index);
+  tcp_worker_ctx_t *wrk = tcp_get_worker (thread_index);
   vlib_main_t *vm = wrk->vm;
   vlib_buffer_t *b;
   u32 bi, sw_if_index, fib_index;