+ if (svm_fifo_max_enqueue (s0->server_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 (s0->server_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);