vapi: Missing include file in vlib.api.vapi.h 25/35425/3
authorDave Wallace <dwallacelf@gmail.com>
Wed, 23 Feb 2022 20:36:02 +0000 (15:36 -0500)
committerFlorin Coras <florin.coras@gmail.com>
Thu, 24 Feb 2022 23:19:17 +0000 (23:19 +0000)
- A call to vapi_msg_control_ping_hton() is generated in
  a static inline function in vlib.api.vapi.h, which is
  defined/generated in memclnt.api.vapi.h without
  including memclnt.api.vapi.h in vlib.api.vapi.h.
  This breaks the compilation of plugins which include
  only vlib.api.vapi.h (e.g. hicn_plugin from the HICN
  project).

Type: fix
Fixes: a1400cecb

Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
Change-Id: I5574f4ed496183ea93265f493bf3624254a865a2

src/vpp-api/vapi/vapi_c_gen.py

index 100263c..b861158 100755 (executable)
@@ -648,22 +648,6 @@ class CMessage (Message):
         ])
 
 
-vapi_send_with_control_ping = """
-static inline vapi_error_e
-vapi_send_with_control_ping (vapi_ctx_t ctx, void *msg, u32 context)
-{
-  vapi_msg_control_ping *ping = vapi_alloc_control_ping (ctx);
-  if (!ping)
-    {
-      return VAPI_ENOMEM;
-    }
-  ping->header.context = context;
-  vapi_msg_control_ping_hton (ping);
-  return vapi_send2 (ctx, msg, ping);
-}
-"""
-
-
 def emit_definition(parser, json_file, emitted, o):
     if o in emitted:
         return
@@ -746,6 +730,8 @@ def gen_json_unified_header(parser, logger, j, io, name):
         print("")
         print("static inline vapi_error_e vapi_send_with_control_ping "
               "(vapi_ctx_t ctx, void * msg, u32 context);")
+    elif name == "vlib.api.vapi.h":
+        print("#include <vapi/memclnt.api.vapi.h>")
     else:
         print("#include <vapi/vlib.api.vapi.h>")
     print("")
@@ -775,7 +761,21 @@ def gen_json_unified_header(parser, logger, j, io, name):
     print("")
 
     if name == "vlib.api.vapi.h":
-        print("%s" % vapi_send_with_control_ping)
+        vapi_send_with_control_ping_function = """
+static inline vapi_error_e
+vapi_send_with_control_ping (vapi_ctx_t ctx, void *msg, u32 context)
+{
+  vapi_msg_control_ping *ping = vapi_alloc_control_ping (ctx);
+  if (!ping)
+    {
+      return VAPI_ENOMEM;
+    }
+  ping->header.context = context;
+  vapi_msg_control_ping_hton (ping);
+  return vapi_send2 (ctx, msg, ping);
+}
+"""
+        print("%s" % vapi_send_with_control_ping_function)
         print("")
 
     print("#ifdef __cplusplus")