session: fix transport proto unformat
Type: fix
Change-Id: I38a5cbd53b278c21142bac4ee1bbe5dc8bcaaac9
Signed-off-by: Florin Coras <fcoras@cisco.com>
(cherry picked from commit 3bbbf0dbd3
)
This commit is contained in:

committed by
Andrew Yourtchenko

parent
4b5723a43e
commit
abfdb9e23b
@ -727,8 +727,14 @@ echo_clients_connect (vlib_main_t * vm, u32 n_clients)
|
||||
a->uri = (char *) ecm->connect_uri;
|
||||
a->api_context = i;
|
||||
a->app_index = ecm->app_index;
|
||||
|
||||
vlib_worker_thread_barrier_sync (vm);
|
||||
if ((rv = vnet_connect_uri (a)))
|
||||
return clib_error_return (0, "connect returned: %d", rv);
|
||||
{
|
||||
vlib_worker_thread_barrier_release (vm);
|
||||
return clib_error_return (0, "connect returned: %d", rv);
|
||||
}
|
||||
vlib_worker_thread_barrier_release (vm);
|
||||
|
||||
/* Crude pacing for call setups */
|
||||
if ((i % 16) == 0)
|
||||
@ -870,7 +876,8 @@ echo_clients_command_fn (vlib_main_t * vm,
|
||||
if ((rv = parse_uri ((char *) ecm->connect_uri, &sep)))
|
||||
return clib_error_return (0, "Uri parse error: %d", rv);
|
||||
ecm->transport_proto = sep.transport_proto;
|
||||
ecm->is_dgram = (sep.transport_proto == TRANSPORT_PROTO_UDP);
|
||||
ecm->is_dgram = (sep.transport_proto == TRANSPORT_PROTO_UDP
|
||||
|| sep.transport_proto == TRANSPORT_PROTO_UDPC);
|
||||
|
||||
#if ECHO_CLIENT_PTHREAD
|
||||
echo_clients_start_tx_pthread ();
|
||||
@ -903,7 +910,9 @@ echo_clients_command_fn (vlib_main_t * vm,
|
||||
/* Fire off connect requests */
|
||||
time_before_connects = vlib_time_now (vm);
|
||||
if ((error = echo_clients_connect (vm, n_clients)))
|
||||
goto cleanup;
|
||||
{
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* Park until the sessions come up, or ten seconds elapse... */
|
||||
vlib_process_wait_for_event_or_clock (vm, syn_timeout);
|
||||
|
@ -136,20 +136,49 @@ format_transport_half_open_connection (u8 * s, va_list * args)
|
||||
return s;
|
||||
}
|
||||
|
||||
static u8
|
||||
unformat_transport_str_match (unformat_input_t * input, const char *str)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (strlen (str) > vec_len (input->buffer) - input->index)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < strlen (str); i++)
|
||||
{
|
||||
if (input->buffer[i + input->index] != str[i])
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
uword
|
||||
unformat_transport_proto (unformat_input_t * input, va_list * args)
|
||||
{
|
||||
u32 *proto = va_arg (*args, u32 *);
|
||||
u8 longest_match = 0, match;
|
||||
char *str_match = 0;
|
||||
|
||||
#define _(sym, str, sstr) \
|
||||
if (unformat (input, str)) \
|
||||
if (unformat_transport_str_match (input, str)) \
|
||||
{ \
|
||||
*proto = TRANSPORT_PROTO_ ## sym; \
|
||||
return 1; \
|
||||
match = strlen (str); \
|
||||
if (match > longest_match) \
|
||||
{ \
|
||||
*proto = TRANSPORT_PROTO_ ## sym; \
|
||||
longest_match = match; \
|
||||
str_match = str; \
|
||||
} \
|
||||
}
|
||||
foreach_transport_proto
|
||||
#undef _
|
||||
return 0;
|
||||
if (longest_match)
|
||||
{
|
||||
unformat (input, str_match);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32
|
||||
|
Reference in New Issue
Block a user