Fixes to tcp active opens and reception 13/6713/3
authorDave Barach <dbarach@cisco.com>
Mon, 15 May 2017 20:27:05 +0000 (16:27 -0400)
committerDamjan Marion <dmarion.lists@gmail.com>
Tue, 16 May 2017 16:50:10 +0000 (16:50 +0000)
- Properly initialize connection index
- Add new session to main hash table
- Drop packets that are completely in the past with respect to the rcv
  wnd (e.g., retransmits due to premature timer pops)

Change-Id: Ic0873018ff0a4c59e0913863dc7f0c0f822d5c34
Signed-off-by: Dave Barach <dbarach@cisco.com>
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/vnet/session/session.c
src/vnet/tcp/tcp_input.c

index ed205d7..d0792fa 100644 (file)
@@ -732,6 +732,10 @@ stream_session_connect_notify (transport_connection_t * tc, u8 sst,
 
   /* Cleanup session lookup */
   stream_session_half_open_table_del (smm, sst, tc);
+
+  /* Add to established lookup table */
+  handle = (((u64) tc->thread_index) << 32) | (u64) new_s->session_index;
+  stream_session_table_add_for_tc (tc, handle);
 }
 
 void
@@ -1104,7 +1108,7 @@ session_manager_main_enable (vlib_main_t * vm)
   for (i = 0; i < 200000; i++)
     {
       stream_session_t *ss;
-      pool_get (smm->sessions[0], ss);
+      pool_get_aligned (smm->sessions[0], ss, CLIB_CACHE_LINE_BYTES);
       memset (ss, 0, sizeof (*ss));
     }
 
index 318d8ec..ddee41e 100644 (file)
@@ -1135,6 +1135,10 @@ tcp_segment_rcv (tcp_main_t * tm, tcp_connection_t * tc, vlib_buffer_t * b,
          error = TCP_ERROR_SEGMENT_OLD;
          *next0 = TCP_NEXT_DROP;
 
+         /* Completely in the past (possible retransmit) */
+         if (seq_lt (vnet_buffer (b)->tcp.seq_end, tc->rcv_nxt))
+           goto done;
+
          /* Chop off the bytes in the past */
          n_bytes_to_drop = tc->rcv_nxt - vnet_buffer (b)->tcp.seq_number;
          n_data_bytes -= n_bytes_to_drop;
@@ -1553,6 +1557,7 @@ tcp46_syn_sent_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
          clib_memcpy (new_tc0, tc0, sizeof (*new_tc0));
 
          new_tc0->c_thread_index = my_thread_index;
+         new_tc0->c_c_index = new_tc0 - tm->connections[my_thread_index];
 
          /* Cleanup half-open connection XXX lock */
          pool_put (tm->half_open_connections, tc0);