FD.io VPP
v20.05.1-5-g09f167997
Vector Packet Processing
|
Go to the source code of this file.
Data Structures | |
struct | fib_table_set_flow_hash_config_ctx_t_ |
Table set flow hash config context. More... | |
struct | fib_table_flush_ctx_t_ |
Table flush context. More... | |
Typedefs | |
typedef struct fib_table_set_flow_hash_config_ctx_t_ | fib_table_set_flow_hash_config_ctx_t |
Table set flow hash config context. More... | |
typedef struct fib_table_flush_ctx_t_ | fib_table_flush_ctx_t |
Table flush context. More... | |
Functions | |
fib_table_t * | fib_table_get (fib_node_index_t index, fib_protocol_t proto) |
Get a pointer to a FIB table. More... | |
static fib_node_index_t | fib_table_lookup_i (fib_table_t *fib_table, const fib_prefix_t *prefix) |
fib_node_index_t | fib_table_lookup (u32 fib_index, const fib_prefix_t *prefix) |
Perfom a longest prefix match in the non-forwarding table. More... | |
static fib_node_index_t | fib_table_lookup_exact_match_i (const fib_table_t *fib_table, const fib_prefix_t *prefix) |
fib_node_index_t | fib_table_lookup_exact_match (u32 fib_index, const fib_prefix_t *prefix) |
Perfom an exact match in the non-forwarding table. More... | |
static fib_node_index_t | fib_table_get_less_specific_i (fib_table_t *fib_table, const fib_prefix_t *prefix) |
fib_node_index_t | fib_table_get_less_specific (u32 fib_index, const fib_prefix_t *prefix) |
Get the less specific (covering) prefix. More... | |
static void | fib_table_entry_remove (fib_table_t *fib_table, const fib_prefix_t *prefix, fib_node_index_t fib_entry_index) |
static void | fib_table_post_insert_actions (fib_table_t *fib_table, const fib_prefix_t *prefix, fib_node_index_t fib_entry_index) |
static void | fib_table_entry_insert (fib_table_t *fib_table, const fib_prefix_t *prefix, fib_node_index_t fib_entry_index) |
void | fib_table_fwding_dpo_update (u32 fib_index, const fib_prefix_t *prefix, const dpo_id_t *dpo) |
Add or update an entry in the FIB's forwarding table. More... | |
void | fib_table_fwding_dpo_remove (u32 fib_index, const fib_prefix_t *prefix, const dpo_id_t *dpo) |
remove an entry in the FIB's forwarding table More... | |
static void | fib_table_source_count_inc (fib_table_t *fib_table, fib_source_t source) |
static void | fib_table_source_count_dec (fib_table_t *fib_table, fib_source_t source) |
fib_node_index_t | fib_table_entry_special_dpo_add (u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_entry_flag_t flags, const dpo_id_t *dpo) |
Add a 'special' entry to the FIB 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... | |
fib_node_index_t | fib_table_entry_special_dpo_update (u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_entry_flag_t flags, const dpo_id_t *dpo) |
Update a 'special' entry to the FIB 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... | |
fib_node_index_t | fib_table_entry_special_add (u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_entry_flag_t flags) |
Add a 'special' entry to the FIB. More... | |
void | fib_table_entry_special_remove (u32 fib_index, const fib_prefix_t *prefix, fib_source_t source) |
Remove a 'special' entry from the FIB. More... | |
static void | fib_table_route_path_fixup (const fib_prefix_t *prefix, fib_entry_flag_t *eflags, fib_route_path_t *path) |
fib_table_route_path_fixup More... | |
fib_node_index_t | fib_table_entry_path_add (u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_entry_flag_t flags, dpo_proto_t next_hop_proto, const ip46_address_t *next_hop, u32 next_hop_sw_if_index, u32 next_hop_fib_index, u32 next_hop_weight, fib_mpls_label_t *next_hop_labels, fib_route_path_flags_t path_flags) |
Add one path to an entry (aka route) in the FIB. More... | |
static int | fib_route_path_cmp_for_sort (void *v1, void *v2) |
fib_node_index_t | fib_table_entry_path_add2 (u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_entry_flag_t flags, fib_route_path_t *rpaths) |
Add n paths to an entry (aka route) in the FIB. More... | |
void | fib_table_entry_path_remove2 (u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_route_path_t *rpaths) |
Remove n paths to an entry (aka route) in the FIB. More... | |
void | fib_table_entry_path_remove (u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, dpo_proto_t next_hop_proto, const ip46_address_t *next_hop, u32 next_hop_sw_if_index, u32 next_hop_fib_index, u32 next_hop_weight, fib_route_path_flags_t path_flags) |
remove one path to an entry (aka route) in the FIB. More... | |
fib_node_index_t | fib_table_entry_update (u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_entry_flag_t flags, fib_route_path_t *paths) |
Update an entry to have a new set of paths. More... | |
fib_node_index_t | fib_table_entry_update_one_path (u32 fib_index, const fib_prefix_t *prefix, fib_source_t source, fib_entry_flag_t flags, dpo_proto_t next_hop_proto, const ip46_address_t *next_hop, u32 next_hop_sw_if_index, u32 next_hop_fib_index, u32 next_hop_weight, fib_mpls_label_t *next_hop_labels, fib_route_path_flags_t path_flags) |
Update the entry to have just one path. More... | |
static void | fib_table_entry_delete_i (u32 fib_index, fib_node_index_t fib_entry_index, const fib_prefix_t *prefix, fib_source_t source) |
void | fib_table_entry_delete (u32 fib_index, const fib_prefix_t *prefix, fib_source_t source) |
Delete a FIB entry. More... | |
void | fib_table_entry_delete_index (fib_node_index_t fib_entry_index, fib_source_t source) |
Delete a FIB entry. More... | |
u32 | fib_table_entry_get_stats_index (u32 fib_index, const fib_prefix_t *prefix) |
Return the stats index for a FIB entry. More... | |
fib_node_index_t | fib_table_entry_local_label_add (u32 fib_index, const fib_prefix_t *prefix, mpls_label_t label) |
Add a MPLS local label for the prefix/route. More... | |
void | fib_table_entry_local_label_remove (u32 fib_index, const fib_prefix_t *prefix, mpls_label_t label) |
remove a MPLS local label for the prefix/route. More... | |
u32 | fib_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... | |
flow_hash_config_t | fib_table_get_flow_hash_config (u32 fib_index, fib_protocol_t proto) |
Get the flow hash configured used by the table. More... | |
flow_hash_config_t | fib_table_get_default_flow_hash_config (fib_protocol_t proto) |
Get the flow hash configured used by the protocol. More... | |
static fib_table_walk_rc_t | fib_table_set_flow_hash_config_cb (fib_node_index_t fib_entry_index, void *arg) |
void | fib_table_set_flow_hash_config (u32 fib_index, fib_protocol_t proto, flow_hash_config_t hash_config) |
Set the flow hash configured used by the table. More... | |
u32 | fib_table_get_table_id_for_sw_if_index (fib_protocol_t proto, u32 sw_if_index) |
Get the Table-ID of the FIB bound to the interface. More... | |
u32 | fib_table_get_table_id (u32 fib_index, fib_protocol_t proto) |
Get the Table-ID of the FIB from protocol and index. More... | |
u32 | fib_table_find (fib_protocol_t proto, u32 table_id) |
Get the index of the FIB for a Table-ID. More... | |
static u32 | fib_table_find_or_create_and_lock_i (fib_protocol_t proto, u32 table_id, fib_source_t src, const u8 *name) |
u32 | fib_table_find_or_create_and_lock (fib_protocol_t proto, u32 table_id, fib_source_t src) |
Get the index of the FIB for a Table-ID. More... | |
u32 | fib_table_find_or_create_and_lock_w_name (fib_protocol_t proto, u32 table_id, fib_source_t src, const u8 *name) |
Get the index of the FIB for a Table-ID. More... | |
u32 | fib_table_create_and_lock (fib_protocol_t proto, fib_source_t src, const char *const fmt,...) |
Create a new table with no table ID. More... | |
static void | fib_table_destroy (fib_table_t *fib_table) |
void | fib_table_walk (u32 fib_index, fib_protocol_t proto, fib_table_walk_fn_t fn, void *ctx) |
Walk all entries in a FIB table N.B: This is NOT safe to deletes. More... | |
void | fib_table_sub_tree_walk (u32 fib_index, fib_protocol_t proto, const fib_prefix_t *root, fib_table_walk_fn_t fn, void *ctx) |
Walk all entries in a sub-tree FIB table. More... | |
static void | fib_table_lock_dec (fib_table_t *fib_table, fib_source_t source) |
static void | fib_table_lock_inc (fib_table_t *fib_table, fib_source_t source) |
void | fib_table_unlock (u32 fib_index, fib_protocol_t proto, fib_source_t source) |
Take a reference counting lock on the table. More... | |
void | fib_table_lock (u32 fib_index, fib_protocol_t proto, fib_source_t source) |
Release a reference counting lock on the table. More... | |
u32 | fib_table_get_num_entries (u32 fib_index, fib_protocol_t proto, fib_source_t source) |
Return the number of entries in the FIB added by a given source. More... | |
u8 * | format_fib_table_name (u8 *s, va_list *ap) |
Format the description/name of the table. More... | |
u8 * | format_fib_table_flags (u8 *s, va_list *args) |
static fib_table_walk_rc_t | fib_table_flush_cb (fib_node_index_t fib_entry_index, void *arg) |
void | fib_table_flush (u32 fib_index, fib_protocol_t proto, fib_source_t source) |
Flush all entries from a table for the source. More... | |
static fib_table_walk_rc_t | fib_table_mark_cb (fib_node_index_t fib_entry_index, void *arg) |
void | fib_table_mark (u32 fib_index, fib_protocol_t proto, fib_source_t source) |
Resync all entries from a table for the source this is the mark part of the mark and sweep algorithm. More... | |
static fib_table_walk_rc_t | fib_table_sweep_cb (fib_node_index_t fib_entry_index, void *arg) |
void | fib_table_sweep (u32 fib_index, fib_protocol_t proto, fib_source_t source) |
Signal that the table has converged, i.e. More... | |
u8 * | format_fib_table_memory (u8 *s, va_list *args) |
format (display) the memory used by the FIB tables More... | |
Variables | |
static const char * | fib_table_flags_strings [] = FIB_TABLE_ATTRIBUTES |
typedef struct fib_table_flush_ctx_t_ fib_table_flush_ctx_t |
Table flush context.
Store the indicies of matching FIB entries that need to be removed.
Table set flow hash config context.
|
static |
Definition at line 584 of file fib_table.c.
u32 fib_table_create_and_lock | ( | fib_protocol_t | proto, |
fib_source_t | source, | ||
const char *const | fmt, | ||
... | |||
) |
Create a new table with no table ID.
This means it does not get added to the hash-table and so can only be found by using the index returned.
proto The protocol of the FIB (and thus the entries therein)
fmt | A string to describe the table |
source | The ID of the client/source. |
Definition at line 1175 of file fib_table.c.
|
static |
Definition at line 1211 of file fib_table.c.
void fib_table_entry_delete | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
fib_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 886 of file fib_table.c.
|
static |
Definition at line 840 of file fib_table.c.
void fib_table_entry_delete_index | ( | fib_node_index_t | entry_index, |
fib_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 910 of file fib_table.c.
u32 fib_table_entry_get_stats_index | ( | u32 | fib_index, |
const fib_prefix_t * | prefix | ||
) |
Return the stats index for a FIB entry.
fib_index | The table's FIB index |
prefix | The entry's prefix's |
Definition at line 922 of file fib_table.c.
|
static |
Definition at line 218 of file fib_table.c.
fib_node_index_t fib_table_entry_local_label_add | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
mpls_label_t | label | ||
) |
Add a MPLS local label for the prefix/route.
If the entry does not exist, it will be created. In theory more than one local label can be added, but this is not yet supported.
fib_index | The index of the FIB |
prefix | The prefix for the entry to which to add the label |
label | The MPLS label to add |
Definition at line 930 of file fib_table.c.
void fib_table_entry_local_label_remove | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
mpls_label_t | label | ||
) |
remove a MPLS local label for the prefix/route.
fib_index | The index of the FIB |
prefix | The prefix for the entry to which to add the label |
label | The MPLS label to add |
Definition at line 957 of file fib_table.c.
fib_node_index_t fib_table_entry_path_add | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
fib_source_t | source, | ||
fib_entry_flag_t | flags, | ||
dpo_proto_t | next_hop_proto, | ||
const ip46_address_t * | next_hop, | ||
u32 | next_hop_sw_if_index, | ||
u32 | next_hop_fib_index, | ||
u32 | next_hop_weight, | ||
fib_mpls_label_t * | next_hop_label_stack, | ||
fib_route_path_flags_t | pf | ||
) |
Add one path 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. |
next_hop_proto The protocol of the next hop. This cannot be derived in the event that the next hop is all zeros.
next_hop | The address of the next-hop. |
sw_if_index | The index of the interface. |
next_hop_fib_index,The | fib index of the next-hop for recursive resolution |
next_hop_weight | [un]equal cost path weight |
next_hop_label_stack | The path's out-going label stack. NULL is there is none. |
pf | Flags for the path |
Definition at line 549 of file fib_table.c.
fib_node_index_t fib_table_entry_path_add2 | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
fib_source_t | source, | ||
fib_entry_flag_t | flags, | ||
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. Not const since they may be modified. |
Definition at line 591 of file fib_table.c.
void fib_table_entry_path_remove | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
fib_source_t | source, | ||
dpo_proto_t | next_hop_proto, | ||
const ip46_address_t * | next_hop, | ||
u32 | next_hop_sw_if_index, | ||
u32 | next_hop_fib_index, | ||
u32 | next_hop_weight, | ||
fib_route_path_flags_t | pf | ||
) |
remove one path 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. |
next_hop_proto The protocol of the next hop. This cannot be derived in the event that the next hop is all zeros.
next_hop | The address of the next-hop. |
sw_if_index | The index of the interface. |
next_hop_fib_index,The | fib index of the next-hop for recursive resolution |
next_hop_weight | [un]equal cost path weight |
pf | Flags for the path |
Definition at line 722 of file fib_table.c.
void fib_table_entry_path_remove2 | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
fib_source_t | source, | ||
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 640 of file fib_table.c.
|
static |
Definition at line 142 of file fib_table.c.
fib_node_index_t fib_table_entry_special_add | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
fib_source_t | source, | ||
fib_entry_flag_t | flags | ||
) |
Add a 'special' entry to the FIB.
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 will link to a DPO valid for the source and/or the flags. This add is reference counting per-source. So n 'removes' are required for n 'adds', if the entry is no longer required. If the source needs to provide non-default forwarding use: fib_table_entry_special_dpo_add()
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. |
Definition at line 405 of file fib_table.c.
fib_node_index_t fib_table_entry_special_dpo_add | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
fib_source_t | source, | ||
fib_entry_flag_t | stype, | ||
const dpo_id_t * | dpo | ||
) |
Add a 'special' entry to the FIB 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 DPO to link to. This add is reference counting per-source. So n 'removes' are required for n 'adds', if the entry is no longer required.
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. |
dpo | The DPO to link to. |
Definition at line 324 of file fib_table.c.
fib_node_index_t fib_table_entry_special_dpo_update | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
fib_source_t | source, | ||
fib_entry_flag_t | stype, | ||
const dpo_id_t * | dpo | ||
) |
Update a 'special' entry to the FIB 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 DPO to link to. Special entries are add/remove reference counted per-source. So n 'removes' are required for n 'adds', if the entry is no longer required. An 'update' is an 'add' if no 'add' has already been called, otherwise an 'add' is therefore assumed to act on the reference instance of that add.
fib_entry_index | The index of the FIB entry to update |
source | The ID of the client/source adding the entry. |
flags | Flags for the entry. |
dpo | The DPO to link to. |
Definition at line 363 of file fib_table.c.
void fib_table_entry_special_remove | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
fib_source_t | source | ||
) |
Remove a 'special' entry from the FIB.
This add is reference counting per-source. So n 'removes' are required for n 'adds', if the entry is no longer required.
fib_index | The index of the FIB |
prefix | The prefix to remove |
source | The ID of the client/source adding the entry. |
Definition at line 424 of file fib_table.c.
fib_node_index_t fib_table_entry_update | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
fib_source_t | source, | ||
fib_entry_flag_t | flags, | ||
fib_route_path_t * | paths | ||
) |
Update an entry to have a new set of paths.
If the entry does not exist, it will be created. The difference between an 'path-add' and an update, is that path-add is an incremental addition of paths, whereas an update is a wholesale swap.
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. Not const since they may be modified. |
Definition at line 756 of file fib_table.c.
fib_node_index_t fib_table_entry_update_one_path | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
fib_source_t | source, | ||
fib_entry_flag_t | flags, | ||
dpo_proto_t | next_hop_proto, | ||
const ip46_address_t * | next_hop, | ||
u32 | next_hop_sw_if_index, | ||
u32 | next_hop_fib_index, | ||
u32 | next_hop_weight, | ||
fib_mpls_label_t * | next_hop_label_stack, | ||
fib_route_path_flags_t | pf | ||
) |
Update the entry to have just one path.
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. |
next_hop_proto The protocol of the next hop. This cannot be derived in the event that the next hop is all zeros.
next_hop | The address of the next-hop. |
sw_if_index | The index of the interface. |
next_hop_fib_index,The | fib index of the next-hop for recursive resolution |
next_hop_weight | [un]equal cost path weight |
next_hop_label_stack | The path's out-going label stack. NULL is there is none. |
pf | Flags for the path |
Definition at line 805 of file fib_table.c.
u32 fib_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 1097 of file fib_table.c.
u32 fib_table_find_or_create_and_lock | ( | fib_protocol_t | proto, |
u32 | table_id, | ||
fib_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 1156 of file fib_table.c.
|
static |
Definition at line 1113 of file fib_table.c.
u32 fib_table_find_or_create_and_lock_w_name | ( | fib_protocol_t | proto, |
u32 | table_id, | ||
fib_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 1165 of file fib_table.c.
void fib_table_flush | ( | u32 | fib_index, |
fib_protocol_t | proto, | ||
fib_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 1398 of file fib_table.c.
|
static |
Definition at line 1385 of file fib_table.c.
void fib_table_fwding_dpo_remove | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
const dpo_id_t * | dpo | ||
) |
remove an entry in the FIB's forwarding table
fib_index | The index of the FIB |
prefix | The prefix for the entry to add/update |
dpo | The data-path object to use for forwarding |
Definition at line 280 of file fib_table.c.
void fib_table_fwding_dpo_update | ( | u32 | fib_index, |
const fib_prefix_t * | prefix, | ||
const dpo_id_t * | dpo | ||
) |
Add or update an entry in the FIB's forwarding table.
This is called from the fib_entry code. It is not meant to be used by the client/source.
fib_index | The index of the FIB |
prefix | The prefix for the entry to add/update |
dpo | The data-path object to use for forwarding |
Definition at line 253 of file fib_table.c.
fib_table_t* fib_table_get | ( | fib_node_index_t | index, |
fib_protocol_t | proto | ||
) |
Get a pointer to a FIB table.
Definition at line 29 of file fib_table.c.
flow_hash_config_t fib_table_get_default_flow_hash_config | ( | fib_protocol_t | proto | ) |
Get the flow hash configured used by the protocol.
proto The protocol of the FIB (and thus the entries therein)
Definition at line 1016 of file fib_table.c.
flow_hash_config_t fib_table_get_flow_hash_config | ( | u32 | fib_index, |
fib_protocol_t | proto | ||
) |
Get the flow hash configured used by the table.
fib_index | The index of the FIB |
proto The protocol the packets the flow hash will be calculated for.
Definition at line 1005 of file fib_table.c.
u32 fib_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 989 of file fib_table.c.
fib_node_index_t fib_table_get_less_specific | ( | u32 | fib_index, |
const fib_prefix_t * | prefix | ||
) |
Get the less specific (covering) prefix.
fib_index | The index of the FIB |
prefix | The prefix to lookup |
Definition at line 133 of file fib_table.c.
|
static |
Definition at line 106 of file fib_table.c.
u32 fib_table_get_num_entries | ( | u32 | fib_index, |
fib_protocol_t | proto, | ||
fib_source_t | source | ||
) |
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)
Definition at line 1322 of file fib_table.c.
u32 fib_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 1086 of file fib_table.c.
u32 fib_table_get_table_id_for_sw_if_index | ( | fib_protocol_t | proto, |
u32 | sw_if_index | ||
) |
Get the Table-ID 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 1073 of file fib_table.c.
void fib_table_lock | ( | u32 | fib_index, |
fib_protocol_t | proto, | ||
fib_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 1310 of file fib_table.c.
|
static |
|
static |
fib_node_index_t fib_table_lookup | ( | u32 | fib_index, |
const fib_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 68 of file fib_table.c.
fib_node_index_t fib_table_lookup_exact_match | ( | u32 | fib_index, |
const fib_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 97 of file fib_table.c.
|
inlinestatic |
Definition at line 75 of file fib_table.c.
|
inlinestatic |
Definition at line 46 of file fib_table.c.
void fib_table_mark | ( | u32 | fib_index, |
fib_protocol_t | proto, | ||
fib_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 1434 of file fib_table.c.
|
static |
Definition at line 1421 of file fib_table.c.
|
static |
Definition at line 173 of file fib_table.c.
|
static |
fib_table_route_path_fixup
Convert attached hosts to attached next-hops.
This special case is required because an attached path will link to a glean, and the FIB entry will have the interface or API/CLI source. When the ARP/ND process is completes then that source (which will provide a complete adjacency) will be lower priority and so the FIB entry will remain linked to a glean and traffic will never reach the hosts. For an ATTAHCED_HOST path we can link the path directly to the [incomplete] adjacency.
Definition at line 500 of file fib_table.c.
void fib_table_set_flow_hash_config | ( | u32 | fib_index, |
fib_protocol_t | proto, | ||
flow_hash_config_t | hash_config | ||
) |
Set the flow hash configured used by the table.
fib_index | The index of the FIB |
proto The protocol of the FIB (and thus the entries therein)
hash_config | The flow-hash config to set |
Definition at line 1055 of file fib_table.c.
|
static |
Definition at line 1044 of file fib_table.c.
|
static |
|
static |
void fib_table_sub_tree_walk | ( | u32 | fib_index, |
fib_protocol_t | proto, | ||
const fib_prefix_t * | root, | ||
fib_table_walk_fn_t | fn, | ||
void * | ctx | ||
) |
Walk all entries in a sub-tree FIB table.
The 'root' paraneter is the prefix at the root of the sub-tree. 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 1250 of file fib_table.c.
void fib_table_sweep | ( | u32 | fib_index, |
fib_protocol_t | proto, | ||
fib_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 1467 of file fib_table.c.
|
static |
Definition at line 1454 of file fib_table.c.
void fib_table_unlock | ( | u32 | fib_index, |
fib_protocol_t | proto, | ||
fib_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 1291 of file fib_table.c.
void fib_table_walk | ( | u32 | fib_index, |
fib_protocol_t | proto, | ||
fib_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 1230 of file fib_table.c.
Definition at line 1348 of file fib_table.c.
format (display) the memory used by the FIB tables
Definition at line 1494 of file fib_table.c.
Format the description/name of the table.
Definition at line 1334 of file fib_table.c.
|
static |
Definition at line 26 of file fib_table.c.