#undef vl_printfun
#define TIMEOUT 10.0
+#define LOGGING_BATCH (100)
#define foreach_echo_fail_code \
_(ECHO_FAIL_NONE, "ECHO_FAIL_NONE") \
_(ECHO_FAIL_MISSING_START_EVENT, "ECHO_FAIL_MISSING_START_EVENT") \
_(ECHO_FAIL_MISSING_END_EVENT, "ECHO_FAIL_MISSING_END_EVENT") \
_(ECHO_FAIL_TEST_ASSERT_RX_TOTAL, "ECHO_FAIL_TEST_ASSERT_RX_TOTAL") \
+ _(ECHO_FAIL_UNIDIRECTIONAL, "ECHO_FAIL_UNIDIRECTIONAL") \
_(ECHO_FAIL_TEST_ASSERT_TX_TOTAL, "ECHO_FAIL_TEST_ASSERT_TX_TOTAL") \
_(ECHO_FAIL_TEST_ASSERT_ALL_SESSIONS_CLOSED, \
- "ECHO_FAIL_TEST_ASSERT_ALL_SESSIONS_CLOSED")
+ "ECHO_FAIL_TEST_ASSERT_ALL_SESSIONS_CLOSED") \
+ _(ECHO_FAIL_RPC_SIZE, "ECHO_FAIL_RPC_SIZE")
typedef enum
{
svm_queue_t *vl_input_queue; /* vpe input queue */
u32 my_client_index; /* API client handle */
u8 *uri; /* The URI we're playing with */
+ u32 n_uris; /* Cycle through adjacent ips */
+ ip46_address_t lcl_ip; /* Local ip for client */
+ u8 lcl_ip_set;
echo_session_t *sessions; /* Session pool */
svm_msg_q_t *app_mq; /* Our receiveing event queue */
svm_msg_q_t *ctrl_mq; /* Our control queue (towards vpp) */
clib_time_t clib_time; /* For deadman timers */
u8 *socket_name;
int i_am_master;
- u32 listen_session_index; /* Index of vpp listener session */
+ u32 *listen_session_indexes; /* vec of vpp listener sessions */
+ volatile u32 listen_session_cnt;
uword *session_index_by_vpp_handles; /* Hash table : quic_echo s_id -> vpp s_handle */
clib_spinlock_t sid_vpp_handles_lock; /* Hash table lock */
u32 evt_q_size; /* Size of the vpp MQ (app<->vpp events) */
u32 ckpair_index; /* Cert key pair used */
u8 crypto_engine; /* crypto engine used */
+ u8 connect_flag; /* flags to pass to mq connect */
u8 *appns_id;
u64 appns_flags;
volatile u32 n_clients_connected; /* Number of STREAM sessions connected */
volatile u32 nxt_available_sidx; /* next unused prealloced session_index */
+ volatile int max_sim_connects;
+
/* VNET_API_ERROR_FOO -> "Foo" hash table */
uword *error_string_by_error_number;
echo_proto_cb_vft_t *available_proto_cb_vft[TRANSPORT_N_PROTO];
teardown_stat_t close_count; /* received close from vpp */
teardown_stat_t active_count; /* sent close to vpp */
teardown_stat_t clean_count; /* cleaned up stale session */
+ teardown_stat_t connected_count; /* connected sessions count */
+ teardown_stat_t accepted_count; /* connected sessions count */
} stats;
struct /* Event based timing : start & end depend on CLI specified events */
extern echo_main_t echo_main;
-typedef void (*echo_rpc_t) (void *arg, u32 opaque);
+
+typedef struct echo_connect_args_
+{
+ u32 context;
+ u64 parent_session_handle;
+ ip46_address_t ip;
+ ip46_address_t lcl_ip;
+} echo_connect_args_t;
+
+typedef struct echo_disconnect_args_
+{
+ u64 session_handle;
+} echo_disconnect_args_t;
+
+typedef union
+{
+ echo_connect_args_t connect;
+ echo_disconnect_args_t disconnect;
+} echo_rpc_args_t;
+
+typedef void (*echo_rpc_t) (echo_main_t * em, echo_rpc_args_t * arg);
typedef struct
{
void *fp;
- void *arg;
- u32 opaque;
+ echo_rpc_args_t args;
} echo_rpc_msg_t;
+
u8 *format_ip4_address (u8 * s, va_list * args);
u8 *format_ip6_address (u8 * s, va_list * args);
u8 *format_ip46_address (u8 * s, va_list * args);
void echo_session_handle_add_del (echo_main_t * em, u64 handle, u32 sid);
echo_session_t *echo_session_new (echo_main_t * em);
-int echo_send_rpc (echo_main_t * em, void *fp, void *arg, u32 opaque);
+int echo_send_rpc (echo_main_t * em, void *fp, echo_rpc_args_t * args);
echo_session_t *echo_get_session_from_handle (echo_main_t * em, u64 handle);
int wait_for_segment_allocation (u64 segment_handle);
int wait_for_state_change (echo_main_t * em, connection_state_t state,
void echo_send_attach (echo_main_t * em);
void echo_send_detach (echo_main_t * em);
-void echo_send_listen (echo_main_t * em);
+void echo_send_listen (echo_main_t * em, ip46_address_t * ip);
void echo_send_unbind (echo_main_t * em, echo_session_t * s);
-void echo_send_connect (u64 vpp_session_handle, u32 opaque);
-void echo_send_disconnect_session (u64 handle, u32 opaque);
+void echo_send_connect (echo_main_t * em, void *args);
+void echo_send_disconnect_session (echo_main_t * em, void *args);
void echo_api_hookup (echo_main_t * em);
void echo_send_add_cert_key (echo_main_t * em);
void echo_send_del_cert_key (echo_main_t * em);