summaryrefslogtreecommitdiffstats
path: root/src/vnet/fib
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/fib')
-rw-r--r--src/vnet/fib/fib_entry.h7
-rw-r--r--src/vnet/fib/fib_entry_src.c29
-rw-r--r--src/vnet/fib/fib_entry_src.h5
3 files changed, 22 insertions, 19 deletions
diff --git a/src/vnet/fib/fib_entry.h b/src/vnet/fib/fib_entry.h
index 70c66217156..8bd87e9d222 100644
--- a/src/vnet/fib/fib_entry.h
+++ b/src/vnet/fib/fib_entry.h
@@ -28,6 +28,12 @@
*/
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.
*/
FIB_SOURCE_FIRST,
@@ -156,6 +162,7 @@ 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", \
diff --git a/src/vnet/fib/fib_entry_src.c b/src/vnet/fib/fib_entry_src.c
index 067733f0a8d..6ed13a328bd 100644
--- a/src/vnet/fib/fib_entry_src.c
+++ b/src/vnet/fib/fib_entry_src.c
@@ -1827,27 +1827,22 @@ fib_entry_get_flags_for_source (fib_node_index_t entry_index,
return (FIB_ENTRY_FLAG_NONE);
}
+fib_source_t
+fib_entry_get_source_i (const fib_entry_t *fib_entry)
+{
+ /* the vector of sources is deliberately arranged in priority order */
+ if (0 == vec_len(fib_entry->fe_srcs))
+ return (FIB_SOURCE_INVALID);
+ return (vec_elt(fib_entry->fe_srcs, 0).fes_src);
+}
+
fib_entry_flag_t
fib_entry_get_flags_i (const fib_entry_t *fib_entry)
{
- fib_entry_flag_t flags;
-
- /*
- * the vector of sources is deliberately arranged in priority order
- */
+ /* the vector of sources is deliberately arranged in priority order */
if (0 == vec_len(fib_entry->fe_srcs))
- {
- flags = FIB_ENTRY_FLAG_NONE;
- }
- else
- {
- fib_entry_src_t *esrc;
-
- esrc = vec_elt_at_index(fib_entry->fe_srcs, 0);
- flags = esrc->fes_entry_flags;
- }
-
- return (flags);
+ return (FIB_ENTRY_FLAG_NONE);
+ return (vec_elt(fib_entry->fe_srcs, 0).fes_entry_flags);
}
void
diff --git a/src/vnet/fib/fib_entry_src.h b/src/vnet/fib/fib_entry_src.h
index 1d5f252eb87..a859b9c734a 100644
--- a/src/vnet/fib/fib_entry_src.h
+++ b/src/vnet/fib/fib_entry_src.h
@@ -33,9 +33,9 @@ extern vlib_log_class_t fib_entry_logger;
format_fib_prefix, \
&_e->fe_prefix, \
format_fib_entry_flags, \
- _e->fe_srcs[0].fes_entry_flags, \
+ fib_entry_get_flags_i(_e), \
format_fib_source, \
- _e->fe_srcs[0].fes_src, \
+ fib_entry_get_source_i(_e), \
##_args); \
}
@@ -316,6 +316,7 @@ extern void fib_entry_src_inherit (const fib_entry_t *cover,
extern fib_forward_chain_type_t fib_entry_get_default_chain_type(
const fib_entry_t *fib_entry);
+extern fib_source_t fib_entry_get_source_i(const fib_entry_t *fib_entry);
extern fib_entry_flag_t fib_entry_get_flags_i(const fib_entry_t *fib_entry);
extern fib_path_list_flags_t fib_entry_src_flags_2_path_list_flags(