misc: move part of vpe apis to vlibmemory
[vpp.git] / src / vpp / api / api.c
index b935c00..5477ec9 100644 (file)
 #undef vl_printfun
 #include <vlibapi/api_helper_macros.h>
 
-#define foreach_vpe_api_msg                                             \
-_(CONTROL_PING, control_ping)                                           \
-_(CLI, cli)                                                             \
-_(CLI_INBAND, cli_inband)                                                                      \
-_(GET_NODE_INDEX, get_node_index)                                       \
-_(ADD_NODE_NEXT, add_node_next)                                                                    \
-_(SHOW_VERSION, show_version)                                                              \
-_(SHOW_THREADS, show_threads)                                                              \
-_(GET_NODE_GRAPH, get_node_graph)                                       \
-_(GET_NEXT_INDEX, get_next_index)                                       \
-_(LOG_DUMP, log_dump)                                                   \
-_(SHOW_VPE_SYSTEM_TIME, show_vpe_system_time)                          \
-_(GET_F64_ENDIAN_VALUE, get_f64_endian_value)                                                  \
-_(GET_F64_INCREMENT_BY_ONE, get_f64_increment_by_one)                                  \
+#define foreach_vpe_api_msg                                                   \
+  _ (CONTROL_PING, control_ping)                                              \
+  _ (SHOW_VERSION, show_version)                                              \
+  _ (SHOW_VPE_SYSTEM_TIME, show_vpe_system_time)                              \
+  _ (LOG_DUMP, log_dump)
 
 #define QUOTE_(x) #x
 #define QUOTE(x) QUOTE_(x)
@@ -138,108 +129,6 @@ vl_api_control_ping_t_handler (vl_api_control_ping_t * mp)
   /* *INDENT-ON* */
 }
 
-static void
-shmem_cli_output (uword arg, u8 * buffer, uword buffer_bytes)
-{
-  u8 **shmem_vecp = (u8 **) arg;
-  u8 *shmem_vec;
-  void *oldheap;
-  u32 offset;
-
-  shmem_vec = *shmem_vecp;
-
-  offset = vec_len (shmem_vec);
-
-  oldheap = vl_msg_push_heap ();
-
-  vec_validate (shmem_vec, offset + buffer_bytes - 1);
-
-  clib_memcpy (shmem_vec + offset, buffer, buffer_bytes);
-
-  vl_msg_pop_heap (oldheap);
-
-  *shmem_vecp = shmem_vec;
-}
-
-
-static void
-vl_api_cli_t_handler (vl_api_cli_t * mp)
-{
-  vl_api_cli_reply_t *rp;
-  vl_api_registration_t *reg;
-  vlib_main_t *vm = vlib_get_main ();
-  unformat_input_t input;
-  u8 *shmem_vec = 0;
-  void *oldheap;
-
-  reg = vl_api_client_index_to_registration (mp->client_index);
-  if (!reg)
-    return;;
-
-  rp = vl_msg_api_alloc (sizeof (*rp));
-  rp->_vl_msg_id = ntohs (VL_API_CLI_REPLY);
-  rp->context = mp->context;
-
-  unformat_init_vector (&input, (u8 *) (uword) mp->cmd_in_shmem);
-
-  vlib_cli_input (vm, &input, shmem_cli_output, (uword) & shmem_vec);
-
-  oldheap = vl_msg_push_heap ();
-  vec_add1 (shmem_vec, 0);
-  vl_msg_pop_heap (oldheap);
-
-  rp->reply_in_shmem = (uword) shmem_vec;
-
-  vl_api_send_msg (reg, (u8 *) rp);
-}
-
-static void
-inband_cli_output (uword arg, u8 * buffer, uword buffer_bytes)
-{
-  u8 **mem_vecp = (u8 **) arg;
-  u8 *mem_vec = *mem_vecp;
-  u32 offset = vec_len (mem_vec);
-
-  vec_validate (mem_vec, offset + buffer_bytes - 1);
-  clib_memcpy (mem_vec + offset, buffer, buffer_bytes);
-  *mem_vecp = mem_vec;
-}
-
-static void
-vl_api_cli_inband_t_handler (vl_api_cli_inband_t * mp)
-{
-  vl_api_cli_inband_reply_t *rmp;
-  int rv = 0;
-  vlib_main_t *vm = vlib_get_main ();
-  unformat_input_t input;
-  u8 *out_vec = 0;
-  u8 *cmd_vec = 0;
-
-  if (vl_msg_api_get_msg_length (mp) <
-      vl_api_string_len (&mp->cmd) + sizeof (*mp))
-    {
-      rv = -1;
-      goto error;
-    }
-
-  cmd_vec = vl_api_from_api_to_new_vec (mp, &mp->cmd);
-
-  unformat_init_string (&input, (char *) cmd_vec,
-                       vl_api_string_len (&mp->cmd));
-  rv = vlib_cli_input (vm, &input, inband_cli_output, (uword) & out_vec);
-  unformat_free (&input);
-
-error:
-  /* *INDENT-OFF* */
-  REPLY_MACRO3(VL_API_CLI_INBAND_REPLY, vec_len (out_vec),
-  ({
-    vl_api_vec_to_api_string(out_vec, &rmp->reply);
-  }));
-  /* *INDENT-ON* */
-  vec_free (out_vec);
-  vec_free (cmd_vec);
-}
-
 static void
 vl_api_show_version_t_handler (vl_api_show_version_t * mp)
 {
@@ -264,204 +153,14 @@ vl_api_show_version_t_handler (vl_api_show_version_t * mp)
 }
 
 static void
-get_thread_data (vl_api_thread_data_t * td, int index)
+vl_api_show_vpe_system_time_t_handler (vl_api_show_vpe_system_time_t *mp)
 {
-  vlib_worker_thread_t *w = vlib_worker_threads + index;
-  td->id = htonl (index);
-  if (w->name)
-    strncpy ((char *) td->name, (char *) w->name, ARRAY_LEN (td->name) - 1);
-  if (w->registration)
-    strncpy ((char *) td->type, (char *) w->registration->name,
-            ARRAY_LEN (td->type) - 1);
-  td->pid = htonl (w->lwp);
-  td->cpu_id = htonl (w->cpu_id);
-  td->core = htonl (w->core_id);
-  td->cpu_socket = htonl (w->numa_id);
-}
-
-static void
-vl_api_show_threads_t_handler (vl_api_show_threads_t * mp)
-{
-  int count = 0;
-
-#if !defined(__powerpc64__)
-  vl_api_registration_t *reg;
-  vl_api_show_threads_reply_t *rmp;
-  vl_api_thread_data_t *td;
-  int i, msg_size = 0;
-  count = vec_len (vlib_worker_threads);
-  if (!count)
-    return;
-
-  msg_size = sizeof (*rmp) + sizeof (rmp->thread_data[0]) * count;
-  reg = vl_api_client_index_to_registration (mp->client_index);
-  if (!reg)
-    return;
-
-  rmp = vl_msg_api_alloc (msg_size);
-  clib_memset (rmp, 0, msg_size);
-  rmp->_vl_msg_id = htons (VL_API_SHOW_THREADS_REPLY);
-  rmp->context = mp->context;
-  rmp->count = htonl (count);
-  td = rmp->thread_data;
-
-  for (i = 0; i < count; i++)
-    {
-      get_thread_data (&td[i], i);
-    }
-
-  vl_api_send_msg (reg, (u8 *) rmp);
-#else
-
-  /* unimplemented support */
-  rv = -9;
-  clib_warning ("power pc does not support show threads api");
-  /* *INDENT-OFF* */
-  REPLY_MACRO2(VL_API_SHOW_THREADS_REPLY,
-  ({
-    rmp->count = htonl(count);
-  }));
-  /* *INDENT-ON* */
-#endif
-}
-
-static void
-vl_api_get_node_index_t_handler (vl_api_get_node_index_t * mp)
-{
-  vlib_main_t *vm = vlib_get_main ();
-  vl_api_get_node_index_reply_t *rmp;
-  vlib_node_t *n;
   int rv = 0;
-  u32 node_index = ~0;
-
-  n = vlib_get_node_by_name (vm, mp->node_name);
-
-  if (n == 0)
-    rv = VNET_API_ERROR_NO_SUCH_NODE;
-  else
-    node_index = n->index;
-
-  /* *INDENT-OFF* */
-  REPLY_MACRO2(VL_API_GET_NODE_INDEX_REPLY,
-  ({
-    rmp->node_index = htonl(node_index);
-  }));
-  /* *INDENT-ON* */
-}
-
-static void
-vl_api_get_next_index_t_handler (vl_api_get_next_index_t * mp)
-{
-  vlib_main_t *vm = vlib_get_main ();
-  vl_api_get_next_index_reply_t *rmp;
-  vlib_node_t *node, *next_node;
-  int rv = 0;
-  u32 next_node_index = ~0, next_index = ~0;
-  uword *p;
-
-  node = vlib_get_node_by_name (vm, mp->node_name);
-
-  if (node == 0)
-    {
-      rv = VNET_API_ERROR_NO_SUCH_NODE;
-      goto out;
-    }
-
-  next_node = vlib_get_node_by_name (vm, mp->next_name);
-
-  if (next_node == 0)
-    {
-      rv = VNET_API_ERROR_NO_SUCH_NODE2;
-      goto out;
-    }
-  else
-    next_node_index = next_node->index;
-
-  p = hash_get (node->next_slot_by_node, next_node_index);
-
-  if (p == 0)
-    {
-      rv = VNET_API_ERROR_NO_SUCH_ENTRY;
-      goto out;
-    }
-  else
-    next_index = p[0];
-
-out:
-  /* *INDENT-OFF* */
-  REPLY_MACRO2(VL_API_GET_NEXT_INDEX_REPLY,
-  ({
-    rmp->next_index = htonl(next_index);
-  }));
-  /* *INDENT-ON* */
-}
-
-static void
-vl_api_add_node_next_t_handler (vl_api_add_node_next_t * mp)
-{
-  vlib_main_t *vm = vlib_get_main ();
-  vl_api_add_node_next_reply_t *rmp;
-  vlib_node_t *n, *next;
-  int rv = 0;
-  u32 next_index = ~0;
-
-  n = vlib_get_node_by_name (vm, mp->node_name);
-
-  if (n == 0)
-    {
-      rv = VNET_API_ERROR_NO_SUCH_NODE;
-      goto out;
-    }
-
-  next = vlib_get_node_by_name (vm, mp->next_name);
-
-  if (next == 0)
-    rv = VNET_API_ERROR_NO_SUCH_NODE2;
-  else
-    next_index = vlib_node_add_next (vm, n->index, next->index);
-
-out:
-  /* *INDENT-OFF* */
-  REPLY_MACRO2(VL_API_ADD_NODE_NEXT_REPLY,
-  ({
-    rmp->next_index = htonl(next_index);
-  }));
-  /* *INDENT-ON* */
-}
-
-static void
-vl_api_get_node_graph_t_handler (vl_api_get_node_graph_t * mp)
-{
-  int rv = 0;
-  u8 *vector = 0;
-  vlib_main_t *vm = vlib_get_main ();
-  void *oldheap;
-  vl_api_get_node_graph_reply_t *rmp;
-  static vlib_node_t ***node_dups;
-  static vlib_main_t **stat_vms;
-
-  oldheap = vl_msg_push_heap ();
-
-  /*
-   * Keep the number of memcpy ops to a minimum (e.g. 1).
-   */
-  vec_validate (vector, 16384);
-  vec_reset_length (vector);
-
-  vlib_node_get_nodes (vm, 0 /* main threads */ ,
-                      0 /* include stats */ ,
-                      1 /* barrier sync */ ,
-                      &node_dups, &stat_vms);
-  vector = vlib_node_serialize (vm, node_dups, vector, 1 /* include nexts */ ,
-                               1 /* include stats */ );
-
-  vl_msg_pop_heap (oldheap);
-
+  vl_api_show_vpe_system_time_reply_t *rmp;
   /* *INDENT-OFF* */
-  REPLY_MACRO2(VL_API_GET_NODE_GRAPH_REPLY,
-  ({
-    rmp->reply_in_shmem = (uword) vector;
-  }));
+  REPLY_MACRO2 (
+    VL_API_SHOW_VPE_SYSTEM_TIME_REPLY,
+    ({ rmp->vpe_system_time = clib_host_to_net_f64 (unix_time_now ()); }));
   /* *INDENT-ON* */
 }
 
@@ -530,51 +229,6 @@ vl_api_log_dump_t_handler (vl_api_log_dump_t * mp)
 
 }
 
-static void
-vl_api_show_vpe_system_time_t_handler (vl_api_show_vpe_system_time_t * mp)
-{
-  int rv = 0;
-  vl_api_show_vpe_system_time_reply_t *rmp;
-  /* *INDENT-OFF* */
-  REPLY_MACRO2(VL_API_SHOW_VPE_SYSTEM_TIME_REPLY,
-  ({
-    rmp->vpe_system_time = clib_host_to_net_f64 (unix_time_now ());
-  }));
-  /* *INDENT-ON* */
-}
-
-static void
-vl_api_get_f64_endian_value_t_handler (vl_api_get_f64_endian_value_t * mp)
-{
-  int rv = 0;
-  f64 one = 1.0;
-  vl_api_get_f64_endian_value_reply_t *rmp;
-  if (1.0 != clib_net_to_host_f64 (mp->f64_one))
-    rv = VNET_API_ERROR_API_ENDIAN_FAILED;
-
-  /* *INDENT-OFF* */
-  REPLY_MACRO2(VL_API_GET_F64_ENDIAN_VALUE_REPLY,
-  ({
-    rmp->f64_one_result = clib_host_to_net_f64 (one);
-  }));
-  /* *INDENT-ON* */
-}
-
-static void
-vl_api_get_f64_increment_by_one_t_handler (vl_api_get_f64_increment_by_one_t *
-                                          mp)
-{
-  int rv = 0;
-  vl_api_get_f64_increment_by_one_reply_t *rmp;
-
-  /* *INDENT-OFF* */
-  REPLY_MACRO2(VL_API_GET_F64_INCREMENT_BY_ONE_REPLY,
-  ({
-    rmp->f64_value = clib_host_to_net_f64 (clib_net_to_host_f64(mp->f64_value) + 1.0);
-  }));
-  /* *INDENT-ON* */
-}
-
 #define BOUNCE_HANDLER(nn)                                              \
 static void vl_api_##nn##_t_handler (                                   \
     vl_api_##nn##_t *mp)                                                \
@@ -642,7 +296,6 @@ vpe_api_hookup (vlib_main_t * vm)
   am->is_mp_safe[VL_API_CONTROL_PING] = 1;
   am->is_mp_safe[VL_API_CONTROL_PING_REPLY] = 1;
   am->is_mp_safe[VL_API_IP_ROUTE_ADD_DEL] = 1;
-  am->is_mp_safe[VL_API_GET_NODE_GRAPH] = 1;
 
   /*
    * Set up the (msg_name, crc, message-id) table