From 9b309b61d2c9c8780d94d09f706f5ecd9b808c62 Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Wed, 6 Mar 2019 08:07:34 -0800 Subject: BIER: trace then drop. MPLS: trace the drops Change-Id: I952e6aec6487270a79c4d92cfe828cc55d42d536 Signed-off-by: Neale Ranns --- src/vnet/bier/bier_drop.c | 6 +++--- src/vnet/mpls/mpls_features.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/vnet/bier/bier_drop.c b/src/vnet/bier/bier_drop.c index da6d5668c7a..fa70841c1fc 100644 --- a/src/vnet/bier/bier_drop.c +++ b/src/vnet/bier/bier_drop.c @@ -62,6 +62,9 @@ bier_drop (vlib_main_t * vm, u32 *buffers = vlib_frame_vector_args (frame); uword n_packets = frame->n_vectors; + if (node->flags & VLIB_NODE_FLAG_TRACE) + bier_drop_trace (vm, node, frame); + vlib_error_drop_buffers (vm, node, buffers, /* stride */ 1, n_packets, @@ -69,9 +72,6 @@ bier_drop (vlib_main_t * vm, 0, // bier_input_node.index, 0); - if (node->flags & VLIB_NODE_FLAG_TRACE) - bier_drop_trace (vm, node, frame); - return n_packets; } 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 +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 = { -- cgit 1.2.3-korg