X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Fmain.h;h=c655560d08ce6188a2846758dcfb799a5e852021;hb=adef691a6f544c30c417a8f747688cfbf30de356;hp=5f78b7941a4f2bd9b6cbe4bbb30e1cb29bbe6c5d;hpb=8b60fb0fe6e29aac1847c0b381c0f84165b27b61;p=vpp.git diff --git a/src/vlib/main.h b/src/vlib/main.h index 5f78b7941a4..c655560d08c 100644 --- a/src/vlib/main.h +++ b/src/vlib/main.h @@ -47,7 +47,6 @@ #include #include #include -#include #include @@ -58,21 +57,6 @@ #define VLIB_ELOG_MAIN_LOOP 0 #endif -typedef struct -{ - /* Trace RX pkts */ - u8 pcap_rx_enable; - /* Trace TX pkts */ - u8 pcap_tx_enable; - /* Trace drop pkts */ - u8 pcap_drop_enable; - u8 pad1; - u32 max_bytes_per_pkt; - u32 pcap_sw_if_index; - pcap_main_t pcap_main; - u32 filter_classify_table_index; -} vnet_pcap_t; - typedef struct { u8 trace_filter_enable; @@ -168,9 +152,6 @@ typedef struct vlib_main_t /* Error marker to use when exiting main loop. */ clib_error_t *main_loop_error; - /* Name for e.g. syslog. */ - char *name; - /* Start of the heap. */ void *heap_base; @@ -189,25 +170,9 @@ typedef struct vlib_main_t /* Node graph main structure. */ vlib_node_main_t node_main; - /* Command line interface. */ - vlib_cli_main_t cli_main; - /* Packet trace buffer. */ vlib_trace_main_t trace_main; - /* Pcap dispatch trace main */ - pcap_main_t dispatch_pcap_main; - uword dispatch_pcap_enable; - uword dispatch_pcap_postmortem; - u32 *dispatch_buffer_trace_nodes; - u8 *pcap_buffer; - - /* pcap rx / tx tracing */ - vnet_pcap_t pcap; - - /* Packet trace capture filter */ - vlib_trace_filter_t trace_filter; - /* Error handling. */ vlib_error_main_t error_main; @@ -220,11 +185,10 @@ typedef struct vlib_main_t /* Stream index to use for distribution when MC is enabled. */ u32 mc_stream_index; - vlib_one_time_waiting_process_t *procs_waiting_for_mc_stream_join; + /* Hash table to record which init functions have been called. */ + uword *worker_init_functions_called; - /* Event logger. */ - elog_main_t elog_main; - u32 configured_elog_ring_size; + vlib_one_time_waiting_process_t *procs_waiting_for_mc_stream_join; /* Event logger trace flags */ int elog_trace_api_messages; @@ -245,22 +209,11 @@ typedef struct vlib_main_t /* Buffer of random data for various uses. */ clib_random_buffer_t random_buffer; - /* Hash table to record which init functions have been called. */ - uword *init_functions_called; - /* thread, cpu and numa_node indices */ u32 thread_index; u32 cpu_id; u32 numa_node; - /* List of init functions to call, setup by constructors */ - _vlib_init_function_list_elt_t *init_function_registrations; - _vlib_init_function_list_elt_t *worker_init_function_registrations; - _vlib_init_function_list_elt_t *main_loop_enter_function_registrations; - _vlib_init_function_list_elt_t *main_loop_exit_function_registrations; - _vlib_init_function_list_elt_t *api_init_function_registrations; - vlib_config_function_runtime_t *config_function_registrations; - /* control-plane API queue signal pending, length indication */ volatile u32 queue_signal_pending; volatile u32 api_queue_nonempty; @@ -277,15 +230,6 @@ typedef struct vlib_main_t /* debugging */ volatile int parked_at_barrier; - /* Attempt to do a post-mortem elog dump */ - int elog_post_mortem_dump; - - /* - * Need to call vlib_worker_thread_node_runtime_update before - * releasing worker thread barrier. Only valid in vlib_global_main. - */ - int need_vlib_worker_thread_node_runtime_update; - /* Dispatch loop time accounting */ u64 loops_this_reporting_interval; f64 loop_interval_end; @@ -327,8 +271,53 @@ typedef struct vlib_main_t #endif } vlib_main_t; +typedef struct vlib_global_main_t +{ + CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); + + /* Per-thread Mains */ + vlib_main_t **vlib_mains; + + /* Name for e.g. syslog. */ + char *name; + + /* post-mortem callbacks */ + void (**post_mortem_callbacks) (void); + + /* + * Need to call vlib_worker_thread_node_runtime_update before + * releasing worker thread barrier. + */ + int need_vlib_worker_thread_node_runtime_update; + + /* Command line interface. */ + vlib_cli_main_t cli_main; + + /* Node registrations added by constructors */ + vlib_node_registration_t *node_registrations; + + /* Event logger. */ + elog_main_t elog_main; + u32 configured_elog_ring_size; + + /* Packet trace capture filter */ + vlib_trace_filter_t trace_filter; + + /* List of init functions to call, setup by constructors */ + _vlib_init_function_list_elt_t *init_function_registrations; + _vlib_init_function_list_elt_t *main_loop_enter_function_registrations; + _vlib_init_function_list_elt_t *main_loop_exit_function_registrations; + _vlib_init_function_list_elt_t *worker_init_function_registrations; + _vlib_init_function_list_elt_t *api_init_function_registrations; + vlib_config_function_runtime_t *config_function_registrations; + + /* Hash table to record which init functions have been called. */ + uword *init_functions_called; + +} vlib_global_main_t; + /* Global main structure. */ -extern vlib_main_t vlib_global_main; +extern vlib_global_main_t vlib_global_main; void vlib_worker_loop (vlib_main_t * vm); @@ -467,6 +456,18 @@ always_inline void vlib_set_queue_signal_callback vm->queue_signal_callback = fp; } +always_inline void +vlib_main_init () +{ + vlib_global_main_t *vgm = &vlib_global_main; + vlib_main_t *vm; + + vgm->init_functions_called = hash_create (0, /* value bytes */ 0); + + vm = clib_mem_alloc_aligned (sizeof (*vm), CLIB_CACHE_LINE_BYTES); + vec_add1 (vgm->vlib_mains, vm); +} + /* Main routine. */ int vlib_main (vlib_main_t * vm, unformat_input_t * input); @@ -476,23 +477,8 @@ extern u8 **vlib_thread_stacks; /* Number of thread stacks that the application needs */ u32 vlib_app_num_thread_stacks_needed (void) __attribute__ ((weak)); -extern void vlib_node_sync_stats (vlib_main_t * vm, vlib_node_t * n); - -#define VLIB_PCAP_MAJOR_VERSION 1 -#define VLIB_PCAP_MINOR_VERSION 0 +void vlib_add_del_post_mortem_callback (void *cb, int is_add); -typedef struct -{ - u8 *filename; - int enable; - int status; - int post_mortem; - u32 packets_to_capture; - u32 buffer_trace_node_index; - u32 buffer_traces_to_capture; -} vlib_pcap_dispatch_trace_args_t; - -int vlib_pcap_dispatch_trace_configure (vlib_pcap_dispatch_trace_args_t *); vlib_main_t *vlib_get_main_not_inline (void); elog_main_t *vlib_get_elog_main_not_inline ();