API refactoring : netmap
[vpp.git] / vlib-api / vlibapi / api.h
index 9d885c1..6274533 100644 (file)
@@ -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;
 
@@ -141,9 +146,25 @@ typedef struct
   /* 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;
@@ -162,16 +183,20 @@ 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;
 
-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;
@@ -183,6 +208,14 @@ typedef struct
   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);
@@ -226,6 +259,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,