vlib: fix trace number accounting
When using classifier to filter traces, not all packets will be traced.
In that case, we should only count traced packets.
Type: fix
Change-Id: I87d1e217b580ebff8c6ade7860eb43950420ae78
Signed-off-by: Benoît Ganne <bganne@cisco.com>
diff --git a/src/vnet/interface_output.c b/src/vnet/interface_output.c
index 52c07ac..65bc4a4 100644
--- a/src/vnet/interface_output.c
+++ b/src/vnet/interface_output.c
@@ -800,19 +800,21 @@
node->flags |= VLIB_NODE_FLAG_TRACE;
while (n_trace && n_left)
{
- vlib_trace_buffer (vm, node, 0 /* next_index */ ,
- b[0], 0 /* follow chain */ );
- /*
- * Here we have a wireshark dissector problem.
- * Packets may be well-formed, or not. We
- * must not blow chunks in any case.
- *
- * Try to produce trace records which will help
- * folks understand what's going on.
- */
- drop_catchup_trace (vm, node, b[0]);
-
- n_trace--;
+ if (PREDICT_TRUE
+ (vlib_trace_buffer (vm, node, 0 /* next_index */ , b[0],
+ 0 /* follow chain */ )))
+ {
+ /*
+ * Here we have a wireshark dissector problem.
+ * Packets may be well-formed, or not. We
+ * must not blow chunks in any case.
+ *
+ * Try to produce trace records which will help
+ * folks understand what's going on.
+ */
+ drop_catchup_trace (vm, node, b[0]);
+ n_trace--;
+ }
n_left--;
b++;
}