summaryrefslogtreecommitdiffstats
path: root/src/vnet/mfib/mfib_entry_src.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/mfib/mfib_entry_src.h')
-rw-r--r--src/vnet/mfib/mfib_entry_src.h49
1 files changed, 48 insertions, 1 deletions
diff --git a/src/vnet/mfib/mfib_entry_src.h b/src/vnet/mfib/mfib_entry_src.h
index 86752e071ec..b85c010779c 100644
--- a/src/vnet/mfib/mfib_entry_src.h
+++ b/src/vnet/mfib/mfib_entry_src.h
@@ -28,6 +28,48 @@ typedef struct mfib_path_ext_t_
} mfib_path_ext_t;
/**
+ * Flags for the source data
+ */
+typedef enum mfib_entry_src_attribute_t_ {
+ /**
+ * Marker. Add new values after this one.
+ */
+ MFIB_ENTRY_SRC_ATTRIBUTE_FIRST,
+ /**
+ * the source has been added to the entry
+ */
+ MFIB_ENTRY_SRC_ATTRIBUTE_STALE = MFIB_ENTRY_SRC_ATTRIBUTE_FIRST,
+ /**
+ * Marker. add new entries before this one.
+ */
+ MFIB_ENTRY_SRC_ATTRIBUTE_LAST = MFIB_ENTRY_SRC_ATTRIBUTE_STALE,
+} mfib_entry_src_attribute_t;
+
+
+#define MFIB_ENTRY_SRC_ATTRIBUTES { \
+ [MFIB_ENTRY_SRC_ATTRIBUTE_STALE] = "stale", \
+}
+
+#define FOR_EACH_MFIB_SRC_ATTRIBUTE(_item) \
+ for (_item = MFIB_ENTRY_SRC_ATTRIBUTE_FIRST; \
+ _item <= MFIB_ENTRY_SRC_ATTRIBUTE_LAST; \
+ _item++)
+
+typedef enum mfib_entry_src_flag_t_ {
+ MFIB_ENTRY_SRC_FLAG_NONE = 0,
+ MFIB_ENTRY_SRC_FLAG_STALE = (1 << MFIB_ENTRY_SRC_ATTRIBUTE_STALE),
+} __attribute__ ((packed)) mfib_entry_src_flags_t;
+
+extern u8 * format_mfib_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
+ */
+STATIC_ASSERT (sizeof(mfib_entry_src_flags_t) <= 2,
+ "FIB entry flags field size too big");
+
+/**
* The source of an MFIB entry
*/
typedef struct mfib_entry_src_t_
@@ -40,7 +82,12 @@ typedef struct mfib_entry_src_t_
/**
* Route flags
*/
- mfib_entry_flags_t mfes_flags;
+ mfib_entry_flags_t mfes_route_flags;
+
+ /**
+ * Source flags
+ */
+ mfib_entry_src_flags_t mfes_flags;
/**
* The reference count on the entry. this is a u32