vppapigen: support per-file (major,minor,patch) version stamps
[vpp.git] / src / vlibapi / api_shared.c
index 5c1a994..831e863 100644 (file)
@@ -418,7 +418,10 @@ msg_handler_internal (api_main_t * am,
       if (do_it)
        {
          if (!am->is_mp_safe[id])
-           vl_msg_api_barrier_sync ();
+           {
+             vl_msg_api_barrier_trace_context (am->msg_names[id]);
+             vl_msg_api_barrier_sync ();
+           }
          (*am->msg_handlers[id]) (the_msg);
          if (!am->is_mp_safe[id])
            vl_msg_api_barrier_release ();
@@ -498,7 +501,10 @@ vl_msg_api_handler_with_vm_node (api_main_t * am,
        vl_msg_api_trace (am, am->rx_trace, the_msg);
 
       if (!am->is_mp_safe[id])
-       vl_msg_api_barrier_sync ();
+       {
+         vl_msg_api_barrier_trace_context (am->msg_names[id]);
+         vl_msg_api_barrier_sync ();
+       }
       (*handler) (the_msg, vm, node);
       if (!am->is_mp_safe[id])
        vl_msg_api_barrier_release ();
@@ -665,9 +671,11 @@ vl_msg_api_config (vl_msg_api_msg_config_t * c)
   foreach_msg_api_vector;
 #undef _
 
-  if (am->msg_names[c->id])
-    clib_warning ("BUG: multiple registrations of 'vl_api_%s_t_handler'",
-                 c->name);
+  if (am->msg_handlers[c->id] && am->msg_handlers[c->id] != c->handler)
+    clib_warning
+      ("BUG: re-registering 'vl_api_%s_t_handler'."
+       "Handler was %llx, replaced by %llx",
+       c->name, am->msg_handlers[c->id], c->handler);
 
   am->msg_names[c->id] = c->name;
   am->msg_handlers[c->id] = c->handler;
@@ -708,6 +716,18 @@ vl_msg_api_set_handlers (int id, char *name, void *handler, void *cleanup,
   vl_msg_api_config (c);
 }
 
+void
+vl_msg_api_clean_handlers (int msg_id)
+{
+  vl_msg_api_msg_config_t cfg;
+  vl_msg_api_msg_config_t *c = &cfg;
+
+  memset (c, 0, sizeof (*c));
+
+  c->id = msg_id;
+  vl_msg_api_config (c);
+}
+
 void
 vl_msg_api_set_cleanup_handler (int msg_id, void *fp)
 {
@@ -895,6 +915,15 @@ vl_msg_api_add_msg_name_crc (api_main_t * am, const char *string, u32 id)
   hash_set_mem (am->msg_index_by_name_and_crc, string, id);
 }
 
+void
+vl_msg_api_add_version (api_main_t * am, const char *string,
+                       u32 major, u32 minor, u32 patch)
+{
+  api_version_t version = {.major = major,.minor = minor,.patch = patch };
+  ASSERT (strlen (string) < 64);
+  strncpy (version.name, string, 64);
+  vec_add1 (am->api_version_list, version);
+}
 
 /*
  * fd.io coding-style-patch-verification: ON