X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=blobdiff_plain;f=src%2Fvlibapi%2Fapi_common.h;h=a955636ba3f799a3b3e4c419f91f10212445b135;hp=0ea0943cb390caca174f4290c817ce6243df063f;hb=36217e3ca;hpb=b5a575b0924036378b6deb50ac8fe7de3380e18d diff --git a/src/vlibapi/api_common.h b/src/vlibapi/api_common.h index 0ea0943cb39..a955636ba3f 100644 --- a/src/vlibapi/api_common.h +++ b/src/vlibapi/api_common.h @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -57,6 +58,7 @@ typedef struct vl_api_registration_ f64 last_heard; int last_queue_head; int unanswered_pings; + int is_being_removed; /** shared memory only: pointer to client input queue */ svm_queue_t *vl_input_queue; @@ -127,11 +129,15 @@ typedef struct void *cleanup; /**< non-default message cleanup handler */ void *endian; /**< message endian function */ void *print; /**< message print function */ + void *print_json; /**< message print function (JSON format) */ + void *tojson; /**< binary to JSON convert function */ + void *fromjson; /**< JSON to binary convert function */ int size; /**< message size */ int traced; /**< is this message to be traced? */ int replay; /**< is this message to be replayed? */ int message_bounce; /**< do not free message after processing */ int is_mp_safe; /**< worker thread barrier required? */ + int is_autoendian; /**< endian conversion required? */ } vl_msg_api_msg_config_t; /** Message header structure */ @@ -171,11 +177,10 @@ void vl_msg_api_trace_only (void *the_msg); void vl_msg_api_cleanup_handler (void *the_msg); void vl_msg_api_replay_handler (void *the_msg); void vl_msg_api_socket_handler (void *the_msg); -void vl_msg_api_set_handlers (int msg_id, char *msg_name, - void *handler, - void *cleanup, - void *endian, - void *print, int msg_size, int traced); +void vl_msg_api_set_handlers (int msg_id, char *msg_name, void *handler, + void *cleanup, void *endian, void *print, + int msg_size, int traced, void *print_json, + void *tojson, void *fromjson); void vl_msg_api_clean_handlers (int msg_id); void vl_msg_api_config (vl_msg_api_msg_config_t *); void vl_msg_api_set_cleanup_handler (int msg_id, void *fp); @@ -223,7 +228,7 @@ typedef struct } api_version_t; /** API main structure, used by both vpp and binary API clients */ -typedef struct +typedef struct api_main_t { /** Message handler vector */ void (**msg_handlers) (void *); @@ -239,15 +244,30 @@ typedef struct /** Message print function vector */ void (**msg_print_handlers) (void *, void *); + /** Message print function vector in JSON */ + void (**msg_print_json_handlers) (void *, void *); + + /** Message convert function vector */ + cJSON *(**msg_tojson_handlers) (void *); + + /** Message convert function vector */ + void *(**msg_fromjson_handlers) (cJSON *, int *); + /** Message name vector */ const char **msg_names; + /** API message ID by name hash table */ + uword *msg_id_by_name; + /** Don't automatically free message buffer vetor */ u8 *message_bounce; /** Message is mp safe vector */ u8 *is_mp_safe; + /** Message requires us to do endian conversion */ + u8 *is_autoendian; + /** Allocator ring vectors (in shared memory) */ struct ring_alloc_ *arings; @@ -370,6 +390,12 @@ typedef struct elog_main_t *elog_main; int elog_trace_api_messages; + /** performance counter callback **/ + void (**perf_counter_cbs) + (struct api_main_t *, u32 id, int before_or_after); + void (**perf_counter_cbs_tmp) + (struct api_main_t *, u32 id, int before_or_after); + } api_main_t; extern __thread api_main_t *my_api_main;