X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlibmemory%2Fmemclnt_api.c;h=d4106b10559a0917bc185a0aeb5e4508a592297e;hb=dfd426c2c83f69e95fe8dab5b4827825230f1d7c;hp=29858dd84975b0ef7e9baef47b41c14721c80f11;hpb=a2eb507055c9467997711548d63420216ab7b4e9;p=vpp.git diff --git a/src/vlibmemory/memclnt_api.c b/src/vlibmemory/memclnt_api.c index 29858dd8497..d4106b10559 100644 --- a/src/vlibmemory/memclnt_api.c +++ b/src/vlibmemory/memclnt_api.c @@ -145,10 +145,44 @@ vl_api_control_ping_t_handler (vl_api_control_ping_t *mp) ({ rmp->vpe_pid = ntohl (getpid ()); })); } +static void +vl_api_get_api_json_t_handler (vl_api_get_api_json_t *mp) +{ + vl_api_get_api_json_reply_t *rmp; + api_main_t *am = vlibapi_get_main (); + int rv = 0, n = 0; + u8 *s = 0; + + vl_api_registration_t *rp = + vl_api_client_index_to_registration (mp->client_index); + if (rp == 0) + return; + + s = format (s, "[\n"); + u8 **ptr; + vec_foreach (ptr, am->json_api_repr) + { + s = format (s, "%s,", ptr[0]); + } + s[vec_len (s) - 1] = ']'; // Replace last comma with a bracket + vec_terminate_c_string (s); + n = vec_len (s); + +done: + REPLY_MACRO3 (VL_API_GET_API_JSON_REPLY, n, ({ + if (rv == 0) + { + vl_api_c_string_to_api_string ((char *) s, &rmp->json); + } + })); + vec_free (s); +} + #define foreach_vlib_api_msg \ _ (GET_FIRST_MSG_ID, get_first_msg_id) \ _ (API_VERSIONS, api_versions) \ - _ (CONTROL_PING, control_ping) + _ (CONTROL_PING, control_ping) \ + _ (GET_API_JSON, get_api_json) /* * vl_api_init @@ -190,6 +224,9 @@ vlib_api_init (void) foreach_vlib_api_msg; #undef _ + /* Mark messages as mp safe */ + vl_api_set_msg_thread_safe (am, VL_API_GET_FIRST_MSG_ID, 1); + vl_api_set_msg_thread_safe (am, VL_API_API_VERSIONS, 1); vl_api_set_msg_thread_safe (am, VL_API_CONTROL_PING, 1); vl_api_set_msg_thread_safe (am, VL_API_CONTROL_PING_REPLY, 1); @@ -575,19 +612,6 @@ vl_api_rpc_call_reply_t_handler (vl_api_rpc_call_reply_t *mp) clib_warning ("unimplemented"); } -void -vl_api_send_pending_rpc_requests (vlib_main_t *vm) -{ - vlib_main_t *vm_global = vlib_get_first_main (); - - ASSERT (vm != vm_global); - - clib_spinlock_lock_if_init (&vm_global->pending_rpc_lock); - vec_append (vm_global->pending_rpc_requests, vm->pending_rpc_requests); - vec_reset_length (vm->pending_rpc_requests); - clib_spinlock_unlock_if_init (&vm_global->pending_rpc_lock); -} - always_inline void vl_api_rpc_call_main_thread_inline (void *fp, u8 *data, u32 data_length, u8 force_rpc) @@ -726,6 +750,7 @@ rpc_api_hookup (vlib_main_t *vm) .id = VL_API_##N, \ .name = #n, \ .handler = vl_api_##n##_t_handler, \ + .endian = vl_api_##n##_t_endian, \ .format_fn = vl_api_##n##_t_format, \ .size = sizeof (vl_api_##n##_t), \ .traced = 1, \