-void
-uri_tcp_connect_send (uri_tcp_test_main_t *utm)
-{
- u8 *test_data = utm->connect_test_data;
- u64 bytes_sent = 0;
- int rv;
- int mypid = getpid();
- session_t * session;
- svm_fifo_t *tx_fifo;
- int buffer_offset, bytes_to_send = 0;
- session_fifo_event_t evt;
- static int serial_number = 0;
- int i;
- u32 max_chunk = 64 << 10, write;
-
- session = pool_elt_at_index (utm->sessions, utm->connected_session_index);
- tx_fifo = session->server_tx_fifo;
-
- vec_validate (utm->rx_buf, vec_len (test_data) - 1);
-
- for (i = 0; i < 10; i++)
- {
- bytes_to_send = vec_len (test_data);
- buffer_offset = 0;
- while (bytes_to_send > 0)
- {
- write = bytes_to_send > max_chunk ? max_chunk : bytes_to_send;
- rv = svm_fifo_enqueue_nowait (tx_fifo, mypid, write,
- test_data + buffer_offset);
-
- if (rv > 0)
- {
- bytes_to_send -= rv;
- buffer_offset += rv;
- bytes_sent += rv;
-
- /* Fabricate TX event, send to vpp */
- evt.fifo = tx_fifo;
- evt.event_type = FIFO_EVENT_SERVER_TX;
- /* $$$$ for event logging */
- evt.enqueue_length = rv;
- evt.event_id = serial_number++;
-
- unix_shared_memory_queue_add (utm->vpp_event_queue, (u8 *) &evt,
- 0 /* do wait for mutex */);
- }
- }
- }
-}
-
-static void
-uri_tcp_client_test (uri_tcp_test_main_t * utm)
-{
- vl_api_connect_uri_t * cmp;
- vl_api_disconnect_session_t *dmp;
- session_t *connected_session;
- int i;
-
- cmp = vl_msg_api_alloc (sizeof (*cmp));
- memset (cmp, 0, sizeof (*cmp));
-
- cmp->_vl_msg_id = ntohs (VL_API_CONNECT_URI);
- cmp->client_index = utm->my_client_index;
- cmp->context = ntohl(0xfeedface);
- memcpy (cmp->uri, utm->connect_uri, vec_len (utm->connect_uri));
- vl_msg_api_send_shmem (utm->vl_input_queue, (u8 *)&cmp);
-
- if (wait_for_state_change (utm, STATE_READY))
- {
- return;
- }
-
- /* Init test data */
- vec_validate (utm->connect_test_data, 64 * 1024 - 1);
- for (i = 0; i < vec_len (utm->connect_test_data); i++)
- utm->connect_test_data[i] = i & 0xff;
-
- /* Start reader thread */
- /* handle_connect_event_queue (utm); */
-
- /* Start send */
- uri_tcp_connect_send (utm);
-
- /* Disconnect */
- connected_session = pool_elt_at_index(utm->sessions,
- utm->connected_session_index);
- dmp = vl_msg_api_alloc (sizeof (*dmp));
- memset (dmp, 0, sizeof (*dmp));
- dmp->_vl_msg_id = ntohs (VL_API_DISCONNECT_SESSION);
- dmp->client_index = utm->my_client_index;
- dmp->session_index = connected_session->vpp_session_index;
- dmp->session_thread_index = connected_session->vpp_session_thread;
- vl_msg_api_send_shmem (utm->vl_input_queue, (u8 *)&dmp);
-}
-
-void
-handle_fifo_event_server_rx (uri_tcp_test_main_t *utm, session_fifo_event_t * e)
-{
- svm_fifo_t * rx_fifo, * tx_fifo;
- int n_read;
-
- session_fifo_event_t evt;
- unix_shared_memory_queue_t *q;
- int rv, bytes;
-
- rx_fifo = e->fifo;
- tx_fifo = utm->sessions[rx_fifo->client_session_index].server_tx_fifo;
-
- bytes = e->enqueue_length;
- do
- {
- n_read = svm_fifo_dequeue_nowait (rx_fifo, 0, vec_len(utm->rx_buf),
- utm->rx_buf);
-
- /* Reflect if a non-drop session */
- if (!utm->drop_packets && n_read > 0)
- {
- do
- {
- rv = svm_fifo_enqueue_nowait (tx_fifo, 0, n_read, utm->rx_buf);
- }
- while (rv == -2);
-
- /* Fabricate TX event, send to vpp */
- evt.fifo = tx_fifo;
- evt.event_type = FIFO_EVENT_SERVER_TX;
- /* $$$$ for event logging */
- evt.enqueue_length = n_read;
- evt.event_id = e->event_id;
- q = utm->vpp_event_queue;
- unix_shared_memory_queue_add (q, (u8 *) &evt, 0 /* do wait for mutex */);
- }
-
- if (n_read > 0)
- bytes -= n_read;
- }
- while (n_read < 0 || bytes > 0);
-}
-
-void
-handle_event_queue (uri_tcp_test_main_t * utm)