X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlibapi%2Fvat_helper_macros.h;h=239e2091dc1ddb1c7b1147b098da43379eb9215b;hb=f5a45680ee1c9c586ab2b037e3d71354789e4403;hp=5e7f10839474d7203f6a1138ee7250010a27210a;hpb=59b2565cd91a67ced650739f36129650830211ac;p=vpp.git diff --git a/src/vlibapi/vat_helper_macros.h b/src/vlibapi/vat_helper_macros.h index 5e7f1083947..239e2091dc1 100644 --- a/src/vlibapi/vat_helper_macros.h +++ b/src/vlibapi/vat_helper_macros.h @@ -22,76 +22,52 @@ /* M: construct, but don't yet send a message */ #define M(T, mp) \ do { \ - socket_client_main_t *scm = &vam->socket_client_main; \ + socket_client_main_t *scm = vam->socket_client_main; \ vam->result_ready = 0; \ - if (scm->socket_enable) \ - { \ - mp = (void *)scm->socket_tx_buffer; \ - scm->socket_tx_nbytes = 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)); \ + clib_memset (mp, 0, sizeof (*mp)); \ mp->_vl_msg_id = ntohs (VL_API_##T+__plugin_msg_base); \ - mp->client_index = vam->my_client_index; \ + 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; \ + socket_client_main_t *scm = vam->socket_client_main; \ vam->result_ready = 0; \ - if (scm->socket_enable) \ - { \ - mp = (void *)scm->socket_tx_buffer; \ - scm->socket_tx_nbytes = 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)); \ + clib_memset (mp, 0, sizeof (*mp)); \ mp->_vl_msg_id = ntohs (VL_API_##T+__plugin_msg_base); \ mp->client_index = vam->my_client_index; \ - scm->control_pings_outstanding++; \ + if (scm) \ + scm->control_pings_outstanding++; \ } while(0); #define M2(T, mp, n) \ do { \ - socket_client_main_t *scm = &vam->socket_client_main; \ + socket_client_main_t *scm = vam->socket_client_main; \ vam->result_ready = 0; \ - if (scm->socket_enable) \ - { \ - mp = (void *)scm->socket_tx_buffer; \ - scm->socket_tx_nbytes = sizeof (*mp) + n; \ - } \ + if (scm && scm->socket_enable) \ + mp = vl_socket_client_msg_alloc (sizeof(*mp) + n); \ else \ mp = vl_msg_api_alloc_as_if_client(sizeof(*mp) + n); \ - memset (mp, 0, sizeof (*mp)); \ + clib_memset (mp, 0, sizeof (*mp)); \ mp->_vl_msg_id = ntohs (VL_API_##T+__plugin_msg_base); \ - mp->client_index = vam->my_client_index; \ + mp->client_index = vam->my_client_index; \ } while(0); /* S: send a message */ #define S(mp) \ do { \ - int n; \ - socket_client_main_t *scm = &vam->socket_client_main; \ - if (scm->socket_enable) \ - { \ - msgbuf_t msgbuf; \ - \ - msgbuf.q = 0; \ - msgbuf.gc_mark_timestamp = 0; \ - msgbuf.data_len = ntohl(scm->socket_tx_nbytes); \ - \ - n = write (scm->socket_fd, &msgbuf, sizeof (msgbuf)); \ - if (n < sizeof (msgbuf)) \ - clib_unix_warning ("socket write (msgbuf)"); \ - \ - n = write (scm->socket_fd, scm->socket_tx_buffer, \ - scm->socket_tx_nbytes); \ - if (n < scm->socket_tx_nbytes) \ - clib_unix_warning ("socket write (msg)"); \ - } \ + 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); @@ -100,27 +76,29 @@ do { \ #define W(ret) \ do { \ f64 timeout = vat_time_now (vam) + 1.0; \ - socket_client_main_t *scm = &vam->socket_client_main; \ + socket_client_main_t *scm = vam->socket_client_main; \ ret = -99; \ \ - vl_socket_client_read_reply (scm); \ + 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 */ +/* W2: wait for results, with timeout */ \ #define W2(ret, body) \ do { \ f64 timeout = vat_time_now (vam) + 1.0; \ - socket_client_main_t *scm = &vam->socket_client_main; \ + socket_client_main_t *scm = vam->socket_client_main; \ ret = -99; \ \ - vl_socket_client_read_reply (scm); \ + if (scm && scm->socket_enable) \ + vl_socket_client_read (5); \ while (vat_time_now (vam) < timeout) { \ if (vam->result_ready == 1) { \ (body); \ @@ -128,8 +106,29 @@ do { \ break; \ } \ vat_suspend (vam->vlib_main, 1e-5); \ - } \ + } \ } while(0); +#define VAT_PLUGIN_REGISTER(plug) \ +clib_error_t * vat_plugin_register (vat_main_t *vam) \ +{ \ + plug##_test_main_t * mp = &plug##_test_main; \ + u8 * name; \ + \ + mp->vat_main = vam; \ + \ + /* Ask the vpp engine for the first assigned message-id */ \ + name = format (0, #plug "_%08x%c", api_version, 0); \ + mp->msg_id_base = \ + vl_client_get_first_plugin_msg_id ((char *) name); \ + vec_free(name); \ + \ + if (mp->msg_id_base != (u16) ~0) \ + plug##_api_hookup (vam); \ + else \ + return clib_error_return (0, #plug " plugin not loaded...");\ + return 0; \ +} + #endif /* __vat_helper_macros_h__ */