api: API trace improvements
[vpp.git] / src / vlibmemory / socket_api.c
index f5b3a60..ce834a7 100644 (file)
@@ -295,7 +295,7 @@ vl_socket_read_ready (clib_file_t * uf)
     }
 
   /* Fake smaller length teporarily, so input_buffer can be used as msg_buffer. */
-  _vec_len (socket_main.input_buffer) = n;
+  vec_set_len (socket_main.input_buffer, n);
 
   /*
    * Look for bugs here. This code is tricky because
@@ -340,10 +340,10 @@ vl_socket_read_ready (clib_file_t * uf)
              vec_validate (rp->unprocessed_input, vec_len (msg_buffer) - 1);
              clib_memcpy_fast (rp->unprocessed_input, msg_buffer,
                                vec_len (msg_buffer));
-             _vec_len (rp->unprocessed_input) = vec_len (msg_buffer);
+             vec_set_len (rp->unprocessed_input, vec_len (msg_buffer));
            }
          /* No more full messages, restore original input_buffer length. */
-         _vec_len (socket_main.input_buffer) = save_input_buffer_length;
+         vec_set_len (socket_main.input_buffer, save_input_buffer_length);
          return 0;
        }
 
@@ -353,7 +353,7 @@ vl_socket_read_ready (clib_file_t * uf)
        * so we can overwrite its length to what single message has.
        */
       data_for_process = (u8 *) vec_dup (msg_buffer);
-      _vec_len (data_for_process) = msgbuf_len;
+      vec_set_len (data_for_process, msgbuf_len);
       /* Everything is ready to signal the SOCKET_READ_EVENT. */
       pool_get (socket_main.process_args, a);
       a->reg_index = reg_index;
@@ -367,12 +367,12 @@ vl_socket_read_ready (clib_file_t * uf)
        vec_delete (msg_buffer, msgbuf_len, 0);
       else
        /* We are done with msg_buffer. */
-       _vec_len (msg_buffer) = 0;
+       vec_set_len (msg_buffer, 0);
     }
   while (vec_len (msg_buffer) > 0);
 
   /* Restore input_buffer, it could have been msg_buffer. */
-  _vec_len (socket_main.input_buffer) = save_input_buffer_length;
+  vec_set_len (socket_main.input_buffer, save_input_buffer_length);
   return 0;
 }
 
@@ -495,7 +495,13 @@ vl_api_sockclnt_create_t_handler (vl_api_sockclnt_create_t * mp)
 
   regp = socket_main.current_rp;
 
-  ASSERT (regp->registration_type == REGISTRATION_TYPE_SOCKET_SERVER);
+  /* client already connected through shared memory? */
+  if (!regp || regp->registration_type != REGISTRATION_TYPE_SOCKET_SERVER)
+    {
+      clib_warning (
+       "unsupported API call: already connected though shared memory?");
+      return;
+    }
 
   regp->name = format (0, "%s%c", mp->name, 0);
 
@@ -765,14 +771,15 @@ reply:
   vl_sock_api_send_fd_msg (cf->file_descriptor, &memfd->fd, 1);
 }
 
-#define foreach_vlib_api_msg                           \
-  _(SOCKCLNT_CREATE, sockclnt_create, 1)               \
-  _(SOCKCLNT_DELETE, sockclnt_delete, 1)               \
-  _(SOCK_INIT_SHM, sock_init_shm, 1)
+#define foreach_vlib_api_msg                                                  \
+  _ (SOCKCLNT_CREATE, sockclnt_create, 0)                                     \
+  _ (SOCKCLNT_DELETE, sockclnt_delete, 0)                                     \
+  _ (SOCK_INIT_SHM, sock_init_shm, 0)
 
 clib_error_t *
 vl_sock_api_init (vlib_main_t * vm)
 {
+  api_main_t *am = vlibapi_get_main ();
   clib_file_main_t *fm = &file_main;
   clib_file_t template = { 0 };
   vl_api_registration_t *rp;
@@ -784,13 +791,13 @@ vl_sock_api_init (vlib_main_t * vm)
   if (sm->socket_name == 0)
     return 0;
 
-#define _(N,n,t)                                               \
-    vl_msg_api_set_handlers(VL_API_##N, #n,                     \
-                           vl_api_##n##_t_handler,              \
-                           vl_noop_handler,                     \
-                           vl_api_##n##_t_endian,               \
-                           vl_api_##n##_t_print,                \
-                           sizeof(vl_api_##n##_t), t);
+#define _(N, n, t)                                                            \
+  vl_msg_api_set_handlers (VL_API_##N, #n, vl_api_##n##_t_handler,            \
+                          vl_noop_handler, vl_api_##n##_t_endian,            \
+                          vl_api_##n##_t_print, sizeof (vl_api_##n##_t), t,  \
+                          vl_api_##n##_t_print_json, vl_api_##n##_t_tojson,  \
+                          vl_api_##n##_t_fromjson);                          \
+  am->api_trace_cfg[VL_API_##N].replay_enable = 0;
   foreach_vlib_api_msg;
 #undef _