tap: Move client registration check to top
[vpp.git] / src / vlib / trace.c
index cfc3bda..530598d 100644 (file)
@@ -75,14 +75,14 @@ vlib_trace_frame_buffers_only (vlib_main_t * vm,
       if (b0->flags & VLIB_BUFFER_IS_TRACED)
        {
          t0 = vlib_add_trace (vm, node, b0, n_buffer_data_bytes_in_trace);
-         clib_memcpy (t0, b0->data + b0->current_data,
-                      n_buffer_data_bytes_in_trace);
+         clib_memcpy_fast (t0, b0->data + b0->current_data,
+                           n_buffer_data_bytes_in_trace);
        }
       if (b1->flags & VLIB_BUFFER_IS_TRACED)
        {
          t1 = vlib_add_trace (vm, node, b1, n_buffer_data_bytes_in_trace);
-         clib_memcpy (t1, b1->data + b1->current_data,
-                      n_buffer_data_bytes_in_trace);
+         clib_memcpy_fast (t1, b1->data + b1->current_data,
+                           n_buffer_data_bytes_in_trace);
        }
       from += 2;
       n_left -= 2;
@@ -101,8 +101,8 @@ vlib_trace_frame_buffers_only (vlib_main_t * vm,
       if (b0->flags & VLIB_BUFFER_IS_TRACED)
        {
          t0 = vlib_add_trace (vm, node, b0, n_buffer_data_bytes_in_trace);
-         clib_memcpy (t0, b0->data + b0->current_data,
-                      n_buffer_data_bytes_in_trace);
+         clib_memcpy_fast (t0, b0->data + b0->current_data,
+                           n_buffer_data_bytes_in_trace);
        }
       from += 1;
       n_left -= 1;
@@ -131,7 +131,7 @@ clear_trace_buffer (void)
   /* *INDENT-ON* */
 }
 
-static u8 *
+u8 *
 format_vlib_trace (u8 * s, va_list * va)
 {
   vlib_main_t *vm = va_arg (*va, vlib_main_t *);
@@ -357,6 +357,7 @@ cli_add_trace_buffer (vlib_main_t * vm,
 {
   unformat_input_t _line_input, *line_input = &_line_input;
   vlib_trace_main_t *tm;
+  vlib_node_t *node;
   vlib_trace_node_t *tn;
   u32 node_index, add;
   u8 verbose = 0;
@@ -383,6 +384,17 @@ cli_add_trace_buffer (vlib_main_t * vm,
        }
     }
 
+  node = vlib_get_node (vm, node_index);
+
+  if ((node->flags & VLIB_NODE_FLAG_TRACE_SUPPORTED) == 0)
+    {
+      error = clib_error_create ("node '%U' doesn't support per-node "
+                                "tracing. There may be another way to "
+                                "initiate trace on this node.",
+                                format_vlib_node_name, vm, node_index);
+      goto done;
+    }
+
   /* *INDENT-OFF* */
   foreach_vlib_main ((
     {