41 u32 n_left_from, next_index, * from, * to_next;
48 while (n_left_from > 0)
54 while (n_left_from > 0 && n_left_to_next > 0)
58 u32 next0, bi0, bdei0;
112 n_left_to_next, bi0, next0);
140 .name =
"bier-disp-dispatch",
141 .vector_size =
sizeof (
u32),
u32 flags
buffer flags: VLIB_BUFFER_FREE_LIST_INDEX_MASK: bits used to store free list index, VLIB_BUFFER_IS_TRACED: trace this buffer.
#define VLIB_NODE_FN(node)
bier_disposition : The BIER disposition object
static u8 * format_bier_disp_dispatch_trace(u8 *s, va_list *args)
static uword bier_disp_dispatch_inline(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
The identity of a DPO is a combination of its type and its instance number/index of objects of that t...
static void * vlib_buffer_get_current(vlib_buffer_t *b)
Get pointer to current data to process.
struct bier_disp_entry_t_::@55 bde_fwd[BIER_HDR_N_PROTO]
The DPO contributed from the per-payload protocol parents on cacheline 1.
static bier_disp_entry_t * bier_disp_entry_get(index_t bdi)
#define vlib_validate_buffer_enqueue_x1(vm, node, next_index, to_next, n_left_to_next, bi0, next0)
Finish enqueueing one buffer forward in the graph.
#define vlib_get_next_frame(vm, node, next_index, vectors, n_vectors_left)
Get pointer to next frame vector data by (vlib_node_runtime_t, next_index).
static bier_hdr_entropy_t bier_hdr_get_entropy(const bier_hdr_t *bier_hdr)
#define VLIB_REGISTER_NODE(x,...)
A struct to hold tracing information for the MPLS label imposition node.
struct bier_disp_dispatch_trace_t_ bier_disp_dispatch_trace_t
A struct to hold tracing information for the MPLS label imposition node.
enum bier_hdr_proto_id_t_ bier_hdr_proto_id_t
BIER header protocol payload types.
void vlib_put_next_frame(vlib_main_t *vm, vlib_node_runtime_t *r, u32 next_index, u32 n_vectors_left)
Release pointer to next frame vector data.
u16 cached_next_index
Next frame index that vector arguments were last enqueued to last time this node ran.
static void vlib_buffer_advance(vlib_buffer_t *b, word l)
Advance current data pointer by the supplied (signed!) amount.
bier_hdr_proto_id_t pproto
BIER payload protocol used to dispatch.
static bier_hdr_proto_id_t bier_hdr_get_proto_id(const bier_hdr_t *bier_hdr)
static void * vlib_add_trace(vlib_main_t *vm, vlib_node_runtime_t *r, vlib_buffer_t *b, u32 n_data_bytes)
A BIER header of variable length The encoding follows: https://tools.ietf.org/html/draft-ietf-bier-mp...
index_t dpoi_index
the index of objects of that type
#define BIER_RX_ITF
The BIER inline functions acting on the bier header.
VLIB buffer representation.
static void * vlib_frame_vector_args(vlib_frame_t *f)
Get pointer to frame vector data.
u32 rpf_id
RPF-ID packet is tagged with.
vlib_node_registration_t bier_disp_dispatch_node
(constructor) VLIB_REGISTER_NODE (bier_disp_dispatch_node)
u16 dpoi_next_node
The next VLIB node to follow.
static vlib_buffer_t * vlib_get_buffer(vlib_main_t *vm, u32 buffer_index)
Translate buffer index into buffer pointer.
static void bier_hdr_ntoh(bier_hdr_t *bier_hdr)
u8 * format_bier_hdr_proto(u8 *s, va_list *ap)
Format the header length field.