FD.io VPP  v19.04.4-rc0-5-ge88582fac
Vector Packet Processing
fib_walk.c File Reference
+ Include dependency graph for fib_walk.c:

Go to the source code of this file.

Data Structures

struct  fib_walk_t_
 A representation of a graph walk from a parent object to its children. More...
 
struct  fib_walk_queue_t_
 A represenation of one queue of walk. More...
 
struct  fib_walk_queues_t_
 A set of priority queues for outstanding walks. More...
 
struct  fib_walk_history_t_
 

Macros

#define FIB_WALK_QUEUE_STATS_NUM   ((fib_walk_queue_stats_t)(FIB_WALK_COMPLETED+1))
 
#define FIB_WALK_QUEUE_STATS
 
#define FOR_EACH_FIB_WALK_QUEUE_STATS(_wqs)
 
#define HISTOGRAM_VISITS_PER_WALK_MAX   (1<<23)
 Histogram stats on the lenths of each walk in elemenets visited. More...
 
#define HISTOGRAM_VISITS_PER_WALK_INCR   (1<<10)
 
#define HISTOGRAM_VISITS_PER_WALK_N_BUCKETS   (HISTOGRAM_VISITS_PER_WALK_MAX/HISTOGRAM_VISITS_PER_WALK_INCR)
 
#define HISTORY_N_WALKS   128
 History of state for the last 128 walks. More...
 
#define MAX_HISTORY_REASONS   16
 
#define FIB_WALK_DBG(_walk, _fmt, _args...)
 
#define FIB_WALK_N_SLEEP   (FIB_WALK_LONG_SLEEP+1)
 
#define N_TIME_BUCKETS   128
 Histogram on the amount of work done (in msecs) in each walk. More...
 
#define TIME_INCREMENTS   (N_TIME_BUCKETS/2)
 
#define N_ELTS_BUCKETS   128
 Histogram on the number of nodes visted in each quota. More...
 
#define USEC   1000000
 

Typedefs

typedef enum fib_walk_flags_t_ fib_walk_flags_t
 The flags on a walk. More...
 
typedef struct fib_walk_t_ fib_walk_t
 A representation of a graph walk from a parent object to its children. More...
 
typedef enum fib_walk_queue_stats_t_ fib_walk_queue_stats_t
 Statistics maintained per-walk queue. More...
 
typedef struct fib_walk_queue_t_ fib_walk_queue_t
 A represenation of one queue of walk. More...
 
typedef struct fib_walk_queues_t_ fib_walk_queues_t
 A set of priority queues for outstanding walks. More...
 
typedef struct fib_walk_history_t_ fib_walk_history_t
 
typedef enum fib_walk_advance_rc_t_ fib_walk_advance_rc_t
 return code when advancing a walk More...
 
typedef enum fib_walk_sleep_type_t_ fib_walk_sleep_type_t
 Enurmerate the times of sleep between walks More...
 
typedef enum fib_walk_process_event_t_ fib_walk_process_event
 Events sent to the FIB walk process. More...
 

Enumerations

enum  fib_walk_flags_t_ { FIB_WALK_FLAG_SYNC = (1 << 0), FIB_WALK_FLAG_ASYNC = (1 << 1), FIB_WALK_FLAG_EXECUTING = (1 << 2) }
 The flags on a walk. More...
 
enum  fib_walk_queue_stats_t_ { FIB_WALK_SCHEDULED, FIB_WALK_COMPLETED }
 Statistics maintained per-walk queue. More...
 
enum  fib_walk_advance_rc_t_ { FIB_WALK_ADVANCE_DONE, FIB_WALK_ADVANCE_MORE, FIB_WALK_ADVANCE_MERGE }
 return code when advancing a walk More...
 
enum  fib_walk_sleep_type_t_ { FIB_WALK_SHORT_SLEEP, FIB_WALK_LONG_SLEEP }
 Enurmerate the times of sleep between walks More...
 
enum  fib_walk_process_event_t_ { FIB_WALK_PROCESS_EVENT_DATA, FIB_WALK_PROCESS_EVENT_ENABLE, FIB_WALK_PROCESS_EVENT_DISABLE }
 Events sent to the FIB walk process. More...
 

Functions

static u8format_fib_walk (u8 *s, va_list *ap)
 
u8format_fib_walk_priority (u8 *s, va_list *ap)
 
static u8format_fib_walk_queue_stats (u8 *s, va_list *ap)
 
static index_t fib_walk_get_index (fib_walk_t *fwalk)
 
static fib_walk_tfib_walk_get (index_t fwi)
 
u32 fib_walk_queue_get_size (fib_walk_priority_t prio)
 
static fib_node_index_t fib_walk_queue_get_front (fib_walk_priority_t prio)
 
static void fib_walk_destroy (index_t fwi)
 
static fib_walk_advance_rc_t fib_walk_advance (fib_node_index_t fwi)
 Advance the walk one element in its work list. More...
 
f64 fib_walk_process_queues (vlib_main_t *vm, const f64 quota)
 Service the queues This is not declared static so that it can be unit tested - i know i know... More...
 
static uword fib_walk_process (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *f)
 The 'fib-walk' process's main loop. More...
 
static fib_walk_tfib_walk_alloc (fib_node_type_t parent_type, fib_node_index_t parent_index, fib_walk_flags_t flags, fib_node_back_walk_ctx_t *ctx)
 Allocate a new walk object. More...
 
static index_t fib_walk_prio_queue_enquue (fib_walk_priority_t prio, fib_walk_t *fwalk)
 Enqueue a walk onto the appropriate priority queue. More...
 
void fib_walk_async (fib_node_type_t parent_type, fib_node_index_t parent_index, fib_walk_priority_t prio, fib_node_back_walk_ctx_t *ctx)
 
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. More...
 
static fib_node_tfib_walk_get_node (fib_node_index_t index)
 
static void fib_walk_last_lock_gone (fib_node_t *node)
 Walk objects are not parents, nor are they locked. More...
 
static fib_walk_tfib_walk_get_from_node (fib_node_t *node)
 
static fib_node_back_walk_rc_t fib_walk_back_walk_notify (fib_node_t *node, fib_node_back_walk_ctx_t *ctx)
 Another back walk has reach this walk. More...
 
void fib_walk_module_init (void)
 
u8format_fib_node_bw_reason (u8 *s, va_list *args)
 
static clib_error_tfib_walk_show (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
static clib_error_tfib_walk_set_quota (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
static clib_error_tfib_walk_set_histogram_elements_size (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
static clib_error_tfib_walk_clear (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
void fib_walk_process_enable (void)
 
void fib_walk_process_disable (void)
 
static clib_error_tfib_walk_process_enable_disable (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 

Variables

vlib_log_class_t fib_walk_logger
 
static fib_walk_tfib_walk_pool
 The pool of all walk objects. More...
 
static const char *const fib_walk_queue_stats_names [] = FIB_WALK_QUEUE_STATS
 The names of the walk stats. More...
 
static const char *const fib_node_bw_reason_names [] = FIB_NODE_BW_REASONS
 The names of the walk reasons. More...
 
static fib_walk_queues_t fib_walk_queues
 The global queues of outstanding walks. More...
 
static const char *const fib_walk_priority_names [] = FIB_WALK_PRIORITIES
 The names of the walk priorities. More...
 
static u64 fib_walk_hist_vists_per_walk [HISTOGRAM_VISITS_PER_WALK_N_BUCKETS]
 
static u32 history_last_walk_pos
 
static fib_walk_history_t fib_walk_history [HISTORY_N_WALKS]
 
static f64 fib_walk_sleep_duration []
 Durations for the sleep types. More...
 
static f64 quota = 1e-4
 The time quota for a walk. More...
 
static u64 fib_walk_work_time_taken [N_TIME_BUCKETS]
 
static u32 fib_walk_work_nodes_visited_incr = 2
 
static u64 fib_walk_work_nodes_visited [N_ELTS_BUCKETS]
 
static u64 fib_walk_sleep_lengths [2]
 Histogram of the sleep lengths. More...
 
static vlib_node_registration_t fib_walk_process_node
 (constructor) VLIB_REGISTER_NODE (fib_walk_process_node) More...
 
static const fib_node_vft_t fib_walk_vft
 The FIB walk's graph node virtual function table. More...
 
static vlib_cli_command_t fib_walk_show_command
 (constructor) VLIB_CLI_COMMAND (fib_walk_show_command) More...
 
static vlib_cli_command_t fib_walk_set_quota_command
 (constructor) VLIB_CLI_COMMAND (fib_walk_set_quota_command) More...
 
static vlib_cli_command_t fib_walk_set_histogram_elements_size_command
 (constructor) VLIB_CLI_COMMAND (fib_walk_set_histogram_elements_size_command) More...
 
static vlib_cli_command_t fib_walk_clear_command
 (constructor) VLIB_CLI_COMMAND (fib_walk_clear_command) More...
 
static vlib_cli_command_t fib_walk_process_command
 (constructor) VLIB_CLI_COMMAND (fib_walk_process_command) More...
 

Macro Definition Documentation

◆ FIB_WALK_DBG

#define FIB_WALK_DBG (   _walk,
  _fmt,
  _args... 
)
Value:
{ \
vlib_log_debug(fib_walk_logger, \
"[%U]:" _fmt, \
##_args); \
}
static index_t fib_walk_get_index(fib_walk_t *fwalk)
Definition: fib_walk.c:220
vlib_log_class_t fib_walk_logger
Definition: fib_walk.c:19
static u8 * format_fib_walk(u8 *s, va_list *ap)
Definition: fib_walk.c:958

Definition at line 191 of file fib_walk.c.

◆ FIB_WALK_N_SLEEP

#define FIB_WALK_N_SLEEP   (FIB_WALK_LONG_SLEEP+1)

Definition at line 411 of file fib_walk.c.

◆ FIB_WALK_QUEUE_STATS

#define FIB_WALK_QUEUE_STATS
Value:
{ \
[FIB_WALK_SCHEDULED] = "scheduled", \
[FIB_WALK_COMPLETED] = "completed", \
}

Definition at line 110 of file fib_walk.c.

◆ FIB_WALK_QUEUE_STATS_NUM

#define FIB_WALK_QUEUE_STATS_NUM   ((fib_walk_queue_stats_t)(FIB_WALK_COMPLETED+1))

Definition at line 108 of file fib_walk.c.

◆ FOR_EACH_FIB_WALK_QUEUE_STATS

#define FOR_EACH_FIB_WALK_QUEUE_STATS (   _wqs)
Value:
for ((_wqs) = FIB_WALK_SCHEDULED; \
(_wqs)++)
#define FIB_WALK_QUEUE_STATS_NUM
Definition: fib_walk.c:108

Definition at line 115 of file fib_walk.c.

◆ HISTOGRAM_VISITS_PER_WALK_INCR

#define HISTOGRAM_VISITS_PER_WALK_INCR   (1<<10)

Definition at line 168 of file fib_walk.c.

◆ HISTOGRAM_VISITS_PER_WALK_MAX

#define HISTOGRAM_VISITS_PER_WALK_MAX   (1<<23)

Histogram stats on the lenths of each walk in elemenets visited.

Store upto 1<<23 elements in increments of 1<<10

Definition at line 167 of file fib_walk.c.

◆ HISTOGRAM_VISITS_PER_WALK_N_BUCKETS

#define HISTOGRAM_VISITS_PER_WALK_N_BUCKETS   (HISTOGRAM_VISITS_PER_WALK_MAX/HISTOGRAM_VISITS_PER_WALK_INCR)

Definition at line 169 of file fib_walk.c.

◆ HISTORY_N_WALKS

#define HISTORY_N_WALKS   128

History of state for the last 128 walks.

Definition at line 176 of file fib_walk.c.

◆ MAX_HISTORY_REASONS

#define MAX_HISTORY_REASONS   16

Definition at line 177 of file fib_walk.c.

◆ N_ELTS_BUCKETS

#define N_ELTS_BUCKETS   128

Histogram on the number of nodes visted in each quota.

Definition at line 447 of file fib_walk.c.

◆ N_TIME_BUCKETS

#define N_TIME_BUCKETS   128

Histogram on the amount of work done (in msecs) in each walk.

Definition at line 440 of file fib_walk.c.

◆ TIME_INCREMENTS

#define TIME_INCREMENTS   (N_TIME_BUCKETS/2)

Definition at line 441 of file fib_walk.c.

◆ USEC

#define USEC   1000000

Typedef Documentation

◆ fib_walk_advance_rc_t

return code when advancing a walk

◆ fib_walk_flags_t

The flags on a walk.

◆ fib_walk_history_t

◆ fib_walk_process_event

Events sent to the FIB walk process.

◆ fib_walk_queue_stats_t

Statistics maintained per-walk queue.

◆ fib_walk_queue_t

A represenation of one queue of walk.

◆ fib_walk_queues_t

A set of priority queues for outstanding walks.

◆ fib_walk_sleep_type_t

Enurmerate the times of sleep between walks

◆ fib_walk_t

typedef struct fib_walk_t_ fib_walk_t

A representation of a graph walk from a parent object to its children.

Enumeration Type Documentation

◆ fib_walk_advance_rc_t_

return code when advancing a walk

Enumerator
FIB_WALK_ADVANCE_DONE 

The walk is complete.

FIB_WALK_ADVANCE_MORE 

the walk has more work

FIB_WALK_ADVANCE_MERGE 

The walk merged with the one in front.

Definition at line 316 of file fib_walk.c.

◆ fib_walk_flags_t_

The flags on a walk.

Enumerator
FIB_WALK_FLAG_SYNC 

A synchronous walk.

This walk will run to completion, i.e. visit ALL the children. It is a depth first traversal of the graph.

FIB_WALK_FLAG_ASYNC 

An asynchronous walk.

This walk will be scheduled to run in the background. It will thus visits the children at a later point in time. It is a depth first traversal of the graph.

FIB_WALK_FLAG_EXECUTING 

An indication that the walk is currently executing.

Definition at line 24 of file fib_walk.c.

◆ fib_walk_process_event_t_

Events sent to the FIB walk process.

Enumerator
FIB_WALK_PROCESS_EVENT_DATA 
FIB_WALK_PROCESS_EVENT_ENABLE 
FIB_WALK_PROCESS_EVENT_DISABLE 

Definition at line 549 of file fib_walk.c.

◆ fib_walk_queue_stats_t_

Statistics maintained per-walk queue.

Enumerator
FIB_WALK_SCHEDULED 
FIB_WALK_COMPLETED 

Definition at line 103 of file fib_walk.c.

◆ fib_walk_sleep_type_t_

Enurmerate the times of sleep between walks

Enumerator
FIB_WALK_SHORT_SLEEP 
FIB_WALK_LONG_SLEEP 

Definition at line 405 of file fib_walk.c.

Function Documentation

◆ fib_walk_advance()

static fib_walk_advance_rc_t fib_walk_advance ( fib_node_index_t  fwi)
static

Advance the walk one element in its work list.

Definition at line 336 of file fib_walk.c.

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

◆ fib_walk_alloc()

static fib_walk_t* fib_walk_alloc ( fib_node_type_t  parent_type,
fib_node_index_t  parent_index,
fib_walk_flags_t  flags,
fib_node_back_walk_ctx_t ctx 
)
static

Allocate a new walk object.

Definition at line 626 of file fib_walk.c.

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

◆ fib_walk_async()

void fib_walk_async ( fib_node_type_t  parent_type,
fib_node_index_t  parent_index,
fib_walk_priority_t  prio,
fib_node_back_walk_ctx_t ctx 
)

Definition at line 688 of file fib_walk.c.

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

◆ fib_walk_back_walk_notify()

static fib_node_back_walk_rc_t fib_walk_back_walk_notify ( fib_node_t node,
fib_node_back_walk_ctx_t ctx 
)
static

Another back walk has reach this walk.

Megre them so there is only one left. It is this node being visited that will remain, so copy or merge the context onto it.

Definition at line 894 of file fib_walk.c.

+ Here is the call graph for this function:

◆ fib_walk_clear()

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

Definition at line 1182 of file fib_walk.c.

+ Here is the call graph for this function:

◆ fib_walk_destroy()

static void fib_walk_destroy ( index_t  fwi)
static

Definition at line 251 of file fib_walk.c.

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

◆ fib_walk_get()

static fib_walk_t* fib_walk_get ( index_t  fwi)
static

Definition at line 226 of file fib_walk.c.

+ Here is the caller graph for this function:

◆ fib_walk_get_from_node()

static fib_walk_t* fib_walk_get_from_node ( fib_node_t node)
static

Definition at line 882 of file fib_walk.c.

+ Here is the caller graph for this function:

◆ fib_walk_get_index()

static index_t fib_walk_get_index ( fib_walk_t fwalk)
static

Definition at line 220 of file fib_walk.c.

+ Here is the caller graph for this function:

◆ fib_walk_get_node()

static fib_node_t* fib_walk_get_node ( fib_node_index_t  index)
static

Definition at line 862 of file fib_walk.c.

+ Here is the call graph for this function:

◆ fib_walk_last_lock_gone()

static void fib_walk_last_lock_gone ( fib_node_t node)
static

Walk objects are not parents, nor are they locked.

are no-ops

Definition at line 876 of file fib_walk.c.

◆ fib_walk_module_init()

void fib_walk_module_init ( void  )

Definition at line 944 of file fib_walk.c.

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

◆ fib_walk_prio_queue_enquue()

static index_t fib_walk_prio_queue_enquue ( fib_walk_priority_t  prio,
fib_walk_t fwalk 
)
static

Enqueue a walk onto the appropriate priority queue.

Then signal the background process there is work to do.

Definition at line 663 of file fib_walk.c.

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

◆ fib_walk_process()

static uword fib_walk_process ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t f 
)
static

The 'fib-walk' process's main loop.

Definition at line 560 of file fib_walk.c.

+ Here is the call graph for this function:

◆ fib_walk_process_disable()

void fib_walk_process_disable ( void  )

Definition at line 1211 of file fib_walk.c.

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

◆ fib_walk_process_enable()

void fib_walk_process_enable ( void  )

Definition at line 1202 of file fib_walk.c.

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

◆ fib_walk_process_enable_disable()

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

Definition at line 1220 of file fib_walk.c.

+ Here is the call graph for this function:

◆ fib_walk_process_queues()

f64 fib_walk_process_queues ( vlib_main_t vm,
const f64  quota 
)

Service the queues This is not declared static so that it can be unit tested - i know i know...

Definition at line 461 of file fib_walk.c.

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

◆ fib_walk_queue_get_front()

static fib_node_index_t fib_walk_queue_get_front ( fib_walk_priority_t  prio)
static

Definition at line 241 of file fib_walk.c.

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

◆ fib_walk_queue_get_size()

u32 fib_walk_queue_get_size ( fib_walk_priority_t  prio)

Definition at line 235 of file fib_walk.c.

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

◆ fib_walk_set_histogram_elements_size()

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

Definition at line 1156 of file fib_walk.c.

+ Here is the call graph for this function:

◆ fib_walk_set_quota()

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

Definition at line 1130 of file fib_walk.c.

+ Here is the call graph for this function:

◆ fib_walk_show()

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

Definition at line 987 of file fib_walk.c.

+ Here is the call graph for this function:

◆ fib_walk_sync()

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.

note this is a synchronous depth first walk. Children visited may propagate the walk to thier children. Other children node types may not propagate, synchronously but instead queue the walk for later async completion.

Definition at line 745 of file fib_walk.c.

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

◆ format_fib_node_bw_reason()

u8* format_fib_node_bw_reason ( u8 s,
va_list *  args 
)

Definition at line 973 of file fib_walk.c.

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

◆ format_fib_walk()

static u8 * format_fib_walk ( u8 s,
va_list *  ap 
)
static

Definition at line 958 of file fib_walk.c.

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

◆ format_fib_walk_priority()

u8* format_fib_walk_priority ( u8 s,
va_list *  ap 
)

Definition at line 201 of file fib_walk.c.

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

◆ format_fib_walk_queue_stats()

static u8* format_fib_walk_queue_stats ( u8 s,
va_list *  ap 
)
static

Definition at line 210 of file fib_walk.c.

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

Variable Documentation

◆ fib_node_bw_reason_names

const char* const fib_node_bw_reason_names[] = FIB_NODE_BW_REASONS
static

The names of the walk reasons.

Definition at line 127 of file fib_walk.c.

◆ fib_walk_clear_command

vlib_cli_command_t fib_walk_clear_command
static
Initial value:
= {
.path = "clear fib walk",
.short_help = "clear fib walk",
.function = fib_walk_clear,
}
static clib_error_t * fib_walk_clear(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: fib_walk.c:1182

(constructor) VLIB_CLI_COMMAND (fib_walk_clear_command)

Definition at line 1195 of file fib_walk.c.

◆ fib_walk_hist_vists_per_walk

u64 fib_walk_hist_vists_per_walk[HISTOGRAM_VISITS_PER_WALK_N_BUCKETS]
static

Definition at line 171 of file fib_walk.c.

◆ fib_walk_history

fib_walk_history_t fib_walk_history[HISTORY_N_WALKS]
static

Definition at line 187 of file fib_walk.c.

◆ fib_walk_logger

vlib_log_class_t fib_walk_logger

Definition at line 19 of file fib_walk.c.

◆ fib_walk_pool

fib_walk_t* fib_walk_pool
static

The pool of all walk objects.

Definition at line 98 of file fib_walk.c.

◆ fib_walk_priority_names

const char* const fib_walk_priority_names[] = FIB_WALK_PRIORITIES
static

The names of the walk priorities.

Definition at line 161 of file fib_walk.c.

◆ fib_walk_process_command

vlib_cli_command_t fib_walk_process_command
static
Initial value:
= {
.path = "test fib-walk-process",
.short_help = "test fib-walk-process [enable|disable]",
}
static clib_error_t * fib_walk_process_enable_disable(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: fib_walk.c:1220

(constructor) VLIB_CLI_COMMAND (fib_walk_process_command)

Definition at line 1239 of file fib_walk.c.

◆ fib_walk_process_node

vlib_node_registration_t fib_walk_process_node
static
Initial value:
= {
.function = fib_walk_process,
.name = "fib-walk",
}
static uword fib_walk_process(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *f)
The &#39;fib-walk&#39; process&#39;s main loop.
Definition: fib_walk.c:560

(constructor) VLIB_REGISTER_NODE (fib_walk_process_node)

Definition at line 615 of file fib_walk.c.

◆ fib_walk_queue_stats_names

const char* const fib_walk_queue_stats_names[] = FIB_WALK_QUEUE_STATS
static

The names of the walk stats.

Definition at line 123 of file fib_walk.c.

◆ fib_walk_queues

fib_walk_queues_t fib_walk_queues
static

The global queues of outstanding walks.

Definition at line 156 of file fib_walk.c.

◆ fib_walk_set_histogram_elements_size_command

vlib_cli_command_t fib_walk_set_histogram_elements_size_command
static
Initial value:
= {
.path = "set fib walk histogram elements size",
.short_help = "set fib walk histogram elements size",
}
static clib_error_t * fib_walk_set_histogram_elements_size(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: fib_walk.c:1156

(constructor) VLIB_CLI_COMMAND (fib_walk_set_histogram_elements_size_command)

Definition at line 1175 of file fib_walk.c.

◆ fib_walk_set_quota_command

vlib_cli_command_t fib_walk_set_quota_command
static
Initial value:
= {
.path = "set fib walk quota",
.short_help = "set fib walk quota",
.function = fib_walk_set_quota,
}
static clib_error_t * fib_walk_set_quota(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: fib_walk.c:1130

(constructor) VLIB_CLI_COMMAND (fib_walk_set_quota_command)

Definition at line 1149 of file fib_walk.c.

◆ fib_walk_show_command

vlib_cli_command_t fib_walk_show_command
static
Initial value:
= {
.path = "show fib walk",
.short_help = "show fib walk",
.function = fib_walk_show,
}
static clib_error_t * fib_walk_show(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: fib_walk.c:987

(constructor) VLIB_CLI_COMMAND (fib_walk_show_command)

Definition at line 1123 of file fib_walk.c.

◆ fib_walk_sleep_duration

f64 fib_walk_sleep_duration[]
static
Initial value:

Durations for the sleep types.

Definition at line 416 of file fib_walk.c.

◆ fib_walk_sleep_lengths

u64 fib_walk_sleep_lengths[2]
static

Histogram of the sleep lengths.

Definition at line 454 of file fib_walk.c.

◆ fib_walk_vft

const fib_node_vft_t fib_walk_vft
static
Initial value:
= {
.fnv_get = fib_walk_get_node,
.fnv_last_lock = fib_walk_last_lock_gone,
.fnv_back_walk = fib_walk_back_walk_notify,
}
static fib_node_back_walk_rc_t fib_walk_back_walk_notify(fib_node_t *node, fib_node_back_walk_ctx_t *ctx)
Another back walk has reach this walk.
Definition: fib_walk.c:894
static fib_node_t * fib_walk_get_node(fib_node_index_t index)
Definition: fib_walk.c:862
static void fib_walk_last_lock_gone(fib_node_t *node)
Walk objects are not parents, nor are they locked.
Definition: fib_walk.c:876

The FIB walk's graph node virtual function table.

Definition at line 937 of file fib_walk.c.

◆ fib_walk_work_nodes_visited

u64 fib_walk_work_nodes_visited[N_ELTS_BUCKETS]
static

Definition at line 449 of file fib_walk.c.

◆ fib_walk_work_nodes_visited_incr

u32 fib_walk_work_nodes_visited_incr = 2
static

Definition at line 448 of file fib_walk.c.

◆ fib_walk_work_time_taken

u64 fib_walk_work_time_taken[N_TIME_BUCKETS]
static

Definition at line 442 of file fib_walk.c.

◆ history_last_walk_pos

u32 history_last_walk_pos
static

Definition at line 178 of file fib_walk.c.

◆ quota

f64 quota = 1e-4
static

The time quota for a walk.

When more than this amount of time is spent, the walk process will yield.

Definition at line 435 of file fib_walk.c.