X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Fmain.h;h=dd28cb85e22c78773dd420978ed2e9229d62293c;hb=8ed2d524aa401a89547a1e059528f8a34bb8895f;hp=1cf8fe188b1a9dc63145c03f18e4e9fee67a0638;hpb=f6c68d74eca9038516986254846de60a4f7c02ae;p=vpp.git diff --git a/src/vlib/main.h b/src/vlib/main.h index 1cf8fe188b1..dd28cb85e22 100644 --- a/src/vlib/main.h +++ b/src/vlib/main.h @@ -47,6 +47,7 @@ #include #include #include +#include #include @@ -57,11 +58,21 @@ #define VLIB_ELOG_MAIN_LOOP 0 #endif +typedef struct +{ + int pcap_enable; + u32 pcap_sw_if_index; + pcap_main_t pcap_main; +} vnet_pcap_t; + typedef struct vlib_main_t { CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); /* Instruction level timing state. */ clib_time_t clib_time; + /* Offset from main thread time */ + f64 time_offset; + f64 time_last_barrier_release; /* Time stamp of last node dispatch. */ u64 cpu_time_last_node_dispatch; @@ -83,10 +94,14 @@ typedef struct vlib_main_t u32 node_counts_per_main_loop[2]; /* Main loop hw / sw performance counters */ - u64 (*vlib_node_runtime_perf_counter_cb) (struct vlib_main_t *); - int perf_counter_id; - int perf_counter_fd; - + void (**vlib_node_runtime_perf_counter_cbs) (struct vlib_main_t *, + u64 *, u64 *, + vlib_node_runtime_t *, + vlib_frame_t *, int); + void (**vlib_node_runtime_perf_counter_cb_tmp) (struct vlib_main_t *, + u64 *, u64 *, + vlib_node_runtime_t *, + vlib_frame_t *, int); /* Every so often we switch to the next counter. */ #define VLIB_LOG2_MAIN_LOOPS_PER_STATS_UPDATE 7 @@ -115,8 +130,8 @@ typedef struct vlib_main_t /* Size of the heap */ uword heap_size; - /* Pool of buffer free lists. */ - vlib_buffer_free_list_t *buffer_free_list_pool; + /* buffer main structure. */ + vlib_buffer_main_t *buffer_main; /* physical memory main structure. */ vlib_physmem_main_t physmem_main; @@ -130,6 +145,14 @@ typedef struct vlib_main_t /* Packet trace buffer. */ vlib_trace_main_t trace_main; + /* Pcap dispatch trace main */ + pcap_main_t dispatch_pcap_main; + uword dispatch_pcap_enable; + u8 *pcap_buffer; + + /* pcap rx / tx tracing */ + vnet_pcap_t pcap[VLIB_N_RX_TX]; + /* Error handling. */ vlib_error_main_t error_main; @@ -150,6 +173,9 @@ typedef struct vlib_main_t /* Event logger trace flags */ int elog_trace_api_messages; int elog_trace_cli_commands; + int elog_trace_graph_dispatch; + int elog_trace_graph_circuit; + u32 elog_trace_graph_circuit_node_index; /* Node call and return event types. */ elog_event_type_t *node_call_elog_event_types; @@ -166,8 +192,10 @@ typedef struct vlib_main_t /* Hash table to record which init functions have been called. */ uword *init_functions_called; - /* to compare with node runtime */ + /* 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; @@ -184,7 +212,10 @@ typedef struct vlib_main_t u8 **argv; /* Top of (worker) dispatch loop callback */ - volatile void (*worker_thread_main_loop_callback) (struct vlib_main_t *); + void (**volatile worker_thread_main_loop_callbacks) (struct vlib_main_t *); + void (**volatile worker_thread_main_loop_callback_tmp) + (struct vlib_main_t *); + clib_spinlock_t worker_thread_main_loop_callback_lock; /* debugging */ volatile int parked_at_barrier; @@ -207,6 +238,9 @@ typedef struct vlib_main_t /* Earliest barrier can be closed again */ f64 barrier_no_close_before; + /* Need to check the frame queues */ + volatile uword check_frame_queues; + /* RPC requests, main thread only */ uword *pending_rpc_requests; uword *processing_rpc_requests; @@ -222,7 +256,7 @@ void vlib_worker_loop (vlib_main_t * vm); always_inline f64 vlib_time_now (vlib_main_t * vm) { - return clib_time_now (&vm->clib_time); + return clib_time_now (&vm->clib_time) + vm->time_offset; } always_inline f64 @@ -366,6 +400,9 @@ 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 + #endif /* included_vlib_main_h */ /*