summaryrefslogtreecommitdiffstats
path: root/src/vnet/bier/bier_fmask_db.h
diff options
context:
space:
mode:
authorNeale Ranns <nranns@cisco.com>2017-12-05 13:24:04 -0800
committerFlorin Coras <florin.coras@gmail.com>2017-12-09 20:55:08 +0000
commit9128637ee8f7b0d903551f165a1447d427e8dd19 (patch)
tree244014dd1064643946d64066e352ee1627bf622c /src/vnet/bier/bier_fmask_db.h
parentcef87f1a5eb4d69cf11ce1cd3c5506edcfba74c4 (diff)
BIER in non-MPLS netowrks
as decsribed in section 2.2 ihttps://tools.ietf.org/html/draft-ietf-bier-mpls-encapsulation-10 with BIFT encoding from: https://tools.ietf.org/html/draft-wijnandsxu-bier-non-mpls-bift-encoding-00 changes: 1 - introduce the new BIFT lookup table. BIER tables that have an associated MPLS label are added to the MPLS-FIB. Those that don't are added to the BIER table 2 - BIER routes that have no associated output MPLS label will add a BIFT label. 3 - The BIER FMask has a path-list as a member to resolve via any possible path. Change-Id: I1fd4d9dbd074f0e855c16e9329b81460ebe1efce Signed-off-by: Neale Ranns <nranns@cisco.com>
Diffstat (limited to 'src/vnet/bier/bier_fmask_db.h')
-rw-r--r--src/vnet/bier/bier_fmask_db.h54
1 files changed, 38 insertions, 16 deletions
diff --git a/src/vnet/bier/bier_fmask_db.h b/src/vnet/bier/bier_fmask_db.h
index 6ba40f3a839..a7f29c2b6a6 100644
--- a/src/vnet/bier/bier_fmask_db.h
+++ b/src/vnet/bier/bier_fmask_db.h
@@ -21,18 +21,27 @@
#include <vnet/ip/ip.h>
-#include <vnet/bier/bier_types.h>
+#include <vnet/fib/fib_types.h>
/**
- * Foward declarations
+ * BIER header encapulsation types
*/
-struct bier_fmask_t_;
-
typedef enum bier_hdr_type_t_ {
- BIER_HDR_IN_IP6,
+ /**
+ * BIER Header in MPLS networks
+ */
BIER_HDR_O_MPLS,
+
+ /**
+ * BIER header in non-MPLS networks
+ */
+ BIER_HDR_O_OTHER,
} bier_hdr_type_t;
+/**
+ * A key/ID for a BIER forwarding Mas (FMask).
+ * This is a simplified version of a fib_route_path_t.
+ */
typedef struct bier_fmask_id_t_ {
/**
* Type of BIER header this fmask supports
@@ -40,22 +49,35 @@ typedef struct bier_fmask_id_t_ {
bier_hdr_type_t bfmi_hdr_type;
/**
- * next-hop of the peer
+ * The BIER table this fmask is in
+ */
+ index_t bfmi_bti;
+
+ union {
+ /**
+ * next-hop of the peer
+ */
+ ip46_address_t bfmi_nh;
+
+ /**
+ * ID of the next-hop object, e.g. a UDP-encap
+ */
+ u32 bfmi_id;
+ };
+
+ /**
+ * Software interface index
*/
- ip46_address_t bfmi_nh;
-} bier_fmask_id_t;
+ u32 bfmi_sw_if_index;
+} __attribute__((packed)) bier_fmask_id_t;
-extern u32
+extern index_t
bier_fmask_db_find_or_create_and_lock(index_t bti,
- const bier_fmask_id_t *fmid,
const fib_route_path_t *rpath);
+extern index_t bier_fmask_db_find (index_t bti,
+ const fib_route_path_t *rpath);
-extern u32
-bier_fmask_db_find(index_t bti,
- const bier_fmask_id_t *fmid);
+extern void bier_fmask_db_remove (const bier_fmask_id_t *fmid);
-extern void
-bier_fmask_db_remove(index_t bti,
- const bier_fmask_id_t *fmid);
#endif