X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Ffib%2Ffib_entry.h;h=f0e6e8d8aae58be0119b1e6f949397a8f9dee5f7;hb=9db6ada77;hp=dcc310e8fbca6cd16912fcf756b88cb81d7b3562;hpb=56f949b9d3d1c3ba6816169fff852a51bbe47a15;p=vpp.git diff --git a/src/vnet/fib/fib_entry.h b/src/vnet/fib/fib_entry.h index dcc310e8fbc..f0e6e8d8aae 100644 --- a/src/vnet/fib/fib_entry.h +++ b/src/vnet/fib/fib_entry.h @@ -17,17 +17,22 @@ #define __FIB_ENTRY_H__ #include -#include #include #include #include /** * The different sources that can create a route. - * The sources are defined here the thier relative priority order. + * The sources are defined here with their relative priority order. * The lower the value the higher the priority */ typedef enum fib_source_t_ { + /** + * An invalid source + * This is not a real source, so don't use it to source a prefix. + * It exists here to provide a value for inexistant/uninitialized source + */ + FIB_SOURCE_INVALID = 0, /** * Marker. Add new values after this one. */ @@ -64,6 +69,10 @@ typedef enum fib_source_t_ { * From the BIER subsystem */ FIB_SOURCE_BIER, + /** + * From 6RD. + */ + FIB_SOURCE_6RD, /** * From the control plane API */ @@ -153,10 +162,12 @@ STATIC_ASSERT (sizeof(fib_source_t) == 1, #define FIB_SOURCE_MAX (FIB_SOURCE_LAST+1) #define FIB_SOURCES { \ + [FIB_SOURCE_INVALID] = "invalid", \ [FIB_SOURCE_SPECIAL] = "special", \ [FIB_SOURCE_INTERFACE] = "interface", \ [FIB_SOURCE_PROXY] = "proxy", \ [FIB_SOURCE_BIER] = "BIER", \ + [FIB_SOURCE_6RD] = "6RD", \ [FIB_SOURCE_API] = "API", \ [FIB_SOURCE_CLI] = "CLI", \ [FIB_SOURCE_ADJ] = "adjacency", \ @@ -182,7 +193,7 @@ STATIC_ASSERT (sizeof(fib_source_t) == 1, /** * The different sources that can create a route. - * The sources are defined here the thier relative priority order. + * The sources are defined here with their relative priority order. * The lower the value the higher the priority */ typedef enum fib_entry_attribute_t_ { @@ -281,6 +292,8 @@ typedef enum fib_entry_flag_t_ { FIB_ENTRY_FLAG_INTERPOSE = (1 << FIB_ENTRY_ATTRIBUTE_INTERPOSE), } __attribute__((packed)) fib_entry_flag_t; +extern u8 * format_fib_entry_flags(u8 *s, va_list *args); + /** * Flags for the source data */ @@ -301,6 +314,10 @@ typedef enum fib_entry_src_attribute_t_ { * the source is active/best */ FIB_ENTRY_SRC_ATTRIBUTE_ACTIVE, + /** + * the source is stale + */ + FIB_ENTRY_SRC_ATTRIBUTE_STALE, /** * the source is inherited from its cover */ @@ -316,6 +333,7 @@ typedef enum fib_entry_src_attribute_t_ { [FIB_ENTRY_SRC_ATTRIBUTE_ADDED] = "added", \ [FIB_ENTRY_SRC_ATTRIBUTE_CONTRIBUTING] = "contributing", \ [FIB_ENTRY_SRC_ATTRIBUTE_ACTIVE] = "active", \ + [FIB_ENTRY_SRC_ATTRIBUTE_STALE] = "stale", \ [FIB_ENTRY_SRC_ATTRIBUTE_INHERITED] = "inherited", \ } @@ -329,9 +347,12 @@ typedef enum fib_entry_src_flag_t_ { FIB_ENTRY_SRC_FLAG_ADDED = (1 << FIB_ENTRY_SRC_ATTRIBUTE_ADDED), FIB_ENTRY_SRC_FLAG_CONTRIBUTING = (1 << FIB_ENTRY_SRC_ATTRIBUTE_CONTRIBUTING), FIB_ENTRY_SRC_FLAG_ACTIVE = (1 << FIB_ENTRY_SRC_ATTRIBUTE_ACTIVE), + FIB_ENTRY_SRC_FLAG_STALE = (1 << FIB_ENTRY_SRC_ATTRIBUTE_STALE), FIB_ENTRY_SRC_FLAG_INHERITED = (1 << FIB_ENTRY_SRC_ATTRIBUTE_INHERITED), } __attribute__ ((packed)) fib_entry_src_flag_t; +extern u8 * format_fib_entry_src_flags(u8 *s, va_list *args); + /* * Keep the size of the flags field to 2 bytes, so it * can be placed next to the 2 bytes reference count @@ -496,9 +517,9 @@ typedef struct fib_entry_t_ { u32 fe_sibling; /** - * A vector of delegates. + * A vector of delegate indices. */ - fib_entry_delegate_t *fe_delegates; + index_t *fe_delegates; } fib_entry_t; #define FOR_EACH_FIB_ENTRY_FLAG(_item) \ @@ -530,7 +551,7 @@ extern void fib_entry_update (fib_node_index_t fib_entry_index, extern void fib_entry_path_add(fib_node_index_t fib_entry_index, fib_source_t source, fib_entry_flag_t flags, - const fib_route_path_t *rpath); + const fib_route_path_t *rpaths); extern void fib_entry_special_add(fib_node_index_t fib_entry_index, fib_source_t source, fib_entry_flag_t flags, @@ -544,7 +565,7 @@ extern fib_entry_src_flag_t fib_entry_special_remove(fib_node_index_t fib_entry_ extern fib_entry_src_flag_t fib_entry_path_remove(fib_node_index_t fib_entry_index, fib_source_t source, - const fib_route_path_t *rpath); + const fib_route_path_t *rpaths); extern void fib_entry_inherit(fib_node_index_t cover, fib_node_index_t covered); @@ -592,10 +613,8 @@ extern u32 fib_entry_get_resolving_interface_for_source( fib_node_index_t fib_entry_index, fib_source_t source); -extern void fib_entry_encode(fib_node_index_t fib_entry_index, - fib_route_path_encode_t **api_rpaths); -extern void fib_entry_get_prefix(fib_node_index_t fib_entry_index, - fib_prefix_t *pfx); +extern fib_route_path_t* fib_entry_encode(fib_node_index_t fib_entry_index); +extern const fib_prefix_t* fib_entry_get_prefix(fib_node_index_t fib_entry_index); extern u32 fib_entry_get_fib_index(fib_node_index_t fib_entry_index); extern void fib_entry_set_source_data(fib_node_index_t fib_entry_index, fib_source_t source, @@ -614,11 +633,15 @@ extern int fib_entry_is_sourced(fib_node_index_t fib_entry_index, extern fib_node_index_t fib_entry_get_path_list(fib_node_index_t fib_entry_index); extern int fib_entry_is_resolved(fib_node_index_t fib_entry_index); extern int fib_entry_is_host(fib_node_index_t fib_entry_index); +extern int fib_entry_is_marked(fib_node_index_t fib_entry_index, fib_source_t source); +extern void fib_entry_mark(fib_node_index_t fib_entry_index, fib_source_t source); extern void fib_entry_set_flow_hash_config(fib_node_index_t fib_entry_index, flow_hash_config_t hash_config); extern void fib_entry_module_init(void); +extern u32 fib_entry_get_stats_index(fib_node_index_t fib_entry_index); + /* * unsafe... beware the raw pointer. */