- rv = VNET_API_ERROR_SYSCALL_ERROR_1;
- }
-}
-
-static void
-send_test_chunk (echo_main_t * em, svm_fifo_t * tx_fifo, int mypid, u32 bytes)
-{
- u32 bytes_to_snd, enq_space, min_chunk = 16 << 10;
- u8 *test_data = em->connect_test_data;
- u64 bytes_sent = 0;
- int test_buf_offset = 0;
- session_fifo_event_t evt;
- int rv;
-
- bytes_to_snd = (bytes == 0) ? vec_len (test_data) : bytes;
- if (bytes_to_snd > vec_len (test_data))
- bytes_to_snd = vec_len (test_data);
-
- while (bytes_to_snd > 0 && !em->time_to_stop)
- {
- enq_space = svm_fifo_max_enqueue (tx_fifo);
- if (enq_space < clib_min (bytes_to_snd, min_chunk))
- continue;
- rv = svm_fifo_enqueue_nowait (tx_fifo,
- clib_min (bytes_to_snd, enq_space),
- test_data + test_buf_offset);
- if (rv > 0)
- {
- bytes_to_snd -= rv;
- test_buf_offset += rv;
- bytes_sent += rv;
-
- if (svm_fifo_set_event (tx_fifo))
- {
- /* Fabricate TX event, send to vpp */
- evt.fifo = tx_fifo;
- evt.event_type = FIFO_EVENT_APP_TX;
- svm_queue_add (em->vpp_event_queue, (u8 *) & evt,
- 0 /* do wait for mutex */ );
- }
- }
- }
-}
-
-void
-client_send_data (echo_main_t * em)
-{
- u8 *test_data = em->connect_test_data;
- int mypid = getpid ();
- session_t *session;
- svm_fifo_t *tx_fifo;
- u32 n_iterations, leftover;
- int i;
-
- session = pool_elt_at_index (em->sessions, em->connected_session_index);
- tx_fifo = session->server_tx_fifo;
-
- ASSERT (vec_len (test_data) > 0);
-
- vec_validate (em->rx_buf, vec_len (test_data) - 1);
- n_iterations = em->bytes_to_send / vec_len (test_data);
-
- for (i = 0; i < n_iterations; i++)
- {
- send_test_chunk (em, tx_fifo, mypid, 0);
- if (em->time_to_stop)
- break;
- }
-
- leftover = em->bytes_to_send % vec_len (test_data);
- if (leftover)
- send_test_chunk (em, tx_fifo, mypid, leftover);
-
- if (!em->no_return)
- {
- f64 timeout = clib_time_now (&em->clib_time) + 10;
-
- /* Wait for the outstanding packets */
- while (em->client_bytes_received <
- vec_len (test_data) * n_iterations + leftover)
- {
- if (clib_time_now (&em->clib_time) > timeout)
- {
- clib_warning ("timed out waiting for the missing packets");
- break;
- }
- }