L2 over LISP and GRE (VPP-457)
[vpp.git] / vnet / vnet / lisp-cp / lisp_cp_dpo.c
index 0bb8098..185b07a 100644 (file)
 #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:
+ */