Add vl_msg_api_get_message_length[_inline] 68/6668/10
authorDave Barach <dave@barachs.net>
Fri, 12 May 2017 15:59:25 +0000 (11:59 -0400)
committerDamjan Marion <dmarion.lists@gmail.com>
Wed, 17 May 2017 18:37:10 +0000 (18:37 +0000)
Change-Id: I6d86cf7966d51ec7a507bbb59c586adbfb45be05
Signed-off-by: Dave Barach <dave@barachs.net>
src/vlibapi/api.h
src/vlibapi/api_shared.c

index 7538050..3403e1c 100644 (file)
@@ -25,6 +25,7 @@
 #include <vlib/vlib.h>
 #include <vlibmemory/unix_shared_memory_queue.h>
 #include <vlib/unix/unix.h>
+#include <stddef.h>
 
 typedef enum
 {
@@ -280,6 +281,7 @@ u16 vl_msg_api_get_msg_ids (const char *name, int n);
 void vl_msg_api_add_msg_name_crc (api_main_t * am, const char *string,
                                  u32 id);
 u32 vl_api_get_msg_index (u8 * name_and_crc);
+u32 vl_msg_api_get_msg_length (void *msg_arg);
 
 /* node_serialize.c prototypes */
 u8 *vlib_node_serialize (vlib_node_main_t * nm, u8 * vector,
@@ -336,6 +338,15 @@ static void __vl_msg_api_add_##tag##_function_##x (void)                \
     _error = _f (ci);                                                   \
   })
 
+static inline u32
+vl_msg_api_get_msg_length_inline (void *msg_arg)
+{
+  u8 *msg = (u8 *) msg_arg;
+
+  msgbuf_t *header = (msgbuf_t *) (msg - offsetof (msgbuf_t, data));
+
+  return clib_net_to_host_u32 (header->data_len);
+}
 #endif /* included_api_h */
 
 /*
index 0817f38..5c1a994 100644 (file)
@@ -624,6 +624,12 @@ vl_msg_api_replay_handler (void *the_msg)
   /* do NOT free the message buffer... */
 }
 
+u32
+vl_msg_api_get_msg_length (void *msg_arg)
+{
+  return vl_msg_api_get_msg_length_inline (msg_arg);
+}
+
 /*
  * vl_msg_api_socket_handler
  */