vlib: clean up r2 plugin registration relocator
[vpp.git] / src / vnet / fib / fib_types.h
index 832092c..b9346c7 100644 (file)
@@ -266,11 +266,19 @@ extern int fib_prefix_is_cover(const fib_prefix_t *p1,
 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
  */
-extern void fib_prefix_from_ip46_addr (const ip46_address_t *addr,
-                          fib_prefix_t *pfx);
+extern void fib_prefix_from_ip46_addr (fib_protocol_t fproto,
+                                      const ip46_address_t *addr,
+                                      fib_prefix_t *pfx);
 
 extern u8 * format_fib_prefix(u8 * s, va_list * args);
 extern u8 * format_fib_forw_chain_type(u8 * s, va_list * args);
@@ -278,6 +286,11 @@ extern u8 * format_fib_forw_chain_type(u8 * s, va_list * args);
 extern dpo_proto_t fib_proto_to_dpo(fib_protocol_t fib_proto);
 extern fib_protocol_t dpo_proto_to_fib(dpo_proto_t dpo_proto);
 
+/**
+ * \brief Increase IPv4/IPv6 address according to the prefix length
+ */
+extern void fib_prefix_increment (fib_prefix_t *pfx);
+
 /**
  * Convert from BIER next-hop proto to FIB proto
  */
@@ -393,6 +406,10 @@ typedef enum fib_route_path_flags_t_
      * 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;
 
 /**
@@ -520,6 +537,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;
             };
 
             /**
@@ -533,17 +555,11 @@ typedef struct fib_route_path_t_ {
              */
             fib_rpf_id_t frp_rpf_id;
 
-            union {
-                /**
-                 * The FIB index to lookup the nexthop
-                 * Only valid for recursive paths.
-                 */
-                u32 frp_fib_index;
-                /**
-                 * The BIER table to resolve the fmask in
-                 */
-                u32 frp_bier_fib_index;
-            };
+            /**
+             * The FIB index to lookup the nexthop
+             * Only valid for recursive paths.
+             */
+            u32 frp_fib_index;
             /**
              * The outgoing MPLS label Stack. NULL implies no label.
              */
@@ -609,10 +625,15 @@ extern uword unformat_fib_route_path(unformat_input_t * input, va_list * args);
  */
 extern u8 * format_fib_route_path(u8 *s, va_list *ap);
 
+/*
+ * Return true if the path is attached
+ */
+extern int fib_route_path_is_attached (const fib_route_path_t *rpath);
+
 /**
  * A help string to list the FIB path options
  */
-#define FIB_ROUTE_PATH_HELP "[next-hop-address] [next-hop-interface] [next-hop-table <value>] [weight <value>] [preference <value>] [udp-encap-id <value>] [ip4-lookup-in-table <value>] [ip6-lookup-in-table <value>] [mpls-lookup-in-table <value>] [resolve-via-host] [resolve-via-connected] [rx-ip4 <interface>] [out-labels <value value value>]"
+#define FIB_ROUTE_PATH_HELP "[next-hop-address] [next-hop-interface] [next-hop-table <value>] [weight <value>] [preference <value>] [udp-encap-id <value>] [ip4-lookup-in-table <value>] [ip6-lookup-in-table <value>] [mpls-lookup-in-table <value>] [resolve-via-host] [resolve-via-connected] [rx-ip4|rx-ip6 <interface>] [out-labels <value value value>]"
 
 /**
  * return code to control pat-hlist walk