aboutsummaryrefslogtreecommitdiffstats
path: root/vnet/vnet/lisp-cp/lisp_cp_dpo.c
diff options
context:
space:
mode:
authorNeale Ranns <nranns@cisco.com>2016-10-03 09:40:25 +0100
committerFlorin Coras <florin.coras@gmail.com>2016-10-03 11:45:15 +0000
commit5e575b1d59a5a4c1590ca09d6383a876fb9fdd25 (patch)
treefcba6d058fe32d9b32fe246577565020d10455ff /vnet/vnet/lisp-cp/lisp_cp_dpo.c
parent553d808fc44e61846e4cda108083dd88beb338e3 (diff)
L2 over LISP and GRE (VPP-457)
Change-Id: I0d7f9c7f41a9f9e0acb0950adedb90d45df08c2a Signed-off-by: Neale Ranns <nranns@cisco.com>
Diffstat (limited to 'vnet/vnet/lisp-cp/lisp_cp_dpo.c')
-rw-r--r--vnet/vnet/lisp-cp/lisp_cp_dpo.c100
1 files changed, 62 insertions, 38 deletions
diff --git a/vnet/vnet/lisp-cp/lisp_cp_dpo.c b/vnet/vnet/lisp-cp/lisp_cp_dpo.c
index 0bb8098d6fc..185b07a2c1b 100644
--- a/vnet/vnet/lisp-cp/lisp_cp_dpo.c
+++ b/vnet/vnet/lisp-cp/lisp_cp_dpo.c
@@ -17,40 +17,44 @@
#include <vnet/lisp-gpe/lisp_gpe.h>
#include <vnet/lisp-cp/control.h>
-index_t
-lisp_cp_dpo_get (fib_protocol_t proto)
+/**
+ * The static array of LISP punt DPOs
+ */
+static dpo_id_t lisp_cp_dpos[DPO_PROTO_NUM];
+
+const dpo_id_t *
+lisp_cp_dpo_get (dpo_proto_t proto)
{
- /*
- * there are only two instances of this DPO type.
- * we can use the protocol as the index
- */
- return (proto);
+ /*
+ * there are only two instances of this DPO type.
+ * we can use the protocol as the index
+ */
+ return (&lisp_cp_dpos[proto]);
}
-static u8*
-format_lisp_cp_dpo (u8 *s, va_list *args)
+static u8 *
+format_lisp_cp_dpo (u8 * s, va_list * args)
{
- index_t index = va_arg (*args, index_t);
- CLIB_UNUSED(u32 indent) = va_arg (*args, u32);
+ index_t index = va_arg (*args, index_t);
+ CLIB_UNUSED (u32 indent) = va_arg (*args, u32);
- return (format(s, "lisp-cp-punt-%U",
- format_fib_protocol, index));
+ return (format (s, "lisp-cp-punt-%U", format_dpo_proto, index));
}
static void
-lisp_cp_dpo_lock (dpo_id_t *dpo)
+lisp_cp_dpo_lock (dpo_id_t * dpo)
{
}
static void
-lisp_cp_dpo_unlock (dpo_id_t *dpo)
+lisp_cp_dpo_unlock (dpo_id_t * dpo)
{
}
const static dpo_vft_t lisp_cp_vft = {
- .dv_lock = lisp_cp_dpo_lock,
- .dv_unlock = lisp_cp_dpo_unlock,
- .dv_format = format_lisp_cp_dpo,
+ .dv_lock = lisp_cp_dpo_lock,
+ .dv_unlock = lisp_cp_dpo_unlock,
+ .dv_format = format_lisp_cp_dpo,
};
/**
@@ -60,34 +64,54 @@ const static dpo_vft_t lisp_cp_vft = {
* this means that these graph nodes are ones from which a LISP-CP is the
* parent object in the DPO-graph.
*/
-const static char* const lisp_cp_ip4_nodes[] =
-{
- "lisp-cp-lookup-ip4",
- NULL,
+const static char *const lisp_cp_ip4_nodes[] = {
+ "lisp-cp-lookup-ip4",
+ NULL,
};
-const static char* const lisp_cp_ip6_nodes[] =
-{
- "lisp-cp-lookup-ip6",
- NULL,
+
+const static char *const lisp_cp_ip6_nodes[] = {
+ "lisp-cp-lookup-ip6",
+ NULL,
};
-const static char* const * const lisp_cp_nodes[DPO_PROTO_NUM] =
-{
- [DPO_PROTO_IP4] = lisp_cp_ip4_nodes,
- [DPO_PROTO_IP6] = lisp_cp_ip6_nodes,
- [DPO_PROTO_MPLS] = NULL,
+const static char *const lisp_cp_ethernet_nodes[] = {
+ "lisp-cp-lookup-l2",
+ NULL,
+};
+
+
+const static char *const *const lisp_cp_nodes[DPO_PROTO_NUM] = {
+ [DPO_PROTO_IP4] = lisp_cp_ip4_nodes,
+ [DPO_PROTO_IP6] = lisp_cp_ip6_nodes,
+ [DPO_PROTO_ETHERNET] = lisp_cp_ethernet_nodes,
+ [DPO_PROTO_MPLS] = NULL,
};
clib_error_t *
lisp_cp_dpo_module_init (vlib_main_t * vm)
{
- /*
- * there are no exit arcs from the LIS-CP VLIB node, so we
- * pass NULL as said node array.
- */
- dpo_register(DPO_LISP_CP, &lisp_cp_vft, lisp_cp_nodes);
+ dpo_proto_t dproto;
+
+ /*
+ * there are no exit arcs from the LIS-CP VLIB node, so we
+ * pass NULL as said node array.
+ */
+ dpo_register (DPO_LISP_CP, &lisp_cp_vft, lisp_cp_nodes);
+
+ FOR_EACH_DPO_PROTO (dproto)
+ {
+ dpo_set (&lisp_cp_dpos[dproto], DPO_LISP_CP, dproto, dproto);
+ }
- return (NULL);
+ return (NULL);
}
-VLIB_INIT_FUNCTION(lisp_cp_dpo_module_init);
+VLIB_INIT_FUNCTION (lisp_cp_dpo_module_init);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */