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
{
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;
/* vector of message ranges */
vl_api_msg_range_t *msg_ranges;
+ /* uid for the api shared memory region */
+ int api_uid;
/* gid for the api shared memory region */
int api_gid;
- int api_uid;
+
+ /* base virtual address for global VM region */
+ u64 global_baseva;
+
+ /* size of the global VM region */
+ u64 global_size;
+
+ /* size of the API region */
+ u64 api_size;
+
+ /* size of the global VM private mheap */
+ u64 global_pvt_heap_size;
+
+ /* size of the api private mheap */
+ u64 api_pvt_heap_size;
/* Client-only data structures */
unix_shared_memory_queue_t *vl_input_queue;
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;
-api_main_t api_main;
+extern api_main_t api_main;
typedef struct
{
int id;
char *name;
+ u32 crc;
void *handler;
void *cleanup;
void *endian;
int is_mp_safe;
} vl_msg_api_msg_config_t;
+typedef struct msgbuf_
+{
+ unix_shared_memory_queue_t *q;
+ u32 data_len;
+ u32 pad;
+ u8 data[0];
+} msgbuf_t;
+
/* api_shared.c prototypes */
int vl_msg_api_rx_trace_enabled (api_main_t * am);
int vl_msg_api_tx_trace_enabled (api_main_t * am);
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,