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

Go to the source code of this file.

Data Structures

struct  mfib_table_t_
 A protocol Independent IP multicast FIB table. More...
 

Macros

#define MFIB_TABLE_N_LOCKS   (MFIB_N_SOURCES+1)
 Keep a lock per-source and a total. More...
 
#define MFIB_TABLE_TOTAL_LOCKS   MFIB_N_SOURCES
 
#define MFIB_TABLE_ATTRIBUTE_MAX   (MFIB_TABLE_ATTRIBUTE_LAST+1)
 
#define MFIB_TABLE_ATTRIBUTES
 
#define FOR_EACH_MFIB_TABLE_ATTRIBUTE(_item)
 

Typedefs

typedef enum mfib_table_attribute_t_ mfib_table_attribute_t
 Flags for the source data. More...
 
typedef enum mfib_table_flags_t_ mfib_table_flags_t
 
typedef struct mfib_table_t_ mfib_table_t
 A protocol Independent IP multicast FIB table. More...
 
typedef walk_rc_t(* mfib_table_walk_fn_t) (fib_node_index_t fei, void *ctx)
 Call back function when walking entries in a FIB table. More...
 

Enumerations

enum  mfib_table_attribute_t_ { MFIB_TABLE_ATTRIBUTE_FIRST, MFIB_TABLE_ATTRIBUTE_RESYNC = MFIB_TABLE_ATTRIBUTE_FIRST, MFIB_TABLE_ATTRIBUTE_LAST = MFIB_TABLE_ATTRIBUTE_RESYNC }
 Flags for the source data. More...
 
enum  mfib_table_flags_t_ { MFIB_TABLE_FLAG_NONE = 0, MFIB_TABLE_FLAG_RESYNC = (1 << MFIB_TABLE_ATTRIBUTE_RESYNC) }
 

Functions

u8format_mfib_table_flags (u8 *s, va_list *args)
 
u8format_mfib_table_name (u8 *s, va_list *ap)
 Format the description/name of the table. More...
 
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...
 
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...
 
fib_node_index_t mfib_table_entry_update (u32 fib_index, const mfib_prefix_t *prefix, mfib_source_t source, fib_rpf_id_t rpf_id, mfib_entry_flags_t 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)
 Add n paths to an entry (aka route) in the FIB. More...
 
fib_node_index_t mfib_table_entry_paths_update (u32 fib_index, const mfib_prefix_t *prefix, mfib_source_t source, const fib_route_path_t *rpath)
 
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. More...
 
void mfib_table_entry_paths_remove (u32 fib_index, const mfib_prefix_t *prefix, mfib_source_t source, const fib_route_path_t *paths)
 
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 entry_index, mfib_source_t source)
 Delete a FIB entry. 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 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...
 
void mfib_table_flush (u32 fib_index, fib_protocol_t proto, mfib_source_t source)
 Flush all entries from a table for the source. More...
 
void mfib_table_mark (u32 fib_index, fib_protocol_t proto, mfib_source_t source)
 Resync all entries from a table for the source this is the mark part of the mark and sweep algorithm. More...
 
void mfib_table_sweep (u32 fib_index, fib_protocol_t proto, mfib_source_t source)
 Signal that the table has converged, i.e. 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_get_table_id (u32 fib_index, fib_protocol_t proto)
 Get the Table-ID of the FIB from protocol and index. 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, mfib_source_t source)
 Get the index of the FIB for a Table-ID. More...
 
u32 mfib_table_find_or_create_and_lock_w_name (fib_protocol_t proto, u32 table_id, mfib_source_t source, const u8 *name)
 Get the index of the FIB for a Table-ID. More...
 
void mfib_table_unlock (u32 fib_index, fib_protocol_t proto, mfib_source_t source)
 Take a reference counting lock on the table. More...
 
void mfib_table_lock (u32 fib_index, fib_protocol_t proto, mfib_source_t source)
 Release a reference counting lock on the table. More...
 
u32 mfib_table_get_num_entries (u32 fib_index, fib_protocol_t proto)
 Return the number of entries in the FIB added by a given source. More...
 
fib_node_index_t mfib_table_get_less_specific (u32 fib_index, const mfib_prefix_t *prefix)
 Get the less specific (covering) prefix. More...
 
mfib_table_tmfib_table_get (fib_node_index_t index, fib_protocol_t proto)
 Get a pointer to a FIB 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_memory (u8 *s, va_list *args)
 format (display) the memory usage for mfibs More...
 
u32 mfib_table_get_n_routes (fib_node_index_t index, fib_protocol_t proto)
 To assit UT. More...
 

Macro Definition Documentation

◆ FOR_EACH_MFIB_TABLE_ATTRIBUTE

#define FOR_EACH_MFIB_TABLE_ATTRIBUTE (   _item)
Value:
_item++)
#define MFIB_TABLE_ATTRIBUTE_MAX
Definition: mfib_table.h:49

Definition at line 55 of file mfib_table.h.

◆ MFIB_TABLE_ATTRIBUTE_MAX

#define MFIB_TABLE_ATTRIBUTE_MAX   (MFIB_TABLE_ATTRIBUTE_LAST+1)

Definition at line 49 of file mfib_table.h.

◆ MFIB_TABLE_ATTRIBUTES

#define MFIB_TABLE_ATTRIBUTES
Value:
{ \
}
the table is currently resync-ing
Definition: mfib_table.h:42

Definition at line 51 of file mfib_table.h.

◆ MFIB_TABLE_N_LOCKS

#define MFIB_TABLE_N_LOCKS   (MFIB_N_SOURCES+1)

Keep a lock per-source and a total.

Definition at line 28 of file mfib_table.h.

◆ MFIB_TABLE_TOTAL_LOCKS

#define MFIB_TABLE_TOTAL_LOCKS   MFIB_N_SOURCES

Definition at line 29 of file mfib_table.h.

Typedef Documentation

◆ mfib_table_attribute_t

Flags for the source data.

◆ mfib_table_flags_t

◆ mfib_table_t

typedef struct mfib_table_t_ mfib_table_t

A protocol Independent IP multicast FIB table.

◆ mfib_table_walk_fn_t

typedef walk_rc_t(* mfib_table_walk_fn_t) (fib_node_index_t fei, void *ctx)

Call back function when walking entries in a FIB table.

Definition at line 554 of file mfib_table.h.

Enumeration Type Documentation

◆ mfib_table_attribute_t_

Flags for the source data.

Enumerator
MFIB_TABLE_ATTRIBUTE_FIRST 

Marker.

Add new values after this one.

MFIB_TABLE_ATTRIBUTE_RESYNC 

the table is currently resync-ing

MFIB_TABLE_ATTRIBUTE_LAST 

Marker.

add new entries before this one.

Definition at line 34 of file mfib_table.h.

◆ mfib_table_flags_t_

Enumerator
MFIB_TABLE_FLAG_NONE 
MFIB_TABLE_FLAG_RESYNC 

Definition at line 60 of file mfib_table.h.

Function Documentation

◆ format_mfib_table_flags()

u8* format_mfib_table_flags ( u8 s,
va_list *  args 
)

Definition at line 848 of file mfib_table.c.

+ Here is the caller graph for this function:

◆ format_mfib_table_memory()

u8* format_mfib_table_memory ( u8 s,
va_list *  args 
)

format (display) the memory usage for mfibs

Definition at line 882 of file mfib_table.c.

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

◆ format_mfib_table_name()

u8* format_mfib_table_name ( u8 s,
va_list *  ap 
)

Format the description/name of the table.

Definition at line 868 of file mfib_table.c.

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

◆ mfib_table_entry_delete()

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 493 of file mfib_table.c.

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

◆ mfib_table_entry_delete_index()

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 517 of file mfib_table.c.

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

◆ mfib_table_entry_path_remove()

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 407 of file mfib_table.c.

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

◆ mfib_table_entry_path_update()

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 
)

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 325 of file mfib_table.c.

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

◆ mfib_table_entry_paths_remove()

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

Definition at line 395 of file mfib_table.c.

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

◆ mfib_table_entry_paths_update()

fib_node_index_t mfib_table_entry_paths_update ( u32  fib_index,
const mfib_prefix_t prefix,
mfib_source_t  source,
const fib_route_path_t rpath 
)

Definition at line 343 of file mfib_table.c.

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

◆ mfib_table_entry_special_add()

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 425 of file mfib_table.c.

+ Here is the call graph for this function:

◆ mfib_table_entry_update()

fib_node_index_t mfib_table_entry_update ( u32  fib_index,
const mfib_prefix_t prefix,
mfib_source_t  source,
fib_rpf_id_t  rpf_id,
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 237 of file mfib_table.c.

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

◆ mfib_table_find()

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 555 of file mfib_table.c.

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

◆ mfib_table_find_or_create_and_lock()

u32 mfib_table_find_or_create_and_lock ( fib_protocol_t  proto,
u32  table_id,
mfib_source_t  source 
)

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
Parameters
sourceThe ID of the client/source.

Definition at line 613 of file mfib_table.c.

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

◆ mfib_table_find_or_create_and_lock_w_name()

u32 mfib_table_find_or_create_and_lock_w_name ( fib_protocol_t  proto,
u32  table_id,
mfib_source_t  source,
const u8 name 
)

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
Parameters
sourceThe ID of the client/source.
nameThe client is choosing the name they want the table to have

Definition at line 622 of file mfib_table.c.

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

◆ mfib_table_flush()

void mfib_table_flush ( u32  fib_index,
fib_protocol_t  proto,
mfib_source_t  source 
)

Flush all entries from a table for the source.

Parameters
fib_indexThe index of the FIB

proto The protocol of the entries in the table

Parameters
sourcethe source to flush

Definition at line 662 of file mfib_table.c.

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

◆ mfib_table_get()

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 30 of file mfib_table.c.

+ Here is the caller graph for this function:

◆ mfib_table_get_index_for_sw_if_index()

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 527 of file mfib_table.c.

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

◆ mfib_table_get_less_specific()

fib_node_index_t mfib_table_get_less_specific ( u32  fib_index,
const mfib_prefix_t prefix 
)

Get the less specific (covering) prefix.

Parameters
fib_indexThe index of the FIB
prefixThe prefix to lookup
Returns
The index of the less specific fib_entry_t.

Definition at line 129 of file mfib_table.c.

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

◆ mfib_table_get_n_routes()

u32 mfib_table_get_n_routes ( fib_node_index_t  index,
fib_protocol_t  proto 
)

To assit UT.

Definition at line 818 of file mfib_table.c.

+ Here is the call graph for this function:

◆ mfib_table_get_num_entries()

u32 mfib_table_get_num_entries ( u32  fib_index,
fib_protocol_t  proto 
)

Return the number of entries in the FIB added by a given source.

Parameters
fib_indexThe index of the FIB

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

Returns
number of sourced entries.

◆ mfib_table_get_table_id()

u32 mfib_table_get_table_id ( u32  fib_index,
fib_protocol_t  proto 
)

Get the Table-ID of the FIB from protocol and index.

Parameters
fib_indexThe FIB index

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

Returns
fib_index The tableID of the FIB

Definition at line 544 of file mfib_table.c.

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

◆ mfib_table_lock()

void mfib_table_lock ( u32  fib_index,
fib_protocol_t  proto,
mfib_source_t  source 
)

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)

Parameters
sourceThe ID of the client/source.

Definition at line 806 of file mfib_table.c.

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

◆ mfib_table_lookup()

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 69 of file mfib_table.c.

+ Here is the call graph for this function:

◆ mfib_table_lookup_exact_match()

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 98 of file mfib_table.c.

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

◆ mfib_table_mark()

void mfib_table_mark ( u32  fib_index,
fib_protocol_t  proto,
mfib_source_t  source 
)

Resync all entries from a table for the source this is the mark part of the mark and sweep algorithm.

All entries in this FIB that are sourced by 'source' are marked as stale.

Parameters
fib_indexThe index of the FIB

proto The protocol of the entries in the table

Parameters
sourcethe source to flush

Definition at line 698 of file mfib_table.c.

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

◆ mfib_table_sweep()

void mfib_table_sweep ( u32  fib_index,
fib_protocol_t  proto,
mfib_source_t  source 
)

Signal that the table has converged, i.e.

all updates are complete. this is the sweep part of the mark and sweep algorithm. All entries in this FIB that are sourced by 'source' and marked as stale are flushed.

Parameters
fib_indexThe index of the FIB

proto The protocol of the entries in the table

Parameters
sourcethe source to flush

Definition at line 731 of file mfib_table.c.

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

◆ mfib_table_unlock()

void mfib_table_unlock ( u32  fib_index,
fib_protocol_t  proto,
mfib_source_t  source 
)

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)

Parameters
sourceThe ID of the client/source.

Definition at line 777 of file mfib_table.c.

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

◆ mfib_table_walk()

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 829 of file mfib_table.c.

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