vlib: introduce vlib_get_elog_main()
[vpp.git] / src / vlibmemory / memory_api.h
index 9b87f5a..843bf89 100644 (file)
@@ -19,6 +19,7 @@
 #define SRC_VLIBMEMORY_MEMORY_API_H_
 
 #include <svm/svm.h>
+#include <svm/ssvm.h>
 #include <svm/queue.h>
 #include <vlib/vlib.h>
 #include <vlibapi/api.h>
@@ -31,6 +32,8 @@ void vl_mem_api_dead_client_scan (api_main_t * am, vl_shmem_hdr_t * shm,
 int vl_mem_api_handle_msg_main (vlib_main_t * vm, vlib_node_runtime_t * node);
 int vl_mem_api_handle_msg_private (vlib_main_t * vm,
                                   vlib_node_runtime_t * node, u32 reg_index);
+int vl_mem_api_handle_rpc (vlib_main_t * vm, vlib_node_runtime_t * node);
+
 vl_api_registration_t *vl_mem_api_client_index_to_registration (u32 handle);
 void vl_mem_api_enable_disable (vlib_main_t * vm, int yesno);
 u32 vl_api_memclnt_create_internal (char *, svm_queue_t *);
@@ -57,17 +60,29 @@ vl_msg_api_handle_from_index_and_epoch (u32 index, u32 epoch)
   return handle;
 }
 
-#define VL_MEM_API_LOG_Q_LEN(fmt,qlen)                 \
-if (TRACE_VLIB_MEMORY_QUEUE)                           \
-  do {                                                 \
-      ELOG_TYPE_DECLARE (e) = {                                \
-        .format = fmt,                                 \
-        .format_args = "i4",                           \
-      };                                                       \
-      struct { u32 len; } *ed;                         \
-      ed = ELOG_DATA (&vm->elog_main, e);              \
-      ed->len = qlen;                                  \
-  } while (0)
+static inline u8
+vl_msg_api_handle_is_valid (u32 handle, u32 restarts)
+{
+  u32 epoch = vl_msg_api_handle_get_epoch (handle);
+  return ((restarts & VL_API_EPOCH_MASK) == epoch);
+}
+
+#define VL_MEM_API_LOG_Q_LEN(fmt, qlen)                                       \
+  if (TRACE_VLIB_MEMORY_QUEUE)                                                \
+    do                                                                        \
+      {                                                                       \
+       ELOG_TYPE_DECLARE (e) = {                                             \
+         .format = fmt,                                                      \
+         .format_args = "i4",                                                \
+       };                                                                    \
+       struct                                                                \
+       {                                                                     \
+         u32 len;                                                            \
+       } * ed;                                                               \
+       ed = ELOG_DATA (&vlib_global_main.elog_main, e);                      \
+       ed->len = qlen;                                                       \
+      }                                                                       \
+  while (0)
 
 #endif /* SRC_VLIBMEMORY_MEMORY_API_H_ */