diff options
Diffstat (limited to 'src/vnet/mpls/mpls_features.c')
-rw-r--r-- | src/vnet/mpls/mpls_features.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/vnet/mpls/mpls_features.c b/src/vnet/mpls/mpls_features.c index 5f07833b6a3..f59753723ab 100644 --- a/src/vnet/mpls/mpls_features.c +++ b/src/vnet/mpls/mpls_features.c @@ -17,6 +17,43 @@ #include <vnet/mpls/mpls.h> +static u8 * +format_mpls_drop_trace (u8 * s, va_list * args) +{ + CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *); + CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *); + + return s; +} + +static void +mpls_drop_trace (vlib_main_t * vm, + vlib_node_runtime_t * node, + vlib_frame_t * frame) +{ + u32 *from, n_left; + + n_left = frame->n_vectors; + from = vlib_frame_vector_args (frame); + + while (n_left >= 1) + { + vlib_buffer_t *b0; + u32 bi0; + + bi0 = from[0]; + + b0 = vlib_get_buffer (vm, bi0); + + if (b0->flags & VLIB_BUFFER_IS_TRACED) + { + vlib_add_trace (vm, node, b0, 0); + } + from += 1; + n_left -= 1; + } +} + always_inline uword mpls_terminate (vlib_main_t * vm, vlib_node_runtime_t * node, @@ -26,6 +63,9 @@ mpls_terminate (vlib_main_t * vm, u32 * buffers = vlib_frame_vector_args (frame); uword n_packets = frame->n_vectors; + if (node->flags & VLIB_NODE_FLAG_TRACE) + mpls_drop_trace (vm, node, frame); + vlib_error_drop_buffers (vm, node, buffers, /* stride */ 1, @@ -47,6 +87,7 @@ VLIB_NODE_FN (mpls_punt_node) (vlib_main_t * vm, VLIB_REGISTER_NODE (mpls_punt_node) = { .name = "mpls-punt", .vector_size = sizeof (u32), + .format_trace = format_mpls_drop_trace, .n_next_nodes = 1, .next_nodes = { @@ -64,6 +105,7 @@ VLIB_NODE_FN (mpls_drop_node) (vlib_main_t * vm, VLIB_REGISTER_NODE (mpls_drop_node) = { .name = "mpls-drop", .vector_size = sizeof (u32), + .format_trace = format_mpls_drop_trace, .n_next_nodes = 1, .next_nodes = { @@ -81,6 +123,7 @@ VLIB_NODE_FN (mpls_not_enabled_node) (vlib_main_t * vm, VLIB_REGISTER_NODE (mpls_not_enabled_node) = { .name = "mpls-not-enabled", .vector_size = sizeof (u32), + .format_trace = format_mpls_drop_trace, .n_next_nodes = 1, .next_nodes = { |