30 return (be - bier_entry_pool);
383 s =
format(s,
" forwarding:\n");
void bier_entry_path_update(index_t bei, const fib_route_path_t *rpaths)
Contribute an object that is to be used to forward BIER packets.
void fib_path_list_child_remove(fib_node_index_t path_list_index, u32 si)
static void bier_entry_last_lock_gone(fib_node_t *node)
index_t fib_path_get_resolving_index(fib_node_index_t path_index)
A representation of a path as described by a route producer.
enum bier_show_flags_t_ bier_show_flags_t
Flags to control show output.
void bier_entry_delete(index_t bei)
enum fib_node_back_walk_rc_t_ fib_node_back_walk_rc_t
Return code from a back walk function.
u32 index_t
A Data-Path Object is an object that represents actions that are applied to packets are they are swit...
index_t be_bti
The index of the BIER table in which this entry resides.
index_t bier_entry_create(index_t bti, bier_bp_t bp)
fib_node_index_t be_path_list
the FIB path-list this entry resolves through.
void fib_path_list_walk(fib_node_index_t path_list_index, fib_path_list_walk_fn_t func, void *ctx)
#define STRUCT_OFFSET_OF(t, f)
static bier_entry_t * bier_entry_get(index_t bei)
static fib_path_list_walk_rc_t bier_entry_unlink_walk(fib_node_index_t pl_index, fib_node_index_t path_index, void *arg)
void bier_entry_contribute_forwarding(index_t bei, dpo_id_t *dpo)
clib_error_t * bier_entry_module_init(vlib_main_t *vm)
#define pool_get(P, E)
Allocate an object E from a pool P (unspecified alignment).
bier_bp_t be_bp
the bit position this entry represents.
u32 fib_path_list_child_add(fib_node_index_t path_list_index, fib_node_type_t child_type, fib_node_index_t child_index)
void fib_node_register_type(fib_node_type_t type, const fib_node_vft_t *vft)
fib_node_register_type
void bier_fmask_unlink(index_t bfmi, bier_bp_t bp)
#define VLIB_INIT_FUNCTION(x)
bier_table_ecmp_id_t bti_ecmp
The SUB/ECMP-ID Constructed by FIB to achieve ECMP between BFR-NBRs.
u16 lb_n_buckets_minus_1
number of buckets in the load-balance - 1.
fib_node_index_t be_sibling_index
sibling index on the path list
u32 bier_bp_t
A bit positon as assigned to egress PEs.
void bier_fmask_link(index_t bfmi, bier_bp_t bp)
fib_node_index_t fib_path_list_copy_and_path_add(fib_node_index_t orig_path_list_index, fib_path_list_flags_t flags, const fib_route_path_t *rpaths)
The identity of a DPO is a combination of its type and its instance number/index of objects of that t...
fib_node_index_t fib_path_list_create(fib_path_list_flags_t flags, const fib_route_path_t *rpaths)
dpo_type_t dpoi_type
the type
static const dpo_id_t * load_balance_get_bucket_i(const load_balance_t *lb, u32 bucket)
load-balancing over a choice of [un]equal cost paths
#define pool_put(P, E)
Free an object E in pool P.
void fib_path_list_lock(fib_node_index_t path_list_index)
static void bier_entry_table_ecmp_walk_add_fmask(index_t btei, void *arg)
An node in the FIB graph.
fib_node_index_t fib_path_list_copy_and_path_remove(fib_node_index_t orig_path_list_index, fib_path_list_flags_t flags, const fib_route_path_t *rpaths)
int bier_entry_path_remove(index_t bei, const fib_route_path_t *rpaths)
static fib_node_t * bier_entry_get_node(fib_node_index_t index)
fib_node_t be_node
linkage into the FIB graph
u32 fib_path_list_get_n_paths(fib_node_index_t path_list_index)
static fib_path_list_walk_rc_t bier_entry_link_walk(fib_node_index_t pl_index, fib_node_index_t path_index, void *arg)
u32 fib_node_index_t
A typedef of a node index.
void fib_path_list_unlock(fib_node_index_t path_list_index)
Context passed between object during a back walk.
const bier_table_id_t * bier_table_get_id(index_t bti)
static load_balance_t * load_balance_get(index_t lbi)
u8 * format_bier_entry(u8 *s, va_list *ap)
static fib_node_back_walk_rc_t bier_entry_back_walk_notify(fib_node_t *node, fib_node_back_walk_ctx_t *ctx)
u8 * format_dpo_id(u8 *s, va_list *args)
Format a DPO_id_t oject
enum fib_path_list_walk_rc_t_ fib_path_list_walk_rc_t
return code to control pat-hlist walk
index_t dpoi_index
the index of objects of that type
#define FIB_NODE_INDEX_INVALID
#define INDEX_INVALID
Invalid index - used when no index is known blazoned capitals INVALID speak volumes where ~0 does not...
u8 * fib_path_list_format(fib_node_index_t path_list_index, u8 *s)
static bier_entry_t * bier_entry_get_from_node(fib_node_t *node)
#define DPO_INVALID
An initialiser for DPOs declared on the stack.
void fib_path_list_contribute_forwarding(fib_node_index_t path_list_index, fib_forward_chain_type_t fct, fib_path_list_fwd_flags_t flags, dpo_id_t *dpo)
A FIB graph nodes virtual function table.
void bier_entry_path_add(index_t bei, const fib_route_path_t *rpaths)
void dpo_reset(dpo_id_t *dpo)
reset a DPO ID The DPO will be unlocked.
bier_entry_t * bier_entry_pool
void bier_table_ecmp_walk(index_t bti, bier_table_ecmp_walk_fn_t fn, void *ctx)
void bier_table_ecmp_set_fmask(index_t bti, bier_bp_t bp, index_t bfmi)
static index_t bier_entry_get_index(const bier_entry_t *be)