summaryrefslogtreecommitdiffstats
path: root/vlib-api/vlibapi
diff options
context:
space:
mode:
Diffstat (limited to 'vlib-api/vlibapi')
-rw-r--r--vlib-api/vlibapi/api.h21
-rw-r--r--vlib-api/vlibapi/api_shared.c19
2 files changed, 35 insertions, 5 deletions
diff --git a/vlib-api/vlibapi/api.h b/vlib-api/vlibapi/api.h
index a932bf42177..10ca443b434 100644
--- a/vlib-api/vlibapi/api.h
+++ b/vlib-api/vlibapi/api.h
@@ -87,11 +87,14 @@ typedef struct
u8 **traces;
} vl_api_trace_t;
-typedef CLIB_PACKED (struct
- {
- u8 endian; u8 wrapped;
- u32 nitems;
- }) vl_api_trace_file_header_t;
+/* *INDENT-OFF* */
+typedef CLIB_PACKED
+(struct
+ {
+ u8 endian; u8 wrapped;
+ u32 nitems;
+}) vl_api_trace_file_header_t;
+/* *INDENT-ON* */
typedef enum
{
@@ -132,6 +135,8 @@ typedef struct
struct vl_shmem_hdr_ *shmem_hdr;
vl_api_registration_t **vl_clients;
+ u8 *serialized_message_table_in_shmem;
+
/* For plugin msg allocator */
u16 first_available_msg_id;
@@ -178,6 +183,9 @@ typedef struct
i32 vlib_signal;
+ /* client side message index hash table */
+ uword *msg_index_by_name_and_crc;
+
char *region_name;
char *root_path;
} api_main_t;
@@ -188,6 +196,7 @@ typedef struct
{
int id;
char *name;
+ u32 crc;
void *handler;
void *cleanup;
void *endian;
@@ -242,6 +251,8 @@ int vl_msg_api_pd_handler (void *mp, int rv);
void vl_msg_api_set_first_available_msg_id (u16 first_avail);
u16 vl_msg_api_get_msg_ids (char *name, int n);
+void vl_msg_api_add_msg_name_crc (api_main_t * am, char *string, u32 id);
+u32 vl_api_get_msg_index (u8 * name_and_crc);
/* node_serialize.c prototypes */
u8 *vlib_node_serialize (vlib_node_main_t * nm, u8 * vector,
diff --git a/vlib-api/vlibapi/api_shared.c b/vlib-api/vlibapi/api_shared.c
index 511f693849d..2b2d81c2735 100644
--- a/vlib-api/vlibapi/api_shared.c
+++ b/vlib-api/vlibapi/api_shared.c
@@ -1312,6 +1312,25 @@ vl_msg_api_get_msg_ids (char *name, int n)
return rv;
}
+void
+vl_msg_api_add_msg_name_crc (api_main_t * am, char *string, u32 id)
+{
+ uword *p;
+
+ if (am->msg_index_by_name_and_crc == 0)
+ am->msg_index_by_name_and_crc = hash_create_string (0, sizeof (uword));
+
+ p = hash_get_mem (am->msg_index_by_name_and_crc, string);
+ if (p)
+ {
+ clib_warning ("attempt to redefine '%s' ignored...", string);
+ return;
+ }
+
+ hash_set_mem (am->msg_index_by_name_and_crc, string, id);
+}
+
+
/*
* fd.io coding-style-patch-verification: ON
*