vlib: only dump 1st buffer in chain by default

Several nodes include buffers in their traces, but only the 1st. When
formatting the trace we must not try to iterate through all chained
buffers.
Default to display only the 1st buffer.

Type: fix

Change-Id: Ib3c668bbf4ab70ae68eba2ac402c7b7329825b70
Signed-off-by: Benoît Ganne <bganne@cisco.com>
This commit is contained in:
Benoît Ganne
2019-10-21 15:13:54 +02:00
committed by Damjan Marion
parent c520fe7ab9
commit 4354317bf3
5 changed files with 17 additions and 6 deletions

View File

@ -92,7 +92,7 @@ vlib_buffer_length_in_chain_slow_path (vlib_main_t * vm,
}
u8 *
format_vlib_buffer (u8 * s, va_list * args)
format_vlib_buffer_no_chain (u8 * s, va_list * args)
{
vlib_buffer_t *b = va_arg (*args, vlib_buffer_t *);
u32 indent = format_get_indent (s);
@ -118,9 +118,20 @@ format_vlib_buffer (u8 * s, va_list * args)
s = format (s, "\n%U%v", format_white_space, indent, a);
vec_free (a);
return s;
}
u8 *
format_vlib_buffer (u8 * s, va_list * args)
{
vlib_main_t *vm = vlib_get_main ();
vlib_buffer_t *b = va_arg (*args, vlib_buffer_t *);
u32 indent = format_get_indent (s);
s = format (s, "%U", format_vlib_buffer_no_chain, b);
while (b->flags & VLIB_BUFFER_NEXT_PRESENT)
{
vlib_main_t *vm = vlib_get_main ();
u32 next_buffer = b->next_buffer;
b = vlib_get_buffer (vm, next_buffer);