X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlibmemory%2Fvlib_api.c;h=f9ed891f90ae72f070a8f1236f6bab8cc6ff4271;hb=1a19552eee24e447e6087de43a2eeb9250b8cae7;hp=e1a6bd18d554591edee229826500032e33446f5d;hpb=7adaa226eaa2401d6bb0dfd38a0d943c9645d7dc;p=vpp.git diff --git a/src/vlibmemory/vlib_api.c b/src/vlibmemory/vlib_api.c index e1a6bd18d55..f9ed891f90a 100644 --- a/src/vlibmemory/vlib_api.c +++ b/src/vlibmemory/vlib_api.c @@ -74,7 +74,7 @@ vl_api_get_first_msg_id_t_handler (vl_api_get_first_msg_id_t * mp) vl_api_get_first_msg_id_reply_t *rmp; vl_api_registration_t *regp; uword *p; - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); vl_api_msg_range_t *rp; u8 name[64]; u16 first_msg_id = ~0; @@ -108,7 +108,7 @@ out: void vl_api_api_versions_t_handler (vl_api_api_versions_t * mp) { - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); vl_api_api_versions_reply_t *rmp; vl_api_registration_t *reg; u32 nmsg = vec_len (am->api_version_list); @@ -185,7 +185,7 @@ static void send_one_plugin_msg_ids_msg (u8 * name, u16 first_msg_id, u16 last_msg_id) { vl_api_trace_plugin_msg_ids_t *mp; - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); vl_shmem_hdr_t *shmem_hdr = am->shmem_hdr; svm_queue_t *q; @@ -207,7 +207,7 @@ void vl_api_save_msg_table (void) { u8 *serialized_message_table; - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); u8 *chroot_file; int fd, rv; @@ -248,16 +248,24 @@ vl_api_save_msg_table (void) vec_free (serialized_message_table); } +clib_error_t *vat_builtin_main_init (vlib_main_t * vm) __attribute__ ((weak)); +clib_error_t * +vat_builtin_main_init (vlib_main_t * vm) +{ + return 0; +} + static uword vl_api_clnt_process (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * f) { + vlib_global_main_t *vgm = vlib_get_global_main (); int private_segment_rotor = 0, i, rv; vl_socket_args_for_process_t *a; vl_shmem_hdr_t *shm; svm_queue_t *q; clib_error_t *e; - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); f64 dead_client_scan_time; f64 sleep_time, start_time; f64 vector_rate; @@ -282,8 +290,12 @@ vl_api_clnt_process (vlib_main_t * vm, vlib_node_runtime_t * node, shm = am->shmem_hdr; q = shm->vl_input_queue; - e = vlib_call_init_exit_functions - (vm, &vm->api_init_function_registrations, 1 /* call_once */ ); + e = vlib_call_init_exit_functions (vm, &vgm->api_init_function_registrations, + 1 /* call_once */, 1 /* is_global */); + if (e) + clib_error_report (e); + + e = vat_builtin_main_init (vm); if (e) clib_error_report (e); @@ -319,7 +331,7 @@ vl_api_clnt_process (vlib_main_t * vm, vlib_node_runtime_t * node, * of the application to process the request, the client will * sit and wait for Godot... */ - vector_rate = vlib_last_vector_length_per_node (vm); + vector_rate = (f64) vlib_last_vectors_per_main_loop (vm); start_time = vlib_time_now (vm); while (1) { @@ -385,9 +397,16 @@ vl_api_clnt_process (vlib_main_t * vm, vlib_node_runtime_t * node, case SOCKET_READ_EVENT: for (i = 0; i < vec_len (event_data); i++) { + vl_api_registration_t *regp; + a = pool_elt_at_index (socket_main.process_args, event_data[i]); - vl_socket_process_api_msg (a->clib_file, a->regp, - (i8 *) a->data); + regp = vl_socket_get_registration (a->reg_index); + if (regp) + { + vl_socket_process_api_msg (regp, (i8 *) a->data); + a = pool_elt_at_index (socket_main.process_args, + event_data[i]); + } vec_free (a->data); pool_put (socket_main.process_args, a); } @@ -418,6 +437,7 @@ VLIB_REGISTER_NODE (vl_api_clnt_node) = .type = VLIB_NODE_TYPE_PROCESS, .name = "api-rx-from-ring", .state = VLIB_NODE_STATE_DISABLED, + .process_log2_n_stack_bytes = 18, }; /* *INDENT-ON* */ @@ -542,7 +562,7 @@ vl_api_rpc_call_reply_t_handler (vl_api_rpc_call_reply_t * mp) void vl_api_send_pending_rpc_requests (vlib_main_t * vm) { - vlib_main_t *vm_global = &vlib_global_main; + vlib_main_t *vm_global = vlib_get_first_main (); ASSERT (vm != vm_global); @@ -557,7 +577,7 @@ vl_api_rpc_call_main_thread_inline (void *fp, u8 * data, u32 data_length, u8 force_rpc) { vl_api_rpc_call_t *mp; - vlib_main_t *vm_global = &vlib_global_main; + vlib_main_t *vm_global = vlib_get_first_main (); vlib_main_t *vm = vlib_get_main (); /* Main thread and not a forced RPC: call the function directly */ @@ -617,7 +637,7 @@ vl_api_force_rpc_call_main_thread (void *fp, u8 * data, u32 data_length) static void vl_api_trace_plugin_msg_ids_t_handler (vl_api_trace_plugin_msg_ids_t * mp) { - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); vl_api_msg_range_t *rp; uword *p; @@ -670,7 +690,7 @@ extern void *rpc_call_main_thread_cb_fn; static clib_error_t * rpc_api_hookup (vlib_main_t * vm) { - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); #define _(N,n) \ vl_msg_api_set_handlers(VL_API_##N, #n, \ vl_api_##n##_t_handler, \