X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlibapi%2Fvat_helper_macros.h;h=52fdcb1cb5a1cfdc5a2b632fec850bec97c35198;hb=90a63988fa01685626b6d6a01b79ea5370f7fbac;hp=ffb74fe3b9bb80dcf18c65c838e32d25e13649f1;hpb=1f9191f6efa5f2e0284c194f920093201b27ef81;p=vpp.git diff --git a/src/vlibapi/vat_helper_macros.h b/src/vlibapi/vat_helper_macros.h index ffb74fe3b9b..52fdcb1cb5a 100644 --- a/src/vlibapi/vat_helper_macros.h +++ b/src/vlibapi/vat_helper_macros.h @@ -22,52 +22,91 @@ /* M: construct, but don't yet send a message */ #define M(T, mp) \ do { \ + socket_client_main_t *scm = vam->socket_client_main; \ vam->result_ready = 0; \ - mp = vl_msg_api_alloc_as_if_client(sizeof(*mp)); \ + if (scm && scm->socket_enable) \ + mp = vl_socket_client_msg_alloc (sizeof(*mp)); \ + else \ + mp = vl_msg_api_alloc_as_if_client(sizeof(*mp)); \ memset (mp, 0, sizeof (*mp)); \ mp->_vl_msg_id = ntohs (VL_API_##T+__plugin_msg_base); \ mp->client_index = vam->my_client_index; \ } while(0); +/* MPING: construct a control-ping message, don't send it yet */ +#define MPING(T, mp) \ +do { \ + socket_client_main_t *scm = vam->socket_client_main; \ + vam->result_ready = 0; \ + if (scm && scm->socket_enable) \ + mp = vl_socket_client_msg_alloc (sizeof(*mp)); \ + else \ + mp = vl_msg_api_alloc_as_if_client(sizeof(*mp)); \ + memset (mp, 0, sizeof (*mp)); \ + mp->_vl_msg_id = ntohs (VL_API_##T+__plugin_msg_base); \ + mp->client_index = vam->my_client_index; \ + if (scm) \ + scm->control_pings_outstanding++; \ +} while(0); + #define M2(T, mp, n) \ do { \ + socket_client_main_t *scm = vam->socket_client_main; \ vam->result_ready = 0; \ - mp = vl_msg_api_alloc_as_if_client(sizeof(*mp)+(n)); \ + if (scm && scm->socket_enable) \ + mp = vl_socket_client_msg_alloc (sizeof(*mp)); \ + else \ + mp = vl_msg_api_alloc_as_if_client(sizeof(*mp) + n); \ memset (mp, 0, sizeof (*mp)); \ mp->_vl_msg_id = ntohs (VL_API_##T+__plugin_msg_base); \ mp->client_index = vam->my_client_index; \ } while(0); /* S: send a message */ -#define S(mp) (vl_msg_api_send_shmem (vam->vl_input_queue, (u8 *)&mp)) +#define S(mp) \ +do { \ + socket_client_main_t *scm = vam->socket_client_main; \ + if (scm && scm->socket_enable) \ + vl_socket_client_write (); \ + else \ + vl_msg_api_send_shmem (vam->vl_input_queue, (u8 *)&mp); \ + } while (0); /* W: wait for results, with timeout */ -#define W \ -do { \ - f64 timeout = vat_time_now (vam) + 1.0; \ - \ - while (vat_time_now (vam) < timeout) { \ - if (vam->result_ready == 1) { \ - return (vam->retval); \ - } \ - vat_suspend (vam->vlib_main, 1e-5); \ - } \ - return -99; \ +#define W(ret) \ +do { \ + f64 timeout = vat_time_now (vam) + 1.0; \ + socket_client_main_t *scm = vam->socket_client_main; \ + ret = -99; \ + \ + if (scm && scm->socket_enable) \ + vl_socket_client_read (5); \ + while (vat_time_now (vam) < timeout) { \ + if (vam->result_ready == 1) { \ + ret = vam->retval; \ + break; \ + } \ + vat_suspend (vam->vlib_main, 1e-5); \ + } \ } while(0); /* W2: wait for results, with timeout */ -#define W2(body) \ -do { \ - f64 timeout = vat_time_now (vam) + 1.0; \ - \ - while (vat_time_now (vam) < timeout) { \ - if (vam->result_ready == 1) { \ - (body); \ - return (vam->retval); \ - } \ - vat_suspend (vam->vlib_main, 1e-5); \ - } \ - return -99; \ +#define W2(ret, body) \ +do { \ + f64 timeout = vat_time_now (vam) + 1.0; \ + socket_client_main_t *scm = vam->socket_client_main; \ + ret = -99; \ + \ + if (scm && scm->socket_enable) \ + vl_socket_client_read (5); \ + while (vat_time_now (vam) < timeout) { \ + if (vam->result_ready == 1) { \ + (body); \ + ret = vam->retval; \ + break; \ + } \ + vat_suspend (vam->vlib_main, 1e-5); \ + } \ } while(0);