u8 *name; /**< Client name */
+ /* Zombie apocalypse checking */
+ f64 last_heard;
+ int last_queue_head;
+ int unanswered_pings;
+
/** shared memory only: pointer to client input queue */
unix_shared_memory_queue_t *vl_input_queue;
+ svm_region_t *vlib_rp;
+ void *shmem_hdr;
/* socket server and client */
u32 clib_file_index; /**< Socket only: file index */
i8 *unprocessed_input; /**< Socket only: pending input */
u32 unprocessed_msg_length; /**< Socket only: unprocssed length */
u8 *output_vector; /**< Socket only: output vecto */
+ int *additional_fds_to_close;
/* socket client only */
u32 server_handle; /**< Socket client only: server handle */
vl_msg_api_init_function_t *f;
} _vl_msg_api_function_list_elt_t;
+typedef struct
+{
+ u32 major;
+ u32 minor;
+ u32 patch;
+ char name[64];
+} api_version_t;
+
/** API main structure, used by both vpp and binary API clients */
typedef struct
{
/** Current process PID */
int our_pid;
- /** Binary api segment descriptor */
+ /** Current binary api segment descriptor */
svm_region_t *vlib_rp;
+ /** Primary api segment descriptor */
+ svm_region_t *vlib_primary_rp;
+
/** Vector of all mapped shared-VM segments */
+ svm_region_t **vlib_private_rps;
svm_region_t **mapped_shmem_regions;
/** Binary API shared-memory segment header pointer */
/** client message index hash table */
uword *msg_index_by_name_and_crc;
+ /** api version list */
+ api_version_t *api_version_list;
+
/** Shared VM binary API region name */
const char *region_name;