Multi-thread enablement for the debug cli http server
Change-Id: Iec1f739fe24c722d0db6c10cc81b5e8333067ea1 Signed-off-by: Dave Barach <dbarach@cisco.com>
This commit is contained in:

committed by
Damjan Marion

parent
3335693cc1
commit
e5f1d27695
@ -401,6 +401,7 @@ session_queue_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
|
||||
u32 my_thread_index = vm->thread_index;
|
||||
int i, rv;
|
||||
f64 now = vlib_time_now (vm);
|
||||
void (*fp) (void *);
|
||||
|
||||
SESSION_EVT_DBG (SESSION_EVT_POLL_GAP_TRACK, smm, my_thread_index);
|
||||
|
||||
@ -496,6 +497,11 @@ skip_dequeue:
|
||||
app = application_get (s0->app_index);
|
||||
app->cb_fns.builtin_server_rx_callback (s0);
|
||||
break;
|
||||
case FIFO_EVENT_RPC:
|
||||
fp = e0->rpc_args.fp;
|
||||
(*fp) (e0->rpc_args.arg);
|
||||
break;
|
||||
|
||||
default:
|
||||
clib_warning ("unhandled event type %d", e0->event_type);
|
||||
}
|
||||
|
@ -32,7 +32,8 @@ typedef enum
|
||||
FIFO_EVENT_APP_TX,
|
||||
FIFO_EVENT_TIMEOUT,
|
||||
FIFO_EVENT_DISCONNECT,
|
||||
FIFO_EVENT_BUILTIN_RX
|
||||
FIFO_EVENT_BUILTIN_RX,
|
||||
FIFO_EVENT_RPC,
|
||||
} fifo_event_type_t;
|
||||
|
||||
#define foreach_session_input_error \
|
||||
@ -91,12 +92,19 @@ typedef enum
|
||||
SESSION_STATE_N_STATES,
|
||||
} stream_session_state_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
void *fp;
|
||||
void *arg;
|
||||
} rpc_args_t;
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
typedef CLIB_PACKED (struct {
|
||||
union
|
||||
{
|
||||
svm_fifo_t * fifo;
|
||||
u64 session_handle;
|
||||
rpc_args_t rpc_args;
|
||||
};
|
||||
u8 event_type;
|
||||
u16 event_id;
|
||||
|
@ -385,6 +385,13 @@ builtin_redirect_connect_callback (u32 client_index, void *mp)
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void
|
||||
alloc_http_process_callback (void *s_arg)
|
||||
{
|
||||
stream_session_t *s = (stream_session_t *) s_arg;
|
||||
alloc_http_process (s);
|
||||
}
|
||||
|
||||
static int
|
||||
http_server_rx_callback (stream_session_t * s)
|
||||
{
|
||||
@ -414,7 +421,19 @@ http_server_rx_callback (stream_session_t * s)
|
||||
/* send the command to a new/recycled vlib process */
|
||||
s->opaque[1] = (u64) vec_dup (hsm->rx_buf);
|
||||
|
||||
alloc_http_process (s);
|
||||
/* Send an RPC request via the thread-0 input node */
|
||||
if (vlib_get_thread_index () != 0)
|
||||
{
|
||||
session_fifo_event_t evt;
|
||||
evt.rpc_args.fp = alloc_http_process_callback;
|
||||
evt.rpc_args.arg = s;
|
||||
evt.event_type = FIFO_EVENT_RPC;
|
||||
unix_shared_memory_queue_add
|
||||
(session_manager_get_vpp_event_queue (0 /* main thread */ ),
|
||||
(u8 *) & evt, 0 /* do wait for mutex */ );
|
||||
}
|
||||
else
|
||||
alloc_http_process (s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user