FD.io VPP
v20.09-64-g4f7b92f0a
Vector Packet Processing
|
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 | |
u8 * | format_mfib_table_flags (u8 *s, va_list *args) |
u8 * | format_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_t * | mfib_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... | |
u8 * | format_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... | |
#define FOR_EACH_MFIB_TABLE_ATTRIBUTE | ( | _item | ) |
Definition at line 55 of file mfib_table.h.
#define MFIB_TABLE_ATTRIBUTE_MAX (MFIB_TABLE_ATTRIBUTE_LAST+1) |
Definition at line 49 of file mfib_table.h.
#define MFIB_TABLE_ATTRIBUTES |
Definition at line 51 of file mfib_table.h.
#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.
#define MFIB_TABLE_TOTAL_LOCKS MFIB_N_SOURCES |
Definition at line 29 of file mfib_table.h.
typedef enum mfib_table_attribute_t_ mfib_table_attribute_t |
Flags for the source data.
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.
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.
Flags for the source data.
Definition at line 34 of file mfib_table.h.
enum mfib_table_flags_t_ |
Enumerator | |
---|---|
MFIB_TABLE_FLAG_NONE | |
MFIB_TABLE_FLAG_RESYNC |
Definition at line 60 of file mfib_table.h.
Definition at line 848 of file mfib_table.c.
format (display) the memory usage for mfibs
Definition at line 882 of file mfib_table.c.
Format the description/name of the table.
Definition at line 868 of file mfib_table.c.
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.
fib_index | The index of the FIB |
prefix | The prefix for the entry to remove |
source | The ID of the client/source adding the entry. |
Definition at line 493 of file mfib_table.c.
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.
entry_index | The index of the FIB entry |
source | The ID of the client/source adding the entry. |
Definition at line 517 of file mfib_table.c.
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.
fib_index | The index of the FIB |
prefix | The prefix for the entry to add |
source | The ID of the client/source adding the entry. |
rpaths | A vector of paths. |
Definition at line 407 of file mfib_table.c.
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.
fib_index | The index of the FIB |
prefix | The prefix for the entry to add |
source | The ID of the client/source adding the entry. |
flags | Flags for the entry. |
rpaths | A vector of paths. |
Definition at line 325 of file mfib_table.c.
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.
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.
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.
fib_index | The index of the FIB |
prefix | The prefix to add |
source | The ID of the client/source adding the entry. |
flags | Flags for the entry. |
rep_dpo | The replicate DPO index to link to. |
Definition at line 425 of file mfib_table.c.
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.
prefix | The prefix for the entry to add |
Definition at line 237 of file mfib_table.c.
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)
table-id | The Table-ID |
Definition at line 555 of file mfib_table.c.
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)
table-id | The Table-ID |
source | The ID of the client/source. |
Definition at line 613 of file mfib_table.c.
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)
table-id | The Table-ID |
source | The ID of the client/source. |
name | The client is choosing the name they want the table to have |
Definition at line 622 of file mfib_table.c.
void mfib_table_flush | ( | u32 | fib_index, |
fib_protocol_t | proto, | ||
mfib_source_t | source | ||
) |
Flush all entries from a table for the source.
fib_index | The index of the FIB |
proto The protocol of the entries in the table
source | the source to flush |
Definition at line 662 of file mfib_table.c.
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.
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)
sw_if_index | The interface index |
Definition at line 527 of file mfib_table.c.
fib_node_index_t mfib_table_get_less_specific | ( | u32 | fib_index, |
const mfib_prefix_t * | prefix | ||
) |
Get the less specific (covering) prefix.
fib_index | The index of the FIB |
prefix | The prefix to lookup |
Definition at line 129 of file mfib_table.c.
u32 mfib_table_get_n_routes | ( | fib_node_index_t | index, |
fib_protocol_t | proto | ||
) |
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.
fib_index | The index of the FIB |
proto The protocol of the FIB (and thus the entries therein)
u32 mfib_table_get_table_id | ( | u32 | fib_index, |
fib_protocol_t | proto | ||
) |
Get the Table-ID of the FIB from protocol and index.
fib_index | The FIB index |
proto The protocol of the FIB (and thus the entries therein)
Definition at line 544 of file mfib_table.c.
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.
fib_index | The index of the FIB |
proto The protocol of the FIB (and thus the entries therein)
source | The ID of the client/source. |
Definition at line 806 of file mfib_table.c.
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.
fib_index | The index of the FIB |
prefix | The prefix to lookup |
Definition at line 69 of file mfib_table.c.
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.
fib_index | The index of the FIB |
prefix | The prefix to lookup |
Definition at line 98 of file mfib_table.c.
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.
fib_index | The index of the FIB |
proto The protocol of the entries in the table
source | the source to flush |
Definition at line 698 of file mfib_table.c.
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.
fib_index | The index of the FIB |
proto The protocol of the entries in the table
source | the source to flush |
Definition at line 731 of file mfib_table.c.
void mfib_table_unlock | ( | u32 | fib_index, |
fib_protocol_t | proto, | ||
mfib_source_t | source | ||
) |
Take a reference counting lock on the table.
fib_index | The index of the FIB |
proto The protocol of the FIB (and thus the entries therein)
source | The ID of the client/source. |
Definition at line 777 of file mfib_table.c.
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.