vlib: packet tracer support for pkt thread handoffs
[vpp.git] / src / vlib / threads.c
index 4e4d60a..9112538 100644 (file)
@@ -27,7 +27,6 @@
 
 DECLARE_CJ_GLOBAL_LOG;
 
-#define FRAME_QUEUE_NELTS 64
 
 u32
 vl (void *p)
@@ -1674,6 +1673,7 @@ vlib_frame_queue_dequeue (vlib_main_t * vm, vlib_frame_queue_main_t * fqm)
 
   while (1)
     {
+      vlib_buffer_t *b;
       if (fq->head == fq->tail)
        {
          fq->head_hint = fq->head;
@@ -1696,6 +1696,11 @@ vlib_frame_queue_dequeue (vlib_main_t * vm, vlib_frame_queue_main_t * fqm)
 
       f = vlib_get_frame_to_node (vm, fqm->node_index);
 
+      /* If the first vector is traced, set the frame trace flag */
+      b = vlib_get_buffer (vm, from[0]);
+      if (b->flags & VLIB_BUFFER_IS_TRACED)
+       f->frame_flags |= VLIB_NODE_FLAG_TRACE;
+
       to = vlib_frame_vector_args (f);
 
       n_left_to_node = elt->n_vectors;
@@ -1786,7 +1791,7 @@ vlib_frame_queue_main_init (u32 node_index, u32 frame_queue_nelts)
   int i;
 
   if (frame_queue_nelts == 0)
-    frame_queue_nelts = FRAME_QUEUE_NELTS;
+    frame_queue_nelts = FRAME_QUEUE_MAX_NELTS;
 
   ASSERT (frame_queue_nelts >= 8);