FD.io VPP  v17.04.2-2-ga8f93f8
Vector Packet Processing
mfib_table.c File Reference
+ Include dependency graph for mfib_table.c:

Go to the source code of this file.

Functions

mfib_table_tmfib_table_get (fib_node_index_t index, fib_protocol_t proto)
 Get a pointer to a FIB table. More...
 
static fib_node_index_t mfib_table_lookup_i (const mfib_table_t *mfib_table, const mfib_prefix_t *prefix)
 
fib_node_index_t mfib_table_lookup (u32 fib_index, const mfib_prefix_t *prefix)
 Perfom a longest prefix match in the non-forwarding table. More...
 
static fib_node_index_t mfib_table_lookup_exact_match_i (const mfib_table_t *mfib_table, const mfib_prefix_t *prefix)
 
fib_node_index_t mfib_table_lookup_exact_match (u32 fib_index, const mfib_prefix_t *prefix)
 Perfom an exact match in the non-forwarding table. More...
 
static void mfib_table_entry_remove (mfib_table_t *mfib_table, const mfib_prefix_t *prefix, fib_node_index_t fib_entry_index)
 
static void mfib_table_entry_insert (mfib_table_t *mfib_table, const mfib_prefix_t *prefix, fib_node_index_t mfib_entry_index)
 
fib_node_index_t mfib_table_entry_update (u32 fib_index, const mfib_prefix_t *prefix, mfib_source_t source, mfib_entry_flags_t entry_flags)
 Add a new (with no replication) or lock an existing entry. More...
 
fib_node_index_t mfib_table_entry_path_update (u32 fib_index, const mfib_prefix_t *prefix, mfib_source_t source, const fib_route_path_t *rpath, mfib_itf_flags_t itf_flags)
 Add n paths to an entry (aka route) in the FIB. More...
 
void mfib_table_entry_path_remove (u32 fib_index, const mfib_prefix_t *prefix, mfib_source_t source, const fib_route_path_t *rpath)
 Remove n paths to an entry (aka route) in the FIB. More...
 
fib_node_index_t mfib_table_entry_special_add (u32 fib_index, const mfib_prefix_t *prefix, mfib_source_t source, mfib_entry_flags_t entry_flags, index_t rep_dpo)
 Add a 'special' entry to the mFIB that links to the DPO passed A special entry is an entry that the FIB is not expect to resolve via the usual mechanisms (i.e. More...
 
static void mfib_table_entry_delete_i (u32 fib_index, fib_node_index_t mfib_entry_index, const mfib_prefix_t *prefix, mfib_source_t source)
 
void mfib_table_entry_delete (u32 fib_index, const mfib_prefix_t *prefix, mfib_source_t source)
 Delete a FIB entry. More...
 
void mfib_table_entry_delete_index (fib_node_index_t mfib_entry_index, mfib_source_t source)
 Delete a FIB entry. More...
 
u32 mfib_table_get_index_for_sw_if_index (fib_protocol_t proto, u32 sw_if_index)
 Get the index of the FIB bound to the interface. More...
 
u32 mfib_table_find (fib_protocol_t proto, u32 table_id)
 Get the index of the FIB for a Table-ID. More...
 
u32 mfib_table_find_or_create_and_lock (fib_protocol_t proto, u32 table_id)
 Get the index of the FIB for a Table-ID. More...
 
static void mfib_table_destroy (mfib_table_t *mfib_table)
 
void mfib_table_unlock (u32 fib_index, fib_protocol_t proto)
 Take a reference counting lock on the table. More...
 
void mfib_table_lock (u32 fib_index, fib_protocol_t proto)
 Release a reference counting lock on the table. More...
 
void mfib_table_walk (u32 fib_index, fib_protocol_t proto, mfib_table_walk_fn_t fn, void *ctx)
 Walk all entries in a FIB table N.B: This is NOT safe to deletes. More...
 
u8format_mfib_table_name (u8 *s, va_list ap)
 Format the description/name of the table. More...
 
static clib_error_tmfib_module_init (vlib_main_t *vm)
 

Function Documentation

u8* format_mfib_table_name ( u8 s,
va_list  ap 
)

Format the description/name of the table.

Definition at line 512 of file mfib_table.c.

+ Here is the call graph for this function:

static clib_error_t* mfib_module_init ( vlib_main_t vm)
static

Definition at line 526 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void mfib_table_destroy ( mfib_table_t mfib_table)
static

Definition at line 449 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void mfib_table_entry_delete ( u32  fib_index,
const mfib_prefix_t prefix,
mfib_source_t  source 
)

Delete a FIB entry.

If the entry has no more sources, then it is removed from the table.

Parameters
fib_indexThe index of the FIB
prefixThe prefix for the entry to remove
sourceThe ID of the client/source adding the entry.

Definition at line 350 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void mfib_table_entry_delete_i ( u32  fib_index,
fib_node_index_t  mfib_entry_index,
const mfib_prefix_t prefix,
mfib_source_t  source 
)
static

Definition at line 320 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void mfib_table_entry_delete_index ( fib_node_index_t  entry_index,
mfib_source_t  source 
)

Delete a FIB entry.

If the entry has no more sources, then it is removed from the table.

Parameters
entry_indexThe index of the FIB entry
sourceThe ID of the client/source adding the entry.

Definition at line 374 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void mfib_table_entry_insert ( mfib_table_t mfib_table,
const mfib_prefix_t prefix,
fib_node_index_t  mfib_entry_index 
)
static

Definition at line 134 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void mfib_table_entry_path_remove ( u32  fib_index,
const mfib_prefix_t prefix,
mfib_source_t  source,
const fib_route_path_t paths 
)

Remove n paths to an entry (aka route) in the FIB.

If this is the entry's last path, then the entry will be removed, unless it has other sources. See the documentation for fib_route_path_t for more descirptions of the path parameters.

Parameters
fib_indexThe index of the FIB
prefixThe prefix for the entry to add
sourceThe ID of the client/source adding the entry.
rpathsA vector of paths.

Definition at line 247 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

fib_node_index_t mfib_table_entry_path_update ( u32  fib_index,
const mfib_prefix_t prefix,
mfib_source_t  source,
const fib_route_path_t rpath,
mfib_itf_flags_t  flags 
)

Add n paths to an entry (aka route) in the FIB.

If the entry does not exist, it will be created. See the documentation for fib_route_path_t for more descirptions of the path parameters.

Parameters
fib_indexThe index of the FIB
prefixThe prefix for the entry to add
sourceThe ID of the client/source adding the entry.
flagsFlags for the entry.
rpathsA vector of paths.
Returns
the index of the fib_entry_t that is created (or existed already).

Definition at line 216 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void mfib_table_entry_remove ( mfib_table_t mfib_table,
const mfib_prefix_t prefix,
fib_node_index_t  fib_entry_index 
)
static

Definition at line 103 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

fib_node_index_t mfib_table_entry_special_add ( u32  fib_index,
const mfib_prefix_t prefix,
mfib_source_t  source,
mfib_entry_flags_t  flags,
index_t  rep_dpo 
)

Add a 'special' entry to the mFIB that links to the DPO passed A special entry is an entry that the FIB is not expect to resolve via the usual mechanisms (i.e.

recurisve or neighbour adj DB lookup). Instead the client/source provides the index of a replicate DPO to link to.

Parameters
fib_indexThe index of the FIB
prefixThe prefix to add
sourceThe ID of the client/source adding the entry.
flagsFlags for the entry.
rep_dpoThe replicate DPO index to link to.
Returns
the index of the fib_entry_t that is created (or existed already).

Definition at line 290 of file mfib_table.c.

+ Here is the call graph for this function:

fib_node_index_t mfib_table_entry_update ( u32  fib_index,
const mfib_prefix_t prefix,
mfib_source_t  source,
mfib_entry_flags_t  flags 
)

Add a new (with no replication) or lock an existing entry.

Parameters
prefixThe prefix for the entry to add
Returns
the index of the fib_entry_t that is created (or existed already).

Definition at line 165 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u32 mfib_table_find ( fib_protocol_t  proto,
u32  table_id 
)

Get the index of the FIB for a Table-ID.

This DOES NOT create the FIB if it does not exist.

proto The protocol of the FIB (and thus the entries therein)

Parameters
table-idThe Table-ID
Returns
fib_index The index of the FIB, which may be INVALID.

Definition at line 403 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u32 mfib_table_find_or_create_and_lock ( fib_protocol_t  proto,
u32  table_id 
)

Get the index of the FIB for a Table-ID.

This DOES create the FIB if it does not exist.

proto The protocol of the FIB (and thus the entries therein)

Parameters
table-idThe Table-ID
Returns
fib_index The index of the FIB

Definition at line 420 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

mfib_table_t* mfib_table_get ( fib_node_index_t  index,
fib_protocol_t  proto 
)

Get a pointer to a FIB table.

Definition at line 26 of file mfib_table.c.

+ Here is the caller graph for this function:

u32 mfib_table_get_index_for_sw_if_index ( fib_protocol_t  proto,
u32  sw_if_index 
)

Get the index of the FIB bound to the interface.

proto The protocol of the FIB (and thus the entries therein)

Parameters
sw_if_indexThe interface index
Returns
fib_index The index of the FIB

Definition at line 386 of file mfib_table.c.

+ Here is the call graph for this function:

void mfib_table_lock ( u32  fib_index,
fib_protocol_t  proto 
)

Release a reference counting lock on the table.

When the last lock has gone. the FIB is deleted.

Parameters
fib_indexThe index of the FIB

proto The protocol of the FIB (and thus the entries therein)

Definition at line 483 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

fib_node_index_t mfib_table_lookup ( u32  fib_index,
const mfib_prefix_t prefix 
)

Perfom a longest prefix match in the non-forwarding table.

Parameters
fib_indexThe index of the FIB
prefixThe prefix to lookup
Returns
The index of the fib_entry_t for the best match, which may be the default route

Definition at line 65 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

fib_node_index_t mfib_table_lookup_exact_match ( u32  fib_index,
const mfib_prefix_t prefix 
)

Perfom an exact match in the non-forwarding table.

Parameters
fib_indexThe index of the FIB
prefixThe prefix to lookup
Returns
The index of the fib_entry_t for the exact match, or INVALID is there is no match.

Definition at line 94 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static fib_node_index_t mfib_table_lookup_exact_match_i ( const mfib_table_t mfib_table,
const mfib_prefix_t prefix 
)
inlinestatic

Definition at line 72 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static fib_node_index_t mfib_table_lookup_i ( const mfib_table_t mfib_table,
const mfib_prefix_t prefix 
)
inlinestatic

Definition at line 43 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void mfib_table_unlock ( u32  fib_index,
fib_protocol_t  proto 
)

Take a reference counting lock on the table.

Parameters
fib_indexThe index of the FIB

proto The protocol of the FIB (and thus the entries therein)

Definition at line 468 of file mfib_table.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void mfib_table_walk ( u32  fib_index,
fib_protocol_t  proto,
mfib_table_walk_fn_t  fn,
void *  ctx 
)

Walk all entries in a FIB table N.B: This is NOT safe to deletes.

If you need to delete, walk the whole table and store elements in a vector, then delete the elements

Definition at line 493 of file mfib_table.c.

+ Here is the call graph for this function: