#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>
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_ {
/**
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
*
* \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
*/
-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);
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
*/
* 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
* Present in an mfib path list
*/
index_t frp_bier_imp;
+
+ /**
+ * Glean prefix on a glean path
+ */
+ fib_prefix_t frp_connected;
};
/**
*/
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.
*/
*/
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);
+
+/*
+ * 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