vat: fix socket connection 05/26505/4
authorDave Barach <dave@barachs.net>
Tue, 14 Apr 2020 13:52:26 +0000 (09:52 -0400)
committerFlorin Coras <florin.coras@gmail.com>
Tue, 14 Apr 2020 21:40:46 +0000 (21:40 +0000)
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 <dave@barachs.net>
Change-Id: I7abf35d2ba045d82765bd27f88899287fd351602

src/vat/api_format.c
src/vlibapi/vat_helper_macros.h

index a84a67e..e7d0b02 100644 (file)
@@ -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... */
index 0abfa73..239e209 100644 (file)
@@ -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)                               \