#include <vnet/bier/bier_fmask.h>
/**
- * Struct maintining the per-worker thread data for BIER lookups
+ * Struct maintaining the per-worker thread data for BIER lookups
*/
typedef struct bier_lookup_main_t_
{
u32 n_left_from, next_index, * from, * to_next;
bier_lookup_main_t *blm = &bier_lookup_main;
u32 thread_index = vlib_get_thread_index();
+ bier_bit_mask_bucket_t buckets_copy[BIER_HDR_BUCKETS_4096];
from = vlib_frame_vector_args (from_frame);
n_left_from = from_frame->n_vectors;
while (n_left_from > 0 && n_left_to_next > 0)
{
- bier_bit_mask_bucket_t buckets_copy[BIER_HDR_BUCKETS_256];
u32 next0, bi0, n_bytes, bti0, bfmi0;
const bier_fmask_t *bfm0;
const bier_table_t *bt0;
/*
* go to the next bit-position set
*/
+ vlib_node_increment_counter(
+ vm, node->node_index,
+ BIER_LOOKUP_ERROR_FMASK_UNRES, 1);
bucket = ((int*)bbs.bbs_buckets)[index];
continue;
}
* Create the number of clones we need based on the number
* of fmasks we are sending to.
*/
- u8 num_cloned, clone;
+ u16 num_cloned, clone;
u32 n_clones;
n_clones = vec_len(blm->blm_fmasks[thread_index]);
if (PREDICT_TRUE(0 != n_clones))
{
- ASSERT(n_clones < 256);
num_cloned = vlib_buffer_clone(vm, bi0,
blm->blm_clones[thread_index],
- n_clones, 128);
+ n_clones,
+ VLIB_BUFFER_CLONE_HEAD_SIZE);
- if (num_cloned != n_clones)
+ if (num_cloned != vec_len(blm->blm_fmasks[thread_index]))
{
vlib_node_increment_counter
(vm, node->node_index,
{
bier_lookup_trace_t *tr;
- vlib_trace_buffer (vm, node, next0, c0, 0);
+ if (c0 != b0)
+ vlib_buffer_copy_trace_flag (vm, b0, ci0);
+
tr = vlib_add_trace (vm, node, c0, sizeof (*tr));
tr->bt_index = bti0;
tr->bfm_index = blm->blm_fmasks[thread_index][clone];
-
- c0->flags |= VLIB_BUFFER_IS_TRACED;
}
vlib_validate_buffer_enqueue_x1(vm, node, next_index,
}
}
- vlib_put_next_frame (vm, node, next_index, n_left_to_next);
+ vlib_put_next_frame(vm, node, next_index, n_left_to_next);
}
- vlib_node_increment_counter (vm, bier_lookup_node.index,
- BIER_LOOKUP_ERROR_NONE,
- from_frame->n_vectors);
+ vlib_node_increment_counter(vm, bier_lookup_node.index,
+ BIER_LOOKUP_ERROR_NONE,
+ from_frame->n_vectors);
return (from_frame->n_vectors);
}
thread_index++)
{
/*
- * 4096 is the most we will ever need to support
- * a Bit-Mask length of 4096
+ * 1024 is the most we will ever need to support
+ * a Bit-Mask length of 1024
*/
- vec_validate(blm->blm_fmasks[thread_index], 4095);
- vec_validate(blm->blm_clones[thread_index], 4095);
+ vec_validate(blm->blm_fmasks[thread_index], 1023);
+ vec_validate(blm->blm_clones[thread_index], 1023);
}
return 0;