api: refactor vlibmemory
[vpp.git] / src / vlibapi / node_serialize.c
index 50e5c41..575de11 100644 (file)
@@ -16,9 +16,6 @@
 
 #include <vppinfra/serialize.h>
 
-extern void vl_msg_api_barrier_sync (void);
-extern void vl_msg_api_barrier_release (void);
-
 /* serialized representation of state strings */
 
 #define foreach_state_string_code               \
@@ -50,72 +47,24 @@ static char *state_strings[] = {
  * to recycle a vector / avoid memory allocation, etc.
  * Switch heaps before/after to serialize into API client shared memory.
  */
-
 u8 *
-vlib_node_serialize (vlib_node_main_t * nm, u8 * vector,
-                    u32 max_threads, int include_nexts, int include_stats)
+vlib_node_serialize (vlib_main_t * vm, vlib_node_t *** node_dups, u8 * vector,
+                    int include_nexts, int include_stats)
 {
   serialize_main_t _sm, *sm = &_sm;
-  vlib_main_t *vm = vlib_get_main ();
   vlib_node_t *n;
-  static vlib_node_t ***node_dups;
   vlib_node_t **nodes;
-  static vlib_main_t **stat_vms;
-  vlib_main_t *stat_vm;
   u8 *namep;
   u32 name_bytes;
   uword i, j, k;
   u64 l, v, c, d;
   state_string_enum_t state_code;
-  u32 threads_to_serialize;
-
-  vec_reset_length (node_dups);
-
-  if (vec_len (stat_vms) == 0)
-    {
-      for (i = 0; i < vec_len (vlib_mains); i++)
-       {
-         stat_vm = vlib_mains[i];
-         if (stat_vm)
-           vec_add1 (stat_vms, stat_vm);
-       }
-    }
-
-  threads_to_serialize = clib_min (max_threads, vec_len (stat_vms));
-
-  /*
-   * Barrier sync across stats scraping.
-   * Otherwise, the counts will be grossly inaccurate.
-   */
-  vl_msg_api_barrier_sync ();
-
-  for (j = 0; j < threads_to_serialize; j++)
-    {
-      stat_vm = stat_vms[j];
-      nm = &stat_vm->node_main;
-
-      if (include_stats)
-       {
-         for (i = 0; i < vec_len (nm->nodes); i++)
-           {
-             n = nm->nodes[i];
-             vlib_node_sync_stats (stat_vm, n);
-           }
-       }
-
-      nodes = vec_dup (nm->nodes);
-
-      vec_add1 (node_dups, nodes);
-    }
-  vl_msg_api_barrier_release ();
 
   serialize_open_vector (sm, vector);
+  serialize_likely_small_unsigned_integer (sm, vec_len (node_dups));
 
-  serialize_likely_small_unsigned_integer (sm, vec_len (stat_vms));
-
-  for (j = 0; j < vec_len (stat_vms); j++)
+  for (j = 0; j < vec_len (node_dups); j++)
     {
-      stat_vm = stat_vms[j];
       nodes = node_dups[j];
 
       serialize_likely_small_unsigned_integer (sm, vec_len (nodes));