Clean up binary api message handler registration issues
[vpp.git] / src / vlibapi / api.h
index 970a0ee..b40ece1 100644 (file)
@@ -124,6 +124,7 @@ typedef struct
   u8 *is_mp_safe;
   struct ring_alloc_ *arings;
   u32 ring_misses;
+  u32 garbage_collects;
   u32 missing_clients;
   vl_api_trace_t *rx_trace;
   vl_api_trace_t *tx_trace;
@@ -212,7 +213,7 @@ typedef struct msgbuf_
 {
   unix_shared_memory_queue_t *q;
   u32 data_len;
-  u32 pad;
+  u32 gc_mark_timestamp;
   u8 data[0];
 } msgbuf_t;
 
@@ -270,6 +271,21 @@ vlib_node_t **vlib_node_unserialize (u8 * vector);
 
 #define VLIB_API_INIT_FUNCTION(x) VLIB_DECLARE_INIT_FUNCTION(x,api_init)
 
+/* Call given init function: used for init function dependencies. */
+#define vlib_call_api_init_function(vm, x)                              \
+  ({                                                                    \
+    extern vlib_init_function_t * _VLIB_INIT_FUNCTION_SYMBOL (x,api_init); \
+    vlib_init_function_t * _f = _VLIB_INIT_FUNCTION_SYMBOL (x,api_init); \
+    clib_error_t * _error = 0;                                          \
+    if (! hash_get (vm->init_functions_called, _f))                     \
+      {                                                                 \
+       hash_set1 (vm->init_functions_called, _f);                      \
+       _error = _f (vm);                                               \
+      }                                                                 \
+    _error;                                                             \
+  })
+
+
 #endif /* included_api_h */
 
 /*