From: Dave Barach Date: Tue, 14 Apr 2020 13:52:26 +0000 (-0400) Subject: vat: fix socket connection X-Git-Tag: v20.09-rc0~214 X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=commitdiff_plain;h=69eeadc03f30c9fb3fe1bb7e2eeb6b04d1bcc596 vat: fix socket connection vat_socket_connect(...) needs to set the api main client index. The M2 helper macro needed to allocate a buffer of size sizeof(*mp) + n, not sizeof(*mp). Type: fix Signed-off-by: Dave Barach Change-Id: I7abf35d2ba045d82765bd27f88899287fd351602 --- diff --git a/src/vat/api_format.c b/src/vat/api_format.c index a84a67e75ba..e7d0b026312 100644 --- a/src/vat/api_format.c +++ b/src/vat/api_format.c @@ -103,13 +103,16 @@ int vat_socket_connect (vat_main_t * vam) { int rv; + api_main_t *am = vlibapi_get_main (); vam->socket_client_main = &socket_client_main; if ((rv = vl_socket_client_connect ((char *) vam->socket_name, "vpp_api_test", 0 /* default socket rx, tx buffer */ ))) return rv; + /* vpp expects the client index in network order */ vam->my_client_index = htonl (socket_client_main.client_index); + am->my_client_index = vam->my_client_index; return 0; } #else /* vpp built-in case, we don't do sockets... */ diff --git a/src/vlibapi/vat_helper_macros.h b/src/vlibapi/vat_helper_macros.h index 0abfa73851f..239e2091dc1 100644 --- a/src/vlibapi/vat_helper_macros.h +++ b/src/vlibapi/vat_helper_macros.h @@ -28,9 +28,9 @@ do { \ mp = vl_socket_client_msg_alloc (sizeof(*mp)); \ else \ mp = vl_msg_api_alloc_as_if_client(sizeof(*mp)); \ - clib_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 */ @@ -38,35 +38,35 @@ do { \ do { \ socket_client_main_t *scm = vam->socket_client_main; \ vam->result_ready = 0; \ - if (scm && scm->socket_enable) \ + if (scm && scm->socket_enable) \ mp = vl_socket_client_msg_alloc (sizeof(*mp)); \ else \ mp = vl_msg_api_alloc_as_if_client(sizeof(*mp)); \ - clib_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; \ if (scm) \ - scm->control_pings_outstanding++; \ + 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; \ - if (scm && scm->socket_enable) \ - mp = vl_socket_client_msg_alloc (sizeof(*mp)); \ + 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); \ - clib_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 { \ socket_client_main_t *scm = vam->socket_client_main; \ - if (scm && scm->socket_enable) \ + if (scm && scm->socket_enable) \ vl_socket_client_write (); \ else \ vl_msg_api_send_shmem (vam->vl_input_queue, (u8 *)&mp); \ @@ -79,7 +79,7 @@ do { \ socket_client_main_t *scm = vam->socket_client_main; \ ret = -99; \ \ - if (scm && scm->socket_enable) \ + if (scm && scm->socket_enable) \ vl_socket_client_read (5); \ while (vat_time_now (vam) < timeout) { \ if (vam->result_ready == 1) { \ @@ -87,17 +87,17 @@ do { \ 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; \ ret = -99; \ \ - if (scm && scm->socket_enable) \ + if (scm && scm->socket_enable) \ vl_socket_client_read (5); \ while (vat_time_now (vam) < timeout) { \ if (vam->result_ready == 1) { \ @@ -106,7 +106,7 @@ do { \ break; \ } \ vat_suspend (vam->vlib_main, 1e-5); \ - } \ + } \ } while(0); #define VAT_PLUGIN_REGISTER(plug) \