vlib: fix coverity warning / real bug
[vpp.git] / src / vlib / main.c
index 2df935a..4223474 100644 (file)
@@ -52,8 +52,6 @@ CJ_GLOBAL_LOG_PROTOTYPE;
    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)
 {
@@ -1006,14 +1004,17 @@ format_buffer_metadata (u8 * s, va_list * args)
   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;
 }
 
@@ -1025,7 +1026,7 @@ dispatch_pcap_trace (vlib_main_t * vm,
 {
   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;
@@ -1376,6 +1377,12 @@ dispatch_pending_node (vlib_main_t * vm, uword pending_frame_index,
                                   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);
 
@@ -1915,7 +1922,6 @@ vlib_main_or_worker_loop (vlib_main_t * vm, int 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 ();
@@ -2240,12 +2246,16 @@ vlib_pcap_dispatch_trace_configure (vlib_pcap_dispatch_trace_args_t * a)
       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)
        {
@@ -2254,7 +2264,7 @@ vlib_pcap_dispatch_trace_configure (vlib_pcap_dispatch_trace_args_t * a)
          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)