#include <vlib/vlib.h>
#include <vlib/threads.h>
+#include <vnet/classify/vnet_classify.h>
u8 *vnet_trace_placeholder;
}
/* Free up all trace buffer memory. */
-always_inline void
+void
clear_trace_buffer (void)
{
int i;
*/
n_accepted = 0;
/* *INDENT-OFF* */
- pool_foreach (h, tm->trace_buffer_pool,
- ({
+ pool_foreach (h, tm->trace_buffer_pool)
+ {
accept = filter_accept(tm, h[0]);
if ((n_accepted == tm->filter_count) || !accept)
vec_add1 (traces_to_remove, h);
else
n_accepted++;
- }));
+ }
/* *INDENT-ON* */
/* remove all traces that we don't want to keep */
trace_apply_filter(this_vlib_main);
traces = 0;
- pool_foreach (h, tm->trace_buffer_pool,
- ({
+ pool_foreach (h, tm->trace_buffer_pool)
+ {
vec_add1 (traces, h[0]);
- }));
+ }
if (vec_len (traces) == 0)
{
tm->trace_enable = 1;
}));
/* *INDENT-ON* */
+
+ vlib_enable_disable_pkt_trace_filter (! !filter);
}
static clib_error_t *
goto done;
}
- if (filter)
+ u32 filter_table = classify_get_trace_chain ();
+ if (filter && filter_table == ~0)
{
- if (vlib_enable_disable_pkt_trace_filter (1 /* enable */ ))
- {
- error = clib_error_create ("No packet trace filter configured...");
- goto done;
- }
+ error = clib_error_create ("No packet trace filter configured...");
+ goto done;
}
trace_update_capture_options (add, node_index, filter, verbose);