fib: Source Address Selection
[vpp.git] / src / vnet / fib / fib_types.h
index 77b133f..b5a58e7 100644 (file)
@@ -17,8 +17,7 @@
 #define __FIB_TYPES_H__
 
 #include <stdbool.h>
-#include <vlib/vlib.h>
-#include <vnet/ip/ip6_packet.h>
+#include <vnet/ip/ip46_address.h>
 #include <vnet/mpls/packet.h>
 #include <vnet/dpo/dpo.h>
 #include <vnet/bier/bier_types.h>
@@ -198,7 +197,7 @@ extern fib_forward_chain_type_t fib_forw_chain_type_from_fib_proto(fib_protocol_
 extern dpo_proto_t fib_forw_chain_type_to_dpo_proto(fib_forward_chain_type_t fct);
 
 /**
- * Aggregrate type for a prefix
+ * Aggregate type for a prefix
  */
 typedef struct fib_prefix_t_ {
     /**
@@ -247,6 +246,12 @@ STATIC_ASSERT(STRUCT_OFFSET_OF(fib_prefix_t, fp_addr) == 4,
 extern int fib_prefix_cmp(const fib_prefix_t *p1,
                          const fib_prefix_t *p2);
 
+/**
+ * \brief Copy a prefix
+ */
+extern void fib_prefix_copy(fib_prefix_t *dst,
+                            const fib_prefix_t *src);
+
 /**
  * \brief Compare two prefixes for covering relationship
  *
@@ -259,7 +264,14 @@ extern int fib_prefix_is_cover(const fib_prefix_t *p1,
  * \brief Return true is the prefix is a host prefix
  */
 extern int fib_prefix_is_host(const fib_prefix_t *p);
+extern u8 fib_prefix_get_host_length (fib_protocol_t proto);
 
+/**
+ * normalise a prefix (i.e. mask the host bits according to the
+ * prefix length)
+ */
+extern void fib_prefix_normalize(const fib_prefix_t *p,
+                                 fib_prefix_t *out);
 
 /**
  * \brief Host prefix from ip
@@ -383,8 +395,22 @@ typedef enum fib_route_path_flags_t_
     FIB_ROUTE_PATH_ICMP_UNREACH = (1 << 15),
     FIB_ROUTE_PATH_ICMP_PROHIBIT = (1 << 16),
     FIB_ROUTE_PATH_CLASSIFY = (1 << 17),
+
+    /**
+     * Pop a Psuedo Wire Control Word
+     */
+    FIB_ROUTE_PATH_POP_PW_CW = (1 << 18),
+    /**
+     * A path that resolves via a glean adjacency
+     */
+    FIB_ROUTE_PATH_GLEAN = (1 << 19),
 } fib_route_path_flags_t;
 
+/**
+ * Format route path flags
+ */
+extern u8 * format_fib_route_path_flags(u8 *s, va_list *ap);
+
 /**
  * An RPF-ID is numerical value that is used RPF validate. An entry
  * has-a RPF-ID, when a packet egress from (e.g. an LSP) it gains an
@@ -505,6 +531,11 @@ typedef struct fib_route_path_t_ {
                  * Present in an mfib path list
                  */
                 index_t frp_bier_imp;
+
+                /**
+                 * Glean prefix on a glean path
+                 */
+                fib_prefix_t frp_connected;
             };
 
             /**
@@ -589,6 +620,11 @@ typedef struct fib_route_path_t_ {
  */
 extern uword unformat_fib_route_path(unformat_input_t * input, va_list * args);
 
+/**
+ * Format route path flags
+ */
+extern u8 * format_fib_route_path(u8 *s, va_list *ap);
+
 /**
  * A help string to list the FIB path options
  */