FIB: encode the label stack in the FIB path during table dump
[vpp.git] / src / vnet / mfib / mfib_types.h
index 37898a0..aea4a76 100644 (file)
@@ -68,6 +68,13 @@ typedef enum mfib_entry_attribute_t_
      *        Use with extreme caution
      */
     MFIB_ENTRY_ACCEPT_ALL_ITF,
+    /**
+     * Exclusive - like its unicast counterpart. the source has provided
+     * the forwarding DPO directly. The entry therefore does not resolve
+     * paths via a path-list
+     */
+    MFIB_ENTRY_EXCLUSIVE,
+
     MFIB_ENTRY_INHERIT_ACCEPT,
     MFIB_ENTRY_ATTRIBUTE_LAST = MFIB_ENTRY_INHERIT_ACCEPT,
 } mfib_entry_attribute_t;
@@ -83,6 +90,7 @@ typedef enum mfib_entry_attribute_t_
     [MFIB_ENTRY_DROP]           = "D",     \
     [MFIB_ENTRY_ACCEPT_ALL_ITF] = "AA",    \
     [MFIB_ENTRY_INHERIT_ACCEPT] = "IA",    \
+    [MFIB_ENTRY_EXCLUSIVE]      = "E",     \
 }
 
 #define MFIB_ENTRY_NAMES_LONG  {                    \
@@ -91,6 +99,7 @@ typedef enum mfib_entry_attribute_t_
     [MFIB_ENTRY_DROP]           = "Drop",           \
     [MFIB_ENTRY_ACCEPT_ALL_ITF] = "Accept-all-itf", \
     [MFIB_ENTRY_INHERIT_ACCEPT] = "Inherit-Accept", \
+    [MFIB_ENTRY_EXCLUSIVE]      = "Exclusive",      \
 }
 
 typedef enum mfib_entry_flags_t_
@@ -99,8 +108,9 @@ typedef enum mfib_entry_flags_t_
     MFIB_ENTRY_FLAG_SIGNAL = (1 << MFIB_ENTRY_SIGNAL),
     MFIB_ENTRY_FLAG_DROP = (1 << MFIB_ENTRY_DROP),
     MFIB_ENTRY_FLAG_CONNECTED = (1 << MFIB_ENTRY_CONNECTED),
-    MFIB_ENTRY_FLAG_INHERIT_ACCEPT = (1 << MFIB_ENTRY_INHERIT_ACCEPT),
     MFIB_ENTRY_FLAG_ACCEPT_ALL_ITF = (1 << MFIB_ENTRY_ACCEPT_ALL_ITF),
+    MFIB_ENTRY_FLAG_EXCLUSIVE = (1 << MFIB_ENTRY_EXCLUSIVE),
+    MFIB_ENTRY_FLAG_INHERIT_ACCEPT = (1 << MFIB_ENTRY_INHERIT_ACCEPT),
 } mfib_entry_flags_t;
 
 typedef enum mfib_itf_attribute_t_
@@ -151,22 +161,46 @@ typedef enum mfib_itf_flags_t_
 typedef enum mfib_source_t_
 {
     MFIB_SOURCE_SPECIAL,
+    MFIB_SOURCE_6RD,
     MFIB_SOURCE_API,
     MFIB_SOURCE_CLI,
     MFIB_SOURCE_VXLAN,
     MFIB_SOURCE_DHCP,
+    MFIB_SOURCE_SRv6,
+    MFIB_SOURCE_GTPU,
+    MFIB_SOURCE_VXLAN_GPE,
+    MFIB_SOURCE_GENEVE,
+    MFIB_SOURCE_IGMP,
+    MFIB_SOURCE_VXLAN_GBP,
+    MFIB_SOURCE_RR,
     MFIB_SOURCE_DEFAULT_ROUTE,
 } mfib_source_t;
 
 #define MFIB_SOURCE_NAMES {                        \
     [MFIB_SOURCE_SPECIAL] = "Special",             \
+    [MFIB_SOURCE_6RD] = "6RD",                     \
     [MFIB_SOURCE_API] = "API",                     \
     [MFIB_SOURCE_CLI] = "CLI",                     \
     [MFIB_SOURCE_DHCP] = "DHCP",                   \
     [MFIB_SOURCE_VXLAN] = "VXLAN",                 \
+    [MFIB_SOURCE_SRv6] = "SRv6",                   \
+    [MFIB_SOURCE_GTPU] = "GTPU",                   \
+    [MFIB_SOURCE_VXLAN_GPE] = "VXLAN-GPE",         \
+    [MFIB_SOURCE_GENEVE] = "Geneve",               \
+    [MFIB_SOURCE_IGMP] = "IGMP",                   \
+    [MFIB_SOURCE_VXLAN_GBP] = "VXLAN-GBP",         \
+    [MFIB_SOURCE_RR] = "Recursive-resolution",     \
     [MFIB_SOURCE_DEFAULT_ROUTE] = "Default Route", \
 }
 
+#define FOREACH_MFIB_SOURCE(_ms)                \
+    for (_ms = MFIB_SOURCE_SPECIAL;             \
+         _ms <= MFIB_SOURCE_DEFAULT_ROUTE;      \
+         _ms++)
+
+#define MFIB_N_SOURCES (MFIB_SOURCE_DEFAULT_ROUTE + 1)
+#define MFIB_SOURCE_NONE (MFIB_SOURCE_DEFAULT_ROUTE + 1)
+
 /**
  * \brief Compare two prefixes for equality
  */
@@ -181,5 +215,20 @@ extern uword unformat_mfib_itf_flags(unformat_input_t * input,
                                      va_list * args);
 extern uword unformat_mfib_entry_flags(unformat_input_t * input,
                                        va_list * args);
+/**
+ * \brief Compare two prefixes for covering relationship
+ *
+ * \return non-zero if the first prefix is a cover for the second
+ */
+extern int mfib_prefix_is_cover(const mfib_prefix_t *p1,
+                                const mfib_prefix_t *p2);
+
+/**
+ * \brief Return true is the prefix is a host prefix
+ */
+extern int mfib_prefix_is_host(const mfib_prefix_t *p);
+
+extern fib_forward_chain_type_t mfib_forw_chain_type_from_dpo_proto(dpo_proto_t proto);
+extern fib_forward_chain_type_t mfib_forw_chain_type_from_fib_proto(fib_protocol_t proto);
 
 #endif