44 u32 n_left_from, next_index, * from, * to_next;
51 while (n_left_from > 0)
57 while (n_left_from > 0 && n_left_to_next > 0)
85 checksum0 = ip0->
checksum + clib_host_to_net_u16 (0x0100);
86 checksum0 += checksum0 >= 0xffff;
133 clib_host_to_net_u32((
vnet_buffer(b0)->ip.flow_hash &
157 n_left_to_next, bi0, next0);
191 .name =
"bier-imp-ip4",
192 .vector_size =
sizeof (
u32),
214 .name =
"bier-imp-ip6",
215 .vector_size =
sizeof (
u32),
static uword bier_imp_dpo_inline(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame, fib_protocol_t fproto, bier_hdr_proto_id_t bproto)
u32 bh_first_word
The first nibble is always set to 0101 to ensure that when carried over MPLS, the BIER packet is not ...
vlib_node_registration_t bier_imp_ip6_node
(constructor) VLIB_REGISTER_NODE (bier_imp_ip6_node)
static u32 ip4_compute_flow_hash(const ip4_header_t *ip, flow_hash_config_t flow_hash_config)
u32 index_t
A Data-Path Object is an object that represents actions that are applied to packets are they are swit...
u32 bier_hdr_len_id_to_num_bytes(bier_hdr_len_id_t id)
enum fib_protocol_t_ fib_protocol_t
Protocol Type.
static uword bier_imp_ip6(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
bier_imposition : The BIER imposition object
static bier_imp_t * bier_imp_get(index_t bii)
#define BIER_HDR_ENTROPY_FIELD_MASK
bier_hdr_t bi_hdr
The Header to impose.
A struct to hold tracing information for the BIER imposition node.
u8 * format_bier_imp(u8 *s, va_list *args)
#define BIER_HDR_ENTROPY_FIELD_SHIFT
u16 bh_oam_dscp_proto
The second word comprises: 2 bits of OAM for passive perf measurement 2 reserved bits; 6 bits of DSCP...
bier_hdr_len_id_t bti_hdr_len
The size of the bit string processed by this table.
static void * vlib_buffer_get_current(vlib_buffer_t *b)
Get pointer to current data to process.
static u32 ip6_compute_flow_hash(const ip6_header_t *ip, flow_hash_config_t flow_hash_config)
#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).
struct bier_imp_trace_t_ bier_imp_trace_t
A struct to hold tracing information for the BIER imposition node.
vlib_node_registration_t bier_imp_ip4_node
(constructor) VLIB_REGISTER_NODE (bier_imp_ip4_node)
static u8 * format_bier_imp_trace(u8 *s, va_list *args)
#define VLIB_BUFFER_IS_TRACED
index_t imp
BIER imposition object hit.
#define clib_memcpy(a, b, c)
bier_hdr_t hdr
BIER hdr applied.
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.
#define IP_FLOW_HASH_DEFAULT
Default: 5-tuple without the "reverse" bit.
static void * vlib_add_trace(vlib_main_t *vm, vlib_node_runtime_t *r, vlib_buffer_t *b, u32 n_data_bytes)
static uword bier_imp_ip4(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
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
static void * vlib_frame_vector_args(vlib_frame_t *f)
Get pointer to frame vector data.
#define VLIB_NODE_FUNCTION_MULTIARCH(node, fn)
#define VLIB_REGISTER_NODE(x,...)
bier_table_id_t bi_tbl
The BIER table into which to forward the post imposed packet.
u16 dpoi_next_node
The next VLIB node to follow.
#define BIER_HDR_PROTO_FIELD_SHIFT
dpo_id_t bi_dpo[FIB_PROTOCOL_IP_MAX]
The DPO contirubted from the resolving BIER table.
u32 flags
buffer flags: VLIB_BUFFER_FREE_LIST_INDEX_MASK: bits used to store free list index, VLIB_BUFFER_IS_TRACED: trace this buffer.
static vlib_buffer_t * vlib_get_buffer(vlib_main_t *vm, u32 buffer_index)
Translate buffer index into buffer pointer.