FD.io VPP  v17.04-9-g99c0734
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_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 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_proto_to_chain_type (fib_protocol_t proto)
 
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, fib_protocol_t nh_proto, fib_path_cfg_flags_t flags, 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_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 (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)
 
int 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 332 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 129 of file fib_path.c.

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

Definition at line 131 of file fib_path.c.

#define FIB_PATH_TYPE_MAX   (FIB_PATH_TYPE_LAST + 1)

The maximum number of path_types.

Definition at line 81 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_RECEIVE] = "receive", \
}
Attached-nexthop.
Definition: fib_path.c:47

Definition at line 83 of file fib_path.c.

#define FOR_EACH_FIB_PATH_OPER_ATTRIBUTE (   _item)
Value:

Definition at line 137 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 93 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 99 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 145 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_RECEIVE 

receive.

it's for-us.

FIB_PATH_TYPE_LAST 

Marker.

Add new types before this one, then update it.

Definition at line 39 of file fib_path.c.

Function Documentation

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

Definition at line 492 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller 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 1878 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 527 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 554 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 762 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 1284 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 1266 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 1194 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_w_route_path ( fib_node_index_t  path_index,
const fib_route_path_t rpath 
)

Definition at line 1296 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 1742 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 1684 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 1122 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,
fib_protocol_t  nh_proto,
fib_path_cfg_flags_t  flags,
const fib_route_path_t rpath 
)

Definition at line 984 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 1077 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 1155 of file fib_path.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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

Definition at line 1955 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 481 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 354 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 336 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 1651 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 342 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 348 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 1998 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 1622 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 1666 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 1176 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 1922 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 1912 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 1945 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 675 of file fib_path.c.

+ Here is the caller graph for this function:

int fib_path_is_recursive ( fib_node_index_t  path_index)

Definition at line 1902 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 1932 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 521 of file fib_path.c.

static void fib_path_memory_show ( void  )
static

Definition at line 942 of file fib_path.c.

+ Here is the call graph for this function:

void fib_path_module_init ( void  )

Definition at line 2008 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_proto_to_chain_type ( fib_protocol_t  proto)
static

Definition at line 742 of file fib_path.c.

+ 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 586 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 1384 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 1464 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 961 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 687 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 363 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 2014 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 311 of file fib_path.c.

const char* fib_path_oper_attribute_names[] = FIB_PATH_OPER_ATTRIBUTES
static

Definition at line 310 of file fib_path.c.

fib_path_t* fib_path_pool
static

Definition at line 316 of file fib_path.c.

const char* fib_path_type_names[] = FIB_PATH_TYPES
static

Definition at line 309 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:521
static void fib_path_memory_show(void)
Definition: fib_path.c:942
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:762
static fib_node_t * fib_path_get_node(fib_node_index_t index)
Definition: fib_path.c:348

Definition at line 953 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:2014

(constructor) VLIB_CLI_COMMAND (show_fib_path)

Definition at line 2052 of file fib_path.c.