speculative vector enqueues which overflow vector data in next frame. */
#define VLIB_FRAME_SIZE_ALLOC (VLIB_FRAME_SIZE + 4)
-u32 wraps;
-
always_inline u32
vlib_frame_bytes (u32 n_scalar_bytes, u32 n_vector_bytes)
{
s = format (s, "flags: %U\n", format_vnet_buffer_flags, b);
s = format (s, "current_data: %d, current_length: %d\n",
(i32) (b->current_data), (i32) (b->current_length));
- s = format (s, "current_config_index: %d, flow_id: %x, next_buffer: %x\n",
- b->current_config_index, b->flow_id, b->next_buffer);
- s = format (s, "error: %d, ref_count: %d, buffer_pool_index: %d\n",
- (u32) (b->error), (u32) (b->ref_count),
- (u32) (b->buffer_pool_index));
- s = format (s,
- "trace_handle: 0x%x, len_not_first_buf: %d\n",
- b->trace_handle, b->total_length_not_including_first_buffer);
+ s = format
+ (s,
+ "current_config_index/punt_reason: %d, flow_id: %x, next_buffer: %x\n",
+ b->current_config_index, b->flow_id, b->next_buffer);
+ s =
+ format (s, "error: %d, ref_count: %d, buffer_pool_index: %d\n",
+ (u32) (b->error), (u32) (b->ref_count),
+ (u32) (b->buffer_pool_index));
+ s =
+ format (s, "trace_handle: 0x%x, len_not_first_buf: %d\n", b->trace_handle,
+ b->total_length_not_including_first_buffer);
return s;
}
{
int i;
vlib_buffer_t *bufs[VLIB_FRAME_SIZE], **bufp, *b;
- pcap_main_t *pm = &vm->dispatch_pcap_main;
+ pcap_main_t *pm = &vlib_global_main.dispatch_pcap_main;
vlib_trace_main_t *tm = &vm->trace_main;
u32 capture_size;
vlib_node_t *n;
VLIB_NODE_TYPE_INTERNAL,
VLIB_NODE_STATE_POLLING,
f, last_time_stamp);
+ /* Internal node vector-rate accounting, for summary stats */
+ vm->internal_node_vectors += f->n_vectors;
+ vm->internal_node_calls++;
+ vm->internal_node_last_vectors_per_main_loop =
+ (f->n_vectors > vm->internal_node_last_vectors_per_main_loop) ?
+ f->n_vectors : vm->internal_node_last_vectors_per_main_loop;
f->frame_flags &= ~(VLIB_FRAME_PENDING | VLIB_FRAME_NO_APPEND);
vm->cpu_id = clib_get_current_cpu_id ();
vm->numa_node = clib_get_current_numa_node ();
+ os_set_numa_index (vm->numa_node);
/* Start all processes. */
if (is_main)
}
}
vlib_increment_main_loop_counter (vm);
-
/* Record time stamp in case there are no enabled nodes and above
calls do not update time stamp. */
cpu_time_now = clib_cpu_time_now ();
vm->queue_signal_callback = dummy_queue_signal_callback;
- clib_time_init (&vm->clib_time);
-
/* Turn on event log. */
if (!vm->elog_main.event_ring_size)
vm->elog_main.event_ring_size = 128 << 10;
return -81; /* VNET_API_ERROR_VALUE_EXIST */
/* Change number of packets to capture while capturing */
- if (vm->dispatch_pcap_enable
+ if (vm->dispatch_pcap_enable && a->enable
&& (pm->n_packets_to_capture != a->packets_to_capture))
return -8; /* VNET_API_ERROR_INVALID_VALUE_2 */
pm->file_name = (char *) a->filename;
pm->n_packets_captured = 0;
pm->packet_type = PCAP_PACKET_TYPE_vpp;
- vm->dispatch_pcap_enable = 1;
pm->n_packets_to_capture = a->packets_to_capture;
+ /* *INDENT-OFF* */
+ foreach_vlib_main (({this_vlib_main->dispatch_pcap_enable = 1;}));
+ /* *INDENT-ON* */
}
else
{
- vm->dispatch_pcap_enable = 0;
+ /* *INDENT-OFF* */
+ foreach_vlib_main (({this_vlib_main->dispatch_pcap_enable = 0;}));
+ /* *INDENT-ON* */
vec_reset_length (vm->dispatch_buffer_trace_nodes);
if (pm->n_packets_captured)
{
vlib_cli_output (vm, "Write %d packets to %s, and stop capture...",
pm->n_packets_captured, pm->file_name);
error = pcap_write (pm);
- if (pm->file_descriptor >= 0)
+ if (pm->flags & PCAP_MAIN_INIT_DONE)
pcap_close (pm);
/* Report I/O errors... */
if (error)