#include <vlibapi/api.h>
#include <vlibmemory/api.h>
+#include <vppinfra/callback_data.h>
#include <vpp/app/version.h>
#include <stdbool.h>
mdata_main_t mdata_main;
-/** @file buffer metadata change tracker
+/** @file mdata.c
+ * buffer metadata change tracker
*/
static mdata_t mdata_none;
before_or_after: 0 => before, 1=> after
*/
static void
-mdata_trace_callback (vlib_main_t * vm, u64 * c0, u64 * c1,
- vlib_node_runtime_t * node,
- vlib_frame_t * frame, int before_or_after)
+mdata_trace_callback (vlib_node_runtime_perf_callback_data_t * data,
+ vlib_node_runtime_perf_callback_args_t * args)
{
int i;
mdata_main_t *mm = &mdata_main;
u32 n_left_from;
mdata_t *before, *modifies;
u8 *after;
+ vlib_main_t *vm = args->vm;
+ vlib_frame_t *frame = args->frame;
+ vlib_node_runtime_t *node = args->node;
+
+ if (PREDICT_FALSE (args->call_type == VLIB_NODE_RUNTIME_PERF_RESET))
+ return;
/* Input nodes don't have frames, etc. */
if (frame == 0)
vlib_get_buffers (vm, from, bufs, n_left_from);
b = bufs;
- if (before_or_after == 1 /* after */ )
+ if (args->call_type == VLIB_NODE_RUNTIME_PERF_AFTER)
goto after_pass;
/* Resize the per-thread "before" vector to cover the current frame */
if (vec_len (mmp->before_per_thread) == 0)
{
mdata_none.node_index = ~0;
- vec_validate (mmp->before_per_thread, vec_len (vlib_mains) - 1);
+ vec_validate (mmp->before_per_thread, vlib_get_n_threads () - 1);
}
/* Reset the per-node accumulator, see vec_validate_init_empty above */
vec_reset_length (mmp->modifies);
- for (i = 0; i < vec_len (vlib_mains); i++)
+ for (i = 0; i < vlib_get_n_threads (); i++)
{
- if (vlib_mains[i] == 0)
+ vlib_main_t *ovm = vlib_get_main_by_index (i);
+ if (ovm == 0)
continue;
- clib_callback_enable_disable
- (vlib_mains[i]->vlib_node_runtime_perf_counter_cbs,
- vlib_mains[i]->vlib_node_runtime_perf_counter_cb_tmp,
- vlib_mains[i]->worker_thread_main_loop_callback_lock,
- (void *) mdata_trace_callback, enable_disable);
+ clib_callback_data_enable_disable (
+ &ovm->vlib_node_runtime_perf_callbacks, mdata_trace_callback,
+ enable_disable);
}
return rv;
/*?
* This command enables or disables buffer metadata change tracking
*
- *@cliexpar
+ * @cliexpar
* To enable buffer metadata change tracking:
- *@cliexstart{buffer metadata tracking on}
+ * @cliexstart{buffer metadata tracking on}
* Tracking enabled
- *@cliexend
+ * @cliexend
*
- *@cliexstart{buffer metadata tracking off}
+ * @cliexstart{buffer metadata tracking off}
* Tracking disabled
- *@cliexend
+ * @cliexend
?*/
/* *INDENT-OFF* */
_(tcp.flags) \
_(snat.flags)
-#define foreach_opaque2_metadata_field \
-_(qos.bits) \
-_(qos.source) \
-_(loop_counter) \
-_(gbp.flags) \
-_(gbp.sclass) \
-_(gso_size) \
-_(gso_l4_hdr_sz) \
-_(pg_replay_timestamp)
+#define foreach_opaque2_metadata_field \
+ _ (qos.bits) \
+ _ (qos.source) \
+ _ (loop_counter) \
+ _ (gso_size) \
+ _ (gso_l4_hdr_sz)
static u8 *
format_buffer_metadata_changes (u8 * s, va_list * args)
/*?
* This command displays buffer metadata change information
- *@cliexpar
+ * @cliexpar
* How to display buffer metadata change information
- *@cliexstart{show buffer metadata}
+ * @cliexstart{show buffer metadata}
* ethernet-input: current_data current_length flags error
* vnet_buffer_t: l2_hdr_offset l3_hdr_offset
* vnet_buffer2_t: no changes
- *@cliexend
+ * @cliexend
?*/
/* *INDENT-OFF* */