Fixes to tcp active opens and reception

- 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>
diff --git a/src/vnet/tcp/tcp_input.c b/src/vnet/tcp/tcp_input.c
index 318d8ec..ddee41e 100644
--- a/src/vnet/tcp/tcp_input.c
+++ b/src/vnet/tcp/tcp_input.c
@@ -1135,6 +1135,10 @@
 	  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 @@
 	  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);