Add packet headers in UDPC fifos

This change adds packet headers for each packet in a UDPC connection. This
changes the semantic of UDPC from an unreliable, unordered stream of bytes to an
unreliable, unordered sequence of packets.

Change-Id: I831e43903870a5720d26daa6e971299d03b208d7
Signed-off-by: Aloys Augustin <aloaugus@cisco.com>
diff --git a/src/vnet/udp/udp_input.c b/src/vnet/udp/udp_input.c
index 52c29d7..591dc53 100644
--- a/src/vnet/udp/udp_input.c
+++ b/src/vnet/udp/udp_input.c
@@ -227,45 +227,30 @@
 	      goto trace0;
 	    }
 
-	  if (!uc0->is_connected)
-	    {
-	      if (svm_fifo_max_enqueue_prod (s0->rx_fifo)
-		  < b0->current_length + sizeof (session_dgram_hdr_t))
-		{
-		  error0 = UDP_ERROR_FIFO_FULL;
-		  goto trace0;
-		}
-	      hdr0.data_length = b0->current_length;
-	      hdr0.data_offset = 0;
-	      ip_set (&hdr0.lcl_ip, lcl_addr, is_ip4);
-	      ip_set (&hdr0.rmt_ip, rmt_addr, is_ip4);
-	      hdr0.lcl_port = udp0->dst_port;
-	      hdr0.rmt_port = udp0->src_port;
-	      hdr0.is_ip4 = is_ip4;
 
-	      clib_spinlock_lock (&uc0->rx_lock);
-	      wrote0 = session_enqueue_dgram_connection (s0, &hdr0, b0,
-							 TRANSPORT_PROTO_UDP,
-							 1 /* queue evt */ );
-	      clib_spinlock_unlock (&uc0->rx_lock);
-	      ASSERT (wrote0 > 0);
-
-	      if (s0->session_state != SESSION_STATE_LISTENING)
-		session_pool_remove_peeker (s0->thread_index);
-	    }
-	  else
+	  if (svm_fifo_max_enqueue_prod (s0->rx_fifo)
+	      < b0->current_length + sizeof (session_dgram_hdr_t))
 	    {
-	      if (svm_fifo_max_enqueue_prod (s0->rx_fifo) <
-		  b0->current_length)
-		{
-		  error0 = UDP_ERROR_FIFO_FULL;
-		  goto trace0;
-		}
-	      wrote0 = session_enqueue_stream_connection (tc0, b0, 0,
-							  1 /* queue evt */ ,
-							  1 /* in order */ );
-	      ASSERT (wrote0 > 0);
+	      error0 = UDP_ERROR_FIFO_FULL;
+	      goto trace0;
 	    }
+	  hdr0.data_length = b0->current_length;
+	  hdr0.data_offset = 0;
+	  ip_set (&hdr0.lcl_ip, lcl_addr, is_ip4);
+	  ip_set (&hdr0.rmt_ip, rmt_addr, is_ip4);
+	  hdr0.lcl_port = udp0->dst_port;
+	  hdr0.rmt_port = udp0->src_port;
+	  hdr0.is_ip4 = is_ip4;
+
+	  clib_spinlock_lock (&uc0->rx_lock);
+	  wrote0 = session_enqueue_dgram_connection (s0, &hdr0, b0,
+						     TRANSPORT_PROTO_UDP,
+						     1 /* queue evt */ );
+	  clib_spinlock_unlock (&uc0->rx_lock);
+	  ASSERT (wrote0 > 0);
+
+	  if (s0->session_state != SESSION_STATE_LISTENING)
+	    session_pool_remove_peeker (s0->thread_index);
 
 	trace0: