111 #define FIB_PATH_TYPES { \ 112 [FIB_PATH_TYPE_ATTACHED_NEXT_HOP] = "attached-nexthop", \ 113 [FIB_PATH_TYPE_ATTACHED] = "attached", \ 114 [FIB_PATH_TYPE_RECURSIVE] = "recursive", \ 115 [FIB_PATH_TYPE_SPECIAL] = "special", \ 116 [FIB_PATH_TYPE_EXCLUSIVE] = "exclusive", \ 117 [FIB_PATH_TYPE_DEAG] = "deag", \ 118 [FIB_PATH_TYPE_INTF_RX] = "intf-rx", \ 119 [FIB_PATH_TYPE_UDP_ENCAP] = "udp-encap", \ 120 [FIB_PATH_TYPE_RECEIVE] = "receive", \ 121 [FIB_PATH_TYPE_BIER_IMP] = "bier-imp", \ 122 [FIB_PATH_TYPE_BIER_TABLE] = "bier-table", \ 123 [FIB_PATH_TYPE_BIER_FMASK] = "bier-fmask", \ 124 [FIB_PATH_TYPE_DVR] = "dvr", \ 156 #define FIB_PATH_OPER_ATTRIBUTE_MAX (FIB_PATH_OPER_ATTRIBUTE_LAST + 1) 158 #define FIB_PATH_OPER_ATTRIBUTES { \ 159 [FIB_PATH_OPER_ATTRIBUTE_RECURSIVE_LOOP] = "recursive-loop", \ 160 [FIB_PATH_OPER_ATTRIBUTE_RESOLVED] = "resolved", \ 161 [FIB_PATH_OPER_ATTRIBUTE_DROP] = "drop", \ 164 #define FOR_EACH_FIB_PATH_OPER_ATTRIBUTE(_item) \ 165 for (_item = FIB_PATH_OPER_ATTRIBUTE_FIRST; \ 166 _item <= FIB_PATH_OPER_ATTRIBUTE_LAST; \ 408 #define FIB_PATH_DBG(_p, _fmt, _args...) \ 410 vlib_log_debug (fib_path_logger, \ 412 format_fib_path, fib_path_get_index(_p), 0, \ 413 FIB_PATH_FORMAT_FLAGS_ONE_LINE, \ 426 return (path - fib_path_pool);
446 u32 indent = va_arg (*args,
u32);
449 fib_path_oper_attribute_t oattr;
473 s =
format(s,
" oper-flags:");
476 s =
format (s,
"%s,", fib_path_oper_attribute_names[oattr]);
481 s =
format(s,
" cfg-flags:");
484 s =
format (s,
"%s,", fib_path_cfg_attribute_names[cattr]);
488 if (!(flags & FIB_PATH_FORMAT_FLAGS_ONE_LINE))
521 s =
format(s,
"%s%U%U", eol,
545 s =
format (s,
"via %U %U",
558 s =
format (s,
" in fib:%d",
562 s =
format (s,
" via-dpo:[%U:%d]",
571 s =
format (s,
"via bier-table:[%U}",
574 s =
format (s,
" via-dpo:[%U:%d]",
580 s =
format (s,
" via-dpo:[%U:%d]",
594 path->
dvr.fp_interface));
597 s =
format (s,
" %sfib-index:%d",
599 path->
deag.fp_tbl_id);
1395 path->
deag.fp_rpf_id = ~0;
1480 ASSERT(NULL != orig_path);
1580 res = (path1->
attached.fp_interface -
1597 res = (path1->
bier_imp.fp_bier_imp -
1605 res = (path1->
deag.fp_tbl_id - path2->
deag.fp_tbl_id);
1608 res = (path1->
deag.fp_rpf_id - path2->
deag.fp_rpf_id);
1612 res = (path1->
intf_rx.fp_interface - path2->
intf_rx.fp_interface);
1618 res = (path1->
dvr.fp_interface - path2->
dvr.fp_interface);
1821 entries = *entry_indicies;
2066 path->
classify.fp_classify_table_id));
2160 return (path->
attached.fp_interface);
2162 return (path->
receive.fp_interface);
2170 return (path->
dvr.fp_interface);
2203 return (path->
udp_encap.fp_udp_encap_id);
2211 return (path->
bier_imp.fp_bier_imp);
2265 return (path->
deag.fp_rpf_id);
2317 u32 rpf_sw_if_index;
2321 if (~0 != rpf_sw_if_index)
2375 path->
deag.fp_rpf_id,
2811 s =
format(s,
"\n children:");
2835 .path =
"show fib paths",
2837 .short_help =
"show fib paths",
vlib_log_class_t vlib_log_register_class(char *class, char *subclass)
int fib_path_is_resolved(fib_node_index_t path_index)
static uword vnet_sw_interface_is_up(vnet_main_t *vnm, u32 sw_if_index)
Contribute an object that is to be used to forward BIER packets.
int fib_path_resolve(fib_node_index_t path_index)
void ip_null_dpo_add_and_lock(dpo_proto_t proto, ip_null_dpo_action_t action, dpo_id_t *dpo)
struct fib_path_t_::@310::@317 bier_fmask
Contribute an object that is to be used to forward IP6 packets.
ip46_address_t frp_addr
The next-hop address.
fib_path_ext_type_t fpe_type
The type of path extension.
struct fib_path_t_::@310::@318 bier_table
A path that resolves via a DVR DPO.
void mpls_disp_dpo_create(dpo_proto_t payload_proto, fib_rpf_id_t rpf_id, fib_mpls_lsp_mode_t mode, const dpo_id_t *parent, dpo_id_t *dpo)
Create an MPLS label object.
Contribute an object that is to be used to forward IP6 packets.
void receive_dpo_add_or_lock(dpo_proto_t proto, u32 sw_if_index, const ip46_address_t *nh_addr, dpo_id_t *dpo)
void pw_cw_dpo_create(const dpo_id_t *parent, dpo_id_t *dpo)
Create an PW CW pop.
static fib_path_t * fib_path_from_fib_node(fib_node_t *node)
void bier_imp_contribute_forwarding(index_t bii, dpo_proto_t proto, dpo_id_t *dpo)
#define pool_foreach_index(i, v)
uword fib_path_hash(fib_node_index_t path_index)
fib_node_index_t path_index
The index of the FIB path.
void fib_path_contribute_forwarding(fib_node_index_t path_index, fib_forward_chain_type_t fct, dpo_id_t *dpo)
enum fib_path_format_flags_t_ fib_format_path_flags_t
index_t fp_bier_fmask
BIER FMask ID.
void lookup_dpo_add_or_lock_w_table_id(u32 table_id, dpo_proto_t proto, lookup_cast_t cast, lookup_input_t input, lookup_table_t table_config, dpo_id_t *dpo)
mpls_eos_bit_t frp_eos
EOS bit for the resolving label.
fib_path_oper_attribute_t_
Enurmeration of path operational (i.e.
u32 fp_classify_table_id
The UDP Encap object this path resolves through.
vl_api_wireguard_peer_flags_t flags
int fib_entry_is_resolved(fib_node_index_t fib_entry_index)
Return !0 is the entry is resolved, i.e.
index_t fib_path_get_resolving_index(fib_node_index_t path_index)
void fib_path_contribute_urpf(fib_node_index_t path_index, index_t urpf)
Contribute the path's adjacency to the list passed.
A representation of a path as described by a route producer.
u8 * format_dpo_type(u8 *s, va_list *args)
format a DPO type
dpo_id_t path_dpo
ID of the Data-path object.
int vnet_sw_interface_is_nbma(vnet_main_t *vnm, u32 sw_if_index)
int dpo_is_adj(const dpo_id_t *dpo)
Return TRUE is the DPO is any type of adjacency.
vnet_main_t * vnet_get_main(void)
u8 * format_bier_table_id(u8 *s, va_list *ap)
Format a BIER table ID.
#define FIB_PATH_OPER_ATTRIBUTES
#define STRUCT_MARK_PTR(v, f)
enum mpls_eos_bit_t_ mpls_eos_bit_t
int fib_path_cmp(fib_node_index_t pi1, fib_node_index_t pi2)
A Drop path - resolve the path on the drop DPO.
void bier_fmask_contribute_forwarding(index_t bfmi, dpo_id_t *dpo)
void fib_node_init(fib_node_t *node, fib_node_type_t type)
index_t fp_bier_imp
The BIER imposition object this is part of the path's key, since the index_t of an imposition object ...
u32 fib_entry_child_add(fib_node_index_t fib_entry_index, fib_node_type_t child_type, fib_node_index_t child_index)
static int dpo_id_is_valid(const dpo_id_t *dpoi)
Return true if the DPO object is valid, i.e.
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
A path that resolves via a BIER impostion object.
An MPLS extension that maintains the path's outgoing labels,.
void fib_path_module_init(void)
int fib_path_is_exclusive(fib_node_index_t path_index)
void bier_imp_lock(index_t bii)
enum fib_node_back_walk_rc_t_ fib_node_back_walk_rc_t
Return code from a back walk function.
void fib_entry_contribute_forwarding(fib_node_index_t fib_entry_index, fib_forward_chain_type_t fct, dpo_id_t *dpo)
static void fib_path_bier_fmask_update(fib_path_t *path, dpo_id_t *dpo)
index_t frp_bier_imp
A path via a BIER imposition object.
void bier_table_ecmp_unlock(index_t bti)
dpo_proto_t fib_forw_chain_type_to_dpo_proto(fib_forward_chain_type_t fct)
Convert from a chain type to the DPO proto it will install.
void load_balance_map_path_state_change(fib_node_index_t path_index)
the state of a path has changed (it has no doubt gone down).
void fib_entry_child_remove(fib_node_index_t fib_entry_index, u32 sibling_index)
fib_node_index_t fp_tbl_id
The FIB table index in which to find the next-hop.
void dpo_copy(dpo_id_t *dst, const dpo_id_t *src)
atomic copy a data-plane object.
u32 index_t
A Data-Path Object is an object that represents actions that are applied to packets are they are swit...
enum fib_path_type_t_ fib_path_type_t
Enurmeration of path types.
u32 dpo_get_urpf(const dpo_id_t *dpo)
Get a uRPF interface for the DPO.
#define vec_add2(V, P, N)
Add N elements to end of vector V, return pointer to new elements in P.
A path that resolves via a BIER [ECMP] Table.
Contribute an object that is to be used to forward IP4 packets.
#define STRUCT_OFFSET_OF(t, f)
void fib_node_deinit(fib_node_t *node)
static vnet_sw_interface_t * vnet_get_sw_interface(vnet_main_t *vnm, u32 sw_if_index)
const fib_prefix_t * fib_entry_get_prefix(fib_node_index_t fib_entry_index)
struct fib_path_t_::@310::@326 classify
dpo_proto_t frp_proto
The protocol of the address below.
struct fib_path_t_::@310::@316 recursive
bier_table_id_t frp_bier_tbl
A path that resolves via a BIER Table.
A path that result in received traffic being recieved/recirculated so that it appears to have arrived...
dpo_id_t fp_ex_dpo
The user provided 'exclusive' DPO.
int fib_path_is_looped(fib_node_index_t path_index)
void adj_child_remove(adj_index_t adj_index, u32 sibling_index)
Remove a child dependent.
#define pool_get(P, E)
Allocate an object E from a pool P (unspecified alignment).
u32 mpls_label_t
A label value only, i.e.
The path has become a permanent drop.
int fib_path_cmp_for_sort(void *v1, void *v2)
#define pool_len(p)
Number of elements in pool vector.
ip46_address_t fp_ip
The next-hop.
enum fib_protocol_t_ fib_protocol_t
Protocol Type.
load_balance_path_t * fib_path_append_nh_for_multipath_hash(fib_node_index_t path_index, fib_forward_chain_type_t fct, load_balance_path_t *hash_key)
void fib_node_register_type(fib_node_type_t type, const fib_node_vft_t *vft)
fib_node_register_type
#define clib_memcpy(d, s, n)
const dpo_id_t * drop_dpo_get(dpo_proto_t proto)
fib_rpf_id_t frp_rpf_id
The RPF-ID.
A local path with a RPF-ID => multicast traffic.
fib_path_type_t fp_type
The type of the path.
u32 frp_sw_if_index
The interface.
dpo_proto_t vnet_link_to_dpo_proto(vnet_link_t linkt)
mpls_eos_bit_t fp_eos
The EOS bit of the resolving label.
void fib_table_entry_special_remove(u32 fib_index, const fib_prefix_t *prefix, fib_source_t source)
Remove a 'special' entry from the FIB.
fib_prefix_t fp_connected
The Connected local address.
static int ip46_address_cmp(const ip46_address_t *ip46_1, const ip46_address_t *ip46_2)
void bier_table_contribute_forwarding(index_t bti, dpo_id_t *dpo)
Recursion constraint of via a host prefix.
description fragment has unexpected format
Recursive resolution source.
fib_node_index_t fib_path_copy(fib_node_index_t path_index, fib_node_index_t path_list_index)
u8 * format_bier_imp(u8 *s, va_list *args)
void bier_fmask_child_remove(fib_node_index_t bfmi, u32 sibling_index)
Aggregate type for a prefix.
fib_path_cfg_flags_t fp_cfg_flags
Configuration Flags.
void fib_entry_contribute_urpf(fib_node_index_t entry_index, index_t urpf)
Contribute the set of Adjacencies that this entry forwards with to build the uRPF list of its childre...
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.
fib_node_t fp_node
A path is a node in the FIB graph.
void adj_unlock(adj_index_t adj_index)
Release a reference counting lock on the adjacency.
A path via a UDP encap object.
dpo_id_t fp_dpo
The Data-path objects through which this path resolves for IP.
#define FIB_PATH_CFG_ATTRIBUTES
Contribute an object that is to be used to forward Ethernet packets.
enum dpo_proto_t_ dpo_proto_t
Data path protocol.
fib_protocol_t dpo_proto_to_fib(dpo_proto_t dpo_proto)
int load_balance_is_drop(const dpo_id_t *dpo)
u16 fib_path_get_weight(fib_node_index_t path_index)
enum lookup_cast_t_ lookup_cast_t
Switch to use the packet's source or destination address for lookup.
void fib_urpf_list_append(index_t ui, u32 sw_if_index)
Append another interface to the list.
struct fib_path_t_::@310::@324 intf_rx
static void fib_path_attached_next_hop_set(fib_path_t *path)
fib_node_index_t fib_path_create_special(fib_node_index_t pl_index, dpo_proto_t nh_proto, fib_path_cfg_flags_t flags, const dpo_id_t *dpo)
fib_rpf_id_t fp_rpf_id
The RPF-ID to tag the packets with.
void bier_disp_table_contribute_forwarding(index_t bdti, dpo_id_t *dpo)
struct fib_path_t_::@310::@320 deag
index_t frp_bier_fmask
Resolving via a BIER Fmask.
u8 * format_fib_path(u8 *s, va_list *args)
The identity of a DPO is a combination of its type and its instance number/index of objects of that t...
u32 fp_sibling
the index of this path in the parent's child list.
Contribute an object that is to be used to forward end-of-stack MPLS packets.
fib_node_bw_reason_flag_t fnbw_reason
The reason/trigger for the backwalk.
format_function_t format_mpls_eos_bit
format_function_t format_vnet_sw_interface_name
#define ADJ_INDEX_INVALID
Invalid ADJ index - used when no adj is known likewise blazoned capitals INVALID speak volumes where ...
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
int adj_is_up(adj_index_t ai)
Return true if the adjacency is 'UP', i.e.
u8 * format_fib_node_bw_reason(u8 *s, va_list *args)
dpo_proto_t fp_nh_proto
The protocol of the next-hop, i.e.
struct fib_path_t_ fib_path_t
A FIB path.
index_t classify_dpo_create(dpo_proto_t proto, u32 classify_table_index)
dpo_type_t dpoi_type
the type
static u8 ip46_address_is_zero(const ip46_address_t *ip46)
STRUCT_MARK(path_hash_start)
This marks the start of the memory area used to hash the path.
adj_index_t fib_path_get_adj(fib_node_index_t path_index)
enum fib_mpls_lsp_mode_t_ fib_mpls_lsp_mode_t
MPLS LSP mode - only valid at the head and tail.
#define pool_put(P, E)
Free an object E in pool P.
struct fib_path_t_::@310::@322 exclusive
index_t fp_via_bier_tbl
the resolving bier-table
fib_mpls_label_t * frp_label_stack
The outgoing MPLS label Stack.
Recursion constraint of via an attahced prefix.
void lookup_dpo_add_or_lock_w_fib_index(fib_node_index_t fib_index, dpo_proto_t proto, lookup_cast_t cast, lookup_input_t input, lookup_table_t table_config, dpo_id_t *dpo)
void fib_path_stack_mpls_disp(fib_node_index_t path_index, dpo_proto_t payload_proto, fib_mpls_lsp_mode_t mode, dpo_id_t *dpo)
fib_node_type_t fn_type
The node's type.
enum fib_path_cfg_attribute_t_ fib_path_cfg_attribute_t
Given a route of the form; q.r.s.t/Y via <interface> <next-hop>
An node in the FIB graph.
dpo_id_t dpo
Exclusive DPO.
void fib_table_unlock(u32 fib_index, fib_protocol_t proto, fib_source_t source)
Take a reference counting lock on the table.
static fib_path_t * fib_path_pool
Pop a Psuedo Wire Control Word.
vl_api_tunnel_mode_t mode
static fib_path_t * fib_path_get(fib_node_index_t index)
ip46_address_t fp_nh
The next-hop.
void dvr_dpo_add_or_lock(u32 sw_if_index, dpo_proto_t dproto, dpo_id_t *dpo)
format_function_t format_ip46_address
u32 fib_entry_get_resolving_interface(fib_node_index_t entry_index)
fib_path_oper_flags_t_
Path flags from the attributes.
struct fib_path_t_::@310::@325 udp_encap
fib_node_index_t fib_table_entry_special_add(u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_entry_flag_t flags)
Add a 'special' entry to the FIB.
#define FOR_EACH_FIB_PATH_OPER_ATTRIBUTE(_item)
#define MPLS_FIB_DEFAULT_TABLE_ID
The path forms part of a recursive loop.
vnet_link_t fib_forw_chain_type_to_link_type(fib_forward_chain_type_t fct)
Convert from a chain type to the adjacency's link type.
fib_node_list_t fn_children
Vector of nodes that depend upon/use/share this node.
u32 frp_classify_table_id
Classify table ID.
int adj_recursive_loop_detect(adj_index_t ai, fib_node_index_t **entry_indicies)
descend the FIB graph looking for loops
int bier_table_id_cmp(const bier_table_id_t *btid1, const bier_table_id_t *btid2)
Compare to BIER table IDs for equality.
void udp_encap_lock(index_t uei)
Contribute an object that is to be used to forward NSH packets.
#define vec_free(V)
Free vector's memory (no header).
u32 fp_udp_encap_id
The UDP Encap object this path resolves through.
static void fib_path_last_lock_gone(fib_node_t *node)
static fib_node_index_t fib_path_get_index(fib_path_t *path)
int fib_entry_recursive_loop_detect(fib_node_index_t entry_index, fib_node_index_t **entry_indicies)
enum fib_path_oper_flags_t_ fib_path_oper_flags_t
Path flags from the attributes.
index_t fp_via_bier_fmask
the resolving bier-fmask
u32 fib_path_get_rpf_id(fib_node_index_t path_index)
u32 fib_node_index_t
A typedef of a node index.
void interface_rx_dpo_add_or_lock(dpo_proto_t proto, u32 sw_if_index, dpo_id_t *dpo)
#define pool_is_free_index(P, I)
Use free bitmap to query whether given index is free.
Don't resolve the path, use the DPO the client provides.
u32 adj_index_t
An index for adjacencies.
__clib_export uword hash_memory(void *p, word n_bytes, uword state)
void fib_prefix_from_ip46_addr(const ip46_address_t *addr, fib_prefix_t *pfx)
Host prefix from ip.
static void fib_path_memory_show(void)
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.
struct fib_path_t_::@310::@319 bier_imp
void fib_prefix_from_mpls_label(mpls_label_t label, mpls_eos_bit_t eos, fib_prefix_t *prf)
static fib_node_back_walk_rc_t fib_path_back_walk_notify(fib_node_t *node, fib_node_back_walk_ctx_t *ctx)
Path resolves via a UDP encap object.
vlib_main_t vlib_node_runtime_t * node
enum lookup_input_t_ lookup_input_t
Switch to use the packet's source or destination address for lookup.
void fib_table_lock(u32 fib_index, fib_protocol_t proto, fib_source_t source)
Release a reference counting lock on the table.
Context passed between object during a back walk.
u32 fib_rpf_id_t
An RPF-ID is numerical value that is used RPF validate.
#define VLIB_CLI_COMMAND(x,...)
u32 fp_pl_index
The index of the path-list to which this path belongs.
static void fib_path_recursive_adj_update(fib_path_t *path, fib_forward_chain_type_t fct, dpo_id_t *dpo)
A path that resolves via a glean adjacency.
int fib_path_is_deag(fib_node_index_t path_index)
void vlib_cli_output(vlib_main_t *vm, char *fmt,...)
vnet_link_t dpo_proto_to_link(dpo_proto_t dp)
format a DPO protocol
fib_node_index_t fp_via_fib
the resolving via fib.
static int fib_path_is_permanent_drop(fib_path_t *path)
struct fib_path_t_::@310::@323 receive
enum vnet_link_t_ vnet_link_t
Link Type: A description of the protocol of packets on the link.
index_t bier_table_ecmp_create_and_lock(const bier_table_id_t *btid)
ip46_address_t fp_addr
The next-hop.
static fib_forward_chain_type_t fib_path_to_chain_type(const fib_path_t *path)
u8 frp_preference
A path preference.
bier_table_id_t fp_bier_tbl
The BIER table's ID.
Path encode context to use when walking a path-list to encode paths.
A deag path using the packet's source not destination address.
enum fib_forward_chain_type_t_ fib_forward_chain_type_t
FIB output chain type.
fib_route_path_flags_t frp_flags
flags on the path
static void fib_path_attached_get_adj(fib_path_t *path, vnet_link_t link, dpo_id_t *dpo)
u32 fp_interface
The interface.
static clib_error_t * show_fib_path_command(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
vlib_log_class_t fib_path_logger
the logger
int dpo_cmp(const dpo_id_t *dpo1, const dpo_id_t *dpo2)
Compare two Data-path objects.
A path that resolves via a BIER F-Mask.
u8 * format_dpo_id(u8 *s, va_list *args)
Format a DPO_id_t oject.
A path that resolves via another table.
format_function_t format_mpls_unicast_label
static void fib_path_unresolve(fib_path_t *path)
fib_route_path_t * rpaths
mpls_label_t frp_local_label
The MPLS local Label to reursively resolve through.
dpo_proto_t fib_path_get_proto(fib_node_index_t path_index)
fib_path_oper_flags_t fp_oper_flags
Members in this last section represent information that is dervied during resolution.
int fib_path_is_recursive_constrained(fib_node_index_t path_index)
void fib_path_list_back_walk(fib_node_index_t path_list_index, fib_node_back_walk_ctx_t *ctx)
adj_index_t adj_glean_add_or_lock(fib_protocol_t proto, vnet_link_t linkt, u32 sw_if_index, const fib_prefix_t *conn)
Glean Adjacency.
fib_prefix_t frp_connected
Glean prefix on a glean path.
enum fib_path_list_walk_rc_t_ fib_path_list_walk_rc_t
return code to control pat-hlist walk
u32 fib_path_get_resolving_interface(fib_node_index_t path_index)
index_t dpoi_index
the index of objects of that type
#define FIB_NODE_INDEX_INVALID
u32 path_weight
weight for the path.
struct fib_path_t_::@310::@327 dvr
struct fib_path_t_::@310::@321 special
u32 adj_child_add(adj_index_t adj_index, fib_node_type_t child_type, fib_node_index_t child_index)
Add a child dependent to an adjacency.
u16 fib_path_get_preference(fib_node_index_t path_index)
#define DPO_INVALID
An initialiser for DPOs declared on the stack.
#define FIB_PATH_DBG(_p, _fmt, _args...)
fib_node_index_t fib_path_create(fib_node_index_t pl_index, const fib_route_path_t *rpath)
u8 fp_weight
UCMP [unnormalised] weigth.
One path from an [EU]CMP set that the client wants to add to a load-balance object.
enum fib_path_cfg_flags_t_ fib_path_cfg_flags_t
Path config flags from the attributes.
u8 * format_dpo_proto(u8 *s, va_list *args)
format a DPO protocol
int fib_path_recursive_loop_detect(fib_node_index_t path_index, fib_node_index_t **entry_indicies)
A FIB graph nodes virtual function table.
static fib_path_cfg_flags_t fib_path_route_flags_to_cfg_flags(const fib_route_path_t *rpath)
struct fib_path_t_::@310::@315 attached
int dpo_is_drop(const dpo_id_t *dpo)
The Drop DPO will drop all packets, no questions asked.
adj_index_t adj_mcast_add_or_lock(fib_protocol_t proto, vnet_link_t link_type, u32 sw_if_index)
Mcast Adjacency.
adj_index_t adj_nbr_add_or_lock(fib_protocol_t nh_proto, vnet_link_t link_type, const ip46_address_t *nh_addr, u32 sw_if_index)
Neighbour Adjacency sub-type.
void dpo_reset(dpo_id_t *dpo)
reset a DPO ID The DPO will be unlocked.
mpls_label_t fp_local_label
The local label to resolve through.
#define vec_foreach(var, vec)
Vector iterator.
A path extension is a per-entry addition to the forwarding information when packets are sent for that...
fib_path_type_t_
Enurmeration of path types.
Contribute an object that is to be used to forward non-end-of-stack MPLS packets. ...
void udp_encap_unlock(index_t uei)
u8 * fib_node_children_format(fib_node_list_t list, u8 *s)
u8 fp_preference
A path preference.
u8 frp_weight
[un]equal cost path weight
static fib_path_t * fib_path_attached_next_hop_get_adj(fib_path_t *path, vnet_link_t link, dpo_id_t *dpo)
fib_source_t fib_entry_get_best_source(fib_node_index_t entry_index)
u32 frp_udp_encap_id
UDP encap ID.
enum fib_path_oper_attribute_t_ fib_path_oper_attribute_t
Enurmeration of path operational (i.e.
Contribute an object that is to be used to forward IP4 packets.
u32 bier_fmask_child_add(fib_node_index_t bfmi, fib_node_type_t child_type, fib_node_index_t child_index)
void bier_imp_unlock(index_t bii)
u32 frp_fib_index
The FIB index to lookup the nexthop Only valid for recursive paths.
fib_forward_chain_type_t fib_forw_chain_type_from_dpo_proto(dpo_proto_t proto)
Convert from a payload-protocol to a chain type.
struct fib_path_t_::@310::@314 attached_next_hop
void fib_path_destroy(fib_node_index_t path_index)
#define FOR_EACH_FIB_PATH_CFG_ATTRIBUTE(_item)
static int fib_path_cmp_i(const fib_path_t *path1, const fib_path_t *path2)
int vnet_sw_interface_is_p2p(vnet_main_t *vnm, u32 sw_if_index)
const ip46_address_t zero_addr
#include <vnet/feature/feature.h>
int fib_path_cmp_w_route_path(fib_node_index_t path_index, const fib_route_path_t *rpath)
fib_route_path_t fpe_path
A description of the path that is being extended.
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)
void udp_encap_contribute_forwarding(index_t uei, dpo_proto_t proto, dpo_id_t *dpo)
static fib_node_t * fib_path_get_node(fib_node_index_t index)
fib_entry_flag_t fib_entry_get_flags(fib_node_index_t fib_entry_index)
static uword pool_elts(void *v)
Number of active elements in a pool.