+ ASSERT (vnet_trace_placeholder);
+
+ if (PREDICT_FALSE ((b->flags & VLIB_BUFFER_IS_TRACED) == 0))
+ return vnet_trace_placeholder;
+
+ if (PREDICT_FALSE (tm->add_trace_callback != 0))
+ {
+ return tm->add_trace_callback ((struct vlib_main_t *) vm,
+ (struct vlib_node_runtime_t *) r,
+ (struct vlib_buffer_t *) b,
+ n_data_bytes);
+ }
+ else if (PREDICT_FALSE (tm->trace_enable == 0))
+ {
+ ASSERT (vec_len (vnet_trace_placeholder) >= n_data_bytes + sizeof (*h));
+ return vnet_trace_placeholder;
+ }
+
+ /* Are we trying to trace a handoff case? */
+ if (PREDICT_FALSE (vlib_buffer_get_trace_thread (b) != vm->thread_index))
+ vlib_add_handoff_trace (vm, b);
+