typedef struct
{
- int pcap_enable;
+ /* 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 vlib_main_t
u32 node_counts_per_main_loop[2];
/* Main loop hw / sw performance counters */
- void (*vlib_node_runtime_perf_counter_cb) (struct vlib_main_t *,
- u64 *, u64 *);
-
+ 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
/* Pcap dispatch trace main */
pcap_main_t dispatch_pcap_main;
uword dispatch_pcap_enable;
+ u32 *dispatch_buffer_trace_nodes;
u8 *pcap_buffer;
/* pcap rx / tx tracing */
- vnet_pcap_t pcap[VLIB_N_RX_TX];
-
- int pcap_enable;
- pcap_main_t pcap_main;
- u8 *pcap_filename;
- u32 pcap_sw_if_index;
- u32 pcap_pkts_to_capture;
+ vnet_pcap_t pcap;
/* Error handling. */
vlib_error_main_t error_main;
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;
#define VLIB_PCAP_MAJOR_VERSION 1
#define VLIB_PCAP_MINOR_VERSION 0
+typedef struct
+{
+ u8 *filename;
+ int enable;
+ int status;
+ 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 *);
+
#endif /* included_vlib_main_h */
/*