return s;
}
-static void
+static int
pg_input_trace (pg_main_t * pg,
vlib_node_runtime_t * node, u32 stream_index, u32 next_index,
- u32 * buffers, u32 n_buffers)
+ u32 * buffers, const u32 n_buffers, const u32 n_trace)
{
vlib_main_t *vm = vlib_get_main ();
u32 *b, n_left;
+ u32 n_trace0 = 0, n_trace1 = 0;
- n_left = n_buffers;
+ n_left = clib_min (n_buffers, n_trace);
b = buffers;
while (n_left >= 2)
b0 = vlib_get_buffer (vm, bi0);
b1 = vlib_get_buffer (vm, bi1);
- vlib_trace_buffer (vm, node, next_index, b0, /* follow_chain */ 1);
- vlib_trace_buffer (vm, node, next_index, b1, /* follow_chain */ 1);
+ n_trace0 +=
+ vlib_trace_buffer (vm, node, next_index, b0, /* follow_chain */ 1);
+ n_trace1 +=
+ vlib_trace_buffer (vm, node, next_index, b1, /* follow_chain */ 1);
t0 = vlib_add_trace (vm, node, b0, sizeof (t0[0]));
t1 = vlib_add_trace (vm, node, b1, sizeof (t1[0]));
b0 = vlib_get_buffer (vm, bi0);
- vlib_trace_buffer (vm, node, next_index, b0, /* follow_chain */ 1);
+ n_trace0 +=
+ vlib_trace_buffer (vm, node, next_index, b0, /* follow_chain */ 1);
t0 = vlib_add_trace (vm, node, b0, sizeof (t0[0]));
t0->stream_index = stream_index;
clib_memcpy_fast (t0->buffer.pre_data, b0->data,
sizeof (t0->buffer.pre_data));
}
+
+ return n_trace - n_trace0 - n_trace1;
}
static_always_inline void
u8 feature_arc_index = fm->device_input_feature_arc_index;
cm = &fm->feature_config_mains[feature_arc_index];
u32 current_config_index = ~(u32) 0;
- pg_interface_t *pi = pool_elt_at_index (pg->interfaces, s->pg_if_index);
+ pg_interface_t *pi;
int i;
+ pi = pool_elt_at_index (pg->interfaces,
+ pg->if_id_by_sw_if_index[s->sw_if_index[VLIB_RX]]);
bi0 = s->buffer_indices;
n_packets_in_fifo = pg_stream_fill (pg, s, n_packets_to_generate);
}
n_trace = vlib_get_trace_count (vm, node);
- if (n_trace > 0)
+ if (PREDICT_FALSE (n_trace > 0))
{
- u32 n = clib_min (n_trace, n_this_frame);
- pg_input_trace (pg, node, s - pg->streams, next_index, to_next, n);
- vlib_set_trace_count (vm, node, n_trace - n);
+ n_trace =
+ pg_input_trace (pg, node, s - pg->streams, next_index, to_next,
+ n_this_frame, n_trace);
+ vlib_set_trace_count (vm, node, n_trace);
}
n_packets_to_generate -= n_this_frame;
n_packets_generated += n_this_frame;
worker_index = vlib_get_current_worker_index ();
/* *INDENT-OFF* */
- clib_bitmap_foreach (i, pg->enabled_streams[worker_index], ({
+ clib_bitmap_foreach (i, pg->enabled_streams[worker_index]) {
pg_stream_t *s = vec_elt_at_index (pg->streams, i);
n_packets += pg_input_stream (node, pg, s);
- }));
+ }
/* *INDENT-ON* */
return n_packets;
{
unformat_input_t _line_input, *line_input = &_line_input;
u32 sw_if_index = ~0;
- int is_enable;
+ int is_enable = 1;
if (!unformat_user (input, unformat_line_input, line_input))
return 0;