hsa: refactor vpp_echo failure handling

- Return unique value for each failure condition
- Last failure value returned
- All failures included in description
- Output failure value and description

Type: test

Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
Change-Id: I72d5e7f660ad4765c468874421622607af6ae3d1
Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
(cherry picked from commit 0e402a98b2)
This commit is contained in:
Dave Wallace
2019-09-19 20:38:44 +00:00
committed by Andrew Yourtchenko
parent 4767cf24f4
commit 4ce47210e9
7 changed files with 214 additions and 97 deletions

File diff suppressed because it is too large Load Diff

View File

@ -199,14 +199,15 @@ vl_api_application_attach_reply_t_handler (vl_api_application_attach_reply_t *
if (mp->retval)
{
ECHO_FAIL ("attach failed: %U", format_api_error,
clib_net_to_host_u32 (mp->retval));
ECHO_FAIL (ECHO_FAIL_VL_API_APP_ATTACH, "attach failed: %U",
format_api_error, clib_net_to_host_u32 (mp->retval));
return;
}
if (mp->segment_name_length == 0)
{
ECHO_FAIL ("segment_name_length zero");
ECHO_FAIL (ECHO_FAIL_VL_API_MISSING_SEGMENT_NAME,
"segment_name_length zero");
return;
}
@ -219,14 +220,16 @@ vl_api_application_attach_reply_t_handler (vl_api_application_attach_reply_t *
vec_validate (fds, mp->n_fds);
if (vl_socket_client_recv_fd_msg (fds, mp->n_fds, 5))
{
ECHO_FAIL ("vl_socket_client_recv_fd_msg failed");
ECHO_FAIL (ECHO_FAIL_VL_API_RECV_FD_MSG,
"vl_socket_client_recv_fd_msg failed");
goto failed;
}
if (mp->fd_flags & SESSION_FD_F_VPP_MQ_SEGMENT)
if (ssvm_segment_attach (0, SSVM_SEGMENT_MEMFD, fds[n_fds++]))
{
ECHO_FAIL ("svm_fifo_segment_attach failed");
ECHO_FAIL (ECHO_FAIL_VL_API_SVM_FIFO_SEG_ATTACH,
"svm_fifo_segment_attach failed on SSVM_SEGMENT_MEMFD");
goto failed;
}
@ -234,8 +237,9 @@ vl_api_application_attach_reply_t_handler (vl_api_application_attach_reply_t *
if (ssvm_segment_attach ((char *) mp->segment_name,
SSVM_SEGMENT_MEMFD, fds[n_fds++]))
{
ECHO_FAIL ("svm_fifo_segment_attach ('%s') failed",
mp->segment_name);
ECHO_FAIL (ECHO_FAIL_VL_API_SVM_FIFO_SEG_ATTACH,
"svm_fifo_segment_attach ('%s') "
"failed on SSVM_SEGMENT_MEMFD", mp->segment_name);
goto failed;
}
if (mp->fd_flags & SESSION_FD_F_MQ_EVENTFD)
@ -248,8 +252,9 @@ vl_api_application_attach_reply_t_handler (vl_api_application_attach_reply_t *
if (ssvm_segment_attach ((char *) mp->segment_name, SSVM_SEGMENT_SHM,
-1))
{
ECHO_FAIL ("svm_fifo_segment_attach ('%s') failed",
mp->segment_name);
ECHO_FAIL (ECHO_FAIL_VL_API_SVM_FIFO_SEG_ATTACH,
"svm_fifo_segment_attach ('%s') "
"failed on SSVM_SEGMENT_SHM", mp->segment_name);
return;
}
}
@ -270,7 +275,8 @@ vl_api_application_detach_reply_t_handler (vl_api_application_detach_reply_t *
{
if (mp->retval)
{
ECHO_FAIL ("detach returned with err: %d", mp->retval);
ECHO_FAIL (ECHO_FAIL_VL_API_DETACH_REPLY,
"app detach returned with err: %d", mp->retval);
return;
}
echo_main.state = STATE_DETACHED;
@ -301,13 +307,15 @@ vl_api_map_another_segment_t_handler (vl_api_map_another_segment_t * mp)
vec_validate (fds, 1);
if (vl_socket_client_recv_fd_msg (fds, 1, 5))
{
ECHO_FAIL ("vl_socket_client_recv_fd_msg failed");
ECHO_FAIL (ECHO_FAIL_VL_API_RECV_FD_MSG,
"vl_socket_client_recv_fd_msg failed");
goto failed;
}
if (ssvm_segment_attach (seg_name, SSVM_SEGMENT_MEMFD, fds[0]))
{
ECHO_FAIL ("svm_fifo_segment_attach ('%s')"
ECHO_FAIL (ECHO_FAIL_VL_API_SVM_FIFO_SEG_ATTACH,
"svm_fifo_segment_attach ('%s') "
"failed on SSVM_SEGMENT_MEMFD", seg_name);
goto failed;
}
@ -321,7 +329,8 @@ vl_api_map_another_segment_t_handler (vl_api_map_another_segment_t * mp)
/* Attach to the segment vpp created */
if (fifo_segment_attach (sm, a))
{
ECHO_FAIL ("svm_fifo_segment_attach ('%s') failed", seg_name);
ECHO_FAIL (ECHO_FAIL_VL_API_FIFO_SEG_ATTACH,
"fifo_segment_attach ('%s') failed", seg_name);
goto failed;
}
}
@ -340,8 +349,8 @@ vl_api_bind_uri_reply_t_handler (vl_api_bind_uri_reply_t * mp)
{
if (mp->retval)
{
ECHO_FAIL ("bind failed: %U", format_api_error,
clib_net_to_host_u32 (mp->retval));
ECHO_FAIL (ECHO_FAIL_VL_API_BIND_URI_REPLY, "bind failed: %U",
format_api_error, clib_net_to_host_u32 (mp->retval));
}
}
@ -352,7 +361,8 @@ vl_api_unbind_uri_reply_t_handler (vl_api_unbind_uri_reply_t * mp)
echo_main_t *em = &echo_main;
if (mp->retval != 0)
{
ECHO_FAIL ("returned %d", ntohl (mp->retval));
ECHO_FAIL (ECHO_FAIL_VL_API_UNBIND_REPLY, "unbind_uri returned %d",
ntohl (mp->retval));
return;
}
listen_session = pool_elt_at_index (em->sessions, em->listen_session_index);
@ -369,7 +379,8 @@ vl_api_disconnect_session_reply_t_handler (vl_api_disconnect_session_reply_t *
if (mp->retval)
{
ECHO_FAIL ("vpp complained about disconnect: %d", ntohl (mp->retval));
ECHO_FAIL (ECHO_FAIL_VL_API_DISCONNECT_SESSION_REPLY,
"vpp complained about disconnect: %d", ntohl (mp->retval));
return;
}
@ -384,7 +395,8 @@ static void
(vl_api_application_tls_cert_add_reply_t * mp)
{
if (mp->retval)
ECHO_FAIL ("failed to add tls cert");
ECHO_FAIL (ECHO_FAIL_VL_API_TLS_CERT_ADD_REPLY,
"failed to add application tls cert");
}
static void
@ -392,7 +404,8 @@ static void
(vl_api_application_tls_key_add_reply_t * mp)
{
if (mp->retval)
ECHO_FAIL ("failed to add tls key");
ECHO_FAIL (ECHO_FAIL_VL_API_TLS_KEY_ADD_REPLY,
"failed to add application tls key");
}
static void

View File

@ -18,6 +18,12 @@
#include <hs_apps/sapi/vpp_echo_common.h>
char *echo_fail_code_str[] = {
#define _(sym, str) str,
foreach_echo_fail_code
#undef _
};
/*
*
* Format functions
@ -481,7 +487,8 @@ echo_get_session_from_handle (echo_main_t * em, u64 handle)
clib_spinlock_unlock (&em->sid_vpp_handles_lock);
if (!p)
{
ECHO_FAIL ("unknown handle 0x%lx", handle);
ECHO_FAIL (ECHO_FAIL_GET_SESSION_FROM_HANDLE,
"unknown handle 0x%lx", handle);
return 0;
}
return pool_elt_at_index (em->sessions, p[0]);

View File

@ -37,17 +37,88 @@
#define TIMEOUT 10.0
#define CHECK(expected, result, _fmt, _args...) \
if (expected != result) \
ECHO_FAIL ("expected %d, got %d : " _fmt, expected, result, ##_args);
#define foreach_echo_fail_code \
_(ECHO_FAIL_NONE, "ECHO_FAIL_NONE") \
_(ECHO_FAIL_SEND_IO_EVT, "ECHO_FAIL_SEND_IO_EVT") \
_(ECHO_FAIL_SOCKET_CONNECT, "ECHO_FAIL_SOCKET_CONNECT") \
_(ECHO_FAIL_INIT_SHM_API, "ECHO_FAIL_INIT_SHM_API") \
_(ECHO_FAIL_SHMEM_CONNECT, "ECHO_FAIL_SHMEM_CONNECT") \
_(ECHO_FAIL_TEST_BYTES_ERR, "ECHO_FAIL_TEST_BYTES_ERR") \
_(ECHO_FAIL_BIND, "ECHO_FAIL_BIND") \
_(ECHO_FAIL_ACCEPTED_WAIT_FOR_SEG_ALLOC, \
"ECHO_FAIL_ACCEPTED_WAIT_FOR_SEG_ALLOC") \
_(ECHO_FAIL_SESSION_CONNECT, "ECHO_FAIL_SESSION_CONNECT") \
_(ECHO_FAIL_CONNECTED_WAIT_FOR_SEG_ALLOC, \
"ECHO_FAIL_CONNECTED_WAIT_FOR_SEG_ALLOC") \
_(ECHO_FAIL_APP_ATTACH, "ECHO_FAIL_APP_ATTACH") \
_(ECHO_FAIL_SERVER_DISCONNECT_TIMEOUT, \
"ECHO_FAIL_SERVER_DISCONNECT_TIMEOUT") \
_(ECHO_FAIL_INVALID_URI, "ECHO_FAIL_INVALID_URI") \
_(ECHO_FAIL_PROTOCOL_NOT_SUPPORTED, \
"ECHO_FAIL_PROTOCOL_NOT_SUPPORTED") \
_(ECHO_FAIL_CONNECT_TO_VPP, "ECHO_FAIL_CONNECT_TO_VPP") \
_(ECHO_FAIL_ATTACH_TO_VPP, "ECHO_FAIL_ATTACH_TO_VPP") \
_(ECHO_FAIL_1ST_PTHREAD_CREATE, "ECHO_FAIL_1ST_PTHREAD_CREATE") \
_(ECHO_FAIL_PTHREAD_CREATE, "ECHO_FAIL_PTHREAD_CREATE") \
_(ECHO_FAIL_DETACH, "ECHO_FAIL_DETACH") \
_(ECHO_FAIL_MQ_PTHREAD, "ECHO_FAIL_MQ_PTHREAD") \
_(ECHO_FAIL_VL_API_APP_ATTACH, "ECHO_FAIL_VL_API_APP_ATTACH") \
_(ECHO_FAIL_VL_API_MISSING_SEGMENT_NAME, \
"ECHO_FAIL_VL_API_MISSING_SEGMENT_NAME") \
_(ECHO_FAIL_VL_API_RECV_FD_MSG, "ECHO_FAIL_VL_API_RECV_FD_MSG") \
_(ECHO_FAIL_VL_API_SVM_FIFO_SEG_ATTACH, \
"ECHO_FAIL_VL_API_SVM_FIFO_SEG_ATTACH") \
_(ECHO_FAIL_VL_API_FIFO_SEG_ATTACH, \
"ECHO_FAIL_VL_API_FIFO_SEG_ATTACH") \
_(ECHO_FAIL_VL_API_DETACH_REPLY, "ECHO_FAIL_VL_API_DETACH_REPLY") \
_(ECHO_FAIL_VL_API_BIND_URI_REPLY, "ECHO_FAIL_VL_API_BIND_URI_REPLY") \
_(ECHO_FAIL_VL_API_UNBIND_REPLY, "ECHO_FAIL_VL_API_UNBIND_REPLY") \
_(ECHO_FAIL_VL_API_DISCONNECT_SESSION_REPLY, \
"ECHO_FAIL_VL_API_DISCONNECT_SESSION_REPLY") \
_(ECHO_FAIL_VL_API_TLS_CERT_ADD_REPLY, \
"ECHO_FAIL_VL_API_TLS_CERT_ADD_REPLY") \
_(ECHO_FAIL_VL_API_TLS_KEY_ADD_REPLY, \
"ECHO_FAIL_VL_API_TLS_KEY_ADD_REPLY") \
_(ECHO_FAIL_GET_SESSION_FROM_HANDLE, \
"ECHO_FAIL_GET_SESSION_FROM_HANDLE") \
_(ECHO_FAIL_QUIC_WRONG_CONNECT, "ECHO_FAIL_QUIC_WRONG_CONNECT") \
_(ECHO_FAIL_QUIC_WRONG_ACCEPT, "ECHO_FAIL_QUIC_WRONG_ACCEPT") \
_(ECHO_FAIL_TCP_BAPI_CONNECT, "ECHO_FAIL_TCP_BAPI_CONNECT") \
_(ECHO_FAIL_UDP_BAPI_CONNECT, "ECHO_FAIL_UDP_BAPI_CONNECT") \
_(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_TEST_ASSERT_TX_TOTAL, "ECHO_FAIL_TEST_ASSERT_TX_TOTAL") \
_(ECHO_FAIL_TEST_ASSERT_ALL_SESSIONS_CLOSED, \
"ECHO_FAIL_TEST_ASSERT_ALL_SESSIONS_CLOSED")
#define ECHO_FAIL(_fmt,_args...) \
{ \
echo_main_t *em = &echo_main; \
em->has_failed = 1; \
em->time_to_stop = 1; \
if (em->log_lvl > 0) \
clib_warning ("ECHO-ERROR: "_fmt, ##_args); \
typedef enum
{
#define _(sym, str) sym,
foreach_echo_fail_code
#undef _
} echo_fail_t;
extern char *echo_fail_code_str[];
#define CHECK(fail, expected, result, _fmt, _args...) \
if (expected != result) \
ECHO_FAIL (fail, "expected %d, got %d : " _fmt, expected, \
result, ##_args); \
#define ECHO_FAIL(fail, _fmt, _args...) \
{ \
echo_main_t *em = &echo_main; \
em->has_failed = fail; \
if (vec_len(em->fail_descr)) \
em->fail_descr = format(em->fail_descr, " | %s (%d): "_fmt, \
echo_fail_code_str[fail], fail, ##_args); \
else \
em->fail_descr = format(0, "%s (%d): "_fmt, \
echo_fail_code_str[fail], fail, ##_args); \
em->time_to_stop = 1; \
if (em->log_lvl > 0) \
clib_warning ("%v", em->fail_descr); \
}
#define ECHO_LOG(lvl, _fmt,_args...) \
@ -57,12 +128,12 @@
clib_warning (_fmt, ##_args); \
}
#define ECHO_REGISTER_PROTO(proto, vft) \
static void __clib_constructor \
vpp_echo_init_##proto () \
{ \
echo_main_t *em = &echo_main; \
em->available_proto_cb_vft[proto] = &vft; \
#define ECHO_REGISTER_PROTO(proto, vft) \
static void __clib_constructor \
vpp_echo_init_##proto () \
{ \
echo_main_t *em = &echo_main; \
em->available_proto_cb_vft[proto] = &vft; \
}
typedef struct
@ -197,6 +268,7 @@ typedef struct
volatile connection_state_t state;
volatile u8 time_to_stop; /* Signal variables */
u8 has_failed; /* stores the exit code */
u8 *fail_descr; /* vector containing fail description */
/** 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

View File

@ -83,7 +83,8 @@ quic_echo_on_connected_send (session_connected_msg_t * mp, u32 session_index)
static void
quic_echo_on_connected_error (session_connected_msg_t * mp, u32 session_index)
{
ECHO_FAIL ("Got a wrong connected on session %u [%lx]", session_index,
ECHO_FAIL (ECHO_FAIL_QUIC_WRONG_CONNECT,
"Got a wrong connected on session %u [%lx]", session_index,
mp->handle);
}
@ -118,7 +119,8 @@ quic_echo_on_accept_connect (session_accepted_msg_t * mp, u32 session_index)
static void
quic_echo_on_accept_error (session_accepted_msg_t * mp, u32 session_index)
{
ECHO_FAIL ("Got a wrong accept on session %u [%lx]", session_index,
ECHO_FAIL (ECHO_FAIL_QUIC_WRONG_ACCEPT,
"Got a wrong accept on session %u [%lx]", session_index,
mp->handle);
}

View File

@ -48,7 +48,8 @@ tcp_echo_connected_cb (session_connected_bundled_msg_t * mp,
echo_session_t *session = pool_elt_at_index (em->sessions, session_index);
if (is_failed)
{
ECHO_FAIL ("Bapi connect errored");
ECHO_FAIL (ECHO_FAIL_TCP_BAPI_CONNECT,
"Bapi connect errored on session %u", session_index);
return; /* Dont handle bapi connect errors for now */
}

View File

@ -47,7 +47,8 @@ udp_echo_connected_cb (session_connected_bundled_msg_t * mp,
echo_session_t *session = pool_elt_at_index (em->sessions, session_index);
if (is_failed)
{
ECHO_FAIL ("Bapi connect errored");
ECHO_FAIL (ECHO_FAIL_UDP_BAPI_CONNECT,
"Bapi connect errored on session %u", session_index);
return; /* Dont handle bapi connect errors for now */
}