FD.io VPP  v21.01.1
Vector Packet Processing
fib_path.h File Reference
+ Include dependency graph for fib_path.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  fib_path_encode_ctx_t_
 Path encode context to use when walking a path-list to encode paths. More...
 

Macros

#define FIB_PATH_CFG_ATTRIBUTE_MAX   (FIB_PATH_CFG_ATTRIBUTE_LAST + 1)
 The maximum number of path attributes. More...
 
#define FIB_PATH_CFG_ATTRIBUTES
 
#define FOR_EACH_FIB_PATH_CFG_ATTRIBUTE(_item)
 

Typedefs

typedef 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> More...
 
typedef enum fib_path_cfg_flags_t_ fib_path_cfg_flags_t
 Path config flags from the attributes. More...
 
typedef enum fib_path_format_flags_t_ fib_format_path_flags_t
 
typedef struct fib_path_encode_ctx_t_ fib_path_encode_ctx_t
 Path encode context to use when walking a path-list to encode paths. More...
 

Enumerations

enum  fib_path_cfg_attribute_t_ {
  FIB_PATH_CFG_ATTRIBUTE_FIRST = 0, FIB_PATH_CFG_ATTRIBUTE_DROP = FIB_PATH_CFG_ATTRIBUTE_FIRST, FIB_PATH_CFG_ATTRIBUTE_EXCLUSIVE, FIB_PATH_CFG_ATTRIBUTE_RESOLVE_HOST,
  FIB_PATH_CFG_ATTRIBUTE_RESOLVE_ATTACHED, FIB_PATH_CFG_ATTRIBUTE_ATTACHED, FIB_PATH_CFG_ATTRIBUTE_INTF_RX, FIB_PATH_CFG_ATTRIBUTE_RPF_ID,
  FIB_PATH_CFG_ATTRIBUTE_LOCAL, FIB_PATH_CFG_ATTRIBUTE_ICMP_UNREACH, FIB_PATH_CFG_ATTRIBUTE_ICMP_PROHIBIT, FIB_PATH_CFG_ATTRIBUTE_CLASSIFY,
  FIB_PATH_CFG_ATTRIBUTE_DEAG_SRC, FIB_PATH_CFG_ATTRIBUTE_POP_PW_CW, FIB_PATH_CFG_ATTRIBUTE_GLEAN, FIB_PATH_CFG_ATTRIBUTE_LAST = FIB_PATH_CFG_ATTRIBUTE_GLEAN
}
 Given a route of the form; q.r.s.t/Y via <interface> <next-hop> More...
 
enum  fib_path_cfg_flags_t_ {
  FIB_PATH_CFG_FLAG_NONE = 0, FIB_PATH_CFG_FLAG_DROP = (1 << FIB_PATH_CFG_ATTRIBUTE_DROP), FIB_PATH_CFG_FLAG_EXCLUSIVE = (1 << FIB_PATH_CFG_ATTRIBUTE_EXCLUSIVE), FIB_PATH_CFG_FLAG_RESOLVE_HOST = (1 << FIB_PATH_CFG_ATTRIBUTE_RESOLVE_HOST),
  FIB_PATH_CFG_FLAG_RESOLVE_ATTACHED = (1 << FIB_PATH_CFG_ATTRIBUTE_RESOLVE_ATTACHED), FIB_PATH_CFG_FLAG_LOCAL = (1 << FIB_PATH_CFG_ATTRIBUTE_LOCAL), FIB_PATH_CFG_FLAG_ICMP_UNREACH = (1 << FIB_PATH_CFG_ATTRIBUTE_ICMP_UNREACH), FIB_PATH_CFG_FLAG_ICMP_PROHIBIT = (1 << FIB_PATH_CFG_ATTRIBUTE_ICMP_PROHIBIT),
  FIB_PATH_CFG_FLAG_CLASSIFY = (1 << FIB_PATH_CFG_ATTRIBUTE_CLASSIFY), FIB_PATH_CFG_FLAG_ATTACHED = (1 << FIB_PATH_CFG_ATTRIBUTE_ATTACHED), FIB_PATH_CFG_FLAG_INTF_RX = (1 << FIB_PATH_CFG_ATTRIBUTE_INTF_RX), FIB_PATH_CFG_FLAG_RPF_ID = (1 << FIB_PATH_CFG_ATTRIBUTE_RPF_ID),
  FIB_PATH_CFG_FLAG_DEAG_SRC = (1 << FIB_PATH_CFG_ATTRIBUTE_DEAG_SRC), FIB_PATH_CFG_FLAG_POP_PW_CW = (1 << FIB_PATH_CFG_ATTRIBUTE_POP_PW_CW), FIB_PATH_CFG_FLAG_GLEAN = (1 << FIB_PATH_CFG_ATTRIBUTE_GLEAN)
}
 Path config flags from the attributes. More...
 
enum  fib_path_format_flags_t_ { FIB_PATH_FORMAT_FLAGS_NONE = 0, FIB_PATH_FORMAT_FLAGS_ONE_LINE = (1 << 0) }
 

Functions

u8format_fib_path (u8 *s, va_list *args)
 
fib_node_index_t fib_path_create (fib_node_index_t pl_index, const fib_route_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)
 
int fib_path_cmp (fib_node_index_t path_index1, fib_node_index_t path_index2)
 
int fib_path_cmp_for_sort (void *a1, void *a2)
 
int fib_path_cmp_w_route_path (fib_node_index_t path_index, const fib_route_path_t *rpath)
 
fib_node_index_t fib_path_copy (fib_node_index_t path_index, fib_node_index_t path_list_index)
 
int fib_path_resolve (fib_node_index_t path_index)
 
int fib_path_is_resolved (fib_node_index_t path_index)
 
int fib_path_is_recursive_constrained (fib_node_index_t path_index)
 
int fib_path_is_exclusive (fib_node_index_t path_index)
 
int fib_path_is_deag (fib_node_index_t path_index)
 
int fib_path_is_looped (fib_node_index_t path_index)
 
dpo_proto_t fib_path_get_proto (fib_node_index_t path_index)
 
void fib_path_destroy (fib_node_index_t path_index)
 
uword fib_path_hash (fib_node_index_t path_index)
 
load_balance_path_tfib_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_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)
 
void fib_path_contribute_forwarding (fib_node_index_t path_index, fib_forward_chain_type_t type, dpo_id_t *dpo)
 
void fib_path_contribute_urpf (fib_node_index_t path_index, index_t urpf)
 Contribute the path's adjacency to the list passed. More...
 
adj_index_t fib_path_get_adj (fib_node_index_t path_index)
 
int fib_path_recursive_loop_detect (fib_node_index_t path_index, fib_node_index_t **entry_indicies)
 
u32 fib_path_get_resolving_interface (fib_node_index_t fib_entry_index)
 
index_t fib_path_get_resolving_index (fib_node_index_t path_index)
 
u16 fib_path_get_weight (fib_node_index_t path_index)
 
u16 fib_path_get_preference (fib_node_index_t path_index)
 
u32 fib_path_get_rpf_id (fib_node_index_t path_index)
 
void fib_path_module_init (void)
 
fib_path_list_walk_rc_t fib_path_encode (fib_node_index_t path_list_index, fib_node_index_t path_index, const struct fib_path_ext_t_ *ext_list, void *ctx)
 

Macro Definition Documentation

◆ FIB_PATH_CFG_ATTRIBUTE_MAX

#define FIB_PATH_CFG_ATTRIBUTE_MAX   (FIB_PATH_CFG_ATTRIBUTE_LAST + 1)

The maximum number of path attributes.

Definition at line 115 of file fib_path.h.

◆ FIB_PATH_CFG_ATTRIBUTES

#define FIB_PATH_CFG_ATTRIBUTES
Value:
{ \
[FIB_PATH_CFG_ATTRIBUTE_RESOLVE_ATTACHED] = "resolve-attached", \
[FIB_PATH_CFG_ATTRIBUTE_ICMP_PROHIBIT] = "icmp-prohibit", \
[FIB_PATH_CFG_ATTRIBUTE_INTF_RX] = "interface-rx", \
}
The path is forced to a drop, whatever the next-hop info says.
Definition: fib_path.h:52
The path is a deag with rpf-id.
Definition: fib_path.h:77
The path is an interface recieve.
Definition: fib_path.h:81
The path uses an adj that is exclusive.
Definition: fib_path.h:57
Recursion constraint via attached.
Definition: fib_path.h:65
The path reolves via an ICMP unreachable.
Definition: fib_path.h:85
The deag path does a source lookup.
Definition: fib_path.h:97
The path reolves via a classify.
Definition: fib_path.h:93
The path is a glean.
Definition: fib_path.h:105
The path is attached.
Definition: fib_path.h:69
The path reolves via an ICMP prohibit.
Definition: fib_path.h:89
The path is a for-us path.
Definition: fib_path.h:73
Recursion constraint via host.
Definition: fib_path.h:61
The path pops a Psuedo Wire Control Word.
Definition: fib_path.h:101

Definition at line 117 of file fib_path.h.

◆ FOR_EACH_FIB_PATH_CFG_ATTRIBUTE

#define FOR_EACH_FIB_PATH_CFG_ATTRIBUTE (   _item)
Value:

Definition at line 134 of file fib_path.h.

Typedef Documentation

◆ fib_format_path_flags_t

◆ fib_path_cfg_attribute_t

Given a route of the form; q.r.s.t/Y via <interface> <next-hop>

The prefix is: q.r.s.t./Y the path is: 'via <interface> <next-hop>

The path is the description of where to send the traffic, and the the prefix is a description of which traffic to send. It is the aim of the FIB to resolve the path, i.e. to find the corresponding adjacency to match the path's description. Enurmeration of path configuration attributes

◆ fib_path_cfg_flags_t

Path config flags from the attributes.

◆ fib_path_encode_ctx_t

Path encode context to use when walking a path-list to encode paths.

Enumeration Type Documentation

◆ fib_path_cfg_attribute_t_

Given a route of the form; q.r.s.t/Y via <interface> <next-hop>

The prefix is: q.r.s.t./Y the path is: 'via <interface> <next-hop>

The path is the description of where to send the traffic, and the the prefix is a description of which traffic to send. It is the aim of the FIB to resolve the path, i.e. to find the corresponding adjacency to match the path's description. Enurmeration of path configuration attributes

Enumerator
FIB_PATH_CFG_ATTRIBUTE_FIRST 

Marker.

Add new types after this one.

FIB_PATH_CFG_ATTRIBUTE_DROP 

The path is forced to a drop, whatever the next-hop info says.

something somewhere knows better...

FIB_PATH_CFG_ATTRIBUTE_EXCLUSIVE 

The path uses an adj that is exclusive.

I.e. it is known only by the source of the route.

FIB_PATH_CFG_ATTRIBUTE_RESOLVE_HOST 

Recursion constraint via host.

FIB_PATH_CFG_ATTRIBUTE_RESOLVE_ATTACHED 

Recursion constraint via attached.

FIB_PATH_CFG_ATTRIBUTE_ATTACHED 

The path is attached.

FIB_PATH_CFG_ATTRIBUTE_INTF_RX 

The path is a for-us path.

FIB_PATH_CFG_ATTRIBUTE_RPF_ID 

The path is a deag with rpf-id.

FIB_PATH_CFG_ATTRIBUTE_LOCAL 

The path is an interface recieve.

FIB_PATH_CFG_ATTRIBUTE_ICMP_UNREACH 

The path reolves via an ICMP unreachable.

FIB_PATH_CFG_ATTRIBUTE_ICMP_PROHIBIT 

The path reolves via an ICMP prohibit.

FIB_PATH_CFG_ATTRIBUTE_CLASSIFY 

The path reolves via a classify.

FIB_PATH_CFG_ATTRIBUTE_DEAG_SRC 

The deag path does a source lookup.

FIB_PATH_CFG_ATTRIBUTE_POP_PW_CW 

The path pops a Psuedo Wire Control Word.

FIB_PATH_CFG_ATTRIBUTE_GLEAN 

The path is a glean.

FIB_PATH_CFG_ATTRIBUTE_LAST 

Marker.

Add new types before this one, then update it.

Definition at line 43 of file fib_path.h.

◆ fib_path_cfg_flags_t_

Path config flags from the attributes.

Enumerator
FIB_PATH_CFG_FLAG_NONE 
FIB_PATH_CFG_FLAG_DROP 
FIB_PATH_CFG_FLAG_EXCLUSIVE 
FIB_PATH_CFG_FLAG_RESOLVE_HOST 
FIB_PATH_CFG_FLAG_RESOLVE_ATTACHED 
FIB_PATH_CFG_FLAG_LOCAL 
FIB_PATH_CFG_FLAG_ICMP_UNREACH 
FIB_PATH_CFG_FLAG_ICMP_PROHIBIT 
FIB_PATH_CFG_FLAG_CLASSIFY 
FIB_PATH_CFG_FLAG_ATTACHED 
FIB_PATH_CFG_FLAG_INTF_RX 
FIB_PATH_CFG_FLAG_RPF_ID 
FIB_PATH_CFG_FLAG_DEAG_SRC 
FIB_PATH_CFG_FLAG_POP_PW_CW 
FIB_PATH_CFG_FLAG_GLEAN 

Definition at line 142 of file fib_path.h.

◆ fib_path_format_flags_t_

Enumerator
FIB_PATH_FORMAT_FLAGS_NONE 
FIB_PATH_FORMAT_FLAGS_ONE_LINE 

Definition at line 160 of file fib_path.h.

Function Documentation

◆ fib_path_append_nh_for_multipath_hash()

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 
)

Definition at line 2609 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_cmp()

int fib_path_cmp ( fib_node_index_t  path_index1,
fib_node_index_t  path_index2 
)

Definition at line 1666 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_cmp_for_sort()

int fib_path_cmp_for_sort ( void *  a1,
void *  a2 
)

Definition at line 1639 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_cmp_w_route_path()

int fib_path_cmp_w_route_path ( fib_node_index_t  path_index,
const fib_route_path_t rpath 
)

Definition at line 1678 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_contribute_forwarding()

void fib_path_contribute_forwarding ( fib_node_index_t  path_index,
fib_forward_chain_type_t  type,
dpo_id_t dpo 
)

Definition at line 2406 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_contribute_urpf()

void fib_path_contribute_urpf ( fib_node_index_t  path_index,
index_t  urpf 
)

Contribute the path's adjacency to the list passed.

By calling this function over all paths, recursively, a child can construct its full set of forwarding adjacencies, and hence its uRPF list.

Definition at line 2278 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_copy()

fib_node_index_t fib_path_copy ( fib_node_index_t  path_index,
fib_node_index_t  path_list_index 
)

Definition at line 1472 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_create()

fib_node_index_t fib_path_create ( fib_node_index_t  pl_index,
const fib_route_path_t path 
)

Definition at line 1271 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_create_special()

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 
)

Definition at line 1426 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_destroy()

void fib_path_destroy ( fib_node_index_t  path_index)

Definition at line 1505 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_encode()

fib_path_list_walk_rc_t fib_path_encode ( fib_node_index_t  path_list_index,
fib_node_index_t  path_index,
const struct fib_path_ext_t_ ext_list,
void *  ctx 
)

◆ fib_path_get_adj()

adj_index_t fib_path_get_adj ( fib_node_index_t  path_index)

Definition at line 2217 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_get_preference()

u16 fib_path_get_preference ( fib_node_index_t  path_index)

Definition at line 2243 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_get_proto()

dpo_proto_t fib_path_get_proto ( fib_node_index_t  path_index)

Definition at line 2777 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_get_resolving_index()

index_t fib_path_get_resolving_index ( fib_node_index_t  path_index)

Definition at line 2185 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_get_resolving_interface()

u32 fib_path_get_resolving_interface ( fib_node_index_t  fib_entry_index)

Definition at line 2149 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_get_rpf_id()

u32 fib_path_get_rpf_id ( fib_node_index_t  path_index)

Definition at line 2255 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_get_weight()

u16 fib_path_get_weight ( fib_node_index_t  path_index)

Definition at line 2231 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_hash()

uword fib_path_hash ( fib_node_index_t  path_index)

Definition at line 1526 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_is_deag()

int fib_path_is_deag ( fib_node_index_t  path_index)

Definition at line 2660 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_is_exclusive()

int fib_path_is_exclusive ( fib_node_index_t  path_index)

Definition at line 2650 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_is_looped()

int fib_path_is_looped ( fib_node_index_t  path_index)

Definition at line 2683 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_is_recursive_constrained()

int fib_path_is_recursive_constrained ( fib_node_index_t  path_index)

Definition at line 2638 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_is_resolved()

int fib_path_is_resolved ( fib_node_index_t  path_index)

Definition at line 2670 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_module_init()

void fib_path_module_init ( void  )

Definition at line 2787 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_recursive_loop_detect()

int fib_path_recursive_loop_detect ( fib_node_index_t  path_index,
fib_node_index_t **  entry_indicies 
)

Definition at line 1800 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_resolve()

int fib_path_resolve ( fib_node_index_t  path_index)

Definition at line 1898 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fib_path_stack_mpls_disp()

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 
)

Definition at line 2345 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ format_fib_path()

u8* format_fib_path ( u8 s,
va_list *  args 
)

Definition at line 443 of file fib_path.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function: