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:

committed by
Andrew Yourtchenko

parent
4767cf24f4
commit
4ce47210e9
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
@ -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]);
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user