From 5ecd5a5d159332a964dd840fcdabe5f8d3111b0e Mon Sep 17 00:00:00 2001 From: Dave Barach Date: Mon, 25 Feb 2019 15:27:28 -0500 Subject: Move pcap rx/tx trace code out of the dpdk plugin Moved code to the ethernet input node, and the interface output path(s). Since we no longer skip ethernet-input, there's no reason for device drivers to know anything about pcap rx tracing, etc. Change-Id: I08d32fb1b90cbee1bd4f609837d533e047b36fa4 Signed-off-by: Dave Barach --- src/vnet/ethernet/node.c | 59 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 17 deletions(-) (limited to 'src/vnet/ethernet') diff --git a/src/vnet/ethernet/node.c b/src/vnet/ethernet/node.c index 3264bdc03af..950a962217c 100755 --- a/src/vnet/ethernet/node.c +++ b/src/vnet/ethernet/node.c @@ -963,29 +963,54 @@ ethernet_input_trace (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * from_frame) { u32 *from, n_left; - if ((node->flags & VLIB_NODE_FLAG_TRACE) == 0) - return; + if (PREDICT_FALSE ((node->flags & VLIB_NODE_FLAG_TRACE) == 0)) + { + from = vlib_frame_vector_args (from_frame); + n_left = from_frame->n_vectors; - from = vlib_frame_vector_args (from_frame); - n_left = from_frame->n_vectors; + while (n_left) + { + ethernet_input_trace_t *t0; + vlib_buffer_t *b0 = vlib_get_buffer (vm, from[0]); - while (n_left) + if (b0->flags & VLIB_BUFFER_IS_TRACED) + { + t0 = vlib_add_trace (vm, node, b0, + sizeof (ethernet_input_trace_t)); + clib_memcpy_fast (t0->packet_data, b0->data + b0->current_data, + sizeof (t0->packet_data)); + t0->frame_flags = from_frame->flags; + clib_memcpy_fast (&t0->frame_data, + vlib_frame_scalar_args (from_frame), + sizeof (ethernet_input_frame_t)); + } + from += 1; + n_left -= 1; + } + } + + /* rx pcap capture if enabled */ + if (PREDICT_FALSE (vm->pcap[VLIB_RX].pcap_enable)) { - ethernet_input_trace_t *t0; - vlib_buffer_t *b0 = vlib_get_buffer (vm, from[0]); + u32 bi0; - if (b0->flags & VLIB_BUFFER_IS_TRACED) + from = vlib_frame_vector_args (from_frame); + n_left = from_frame->n_vectors; + while (n_left > 0) { - t0 = vlib_add_trace (vm, node, b0, sizeof (ethernet_input_trace_t)); - clib_memcpy_fast (t0->packet_data, b0->data + b0->current_data, - sizeof (t0->packet_data)); - t0->frame_flags = from_frame->flags; - clib_memcpy_fast (&t0->frame_data, - vlib_frame_scalar_args (from_frame), - sizeof (ethernet_input_frame_t)); + vlib_buffer_t *b0; + bi0 = from[0]; + from++; + b0 = vlib_get_buffer (vm, bi0); + + if (vm->pcap[VLIB_RX].pcap_sw_if_index == 0 || + vm->pcap[VLIB_RX].pcap_sw_if_index + == vnet_buffer (b0)->sw_if_index[VLIB_RX]) + { + pcap_add_buffer (&vm->pcap[VLIB_RX].pcap_main, vm, bi0, 512); + } + n_left--; } - from += 1; - n_left -= 1; } } -- cgit 1.2.3-korg