tcp: allow data in passive open ack (VPP-1545)

Change-Id: Iceb99d3f8b7029bd1b1e9ebafb1e0b3790c573e4
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 82ab817..6a37635 100644
--- a/src/vnet/tcp/tcp_input.c
+++ b/src/vnet/tcp/tcp_input.c
@@ -359,6 +359,7 @@
   /* 4th: check the SYN bit */
   if (PREDICT_FALSE (tcp_syn (th0)))
     {
+      *error0 = tcp_ack (th0) ? TCP_ERROR_SYN_ACKS_RCVD : TCP_ERROR_SYNS_RCVD;
       /* TODO implement RFC 5961 */
       if (tc0->state == TCP_STATE_SYN_RCVD)
 	{
@@ -2712,8 +2713,7 @@
 	    }
 
 	  /* Make sure the ack is exactly right */
-	  if (tc0->rcv_nxt != vnet_buffer (b0)->tcp.seq_number || is_fin0
-	      || vnet_buffer (b0)->tcp.data_len)
+	  if (tc0->rcv_nxt != vnet_buffer (b0)->tcp.seq_number || is_fin0)
 	    {
 	      tcp_connection_reset (tc0);
 	      error0 = TCP_ERROR_SEGMENT_INVALID;
@@ -3144,6 +3144,7 @@
       child0->snd_wl2 = vnet_buffer (b0)->tcp.ack_number;
 
       tcp_connection_init_vars (child0);
+      child0->rto = TCP_RTO_MIN;
       TCP_EVT_DBG (TCP_EVT_SYN_RCVD, child0, 1);
 
       if (stream_session_accept (&child0->connection, lc0->c_s_index,