#include <stdio.h>
#include <signal.h>
+
+#include <vnet/session/application_interface.h>
#include <svm/svm_fifo_segment.h>
#include <vlibmemory/api.h>
+
#include <vpp/api/vpe_msg_enum.h>
-#include <vnet/session/application_interface.h>
#define vl_typedefs /* define message structures */
#include <vpp/api/vpe_all_api_h.h>
/* $$$ single thread only for the moment */
unix_shared_memory_queue_t *vpp_event_queue;
+ u8 *socket_name;
+
pid_t my_pid;
/* For deadman timers */
u8 test_return_packets;
u64 bytes_to_send;
+ /** Flag that decides if socket, instead of svm, api is used to connect to
+ * vpp. If sock api is used, shm binary api is subsequently bootstrapped
+ * and all other messages are exchanged using shm IPC. */
+ u8 use_sock_api;
+
/* convenience */
svm_fifo_segment_main_t *segment_main;
} uri_tcp_test_main_t;
uri_tcp_test_main_t *utm = &uri_tcp_test_main;
api_main_t *am = &api_main;
- if (vl_client_connect_to_vlib ("/vpe-api", name, 32) < 0)
- return -1;
-
- utm->vl_input_queue = am->shmem_hdr->vl_input_queue;
- utm->my_client_index = am->my_client_index;
+ if (utm->use_sock_api)
+ {
+ if (vl_socket_client_connect ((char *) utm->socket_name, name,
+ 0 /* default rx, tx buffer */ ))
+ return -1;
+ return vl_socket_client_init_shm (0);
+ }
+ else
+ {
+ if (vl_client_connect_to_vlib ("/vpe-api", name, 32) < 0)
+ return -1;
+ utm->vl_input_queue = am->shmem_hdr->vl_input_queue;
+ utm->my_client_index = am->my_client_index;
+ }
return 0;
}
+void
+disconnect_from_vpp (uri_tcp_test_main_t * utm)
+{
+ if (utm->use_sock_api)
+ vl_socket_client_disconnect ();
+ else
+ vl_client_disconnect_from_vlib ();
+}
+
static void
vl_api_map_another_segment_t_handler (vl_api_map_another_segment_t * mp)
{
}
static void
-client_test (uri_tcp_test_main_t * utm)
+client_run (uri_tcp_test_main_t * utm)
{
int i;
}
void
-server_test (uri_tcp_test_main_t * utm)
+server_run (uri_tcp_test_main_t * utm)
{
+ session_t *session;
+ int i;
+
+ /* $$$$ hack preallocation */
+ for (i = 0; i < 200000; i++)
+ {
+ pool_get (utm->sessions, session);
+ memset (session, 0, sizeof (*session));
+ }
+ for (i = 0; i < 200000; i++)
+ pool_put_index (utm->sessions, i);
+
if (application_attach (utm))
return;
session_print_stats (utm, session);
}
-#define foreach_uri_msg \
-_(BIND_URI_REPLY, bind_uri_reply) \
-_(UNBIND_URI_REPLY, unbind_uri_reply) \
-_(ACCEPT_SESSION, accept_session) \
-_(CONNECT_SESSION_REPLY, connect_session_reply) \
-_(DISCONNECT_SESSION, disconnect_session) \
-_(DISCONNECT_SESSION_REPLY, disconnect_session_reply) \
-_(RESET_SESSION, reset_session) \
-_(APPLICATION_ATTACH_REPLY, application_attach_reply) \
-_(APPLICATION_DETACH_REPLY, application_detach_reply) \
-_(MAP_ANOTHER_SEGMENT, map_another_segment) \
+#define foreach_uri_msg \
+_(BIND_URI_REPLY, bind_uri_reply) \
+_(UNBIND_URI_REPLY, unbind_uri_reply) \
+_(ACCEPT_SESSION, accept_session) \
+_(CONNECT_SESSION_REPLY, connect_session_reply) \
+_(DISCONNECT_SESSION, disconnect_session) \
+_(DISCONNECT_SESSION_REPLY, disconnect_session_reply) \
+_(RESET_SESSION, reset_session) \
+_(APPLICATION_ATTACH_REPLY, application_attach_reply) \
+_(APPLICATION_DETACH_REPLY, application_detach_reply) \
+_(MAP_ANOTHER_SEGMENT, map_another_segment) \
void
uri_api_hookup (uri_tcp_test_main_t * utm)
u64 bytes_to_send = 64 << 10, mbytes;
u32 tmp;
mheap_t *h;
- session_t *session;
- int i;
int i_am_master = 1, drop_packets = 0, test_return_packets = 0;
clib_mem_init (0, 256 << 20);
utm->my_pid = getpid ();
utm->configured_segment_size = 1 << 20;
+ utm->socket_name = 0;
+ utm->use_sock_api = 1;
clib_time_init (&utm->clib_time);
init_error_string_table (utm);
{
bytes_to_send = mbytes << 30;
}
+ else if (unformat (a, "socket-name %s", &utm->socket_name))
+ ;
+ else if (unformat (a, "use-svm-api"))
+ utm->use_sock_api = 0;
else
{
fformat (stderr, "%s: usage [master|slave]\n");
}
}
+ if (!utm->socket_name)
+ utm->socket_name = format (0, "%s%c", API_SOCKET_FILE, 0);
+
if (uri)
{
utm->uri = format (0, "%s%c", uri, 0);
setup_signal_handlers ();
uri_api_hookup (utm);
- if (connect_to_vpp (i_am_master ? "uri_tcp_server" : "uri_tcp_client") < 0)
+ if (connect_to_vpp (i_am_master ? "tcp_echo_server" : "tcp_echo_client") <
+ 0)
{
svm_region_exit ();
fformat (stderr, "Couldn't connect to vpe, exiting...\n");
}
if (i_am_master == 0)
- {
- client_test (utm);
- vl_client_disconnect_from_vlib ();
- exit (0);
- }
-
- /* $$$$ hack preallocation */
- for (i = 0; i < 200000; i++)
- {
- pool_get (utm->sessions, session);
- memset (session, 0, sizeof (*session));
- }
- for (i = 0; i < 200000; i++)
- pool_put_index (utm->sessions, i);
-
- server_test (utm);
+ client_run (utm);
+ else
+ server_run (utm);
- vl_client_disconnect_from_vlib ();
+ disconnect_from_vpp (utm);
exit (0);
}