vlib_trace_main_t * tm;
vlib_trace_node_t * tn;
u32 node_index, add;
+ u8 verbose = 0;
- if (unformat (input, "%U %d", unformat_vlib_node, vm, &node_index, &add))
- ;
- else
- return clib_error_create ("expected NODE COUNT, got `%U'",
- format_unformat_error, input);
+ while (unformat_check_input(input) != (uword)UNFORMAT_END_OF_INPUT)
+ {
+ if (unformat (input, "%U %d", unformat_vlib_node, vm, &node_index, &add))
+ ;
+ else if (unformat (input, "verbose"))
+ verbose = 1;
+ else
+ return clib_error_create ("expected NODE COUNT, got `%U'",
+ format_unformat_error, input);
+ }
foreach_vlib_main (
({
tm = &this_vlib_main->trace_main;
tm->trace_active_hint = 1;
+ tm->verbose = verbose;
oldheap = clib_mem_set_heap (this_vlib_main->heap_base);
format_white_space, indent,
format_dpdk_rte_mbuf, &t->mb);
#endif /* RTE_LIBRTE_MBUF_EXT_RX_OLFLAGS */
+ if (vm->trace_main.verbose)
+ {
+ s = format (s, "\n%UPacket Dump%s", format_white_space, indent + 2,
+ t->mb.data_len > sizeof(t->data) ? " (truncated)": "");
+ s = format (s, "\n%U%U", format_white_space, indent + 4,
+ format_hexdump, &t->data,
+ t->mb.data_len > sizeof(t->data) ? sizeof(t->data) : t->mb.data_len);
+ }
f = node->format_buffer;
if (!f)
f = format_hex_bytes;
uword indent = format_get_indent (s) + 2;
s = format (s, "PKT MBUF: port %d, nb_segs %d, pkt_len %d"
- "\n%Ubuf_len %d, data_len %d, ol_flags 0x%x,"
+ "\n%Ubuf_len %d, data_len %d, ol_flags 0x%x, data_off %d"
"\n%Upacket_type 0x%x",
mb->port, mb->nb_segs, mb->pkt_len,
format_white_space, indent,
- mb->buf_len, mb->data_len, mb->ol_flags,
+ mb->buf_len, mb->data_len, mb->ol_flags, mb->data_off,
format_white_space, indent,
mb->packet_type);
clib_memcpy (&t0->mb, mb, sizeof (t0->mb));
clib_memcpy (&t0->buffer, b0, sizeof (b0[0]) - sizeof (b0->pre_data));
clib_memcpy (t0->buffer.pre_data, b0->data, sizeof (t0->buffer.pre_data));
+ clib_memcpy (&t0->data, mb->buf_addr + mb->data_off, sizeof (t0->data));
#ifdef RTE_LIBRTE_MBUF_EXT_RX_OLFLAGS
/*