{
echo_main_t *em = &echo_main;
quic_echo_proto_main_t *eqm = &quic_echo_proto_main;
+ echo_connect_args_t _a, *a = &_a;
u64 i;
+ a->parent_session_handle = mp->handle;
+ a->context = session_index;
+ clib_memcpy_fast (&a->lcl_ip, &em->lcl_ip, sizeof (ip46_address_t));
+ clib_memcpy_fast (&a->ip, &em->uri_elts.ip, sizeof (ip46_address_t));
+
echo_notify_event (em, ECHO_EVT_FIRST_SCONNECT);
for (i = 0; i < eqm->n_stream_clients; i++)
- echo_send_rpc (em, echo_send_connect, (void *) mp->handle, session_index);
+ echo_send_rpc (em, echo_send_connect, (echo_rpc_args_t *) a);
ECHO_LOG (1, "Qsession 0x%llx S[%d] connected to %U:%d",
mp->handle, session_index, format_ip46_address, &mp->lcl.ip,
echo_main_t *em = &echo_main;
quic_echo_proto_main_t *eqm = &quic_echo_proto_main;
ECHO_LOG (2, "Accept on QSession 0x%lx S[%u]", mp->handle, session_index);
+ echo_connect_args_t _a, *a = &_a;
u32 i;
+ a->parent_session_handle = mp->handle;
+ a->context = session_index;
+ clib_memcpy_fast (&a->lcl_ip, &em->lcl_ip, sizeof (ip46_address_t));
+ clib_memcpy_fast (&a->ip, &em->uri_elts.ip, sizeof (ip46_address_t));
+
echo_notify_event (em, ECHO_EVT_FIRST_SCONNECT);
for (i = 0; i < eqm->n_stream_clients; i++)
- echo_send_rpc (em, echo_send_connect, (void *) mp->handle, session_index);
+ echo_send_rpc (em, echo_send_connect, (echo_rpc_args_t *) a);
}
static void
if (eqm->send_quic_disconnects == ECHO_CLOSE_F_ACTIVE)
{
echo_send_rpc (em, echo_send_disconnect_session,
- (void *) ls->vpp_session_handle, 0);
+ (echo_rpc_args_t *) & ls->vpp_session_handle);
clib_atomic_fetch_add (&em->stats.active_count.q, 1);
}
else if (eqm->send_quic_disconnects == ECHO_CLOSE_F_NONE)
{
ECHO_LOG (2,"%U: ACTIVE close", echo_format_session, s);
echo_send_rpc (em, echo_send_disconnect_session,
- (void *) s->vpp_session_handle, 0);
+ (echo_rpc_args_t *) &s->vpp_session_handle);
clib_atomic_fetch_add (&em->stats.active_count.q, 1);
}
else if (eqm->send_quic_disconnects == ECHO_CLOSE_F_NONE)
if (em->stats.accepted_count.s % LOGGING_BATCH == 0)
ECHO_LOG (0, "Accepted S %d / %d", em->stats.accepted_count.s,
em->n_clients);
+
+ if (em->connect_flag && !(mp->flags & em->connect_flag))
+ {
+ ECHO_FAIL (ECHO_FAIL_UNIDIRECTIONAL,
+ "expected unidirectional streams");
+ }
}
if (em->n_clients_connected == em->n_clients
static int
quic_echo_process_opts_cb (unformat_input_t * a)
{
+ echo_main_t *em = &echo_main;
quic_echo_proto_main_t *eqm = &quic_echo_proto_main;
if (unformat (a, "quic-streams %d", &eqm->n_stream_clients))
;
else if (unformat (a, "quic-setup %U", quic_echo_unformat_setup_vft))
;
+ else if (unformat (a, "uni"))
+ em->connect_flag = SESSION_F_UNIDIRECTIONAL;
else if (unformat (a, "qclose=%U",
echo_unformat_close, &eqm->send_quic_disconnects))
;
em->n_connects = em->n_clients;
em->n_sessions =
- clib_max (1, eqm->n_stream_clients) * em->n_clients + em->n_clients + 1;
+ clib_max (1,
+ eqm->n_stream_clients) * em->n_clients + em->n_clients +
+ em->n_uris;
em->n_clients = eqm->n_stream_clients * em->n_clients;
if (em->i_am_master)
" OPT=default : Client open N connections.\n"
" On each one client opens M streams\n"
" qclose=[Y|N|W] When connection is done send[Y]|nop[N]|wait[W] for close\n"
+ " uni Use unidirectional streams\n"
"\n"
" quic-streams N Open N QUIC streams (defaults to 1)\n");
}