From bfe4dfa7089b5d2c03aa607ab72abbcd840cbbce Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Fri, 3 Feb 2017 21:16:16 +0100 Subject: pg: add trace information for pg tx node Change-Id: I31730d58c34331f25f5b02cd065be94251f1302c Signed-off-by: Damjan Marion --- src/vnet/pg/output.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'src/vnet/pg/output.c') diff --git a/src/vnet/pg/output.c b/src/vnet/pg/output.c index 3d1f2660e20..ab57deefd24 100644 --- a/src/vnet/pg/output.c +++ b/src/vnet/pg/output.c @@ -37,6 +37,7 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#include #include #include #include @@ -56,19 +57,28 @@ pg_output (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) while (__sync_lock_test_and_set (pif->lockp, 1)) ; - if (pif->pcap_file_name != 0) + while (n_left > 0) { - while (n_left > 0) - { - n_left--; - u32 bi0 = buffers[0]; - buffers++; + n_left--; + u32 bi0 = buffers[0]; + vlib_buffer_t *b = vlib_get_buffer (vm, bi0); + buffers++; - pcap_add_buffer (&pif->pcap_main, vm, bi0, - ETHERNET_MAX_PACKET_BYTES); + if (b->flags & VLIB_BUFFER_IS_TRACED) + { + pg_output_trace_t *t = vlib_add_trace (vm, node, b, sizeof (*t)); + t->buffer_index = bi0; + clib_memcpy (&t->buffer, b, sizeof (b[0]) - sizeof (b->pre_data)); + clib_memcpy (t->buffer.pre_data, b->data + b->current_data, + sizeof (t->buffer.pre_data)); } - pcap_write (&pif->pcap_main); + + if (pif->pcap_file_name != 0) + pcap_add_buffer (&pif->pcap_main, vm, bi0, ETHERNET_MAX_PACKET_BYTES); } + if (pif->pcap_file_name != 0) + pcap_write (&pif->pcap_main); + vlib_buffer_free (vm, vlib_frame_args (frame), n_buffers); if (PREDICT_FALSE (pif->lockp != 0)) -- cgit 1.2.3-korg