#define __FIB_ENTRY_H__
#include <vnet/fib/fib_node.h>
-#include <vnet/fib/fib_entry_delegate.h>
#include <vnet/adj/adj.h>
#include <vnet/ip/ip.h>
#include <vnet/dpo/dpo.h>
/**
* 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.
*/
#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", \
/**
* 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_ {
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
*/
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
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) \
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,
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);
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 const fib_prefix_t *fib_entry_get_prefix(fib_node_index_t fib_entry_index);
+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,