X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fvnet%2Fbier%2Fbier_output.c;h=16c1d8e15439e9b29ceb44d109b7927cdafae8dc;hb=067cd6229a47ea3ba8b59a2a04090e80afb5bd2c;hp=fce6c50b3095dfa66597117837ed551608688aed;hpb=d792d9c01e60656cbfe1b0f1fd6a9b125f5dab0c;p=vpp.git diff --git a/src/vnet/bier/bier_output.c b/src/vnet/bier/bier_output.c index fce6c50b309..16c1d8e1543 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 @@ -64,13 +65,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! */ @@ -89,9 +91,10 @@ bier_output (vlib_main_t * vm, bier_bit_string_t bbs; vlib_buffer_t * b0; bier_fmask_t *bfm0; + mpls_label_t *h0; bier_hdr_t *bh0; - u32 bi0, *h0; u32 bfmi0; + u32 bi0; bi0 = from[0]; to_next[0] = bi0; @@ -111,6 +114,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 @@ -131,9 +138,16 @@ bier_output (vlib_main_t * vm, */ if (!(bfm0->bfm_flags & BIER_FMASK_FLAG_DISP)) { + /* + * since a BIFT value and a MPLS label are formated the + * same, this painting works OK. + */ vlib_buffer_advance(b0, -(word)sizeof(mpls_label_t)); h0 = vlib_buffer_get_current(b0); + h0[0] = bfm0->bfm_label; + + ((char*)h0)[3]= vnet_buffer(b0)->mpls.ttl - 1; } /*