|
FD.io VPP
v21.06-3-gbb25fbf28
Vector Packet Processing
|
Go to the documentation of this file.
100 return (
format(s,
"path:%d flags:%U",
117 if ((1 << sattr) & flag) {
135 level = va_arg (*args,
int);
151 s =
format (s,
" src:%s flags:%U locks:%d:",
164 s =
format (s,
" Extensions:\n");
167 s = format(s,
" %U\n", format_mfib_entry_path_ext, mpi);
169 s =
format (s,
" Interface-Forwarding:\n");
172 s = format(s,
" %U\n", format_mfib_itf, mfi);
177 s =
format(s,
"\n Interfaces:");
180 s = format(s,
"\n %U", format_mfib_itf, mfi);
186 s =
format(s,
"\n %U-chain\n %U",
196 s =
format(s,
"\nchildren:");
216 return (esrc1->
mfes_src - esrc2->mfes_src);
411 mfib_itf_delete(mfib_itf_get(mfii));
578 if (NULL != path_ext &&
593 nh->path_index = path_index;
660 if (NULL ==
ctx.next_hops)
703 if (NULL !=
ctx.next_hops)
707 &
ctx.next_hops[0].path_dpo);
848 return (mfib_entry_index);
1003 ASSERT(NULL != mfib_entry);
1015 path_index = path_indices[ii];
1016 rpath = &rpaths[ii];
1026 if (NULL == path_ext)
1054 if (NULL == mfib_itf)
1095 if (is_accept != was_accept)
1101 else if (was_accept)
1137 ASSERT(NULL != mfib_entry);
1157 path_index = path_indices[ii];
1158 rpath = &rpaths[ii];
1169 u8 was_accept, is_accept;
1195 if (was_accept && !is_accept)
1248 return ((clib_net_to_host_u32(a1->
data_u32) >
1249 clib_net_to_host_u32(a2->
data_u32) ) ?
1260 int cmp = (clib_net_to_host_u16 (a1->as_u16[
i]) -
1261 clib_net_to_host_u16 (a2->as_u16[
i]));
1318 *mfib_entry_index2));
1429 "ip4-mfib-forward-rpf",
1434 "ip6-mfib-forward-rpf",
1485 return (
ctx.rpaths);
1515 return (&mfib_entry->
mfe_rep);
1666 .path =
"show mfib entry",
1668 .short_help =
"show mfib entry",
static mfib_entry_src_t * mfib_entry_src_find_or_create(mfib_entry_t *mfib_entry, mfib_source_t source)
@ MFIB_ENTRY_FLAG_EXCLUSIVE
int dpo_is_drop(const dpo_id_t *dpo)
The Drop DPO will drop all packets, no questions asked.
static int mfib_entry_src_ok_for_delete(const mfib_entry_src_t *msrc)
void mfib_itf_mac_add(mfib_itf_t *itf, const mfib_prefix_t *pfx)
int mfib_entry_is_host(fib_node_index_t mfib_entry_index)
static fib_path_list_walk_rc_t mfib_entry_src_collect_forwarding(fib_node_index_t pl_index, fib_node_index_t path_index, void *arg)
index_t dpoi_index
the index of objects of that type
#define DPO_INVALID
An initialiser for DPOs declared on the stack.
u32 frp_mitf_flags
MFIB interface flags.
void mfib_entry_mark(fib_node_index_t fib_entry_index, mfib_source_t source)
static void mfib_entry_show_memory(void)
enum mfib_entry_src_flag_t_ mfib_entry_src_flags_t
fib_node_index_t mfpe_path
enum fib_node_back_walk_rc_t_ fib_node_back_walk_rc_t
Return code from a back walk function.
int mfib_entry_is_marked(fib_node_index_t mfib_entry_index, mfib_source_t source)
static void mfib_entry_stack(mfib_entry_t *mfib_entry, mfib_entry_src_t *msrc)
static void mfib_entry_last_lock_gone(fib_node_t *node)
u8 * format_mfib_entry_flags(u8 *s, va_list *args)
Path encode context to use when walking a path-list to encode paths.
u32 mfib_entry_pool_size(void)
void mfib_entry_cover_updated(fib_node_index_t mfib_entry_index)
enum dpo_proto_t_ dpo_proto_t
Data path protocol.
u8 * format_mfib_entry_src_flags(u8 *s, va_list *args)
u8 * format_fib_forw_chain_type(u8 *s, va_list *args)
vl_api_mfib_entry_flags_t entry_flags
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
static void mfib_entry_dpo_unlock(dpo_id_t *dpo)
u8 * fib_path_list_format(fib_node_index_t path_list_index, u8 *s)
#define FOR_EACH_MFIB_SRC_ATTRIBUTE(_item)
static int mfib_entry_cmp(fib_node_index_t mfib_entry_index1, fib_node_index_t mfib_entry_index2)
fib_forward_chain_type_t mfib_forw_chain_type_from_dpo_proto(dpo_proto_t proto)
#define pool_get_aligned(P, E, A)
Allocate an object E from a pool P with alignment A.
Aggregate type for a prefix.
@ FIB_FORW_CHAIN_TYPE_MPLS_EOS
Contribute an object that is to be used to forward end-of-stack MPLS packets.
vlib_log_class_t vlib_log_register_class(char *class, char *subclass)
void mfib_entry_path_update(fib_node_index_t mfib_entry_index, mfib_source_t source, const fib_route_path_t *rpaths)
vlib_main_t vlib_node_runtime_t * node
fib_node_list_t fn_children
Vector of nodes that depend upon/use/share this node.
void mfib_entry_unlock(fib_node_index_t mfib_entry_index)
A FIB graph nodes virtual function table.
mfib_prefix_t mfe_prefix
The prefix of the route.
u16 fp_len
The mask length.
#define FIB_NODE_INDEX_INVALID
enum fib_path_list_walk_rc_t_ fib_path_list_walk_rc_t
return code to control pat-hlist walk
@ FIB_FORW_CHAIN_TYPE_MCAST_IP4
Contribute an object that is to be used to forward IP4 packets.
mfib_itf_flags_t mfi_flags
Forwarding Flags on the entry - checked in the data-path.
u32 fn_locks
Number of dependents on this node.
@ FIB_FORW_CHAIN_TYPE_ETHERNET
Contribute an object that is to be used to forward Ethernet packets.
mfib_entry_flags_t mfes_route_flags
Route flags.
#define pool_put(P, E)
Free an object E in pool P.
fib_node_t mfe_node
Base class.
mfib_src_res_t mfib_entry_src_cover_update(mfib_entry_t *mfib_entry, mfib_entry_src_t *msrc)
static fib_node_index_t mfib_entry_get_index(const mfib_entry_t *mfe)
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
enum mfib_entry_fwd_flags_t_ mfib_entry_fwd_flags_t
Flags to control what is present in the replicate DPO returned when the entry contributes forwarding.
u8 * fib_node_children_format(fib_node_list_t list, u8 *s)
u32 frp_sw_if_index
The interface.
mfib_itf_flags_t mfpe_flags
enum mfib_entry_flags_t_ mfib_entry_flags_t
u32 mfe_fib_index
The index of the FIB table this entry is in.
#define MFIB_ENTRY_FORMAT_BRIEF
fib_node_index_t mfes_pl
The path-list of forwarding interfaces.
int mfib_entry_path_remove(fib_node_index_t mfib_entry_index, mfib_source_t source, const fib_route_path_t *rpaths)
enum fib_node_type_t_ fib_node_type_t
The types of nodes in a FIB graph.
void mfib_entry_src_activate(mfib_entry_t *mfib_entry, mfib_entry_src_t *msrc)
dpo_id_t mfe_rep
The DPO used for forwarding; replicate, drop, etc.
static fib_node_back_walk_rc_t mfib_entry_back_walk_notify(fib_node_t *node, fib_node_back_walk_ctx_t *ctx)
void mfib_entry_src_deactivate(mfib_entry_t *mfib_entry, mfib_entry_src_t *msrc)
int mfib_prefix_is_host(const mfib_prefix_t *pfx)
Return true is the prefix is a host prefix.
u32 fib_path_list_get_n_paths(fib_node_index_t path_list_index)
vlib_log_class_t mfib_entry_logger
the logger
void mfib_entry_module_init(void)
#define MFIB_ENTRY_FORMAT_DETAIL2
static fib_node_index_t * mfib_entry_src_paths_add(mfib_entry_src_t *msrc, const fib_route_path_t *rpaths)
void mfib_entry_contribute_forwarding(fib_node_index_t mfib_entry_index, fib_forward_chain_type_t type, mfib_entry_fwd_flags_t flags, dpo_id_t *dpo)
fib_route_path_t * mfib_entry_encode(fib_node_index_t mfib_entry_index)
static mfib_entry_t * mfib_entry_alloc(u32 fib_index, const mfib_prefix_t *prefix, fib_node_index_t *mfib_entry_index)
@ FIB_FORW_CHAIN_TYPE_NSH
Contribute an object that is to be used to forward NSH packets.
fib_node_bw_reason_flag_t fnbw_reason
The reason/trigger for the backwalk.
#define pool_is_free_index(P, I)
Use free bitmap to query whether given index is free.
@ FIB_NODE_BW_REASON_FLAG_EVALUATE
#define hash_set(h, key, value)
The source of an MFIB entry.
mfib_entry_src_flags_t mfes_flags
Source flags.
@ FIB_FORW_CHAIN_TYPE_UNICAST_IP4
Contribute an object that is to be used to forward IP4 packets.
void fib_path_list_unlock(fib_node_index_t path_list_index)
static vlib_cli_command_t show_mfib_entry
(constructor) VLIB_CLI_COMMAND (show_mfib_entry)
fib_node_index_t mfes_cover
ip46_address_t fp_src_addr
u32 mfib_entry_child_add(fib_node_index_t mfib_entry_index, fib_node_type_t child_type, fib_node_index_t child_index)
enum mfib_source_t_ mfib_source_t
Possible [control plane] sources of MFIB entries.
u32 fib_rpf_id_t
An RPF-ID is numerical value that is used RPF validate.
mfib_itf_t * mfe_itfs
A hash table of interfaces.
static mfib_entry_t * mfib_entry_get(fib_node_index_t index)
static clib_error_t * show_mfib_entry_command(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
mfib_path_ext_t * mfes_exts
Hash table of path extensions.
static int mfib_entry_path_itf_based(const fib_route_path_t *rpath)
#define vec_add2(V, P, N)
Add N elements to end of vector V, return pointer to new elements in P.
#define vec_add1(V, E)
Add 1 element to end of vector (unspecified alignment).
void dpo_stack(dpo_type_t child_type, dpo_proto_t child_proto, dpo_id_t *dpo, const dpo_id_t *parent)
Stack one DPO object on another, and thus establish a child-parent relationship.
static mfib_path_ext_t * mfib_path_ext_add(mfib_entry_src_t *msrc, fib_node_index_t path_index, mfib_itf_flags_t mfi_flags)
#define MFIB_ENTRY_DBG(_e, _fmt, _args...)
enum fib_forward_chain_type_t_ fib_forward_chain_type_t
FIB output chain type.
fib_node_index_t mfe_pl
The path-list of which this entry is a child.
static mfib_entry_t * mfib_entry_from_fib_node(fib_node_t *node)
static void mfib_entry_src_flush(mfib_entry_src_t *msrc)
#define vec_elt_at_index(v, i)
Get vector value at index i checking that i is in bounds.
u32 mfe_sibling
The sibling index on the path-list.
static mfib_path_ext_t * mfib_path_ext_pool
Pool of path extensions.
u32 mfib_entry_get_fib_index(fib_node_index_t mfib_entry_index)
static mfib_itf_t * mfib_entry_itf_find(mfib_itf_t *itfs, u32 sw_if_index)
static const fib_node_vft_t mfib_entry_vft
u32 index_t
A Data-Path Object is an object that represents actions that are applied to packets are they are swit...
int mfib_entry_update(fib_node_index_t mfib_entry_index, mfib_source_t source, mfib_entry_flags_t entry_flags, fib_rpf_id_t rpf_id, index_t repi)
fib_node_index_t * fib_path_list_paths_remove(fib_node_index_t path_list_index, const fib_route_path_t *rpaths)
u32 fib_node_index_t
A typedef of a node index.
mfib_entry_flags_t mfe_flags
Route flags.
#define vec_foreach_index(var, v)
Iterate over vector indices.
void fib_show_memory_usage(const char *name, u32 in_use_elts, u32 allocd_elts, size_t size_elt)
Show the memory usage for a type.
u32 mfes_ref_count
The reference count on the entry.
int mfib_entry_delete(fib_node_index_t mfib_entry_index, mfib_source_t source)
mfib_entry_delete
#define hash_foreach(key_var, value_var, h, body)
static void mfib_entry_itf_add(mfib_entry_src_t *msrc, u32 sw_if_index, index_t mi)
const static dpo_vft_t mfib_entry_dpo_vft
static int dpo_id_is_valid(const dpo_id_t *dpoi)
Return true if the DPO object is valid, i.e.
u8 * format_mfib_itf_flags(u8 *s, va_list *args)
mfib_itf_t * mfes_itfs
The hash table of all interfaces.
void mfib_itf_delete(mfib_itf_t *mfi)
static const char * mfib_src_attribute_names[]
sll srl srl sll sra u16x4 i
mfib_entry_src_t * mfib_entry_get_best_src(const mfib_entry_t *mfib_entry)
fib_forward_chain_type_t fct
index_t replicate_create(u32 n_buckets, dpo_proto_t rep_proto)
enum mfib_itf_flags_t_ mfib_itf_flags_t
#define MFIB_ENTRY_SRC_ATTRIBUTES
#define pool_get(P, E)
Allocate an object E from a pool P (unspecified alignment).
static void mfib_entry_src_remove(mfib_entry_t *mfib_entry, mfib_source_t source)
enum mfib_entry_src_attribute_t_ mfib_entry_src_attribute_t
Flags for the source data.
#define VLIB_CLI_COMMAND(x,...)
static void mfib_entry_update_i(mfib_entry_t *mfib_entry, mfib_entry_src_t *msrc, mfib_source_t current_best, index_t repi)
void fib_path_contribute_forwarding(fib_node_index_t path_index, fib_forward_chain_type_t fct, dpo_id_t *dpo)
enum fib_protocol_t_ fib_protocol_t
Protocol Type.
dpo_lock_fn_t dv_lock
A reference counting lock function.
u8 * format_mfib_prefix(u8 *s, va_list *args)
u8 * format_mfib_entry(u8 *s, va_list *args)
replicate_flags_t rep_flags
Flags specifying the replicate properties/behaviour.
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
static int mfib_entry_ok_for_delete(mfib_entry_t *mfib_entry)
#define CLIB_CACHE_LINE_BYTES
static fib_node_index_t * mfib_entry_src_paths_remove(mfib_entry_src_t *msrc, const fib_route_path_t *rpaths)
enum mfib_src_res_t_ mfib_src_res_t
signals from the sources to the caller
fib_protocol_t fp_proto
protocol type
@ FIB_NODE_BACK_WALK_CONTINUE
void vlib_cli_output(vlib_main_t *vm, char *fmt,...)
dpo_proto_t fib_proto_to_dpo(fib_protocol_t fib_proto)
u8 * format_dpo_id(u8 *s, va_list *args)
Format a DPO_id_t oject.
static void mfib_entry_itf_remove(mfib_entry_src_t *msrc, u32 sw_if_index)
@ FIB_NODE_TYPE_MFIB_ENTRY
@ FIB_PATH_LIST_WALK_CONTINUE
const static char *const mfib_entry_ip4_nodes[]
static mfib_path_ext_t * mfib_entry_path_ext_find(mfib_path_ext_t *exts, fib_node_index_t path_index)
void fib_path_list_walk_w_ext(fib_node_index_t path_list_index, const fib_path_ext_list_t *ext_list, fib_path_list_walk_w_ext_fn_t func, void *ctx)
const static char *const mfib_entry_ip6_nodes[]
static uword hash_elts(void *v)
void fib_walk_sync(fib_node_type_t parent_type, fib_node_index_t parent_index, fib_node_back_walk_ctx_t *ctx)
Back walk all the children of a FIB node.
int mfib_entry_special_add(fib_node_index_t mfib_entry_index, mfib_source_t source, mfib_entry_flags_t entry_flags, fib_rpf_id_t rpf_id, index_t repi)
struct mfib_entry_collect_forwarding_ctx_t_ mfib_entry_collect_forwarding_ctx_t
index_t mfib_itf_create(fib_node_index_t path_index, mfib_itf_flags_t mfi_flags)
static void mfib_path_ext_remove(mfib_entry_src_t *msrc, fib_node_index_t path_index)
#define vec_free(V)
Free vector's memory (no header).
int mfib_entry_cmp_for_sort(void *i1, void *i2)
#define pool_len(p)
Number of elements in pool vector.
static mfib_itf_t * mfib_itf_get(index_t mi)
Get the MFIB interface representation.
fib_node_index_t fib_path_list_create_special(dpo_proto_t nh_proto, fib_path_list_flags_t flags, const dpo_id_t *dpo)
static mfib_entry_src_t * mfib_entry_src_update_and_lock(mfib_entry_t *mfib_entry, mfib_source_t source, fib_rpf_id_t rpf_id, mfib_entry_flags_t entry_flags)
void dpo_copy(dpo_id_t *dst, const dpo_id_t *src)
atomic copy a data-plane object.
@ FIB_FORW_CHAIN_TYPE_MPLS_NON_EOS
Contribute an object that is to be used to forward non-end-of-stack MPLS packets.
void mfib_entry_cover_changed(fib_node_index_t mfib_entry_index)
fib_route_path_flags_t frp_flags
flags on the path
fib_node_index_t mfib_entry_create(u32 fib_index, mfib_source_t source, const mfib_prefix_t *prefix, fib_rpf_id_t rpf_id, mfib_entry_flags_t entry_flags, index_t repi)
#define pool_foreach_index(i, v)
void mfib_entry_lock(fib_node_index_t mfib_entry_index)
const dpo_id_t * mfib_entry_contribute_ip_forwarding(fib_node_index_t mfib_entry_index)
ip46_address_t fp_grp_addr
The address type is not deriveable from the fp_addr member.
static int fib_ip4_address_compare(ip4_address_t *a1, ip4_address_t *a2)
description fragment has unexpected format
void fib_path_list_walk(fib_node_index_t path_list_index, fib_path_list_walk_fn_t func, void *ctx)
mfib_source_t mfes_src
Which source this is.
mfib_src_res_t mfib_entry_src_cover_change(mfib_entry_t *mfib_entry, mfib_entry_src_t *msrc)
void mfib_itf_mac_del(mfib_itf_t *itf, const mfib_prefix_t *pfx)
static void mfib_entry_recalculate_forwarding(mfib_entry_t *mfib_entry, mfib_source_t old_best)
@ MFIB_ENTRY_SRC_FLAG_STALE
static void mfib_entry_src_init(mfib_entry_t *mfib_entry, mfib_source_t source)
A representation of a path as described by a route producer.
static u8 * format_mfib_entry_dpo(u8 *s, va_list *args)
fib_path_list_walk_rc_t fib_path_encode(fib_node_index_t path_list_index, fib_node_index_t path_index, const fib_path_ext_t *path_ext, void *args)
#define MFIB_SOURCE_NAMES
MFIB extensions to each path.
static mfib_entry_src_t * mfib_entry_src_find(const mfib_entry_t *mfib_entry, mfib_source_t source, u32 *index)
void mfib_entry_cover_update_notify(mfib_entry_t *mfib_entry)
#define vec_foreach(var, vec)
Vector iterator.
const static char *const *const mfib_entry_nodes[DPO_PROTO_NUM]
int fib_path_is_resolved(fib_node_index_t path_index)
void fib_node_lock(fib_node_t *node)
static uword pool_elts(void *v)
Number of active elements in a pool.
u32 mfib_entry_get_stats_index(fib_node_index_t fib_entry_index)
@ FIB_FORW_CHAIN_TYPE_BIER
Contribute an object that is to be used to forward BIER packets.
@ REPLICATE_FLAGS_HAS_LOCAL
void fib_path_list_child_remove(fib_node_index_t path_list_index, u32 si)
@ FIB_FORW_CHAIN_TYPE_MCAST_IP6
Contribute an object that is to be used to forward IP6 packets.
An node in the FIB graph.
An interface associated with a particular MFIB entry.
const mfib_prefix_t * mfib_entry_get_prefix(fib_node_index_t mfib_entry_index)
static fib_node_t * mfib_entry_get_node(fib_node_index_t index)
#define hash_unset(h, key)
#define vec_sort_with_function(vec, f)
Sort a vector using the supplied element comparison function.
void fib_path_list_lock(fib_node_index_t path_list_index)
const dpo_id_t * drop_dpo_get(dpo_proto_t proto)
void fib_node_init(fib_node_t *node, fib_node_type_t type)
A virtual function table regisitered for a DPO type.
void fib_node_unlock(fib_node_t *node)
static mfib_source_t mfib_entry_get_best_source(const mfib_entry_t *mfib_entry)
@ FIB_PATH_LIST_FLAG_NO_URPF
Context passed between object during a back walk.
void fib_node_child_remove(fib_node_type_t parent_type, fib_node_index_t parent_index, fib_node_index_t sibling_index)
static int fib_ip6_address_compare(ip6_address_t *a1, ip6_address_t *a2)
fib_rpf_id_t mfes_rpf_id
RPF-ID.
load_balance_path_t * next_hops
fib_forward_chain_type_t mfib_entry_get_default_chain_type(const mfib_entry_t *mfib_entry)
The identity of a DPO is a combination of its type and its instance number/index of objects of that t...
static u8 * format_mfib_entry_path_ext(u8 *s, va_list *args)
@ FIB_PATH_LIST_FLAG_EXCLUSIVE
void fib_node_deinit(fib_node_t *node)
int mfib_entry_is_sourced(fib_node_index_t mfib_entry_index, mfib_source_t source)
@ FIB_ROUTE_PATH_BIER_IMP
A path that resolves via a BIER impostion object.
@ FIB_FORW_CHAIN_TYPE_UNICAST_IP6
Contribute an object that is to be used to forward IP6 packets.
void dpo_set(dpo_id_t *dpo, dpo_type_t type, dpo_proto_t proto, index_t index)
Set/create a DPO ID The DPO will be locked.
static replicate_t * replicate_get(index_t repi)
mfib_entry_t * mfib_entry_pool
u16 fib_path_get_weight(fib_node_index_t path_index)
void mfib_entry_child_remove(fib_node_index_t mfib_entry_index, u32 sibling_index)
static int mfib_entry_src_cmp_for_sort(void *v1, void *v2)
static mfib_path_ext_t * mfib_entry_path_ext_get(index_t mi)
static const char * mfib_source_names[]
String names for each source.
fib_node_index_t * fib_path_list_paths_add(fib_node_index_t path_list_index, const fib_route_path_t *rpaths)
#define INDEX_INVALID
Invalid index - used when no index is known blazoned capitals INVALID speak volumes where ~0 does not...
vl_api_interface_index_t sw_if_index
static void mfib_entry_dpo_lock(dpo_id_t *dpo)
fib_node_index_t fib_path_list_create(fib_path_list_flags_t flags, const fib_route_path_t *rpaths)
One path from an [EU]CMP set that the client wants to add to a load-balance object.
@ MFIB_ENTRY_FWD_FLAG_NO_LOCAL
Do not reutrn any local replications in the set.
void replicate_multipath_update(const dpo_id_t *dpo, load_balance_path_t *next_hops)
void dpo_reset(dpo_id_t *dpo)
reset a DPO ID The DPO will be unlocked.
dpo_proto_t rep_proto
The protocol of packets that traverse this REP.
static fib_protocol_t mfib_entry_get_proto(const mfib_entry_t *mfib_entry)
u32 fib_node_child_add(fib_node_type_t parent_type, fib_node_index_t parent_index, fib_node_type_t type, fib_node_index_t index)
vl_api_fib_path_type_t type
static mfib_entry_src_t * mfib_entry_src_update(mfib_entry_t *mfib_entry, mfib_source_t source, fib_rpf_id_t rpf_id, mfib_entry_flags_t entry_flags)
int mfib_itf_update(mfib_itf_t *mfib_itf, fib_node_index_t path_index, mfib_itf_flags_t mfi_flags)
update an interface from a path.
index_t replicate_dup(replicate_flags_t flags, index_t repi)
#define vec_del1(v, i)
Delete the element at index I.
struct mfib_entry_src_t_ * mfe_srcs
A vector of sources contributing forwarding.
fib_rpf_id_t mfe_rpf_id
RPF-ID used when the packets ingress not from an interface.
#define MFIB_ENTRY_FORMAT_DETAIL
void dpo_register(dpo_type_t type, const dpo_vft_t *vft, const char *const *const *nodes)
For a given DPO type Register:
vl_api_wireguard_peer_flags_t flags