FD.io VPP  v17.07.01-10-g3be13f0
Vector Packet Processing
fib_path.c File Reference
+ Include dependency graph for fib_path.c:

Go to the source code of this file.

Data Structures

struct  fib_path_t_
 A FIB path. More...
 

Macros

#define FIB_PATH_TYPE_MAX   (FIB_PATH_TYPE_LAST + 1)
 The maximum number of path_types. More...
 
#define FIB_PATH_TYPES
 
#define FOR_EACH_FIB_PATH_TYPE(_item)   for (_item = FIB_PATH_TYPE_FIRST; _item <= FIB_PATH_TYPE_LAST; _item++)
 
#define FIB_PATH_OPER_ATTRIBUTE_MAX   (FIB_PATH_OPER_ATTRIBUTE_LAST + 1)
 The maximum number of path operational attributes. More...
 
#define FIB_PATH_OPER_ATTRIBUTES
 
#define FOR_EACH_FIB_PATH_OPER_ATTRIBUTE(_item)
 
#define FIB_PATH_DBG(_p, _fmt, _args...)
 

Typedefs

typedef enum fib_path_type_t_ fib_path_type_t
 Enurmeration of path types. More...
 
typedef enum fib_path_oper_attribute_t_ fib_path_oper_attribute_t
 Enurmeration of path operational (i.e. More...
 
typedef enum fib_path_oper_flags_t_ fib_path_oper_flags_t
 Path flags from the attributes. More...
 
typedef struct fib_path_t_ fib_path_t
 A FIB path. More...
 

Enumerations

enum  fib_path_type_t_ {
  FIB_PATH_TYPE_FIRST = 0, FIB_PATH_TYPE_ATTACHED_NEXT_HOP = FIB_PATH_TYPE_FIRST, FIB_PATH_TYPE_ATTACHED, FIB_PATH_TYPE_RECURSIVE,
  FIB_PATH_TYPE_SPECIAL, FIB_PATH_TYPE_EXCLUSIVE, FIB_PATH_TYPE_DEAG, FIB_PATH_TYPE_INTF_RX,
  FIB_PATH_TYPE_RECEIVE, FIB_PATH_TYPE_LAST = FIB_PATH_TYPE_RECEIVE
}
 Enurmeration of path types. More...
 
enum  fib_path_oper_attribute_t_ {
  FIB_PATH_OPER_ATTRIBUTE_FIRST = 0, FIB_PATH_OPER_ATTRIBUTE_RECURSIVE_LOOP = FIB_PATH_OPER_ATTRIBUTE_FIRST, FIB_PATH_OPER_ATTRIBUTE_RESOLVED, FIB_PATH_OPER_ATTRIBUTE_ATTACHED,
  FIB_PATH_OPER_ATTRIBUTE_DROP, FIB_PATH_OPER_ATTRIBUTE_LAST = FIB_PATH_OPER_ATTRIBUTE_DROP
}
 Enurmeration of path operational (i.e. More...
 
enum  fib_path_oper_flags_t_ {
  FIB_PATH_OPER_FLAG_NONE = 0, FIB_PATH_OPER_FLAG_RECURSIVE_LOOP = (1 << FIB_PATH_OPER_ATTRIBUTE_RECURSIVE_LOOP), FIB_PATH_OPER_FLAG_DROP = (1 << FIB_PATH_OPER_ATTRIBUTE_DROP), FIB_PATH_OPER_FLAG_RESOLVED = (1 << FIB_PATH_OPER_ATTRIBUTE_RESOLVED),
  FIB_PATH_OPER_FLAG_ATTACHED = (1 << FIB_PATH_OPER_ATTRIBUTE_ATTACHED)
}
 Path flags from the attributes. More...
 

Functions

static fib_path_tfib_path_get (fib_node_index_t index)
 
static fib_node_index_t fib_path_get_index (fib_path_t *path)
 
static fib_node_tfib_path_get_node (fib_node_index_t index)
 
static fib_path_tfib_path_from_fib_node (fib_node_t *node)
 
u8format_fib_path (u8 *s, va_list *args)
 
u8fib_path_format (fib_node_index_t pi, u8 *s)
 
u8fib_path_adj_format (fib_node_index_t pi, u32 indent, u8 *s)
 
static void fib_path_last_lock_gone (fib_node_t *node)
 
static const adj_index_t fib_path_attached_next_hop_get_adj (fib_path_t *path, vnet_link_t link)
 
static void fib_path_attached_next_hop_set (fib_path_t *path)
 
static const adj_index_t fib_path_attached_get_adj (fib_path_t *path, vnet_link_t link)
 
static void fib_path_recursive_adj_update (fib_path_t *path, fib_forward_chain_type_t fct, dpo_id_t *dpo)
 
static int fib_path_is_permanent_drop (fib_path_t *path)
 
static void fib_path_unresolve (fib_path_t *path)
 
static fib_forward_chain_type_t fib_path_to_chain_type (const fib_path_t *path)
 
static fib_node_back_walk_rc_t fib_path_back_walk_notify (fib_node_t *node, fib_node_back_walk_ctx_t *ctx)
 
static void fib_path_memory_show (void)
 
static fib_path_cfg_flags_t fib_path_route_flags_to_cfg_flags (const fib_route_path_t *rpath)
 
fib_node_index_t fib_path_create (fib_node_index_t pl_index, const fib_route_path_t *rpath)
 
fib_node_index_t fib_path_create_special (fib_node_index_t pl_index, fib_protocol_t nh_proto, fib_path_cfg_flags_t flags, const dpo_id_t *dpo)
 
fib_node_index_t fib_path_copy (fib_node_index_t path_index, fib_node_index_t path_list_index)
 
void fib_path_destroy (fib_node_index_t path_index)
 
uword fib_path_hash (fib_node_index_t path_index)
 
static int fib_path_cmp_i (const fib_path_t *path1, const fib_path_t *path2)
 
int fib_path_cmp_for_sort (void *v1, void *v2)
 
int fib_path_cmp (fib_node_index_t pi1, fib_node_index_t pi2)
 
int fib_path_cmp_w_route_path (fib_node_index_t path_index, const fib_route_path_t *rpath)
 
int fib_path_recursive_loop_detect (fib_node_index_t path_index, fib_node_index_t **entry_indicies)
 
int fib_path_resolve (fib_node_index_t path_index)
 
u32 fib_path_get_resolving_interface (fib_node_index_t path_index)
 
adj_index_t fib_path_get_adj (fib_node_index_t path_index)
 
int fib_path_get_weight (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. More...
 
void fib_path_stack_mpls_disp (fib_node_index_t path_index, dpo_proto_t payload_proto, dpo_id_t *dpo)
 
void fib_path_contribute_forwarding (fib_node_index_t path_index, fib_forward_chain_type_t fct, dpo_id_t *dpo)
 
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)
 
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_resolved (fib_node_index_t path_index)
 
int fib_path_is_looped (fib_node_index_t path_index)
 
fib_path_list_walk_rc_t fib_path_encode (fib_node_index_t path_list_index, fib_node_index_t path_index, void *ctx)
 
fib_protocol_t fib_path_get_proto (fib_node_index_t path_index)
 
void fib_path_module_init (void)
 
static clib_error_tshow_fib_path_command (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 

Variables

static const char * fib_path_type_names [] = FIB_PATH_TYPES
 
static const char * fib_path_oper_attribute_names [] = FIB_PATH_OPER_ATTRIBUTES
 
static const char * fib_path_cfg_attribute_names [] = FIB_PATH_CFG_ATTRIBUTES
 
static fib_path_tfib_path_pool
 
static const fib_node_vft_t fib_path_vft
 
static vlib_cli_command_t show_fib_path
 (constructor) VLIB_CLI_COMMAND (show_fib_path) More...
 

Macro Definition Documentation

#define FIB_PATH_DBG (   _p,
  _fmt,
  _args... 
)

Definition at line 337 of file fib_path.c.

#define FIB_PATH_OPER_ATTRIBUTE_MAX   (FIB_PATH_OPER_ATTRIBUTE_LAST + 1)

The maximum number of path operational attributes.

Definition at line 137 of file fib_path.c.

#define FIB_PATH_OPER_ATTRIBUTES
Value:
{ \
}
The path is resolved.
Definition: fib_path.c:119
The path has become a permanent drop.
Definition: fib_path.c:127
The path forms part of a recursive loop.
Definition: fib_path.c:115

Definition at line 139 of file fib_path.c.

#define FIB_PATH_TYPE_MAX   (FIB_PATH_TYPE_LAST + 1)

The maximum number of path_types.

Definition at line 88 of file fib_path.c.

#define FIB_PATH_TYPES
Value:
{ \
[FIB_PATH_TYPE_ATTACHED_NEXT_HOP] = "attached-nexthop", \
[FIB_PATH_TYPE_ATTACHED] = "attached", \
[FIB_PATH_TYPE_RECURSIVE] = "recursive", \
[FIB_PATH_TYPE_SPECIAL] = "special", \
[FIB_PATH_TYPE_EXCLUSIVE] = "exclusive", \
[FIB_PATH_TYPE_DEAG] = "deag", \
[FIB_PATH_TYPE_INTF_RX] = "intf-rx", \
[FIB_PATH_TYPE_RECEIVE] = "receive", \
}
interface receive.
Definition: fib_path.c:74
Attached-nexthop.
Definition: fib_path.c:50

Definition at line 90 of file fib_path.c.

#define FOR_EACH_FIB_PATH_OPER_ATTRIBUTE (   _item)
Value:

Definition at line 145 of file fib_path.c.

#define FOR_EACH_FIB_PATH_TYPE (   _item)    for (_item = FIB_PATH_TYPE_FIRST; _item <= FIB_PATH_TYPE_LAST; _item++)

Definition at line 101 of file fib_path.c.

Typedef Documentation

Enurmeration of path operational (i.e.

derived) attributes

Path flags from the attributes.

typedef struct fib_path_t_ fib_path_t

A FIB path.

Enurmeration of path types.

Enumeration Type Documentation

Enurmeration of path operational (i.e.

derived) attributes

Enumerator
FIB_PATH_OPER_ATTRIBUTE_FIRST 

Marker.

Add new types after this one.

FIB_PATH_OPER_ATTRIBUTE_RECURSIVE_LOOP 

The path forms part of a recursive loop.

FIB_PATH_OPER_ATTRIBUTE_RESOLVED 

The path is resolved.

FIB_PATH_OPER_ATTRIBUTE_ATTACHED 

The path is attached, despite what the next-hop may say.

FIB_PATH_OPER_ATTRIBUTE_DROP 

The path has become a permanent drop.

FIB_PATH_OPER_ATTRIBUTE_LAST 

Marker.

Add new types before this one, then update it.

Definition at line 107 of file fib_path.c.

Path flags from the attributes.

Enumerator
FIB_PATH_OPER_FLAG_NONE 
FIB_PATH_OPER_FLAG_RECURSIVE_LOOP 
FIB_PATH_OPER_FLAG_DROP 
FIB_PATH_OPER_FLAG_RESOLVED 
FIB_PATH_OPER_FLAG_ATTACHED 

Definition at line 153 of file fib_path.c.

Enurmeration of path types.

Enumerator
FIB_PATH_TYPE_FIRST 

Marker.

Add new types after this one.

FIB_PATH_TYPE_ATTACHED_NEXT_HOP 

Attached-nexthop.

An interface and a nexthop are known.

FIB_PATH_TYPE_ATTACHED 

attached.

Only the interface is known.

FIB_PATH_TYPE_RECURSIVE 

recursive.

Only the next-hop is known.

FIB_PATH_TYPE_SPECIAL 

special.

nothing is known. so we drop.

FIB_PATH_TYPE_EXCLUSIVE 

exclusive.

user provided adj.

FIB_PATH_TYPE_DEAG 

deag.

Link to a lookup adj in the next table

FIB_PATH_TYPE_INTF_RX 

interface receive.

FIB_PATH_TYPE_RECEIVE 

receive.

it's for-us.

FIB_PATH_TYPE_LAST 

Marker.

Add new types before this one, then update it.

Definition at line 42 of file fib_path.c.

Function Documentation

u8* fib_path_adj_format ( fib_node_index_t  pi,
u32  indent,
u8 s 
)

Definition at line 500 of file fib_path.c.

+ Here is the call graph for this function:

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 2027 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static const adj_index_t fib_path_attached_get_adj ( fib_path_t path,
vnet_link_t  link 
)
static

Definition at line 592 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static const adj_index_t fib_path_attached_next_hop_get_adj ( fib_path_t path,
vnet_link_t  link 
)
static

Definition at line 535 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void fib_path_attached_next_hop_set ( fib_path_t path)
static

Definition at line 562 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static fib_node_back_walk_rc_t fib_path_back_walk_notify ( fib_node_t node,
fib_node_back_walk_ctx_t ctx 
)
static

Definition at line 817 of file fib_path.c.

+ Here is the call graph for this function:

int fib_path_cmp ( fib_node_index_t  pi1,
fib_node_index_t  pi2 
)

Definition at line 1362 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int fib_path_cmp_for_sort ( void *  v1,
void *  v2 
)

Definition at line 1344 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int fib_path_cmp_i ( const fib_path_t path1,
const fib_path_t path2 
)
static

Definition at line 1269 of file fib_path.c.

+ Here is the caller graph for this function:

int fib_path_cmp_w_route_path ( fib_node_index_t  path_index,
const fib_route_path_t rpath 
)

Definition at line 1374 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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

Definition at line 1869 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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 1772 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

fib_node_index_t fib_path_copy ( fib_node_index_t  path_index,
fib_node_index_t  path_list_index 
)

Definition at line 1197 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

fib_node_index_t fib_path_create ( fib_node_index_t  pl_index,
const fib_route_path_t rpath 
)

Definition at line 1050 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

fib_node_index_t fib_path_create_special ( fib_node_index_t  pl_index,
fib_protocol_t  nh_proto,
fib_path_cfg_flags_t  flags,
const dpo_id_t dpo 
)

Definition at line 1152 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void fib_path_destroy ( fib_node_index_t  path_index)

Definition at line 1230 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

fib_path_list_walk_rc_t fib_path_encode ( fib_node_index_t  path_list_index,
fib_node_index_t  path_index,
void *  ctx 
)

Definition at line 2106 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u8* fib_path_format ( fib_node_index_t  pi,
u8 s 
)

Definition at line 489 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static fib_path_t* fib_path_from_fib_node ( fib_node_t node)
static

Definition at line 359 of file fib_path.c.

+ Here is the caller graph for this function:

static fib_path_t* fib_path_get ( fib_node_index_t  index)
static

Definition at line 341 of file fib_path.c.

+ Here is the caller graph for this function:

adj_index_t fib_path_get_adj ( fib_node_index_t  path_index)

Definition at line 1739 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static fib_node_index_t fib_path_get_index ( fib_path_t path)
static

Definition at line 347 of file fib_path.c.

+ Here is the caller graph for this function:

static fib_node_t* fib_path_get_node ( fib_node_index_t  index)
static

Definition at line 353 of file fib_path.c.

+ Here is the call graph for this function:

fib_protocol_t fib_path_get_proto ( fib_node_index_t  path_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:

u32 fib_path_get_resolving_interface ( fib_node_index_t  path_index)

Definition at line 1709 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int fib_path_get_weight ( fib_node_index_t  path_index)

Definition at line 1754 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

uword fib_path_hash ( fib_node_index_t  path_index)

Definition at line 1251 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int fib_path_is_deag ( fib_node_index_t  path_index)

Definition at line 2073 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int fib_path_is_exclusive ( fib_node_index_t  path_index)

Definition at line 2063 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int fib_path_is_looped ( fib_node_index_t  path_index)

Definition at line 2096 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int fib_path_is_permanent_drop ( fib_path_t path)
static

Definition at line 721 of file fib_path.c.

+ Here is the caller graph for this function:

int fib_path_is_recursive_constrained ( fib_node_index_t  path_index)

Definition at line 2051 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int fib_path_is_resolved ( fib_node_index_t  path_index)

Definition at line 2083 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void fib_path_last_lock_gone ( fib_node_t node)
static

Definition at line 529 of file fib_path.c.

static void fib_path_memory_show ( void  )
static

Definition at line 1000 of file fib_path.c.

+ Here is the call graph for this function:

void fib_path_module_init ( void  )

Definition at line 2159 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void fib_path_recursive_adj_update ( fib_path_t path,
fib_forward_chain_type_t  fct,
dpo_id_t dpo 
)
static

Definition at line 619 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int fib_path_recursive_loop_detect ( fib_node_index_t  path_index,
fib_node_index_t **  entry_indicies 
)

Definition at line 1469 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int fib_path_resolve ( fib_node_index_t  path_index)

Definition at line 1550 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static fib_path_cfg_flags_t fib_path_route_flags_to_cfg_flags ( const fib_route_path_t rpath)
static

Definition at line 1019 of file fib_path.c.

+ Here is the caller graph for this function:

void fib_path_stack_mpls_disp ( fib_node_index_t  path_index,
dpo_proto_t  payload_proto,
dpo_id_t dpo 
)

Definition at line 1831 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static fib_forward_chain_type_t fib_path_to_chain_type ( const fib_path_t path)
static

Definition at line 789 of file fib_path.c.

+ Here is the caller graph for this function:

static void fib_path_unresolve ( fib_path_t path)
static

Definition at line 733 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u8* format_fib_path ( u8 s,
va_list *  args 
)

Definition at line 368 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static clib_error_t* show_fib_path_command ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 2165 of file fib_path.c.

+ Here is the call graph for this function:

Variable Documentation

const char* fib_path_cfg_attribute_names[] = FIB_PATH_CFG_ATTRIBUTES
static

Definition at line 316 of file fib_path.c.

const char* fib_path_oper_attribute_names[] = FIB_PATH_OPER_ATTRIBUTES
static

Definition at line 315 of file fib_path.c.

fib_path_t* fib_path_pool
static

Definition at line 321 of file fib_path.c.

const char* fib_path_type_names[] = FIB_PATH_TYPES
static

Definition at line 314 of file fib_path.c.

const fib_node_vft_t fib_path_vft
static
Initial value:
= {
.fnv_get = fib_path_get_node,
.fnv_last_lock = fib_path_last_lock_gone,
.fnv_back_walk = fib_path_back_walk_notify,
.fnv_mem_show = fib_path_memory_show,
}
static void fib_path_last_lock_gone(fib_node_t *node)
Definition: fib_path.c:529
static void fib_path_memory_show(void)
Definition: fib_path.c:1000
static fib_node_back_walk_rc_t fib_path_back_walk_notify(fib_node_t *node, fib_node_back_walk_ctx_t *ctx)
Definition: fib_path.c:817
static fib_node_t * fib_path_get_node(fib_node_index_t index)
Definition: fib_path.c:353

Definition at line 1011 of file fib_path.c.

vlib_cli_command_t show_fib_path
static
Initial value:
= {
.path = "show fib paths",
.function = show_fib_path_command,
.short_help = "show fib paths",
}
static clib_error_t * show_fib_path_command(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: fib_path.c:2165

(constructor) VLIB_CLI_COMMAND (show_fib_path)

Definition at line 2203 of file fib_path.c.