session: improve cli
Type: feature Allow session cli filtering based on thread index, transport protocol, session state and range of session pool indices. For instance show session thread 1 proto tcp state ready range 0 20 verbose Shows the session ids for the first 20 tcp sessions in thread 1 that are in ready state. To avoid excessive output that could reasult in the worker barrier being held by the main thread for long periods of time, the session cli will only output: - session ids (verbose == 1) for a maximum of 50 sessions / worker - verbose > 1 details for a maximum of 10 sessions Change-Id: I2cfb351b548e2e0a1d5b4345810be613e2917d17 Signed-off-by: Florin Coras <fcoras@cisco.com>
This commit is contained in:
@ -54,7 +54,7 @@ quic_echo_on_connected_connect (session_connected_msg_t * mp,
|
||||
{
|
||||
echo_main_t *em = &echo_main;
|
||||
quic_echo_proto_main_t *eqm = &quic_echo_proto_main;
|
||||
u8 *uri = format (0, "QUIC://session/%lu", mp->handle);
|
||||
u8 *uri = format (0, "quic://session/%lu", mp->handle);
|
||||
u64 i;
|
||||
|
||||
echo_notify_event (em, ECHO_EVT_FIRST_SCONNECT);
|
||||
@ -107,7 +107,7 @@ quic_echo_on_accept_connect (session_accepted_msg_t * mp, u32 session_index)
|
||||
echo_main_t *em = &echo_main;
|
||||
quic_echo_proto_main_t *eqm = &quic_echo_proto_main;
|
||||
ECHO_LOG (1, "Accept on QSession 0x%lx %u", mp->handle);
|
||||
u8 *uri = format (0, "QUIC://session/%lu", mp->handle);
|
||||
u8 *uri = format (0, "quic://session/%lu", mp->handle);
|
||||
u32 i;
|
||||
|
||||
echo_notify_event (em, ECHO_EVT_FIRST_SCONNECT);
|
||||
@ -303,7 +303,7 @@ quic_echo_retry_connect (u32 session_index)
|
||||
else
|
||||
{
|
||||
session = pool_elt_at_index (em->sessions, session_index);
|
||||
uri = format (0, "QUIC://session/%lu", session->vpp_session_handle);
|
||||
uri = format (0, "quic://session/%lu", session->vpp_session_handle);
|
||||
ECHO_LOG (1, "Retrying connect %s", uri);
|
||||
echo_send_rpc (em, echo_send_connect, (void *) uri, session_index);
|
||||
}
|
||||
|
@ -584,6 +584,14 @@ session_main_get_worker (u32 thread_index)
|
||||
return &session_main.wrk[thread_index];
|
||||
}
|
||||
|
||||
static inline session_worker_t *
|
||||
session_main_get_worker_if_valid (u32 thread_index)
|
||||
{
|
||||
if (pool_is_free_index (session_main.wrk, thread_index))
|
||||
return 0;
|
||||
return &session_main.wrk[thread_index];
|
||||
}
|
||||
|
||||
always_inline svm_msg_q_t *
|
||||
session_main_get_vpp_event_queue (u32 thread_index)
|
||||
{
|
||||
@ -598,8 +606,8 @@ session_main_is_enabled ()
|
||||
|
||||
#define session_cli_return_if_not_enabled() \
|
||||
do { \
|
||||
if (!session_main.is_enabled) \
|
||||
return clib_error_return(0, "session layer is not enabled"); \
|
||||
if (!session_main.is_enabled) \
|
||||
return clib_error_return (0, "session layer is not enabled"); \
|
||||
} while (0)
|
||||
|
||||
int session_main_flush_enqueue_events (u8 proto, u32 thread_index);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -121,21 +121,26 @@ typedef enum
|
||||
/*
|
||||
* Session states
|
||||
*/
|
||||
#define foreach_session_state \
|
||||
_(CREATED, "created") \
|
||||
_(LISTENING, "listening") \
|
||||
_(CONNECTING, "connecting") \
|
||||
_(ACCEPTING, "accepting") \
|
||||
_(READY, "ready") \
|
||||
_(OPENED, "opened") \
|
||||
_(TRANSPORT_CLOSING, "transport-closing") \
|
||||
_(CLOSING, "closing") \
|
||||
_(APP_CLOSED, "app-closed") \
|
||||
_(TRANSPORT_CLOSED, "transport-closed") \
|
||||
_(TRANSPORT_DELETED, "transport-deleted") \
|
||||
_(CLOSED, "closed") \
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SESSION_STATE_CREATED,
|
||||
SESSION_STATE_LISTENING,
|
||||
SESSION_STATE_CONNECTING,
|
||||
SESSION_STATE_ACCEPTING,
|
||||
SESSION_STATE_READY,
|
||||
SESSION_STATE_OPENED,
|
||||
SESSION_STATE_TRANSPORT_CLOSING,
|
||||
SESSION_STATE_CLOSING,
|
||||
SESSION_STATE_APP_CLOSED,
|
||||
SESSION_STATE_TRANSPORT_CLOSED,
|
||||
SESSION_STATE_TRANSPORT_DELETED,
|
||||
SESSION_STATE_CLOSED,
|
||||
SESSION_STATE_N_STATES,
|
||||
#define _(sym, str) SESSION_STATE_ ## sym,
|
||||
foreach_session_state
|
||||
#undef _
|
||||
SESSION_N_STATES,
|
||||
} session_state_t;
|
||||
|
||||
typedef enum session_flags_
|
||||
|
@ -57,27 +57,12 @@ format_transport_proto (u8 * s, va_list * args)
|
||||
u32 transport_proto = va_arg (*args, u32);
|
||||
switch (transport_proto)
|
||||
{
|
||||
case TRANSPORT_PROTO_TCP:
|
||||
s = format (s, "TCP");
|
||||
break;
|
||||
case TRANSPORT_PROTO_UDP:
|
||||
s = format (s, "UDP");
|
||||
break;
|
||||
case TRANSPORT_PROTO_SCTP:
|
||||
s = format (s, "SCTP");
|
||||
break;
|
||||
case TRANSPORT_PROTO_NONE:
|
||||
s = format (s, "NONE");
|
||||
break;
|
||||
case TRANSPORT_PROTO_TLS:
|
||||
s = format (s, "TLS");
|
||||
break;
|
||||
case TRANSPORT_PROTO_UDPC:
|
||||
s = format (s, "UDPC");
|
||||
break;
|
||||
case TRANSPORT_PROTO_QUIC:
|
||||
s = format (s, "QUIC");
|
||||
#define _(sym, str, sstr) \
|
||||
case TRANSPORT_PROTO_ ## sym: \
|
||||
s = format (s, str); \
|
||||
break;
|
||||
foreach_transport_proto
|
||||
#undef _
|
||||
default:
|
||||
s = format (s, "UNKNOWN");
|
||||
break;
|
||||
@ -91,27 +76,12 @@ format_transport_proto_short (u8 * s, va_list * args)
|
||||
u32 transport_proto = va_arg (*args, u32);
|
||||
switch (transport_proto)
|
||||
{
|
||||
case TRANSPORT_PROTO_TCP:
|
||||
s = format (s, "T");
|
||||
break;
|
||||
case TRANSPORT_PROTO_UDP:
|
||||
s = format (s, "U");
|
||||
break;
|
||||
case TRANSPORT_PROTO_SCTP:
|
||||
s = format (s, "S");
|
||||
break;
|
||||
case TRANSPORT_PROTO_NONE:
|
||||
s = format (s, "N");
|
||||
break;
|
||||
case TRANSPORT_PROTO_TLS:
|
||||
s = format (s, "J");
|
||||
break;
|
||||
case TRANSPORT_PROTO_UDPC:
|
||||
s = format (s, "U");
|
||||
break;
|
||||
case TRANSPORT_PROTO_QUIC:
|
||||
s = format (s, "Q");
|
||||
#define _(sym, str, sstr) \
|
||||
case TRANSPORT_PROTO_ ## sym: \
|
||||
s = format (s, sstr); \
|
||||
break;
|
||||
foreach_transport_proto
|
||||
#undef _
|
||||
default:
|
||||
s = format (s, "?");
|
||||
break;
|
||||
@ -179,33 +149,16 @@ uword
|
||||
unformat_transport_proto (unformat_input_t * input, va_list * args)
|
||||
{
|
||||
u32 *proto = va_arg (*args, u32 *);
|
||||
if (unformat (input, "tcp"))
|
||||
*proto = TRANSPORT_PROTO_TCP;
|
||||
else if (unformat (input, "TCP"))
|
||||
*proto = TRANSPORT_PROTO_TCP;
|
||||
else if (unformat (input, "udpc"))
|
||||
*proto = TRANSPORT_PROTO_UDPC;
|
||||
else if (unformat (input, "UDPC"))
|
||||
*proto = TRANSPORT_PROTO_UDPC;
|
||||
else if (unformat (input, "udp"))
|
||||
*proto = TRANSPORT_PROTO_UDP;
|
||||
else if (unformat (input, "UDP"))
|
||||
*proto = TRANSPORT_PROTO_UDP;
|
||||
else if (unformat (input, "sctp"))
|
||||
*proto = TRANSPORT_PROTO_SCTP;
|
||||
else if (unformat (input, "SCTP"))
|
||||
*proto = TRANSPORT_PROTO_SCTP;
|
||||
else if (unformat (input, "tls"))
|
||||
*proto = TRANSPORT_PROTO_TLS;
|
||||
else if (unformat (input, "TLS"))
|
||||
*proto = TRANSPORT_PROTO_TLS;
|
||||
else if (unformat (input, "quic"))
|
||||
*proto = TRANSPORT_PROTO_QUIC;
|
||||
else if (unformat (input, "QUIC"))
|
||||
*proto = TRANSPORT_PROTO_QUIC;
|
||||
else
|
||||
|
||||
#define _(sym, str, sstr) \
|
||||
if (unformat (input, str)) \
|
||||
{ \
|
||||
*proto = TRANSPORT_PROTO_ ## sym; \
|
||||
return 1; \
|
||||
}
|
||||
foreach_transport_proto
|
||||
#undef _
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
u32
|
||||
|
@ -139,15 +139,20 @@ STATIC_ASSERT (STRUCT_OFFSET_OF (transport_connection_t, s_index)
|
||||
STATIC_ASSERT (sizeof (transport_connection_t) <= 128,
|
||||
"moved into 3rd cache line");
|
||||
|
||||
#define foreach_transport_proto \
|
||||
_(TCP, "tcp", "T") \
|
||||
_(UDP, "udp", "U") \
|
||||
_(SCTP, "sctp", "S") \
|
||||
_(NONE, "ct", "C") \
|
||||
_(TLS, "tls", "J") \
|
||||
_(UDPC, "udpc", "U") \
|
||||
_(QUIC, "quic", "Q") \
|
||||
|
||||
typedef enum _transport_proto
|
||||
{
|
||||
TRANSPORT_PROTO_TCP,
|
||||
TRANSPORT_PROTO_UDP,
|
||||
TRANSPORT_PROTO_SCTP,
|
||||
TRANSPORT_PROTO_NONE,
|
||||
TRANSPORT_PROTO_TLS,
|
||||
TRANSPORT_PROTO_UDPC,
|
||||
TRANSPORT_PROTO_QUIC,
|
||||
#define _(sym, str, sstr) TRANSPORT_PROTO_ ## sym,
|
||||
foreach_transport_proto
|
||||
#undef _
|
||||
TRANSPORT_N_PROTO
|
||||
} transport_proto_t;
|
||||
|
||||
|
@ -1165,6 +1165,8 @@ static transport_connection_t *
|
||||
tcp_session_get_transport (u32 conn_index, u32 thread_index)
|
||||
{
|
||||
tcp_connection_t *tc = tcp_connection_get (conn_index, thread_index);
|
||||
if (PREDICT_FALSE (!tc))
|
||||
return 0;
|
||||
return &tc->connection;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user