X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fbier%2Fbier_output.c;h=e2cf7d62cee2c16a68164b849d20b64e674c55cd;hb=9c0a3c423ee0b9326f600a00c1bd46fef45d4975;hp=db115d3ad5ef3c232ca27306a1fdb553ece01503;hpb=9128637ee8f7b0d903551f165a1447d427e8dd19;p=vpp.git diff --git a/src/vnet/bier/bier_output.c b/src/vnet/bier/bier_output.c index db115d3ad5e..e2cf7d62cee 100644 --- a/src/vnet/bier/bier_output.c +++ b/src/vnet/bier/bier_output.c @@ -49,6 +49,7 @@ typedef enum { * Forward declaration */ vlib_node_registration_t bier_output_node; +extern vlib_combined_counter_main_t bier_fmask_counters; /** * @brief Packet trace recoed for a BIER output @@ -57,6 +58,7 @@ typedef struct bier_output_trace_t_ { u32 next_index; index_t bfm_index; + mpls_label_t bfm_label; } bier_output_trace_t; static uword @@ -64,13 +66,14 @@ bier_output (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * from_frame) { + vlib_combined_counter_main_t *cm = &bier_fmask_counters; u32 n_left_from, next_index, * from, * to_next; + u32 thread_index; + thread_index = vm->thread_index; from = vlib_frame_vector_args (from_frame); n_left_from = from_frame->n_vectors; - // vnet_buffer(b0)->sw_if_index[VLIB_TX] = d0->tx_fib_index; - /* * objection your honour! speculation! */ @@ -112,6 +115,10 @@ bier_output (vlib_main_t * vm, bfmi0 = vnet_buffer (b0)->ip.adj_index[VLIB_TX]; bfm0 = bier_fmask_get(bfmi0); + vlib_increment_combined_counter( + cm, thread_index, bfmi0, 1, + vlib_buffer_length_in_chain (vm, b0)); + /* * perform the logical AND of the packet's mask with * that of the fmask objects, to reset the bits that @@ -140,8 +147,8 @@ bier_output (vlib_main_t * vm, h0 = vlib_buffer_get_current(b0); h0[0] = bfm0->bfm_label; - vnet_mpls_uc_set_ttl(h0, vnet_buffer(b0)->mpls.ttl - 1); - h0[0] = clib_host_to_net_u32(h0[0]); + + ((char*)h0)[3]= vnet_buffer(b0)->mpls.ttl - 1; } /* @@ -157,6 +164,7 @@ bier_output (vlib_main_t * vm, tr = vlib_add_trace (vm, node, b0, sizeof (*tr)); tr->next_index = next0; tr->bfm_index = bfmi0; + tr->bfm_label = bfm0->bfm_label; } vlib_validate_buffer_enqueue_x1 (vm, node, next_index, @@ -180,8 +188,8 @@ format_bier_output_trace (u8 * s, va_list * args) CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *); bier_output_trace_t * t = va_arg (*args, bier_output_trace_t *); - s = format (s, " next [%d], BFM index %d", - t->next_index, t->bfm_index); + s = format (s, " next [%d], BFM index %d label:%x", + t->next_index, t->bfm_index, t->bfm_label); return s; }