API refactoring : lisp-gpe 63/4463/4
authorPavel Kotucek <pkotucek@cisco.com>
Wed, 21 Dec 2016 14:50:08 +0000 (15:50 +0100)
committerDamjan Marion <dmarion.lists@gmail.com>
Thu, 22 Dec 2016 16:33:14 +0000 (16:33 +0000)
Change-Id: I47b38a9b5ae8ead2a161402974205982669851a7
Signed-off-by: Pavel Kotucek <pkotucek@cisco.com>
vnet/Makefile.am
vnet/vnet/lisp-cp/lisp.api
vnet/vnet/lisp-gpe/lisp_gpe.api [new file with mode: 0644]
vnet/vnet/lisp-gpe/lisp_gpe_api.c [new file with mode: 0644]
vnet/vnet/vnet_all_api_h.h
vpp-api/java/Makefile.am
vpp/vpp-api/api.c
vpp/vpp-api/vpe.api

index c3ba6e7..ef6a6e7 100644 (file)
@@ -49,7 +49,9 @@ BUILT_SOURCES =                               \
  vnet/ipsec-gre/ipsec_gre.api.h                \
  vnet/ipsec-gre/ipsec_gre.api.json     \
  vnet/lisp-cp/lisp.api.h                       \
- vnet/lisp-cp/lisp.api.json
+ vnet/lisp-cp/lisp.api.json                    \
+ vnet/lisp-gpe/lisp_gpe.api.h          \
+ vnet/lisp-gpe/lisp_gpe.api.json
 
 libvnet_la_SOURCES =
 libvnetplugin_la_SOURCES =
@@ -621,14 +623,16 @@ libvnet_la_SOURCES +=                             \
  vnet/lisp-gpe/lisp_gpe_fwd_entry.c            \
  vnet/lisp-gpe/lisp_gpe_tenant.c               \
  vnet/lisp-gpe/interface.c                     \
- vnet/lisp-gpe/decap.c
+ vnet/lisp-gpe/decap.c                         \
+ vnet/lisp-gpe/lisp_gpe_api.c                  
 
 nobase_include_HEADERS +=                      \
  vnet/lisp-gpe/lisp_gpe.h                      \
  vnet/lisp-gpe/lisp_gpe_fwd_entry.h            \
  vnet/lisp-gpe/lisp_gpe_tenant.h               \
  vnet/lisp-gpe/lisp_gpe_packet.h               \
- vnet/lisp-gpe/lisp_gpe_error.def
+ vnet/lisp-gpe/lisp_gpe_error.def              \
+ vnet/lisp-gpe/lisp_gpe.api.h          
 
 if ENABLE_TESTS
 TESTS += test_test
@@ -992,7 +996,8 @@ api_DATA =                                  \
  vnet/bfd/bfd.api.json                         \
  vnet/ipsec/ipsec.api.json                     \
  vnet/ipsec-gre/ipsec_gre.api.json     \
- vnet/lisp-cp/lisp.api.json
+ vnet/lisp-cp/lisp.api.json                    \
+ vnet/lisp-gpe/lisp_gpe.api.json
 
 # The actual %.api.h rule is in .../build-data/packages/suffix-rules.mk
 # and requires a symbolic link at the top of the vnet source tree
index 26fa9bb..20c17aa 100644 (file)
@@ -174,28 +174,6 @@ define lisp_add_del_map_resolver_reply
   i32 retval;
 };
 
-/** \brief enable or disable lisp-gpe protocol
-    @param client_index - opaque cookie to identify the sender
-    @param context - sender context, to match reply w/ request
-    @param is_en - enable protocol if non-zero, else disable
-*/
-define lisp_gpe_enable_disable
-{
-  u32 client_index;
-  u32 context;
-  u8 is_en;
-};
-
-/** \brief Reply for gpe enable/disable
-    @param context - returned sender context, to match reply w/ request
-    @param retval - return code
-*/
-define lisp_gpe_enable_disable_reply
-{
-  u32 context;
-  i32 retval;
-};
-
 /** \brief enable or disable LISP feature
     @param client_index - opaque cookie to identify the sender
     @param context - sender context, to match reply w/ request
diff --git a/vnet/vnet/lisp-gpe/lisp_gpe.api b/vnet/vnet/lisp-gpe/lisp_gpe.api
new file mode 100644 (file)
index 0000000..3956b97
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2015-2016 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/** \brief add or delete lisp gpe tunnel
+    @param client_index - opaque cookie to identify the sender
+    @param context - sender context, to match reply w/ request
+    @param is_add - add address if non-zero, else delete
+    @param eid_type -
+      0 : ipv4
+      1 : ipv6
+      2 : mac
+    @param rmt_eid - remote eid
+    @param lcl_eid - local eid
+    @param rmt_len - remote prefix len
+    @param lcl_len - local prefix len
+    @param vni - virtual network identifier
+    @param dp_table - vrf/bridge domain id
+    @param loc_num - number of locators
+    @param lcl_locs - array of local locators
+    @param rmt_locs - array of remote locators
+    @param action - negative action when 0 locators configured
+*/
+define lisp_gpe_add_del_fwd_entry
+{
+  u32 client_index;
+  u32 context;
+  u8 is_add;
+  u8 eid_type;
+  u8 rmt_eid[16];
+  u8 lcl_eid[16];
+  u8 rmt_len;
+  u8 lcl_len;
+  u32 vni;
+  u32 dp_table;
+  u32 loc_num;
+  u8 lcl_locs[loc_num];
+  u8 rmt_locs[loc_num];
+  u8 action;
+};
+
+/** \brief Reply for gpe_fwd_entry add/del
+    @param context - returned sender context, to match reply w/ request
+    @param retval - return code
+*/
+define lisp_gpe_add_del_fwd_entry_reply
+{
+  u32 context;
+  i32 retval;
+};
+
+/** \brief enable or disable lisp-gpe protocol
+    @param client_index - opaque cookie to identify the sender
+    @param context - sender context, to match reply w/ request
+    @param is_en - enable protocol if non-zero, else disable
+*/
+define lisp_gpe_enable_disable
+{
+  u32 client_index;
+  u32 context;
+  u8 is_en;
+};
+
+/** \brief Reply for gpe enable/disable
+    @param context - returned sender context, to match reply w/ request
+    @param retval - return code
+*/
+define lisp_gpe_enable_disable_reply
+{
+  u32 context;
+  i32 retval;
+};
+
+/** \brief add or delete gpe_iface
+    @param client_index - opaque cookie to identify the sender
+    @param context - sender context, to match reply w/ request
+    @param is_add - add address if non-zero, else delete
+*/
+define lisp_gpe_add_del_iface
+{
+  u32 client_index;
+  u32 context;
+  u8 is_add;
+  u8 is_l2;
+  u32 dp_table;
+  u32 vni;
+};
+
+/** \brief Reply for gpe_iface add/del
+    @param context - returned sender context, to match reply w/ request
+    @param retval - return code
+*/
+define lisp_gpe_add_del_iface_reply
+{
+  u32 context;
+  i32 retval;
+};
+
+define lisp_gpe_tunnel_details
+{
+  u32 context;
+  u32 tunnels;
+  u8 is_ipv6;
+  u8 source_ip[16];
+  u8 destination_ip[16];
+  u32 encap_fib_id;
+  u32 decap_fib_id;
+  u32 dcap_next;
+  u8 lisp_ver;
+  u8 next_protocol;
+  u8 flags;
+  u8 ver_res;
+  u8 res;
+  u32 iid;
+};
+
+/** \brief Request for gpe tunnel summary status
+    @param client_index - opaque cookie to identify the sender
+    @param context - sender context, to match reply w/ request
+ */
+define lisp_gpe_tunnel_dump
+{
+  u32 client_index;
+  u32 context;
+};
+
+/*
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
\ No newline at end of file
diff --git a/vnet/vnet/lisp-gpe/lisp_gpe_api.c b/vnet/vnet/lisp-gpe/lisp_gpe_api.c
new file mode 100644 (file)
index 0000000..176ded5
--- /dev/null
@@ -0,0 +1,304 @@
+/*
+ *------------------------------------------------------------------
+ * lisp_gpe_api.c - lisp_gpe api
+ *
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *------------------------------------------------------------------
+ */
+
+#include <vnet/vnet.h>
+#include <vlibmemory/api.h>
+
+#include <vnet/interface.h>
+#include <vnet/api_errno.h>
+#include <vnet/lisp-gpe/lisp_gpe.h>
+#include <vnet/lisp-gpe/lisp_gpe_fwd_entry.h>
+#include <vnet/lisp-gpe/lisp_gpe_tenant.h>
+
+#include <vnet/vnet_msg_enum.h>
+
+#define vl_typedefs            /* define message structures */
+#include <vnet/vnet_all_api_h.h>
+#undef vl_typedefs
+
+#define vl_endianfun           /* define message structures */
+#include <vnet/vnet_all_api_h.h>
+#undef vl_endianfun
+
+/* instantiate all the print functions we know about */
+#define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__)
+#define vl_printfun
+#include <vnet/vnet_all_api_h.h>
+#undef vl_printfun
+
+#include <vlibapi/api_helper_macros.h>
+
+#define foreach_vpe_api_msg                             \
+_(LISP_GPE_ADD_DEL_FWD_ENTRY, lisp_gpe_add_del_fwd_entry)               \
+_(LISP_GPE_ENABLE_DISABLE, lisp_gpe_enable_disable)                     \
+_(LISP_GPE_ADD_DEL_IFACE, lisp_gpe_add_del_iface)                       \
+_(LISP_GPE_TUNNEL_DUMP, lisp_gpe_tunnel_dump)
+
+/** Used for transferring locators via VPP API */
+/* *INDENT-OFF* */
+typedef CLIB_PACKED (struct {
+  u8 is_ip4; /**< is locator an IPv4 address */
+  u8 priority; /**< locator priority */
+  u8 weight; /**< locator weight */
+  u8 addr[16]; /**< IPv4/IPv6 address */
+}) rloc_t;
+/* *INDENT-ON* */
+
+static locator_pair_t *
+unformat_lisp_loc_pairs (void *lcl_locs, void *rmt_locs, u32 rloc_num)
+{
+  u32 i;
+  locator_pair_t *pairs = 0, pair;
+  rloc_t *r;
+
+  for (i = 0; i < rloc_num; i++)
+    {
+      /* local locator */
+      r = &((rloc_t *) lcl_locs)[i];
+      memset (&pair.lcl_loc, 0, sizeof (pair.lcl_loc));
+      ip_address_set (&pair.lcl_loc, &r->addr, r->is_ip4 ? IP4 : IP6);
+
+      /* remote locators */
+      r = &((rloc_t *) rmt_locs)[i];
+      memset (&pair.rmt_loc, 0, sizeof (pair.rmt_loc));
+      ip_address_set (&pair.rmt_loc, &r->addr, r->is_ip4 ? IP4 : IP6);
+
+      pair.priority = r->priority;
+      pair.weight = r->weight;
+
+      vec_add1 (pairs, pair);
+    }
+  return pairs;
+}
+
+static int
+unformat_lisp_eid_api (gid_address_t * dst, u32 vni, u8 type, void *src,
+                      u8 len)
+{
+  switch (type)
+    {
+    case 0:                    /* ipv4 */
+      gid_address_type (dst) = GID_ADDR_IP_PREFIX;
+      gid_address_ip_set (dst, src, IP4);
+      gid_address_ippref_len (dst) = len;
+      ip_prefix_normalize (&gid_address_ippref (dst));
+      break;
+    case 1:                    /* ipv6 */
+      gid_address_type (dst) = GID_ADDR_IP_PREFIX;
+      gid_address_ip_set (dst, src, IP6);
+      gid_address_ippref_len (dst) = len;
+      ip_prefix_normalize (&gid_address_ippref (dst));
+      break;
+    case 2:                    /* l2 mac */
+      gid_address_type (dst) = GID_ADDR_MAC;
+      clib_memcpy (&gid_address_mac (dst), src, 6);
+      break;
+    default:
+      /* unknown type */
+      return VNET_API_ERROR_INVALID_VALUE;
+    }
+
+  gid_address_vni (dst) = vni;
+
+  return 0;
+}
+
+static void
+  vl_api_lisp_gpe_add_del_fwd_entry_t_handler
+  (vl_api_lisp_gpe_add_del_fwd_entry_t * mp)
+{
+  vl_api_lisp_gpe_add_del_fwd_entry_reply_t *rmp;
+  vnet_lisp_gpe_add_del_fwd_entry_args_t _a, *a = &_a;
+  locator_pair_t *pairs = 0;
+  int rv = 0;
+
+  memset (a, 0, sizeof (a[0]));
+
+  rv = unformat_lisp_eid_api (&a->rmt_eid, mp->vni, mp->eid_type,
+                             mp->rmt_eid, mp->rmt_len);
+  rv |= unformat_lisp_eid_api (&a->lcl_eid, mp->vni, mp->eid_type,
+                              mp->lcl_eid, mp->lcl_len);
+
+  pairs = unformat_lisp_loc_pairs (mp->lcl_locs, mp->rmt_locs, mp->loc_num);
+
+  if (rv || 0 == pairs)
+    goto send_reply;
+
+  a->is_add = mp->is_add;
+  a->locator_pairs = pairs;
+  a->dp_table = mp->dp_table;
+  a->vni = mp->vni;
+  a->action = mp->action;
+
+  rv = vnet_lisp_gpe_add_del_fwd_entry (a, 0);
+  vec_free (pairs);
+send_reply:
+  REPLY_MACRO (VL_API_LISP_GPE_ADD_DEL_FWD_ENTRY_REPLY);
+}
+
+static void
+vl_api_lisp_gpe_enable_disable_t_handler (vl_api_lisp_gpe_enable_disable_t *
+                                         mp)
+{
+  vl_api_lisp_gpe_enable_disable_reply_t *rmp;
+  int rv = 0;
+  vnet_lisp_gpe_enable_disable_args_t _a, *a = &_a;
+
+  a->is_en = mp->is_en;
+  vnet_lisp_gpe_enable_disable (a);
+
+  REPLY_MACRO (VL_API_LISP_GPE_ENABLE_DISABLE_REPLY);
+}
+
+static void
+vl_api_lisp_gpe_add_del_iface_t_handler (vl_api_lisp_gpe_add_del_iface_t * mp)
+{
+  vl_api_lisp_gpe_add_del_iface_reply_t *rmp;
+  int rv = 0;
+
+  if (mp->is_l2)
+    {
+      if (mp->is_add)
+       {
+         if (~0 ==
+             lisp_gpe_tenant_l2_iface_add_or_lock (mp->vni, mp->dp_table))
+           rv = 1;
+       }
+      else
+       lisp_gpe_tenant_l2_iface_unlock (mp->vni);
+    }
+  else
+    {
+      if (mp->is_add)
+       {
+         if (~0 ==
+             lisp_gpe_tenant_l3_iface_add_or_lock (mp->vni, mp->dp_table))
+           rv = 1;
+       }
+      else
+       lisp_gpe_tenant_l3_iface_unlock (mp->vni);
+    }
+
+  REPLY_MACRO (VL_API_LISP_GPE_ADD_DEL_IFACE_REPLY);
+}
+
+static void
+send_lisp_gpe_fwd_entry_details (lisp_gpe_fwd_entry_t * lfe,
+                                unix_shared_memory_queue_t * q, u32 context)
+{
+  vl_api_lisp_gpe_tunnel_details_t *rmp;
+  lisp_gpe_main_t *lgm = &lisp_gpe_main;
+
+  rmp = vl_msg_api_alloc (sizeof (*rmp));
+  memset (rmp, 0, sizeof (*rmp));
+  rmp->_vl_msg_id = ntohs (VL_API_LISP_GPE_TUNNEL_DETAILS);
+
+  rmp->tunnels = lfe - lgm->lisp_fwd_entry_pool;
+
+  rmp->is_ipv6 = ip_prefix_version (&(lfe->key->rmt.ippref)) == IP6 ? 1 : 0;
+  ip_address_copy_addr (rmp->source_ip,
+                       &ip_prefix_addr (&(lfe->key->rmt.ippref)));
+  ip_address_copy_addr (rmp->destination_ip,
+                       &ip_prefix_addr (&(lfe->key->rmt.ippref)));
+
+  rmp->encap_fib_id = htonl (0);
+  rmp->decap_fib_id = htonl (lfe->eid_fib_index);
+  rmp->iid = htonl (lfe->key->vni);
+  rmp->context = context;
+
+  vl_msg_api_send_shmem (q, (u8 *) & rmp);
+}
+
+static void
+vl_api_lisp_gpe_tunnel_dump_t_handler (vl_api_lisp_gpe_tunnel_dump_t * mp)
+{
+  unix_shared_memory_queue_t *q = NULL;
+  lisp_gpe_main_t *lgm = &lisp_gpe_main;
+  lisp_gpe_fwd_entry_t *lfe = NULL;
+
+  if (pool_elts (lgm->lisp_fwd_entry_pool) == 0)
+    {
+      return;
+    }
+
+  q = vl_api_client_index_to_input_queue (mp->client_index);
+  if (q == 0)
+    {
+      return;
+    }
+
+  /* *INDENT-OFF* */
+  pool_foreach(lfe, lgm->lisp_fwd_entry_pool,
+  ({
+    send_lisp_gpe_fwd_entry_details(lfe, q, mp->context);
+  }));
+  /* *INDENT-ON* */
+}
+
+/*
+ * lisp_gpe_api_hookup
+ * Add vpe's API message handlers to the table.
+ * vlib has alread mapped shared memory and
+ * added the client registration handlers.
+ * See .../vlib-api/vlibmemory/memclnt_vlib.c:memclnt_process()
+ */
+#define vl_msg_name_crc_list
+#include <vnet/vnet_all_api_h.h>
+#undef vl_msg_name_crc_list
+
+static void
+setup_message_id_table (api_main_t * am)
+{
+#define _(id,n,crc) vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id);
+  foreach_vl_msg_name_crc_lisp_gpe;
+#undef _
+}
+
+static clib_error_t *
+lisp_gpe_api_hookup (vlib_main_t * vm)
+{
+  api_main_t *am = &api_main;
+
+#define _(N,n)                                                  \
+    vl_msg_api_set_handlers(VL_API_##N, #n,                     \
+                           vl_api_##n##_t_handler,              \
+                           vl_noop_handler,                     \
+                           vl_api_##n##_t_endian,               \
+                           vl_api_##n##_t_print,                \
+                           sizeof(vl_api_##n##_t), 1);
+  foreach_vpe_api_msg;
+#undef _
+
+  /*
+   * Set up the (msg_name, crc, message-id) table
+   */
+  setup_message_id_table (am);
+
+  return 0;
+}
+
+VLIB_API_INIT_FUNCTION (lisp_gpe_api_hookup);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
index 4143fad..1b4d6c4 100644 (file)
@@ -46,6 +46,7 @@
 #include <vnet/ipsec/ipsec.api.h>
 #include <vnet/ipsec-gre/ipsec_gre.api.h>
 #include <vnet/lisp-cp/lisp.api.h>
+#include <vnet/lisp-gpe/lisp_gpe.api.h>
 
 /*
  * fd.io coding-style-patch-verification: ON
index 9b2081e..e07e038 100644 (file)
@@ -99,7 +99,8 @@ jvpp-core/io_fd_vpp_jvpp_core_JVppCoreImpl.h:         \
     $(prefix)/../vnet/vnet/bfd.api.json                        \
     $(prefix)/../vnet/vnet/ipsec.api.json              \
     $(prefix)/../vnet/vnet/ipsec_gre.api.json  \
-    $(prefix)/../vnet/vnet/lisp.api.json
+    $(prefix)/../vnet/vnet/lisp.api.json               \
+    $(prefix)/../vnet/vnet/lisp_gpe.api.json
        cp -rf @srcdir@/jvpp-core/* -t jvpp-core/
        mkdir -p jvpp-core/target
        cd jvpp-core \
@@ -123,6 +124,7 @@ jvpp-core/io_fd_vpp_jvpp_core_JVppCoreImpl.h:               \
                    $(prefix)/../vnet/vnet/ipsec.api.json \
                    $(prefix)/../vnet/vnet/ipsec_gre.api.json \
                    $(prefix)/../vnet/vnet/lisp.api.json \
+                   $(prefix)/../vnet/vnet/lisp_gpe.api.json \
                && cp -rf types dto future callfacade callback notification *.java -t $(packagedir_jvpp_core) \
                && rm -rf types dto future callfacade callback notification *.java
 
index 2e080d6..0102260 100644 (file)
@@ -72,9 +72,6 @@
 #include <vnet/vxlan/vxlan.h>
 #include <vnet/l2/l2_vtr.h>
 #include <vnet/vxlan-gpe/vxlan_gpe.h>
-#include <vnet/lisp-gpe/lisp_gpe.h>
-#include <vnet/lisp-gpe/lisp_gpe_fwd_entry.h>
-#include <vnet/lisp-gpe/lisp_gpe_tenant.h>
 #include <vnet/map/map.h>
 #include <vnet/cop/cop.h>
 #include <vnet/ip/ip6_hop_by_hop.h>
@@ -187,9 +184,6 @@ _(COP_WHITELIST_ENABLE_DISABLE, cop_whitelist_enable_disable)               \
 _(GET_NODE_GRAPH, get_node_graph)                                       \
 _(IOAM_ENABLE, ioam_enable)                                             \
 _(IOAM_DISABLE, ioam_disable)                                           \
-_(LISP_GPE_ENABLE_DISABLE, lisp_gpe_enable_disable)                     \
-_(LISP_GPE_ADD_DEL_IFACE, lisp_gpe_add_del_iface)                       \
-_(LISP_GPE_TUNNEL_DUMP, lisp_gpe_tunnel_dump)                           \
 _(SR_MULTICAST_MAP_ADD_DEL, sr_multicast_map_add_del)                   \
 _(POLICER_ADD_DEL, policer_add_del)                                     \
 _(POLICER_DUMP, policer_dump)                                           \
@@ -2979,105 +2973,6 @@ static void vl_api_vxlan_gpe_tunnel_dump_t_handler
     }
 }
 
-static void
-vl_api_lisp_gpe_enable_disable_t_handler (vl_api_lisp_gpe_enable_disable_t *
-                                         mp)
-{
-  vl_api_lisp_gpe_enable_disable_reply_t *rmp;
-  int rv = 0;
-  vnet_lisp_gpe_enable_disable_args_t _a, *a = &_a;
-
-  a->is_en = mp->is_en;
-  vnet_lisp_gpe_enable_disable (a);
-
-  REPLY_MACRO (VL_API_LISP_GPE_ENABLE_DISABLE_REPLY);
-}
-
-static void
-vl_api_lisp_gpe_add_del_iface_t_handler (vl_api_lisp_gpe_add_del_iface_t * mp)
-{
-  vl_api_lisp_gpe_add_del_iface_reply_t *rmp;
-  int rv = 0;
-
-  if (mp->is_l2)
-    {
-      if (mp->is_add)
-       {
-         if (~0 ==
-             lisp_gpe_tenant_l2_iface_add_or_lock (mp->vni, mp->dp_table))
-           rv = 1;
-       }
-      else
-       lisp_gpe_tenant_l2_iface_unlock (mp->vni);
-    }
-  else
-    {
-      if (mp->is_add)
-       {
-         if (~0 ==
-             lisp_gpe_tenant_l3_iface_add_or_lock (mp->vni, mp->dp_table))
-           rv = 1;
-       }
-      else
-       lisp_gpe_tenant_l3_iface_unlock (mp->vni);
-    }
-
-  REPLY_MACRO (VL_API_LISP_GPE_ADD_DEL_IFACE_REPLY);
-}
-
-static void
-send_lisp_gpe_fwd_entry_details (lisp_gpe_fwd_entry_t * lfe,
-                                unix_shared_memory_queue_t * q, u32 context)
-{
-  vl_api_lisp_gpe_tunnel_details_t *rmp;
-  lisp_gpe_main_t *lgm = &lisp_gpe_main;
-
-  rmp = vl_msg_api_alloc (sizeof (*rmp));
-  memset (rmp, 0, sizeof (*rmp));
-  rmp->_vl_msg_id = ntohs (VL_API_LISP_GPE_TUNNEL_DETAILS);
-
-  rmp->tunnels = lfe - lgm->lisp_fwd_entry_pool;
-
-  rmp->is_ipv6 = ip_prefix_version (&(lfe->key->rmt.ippref)) == IP6 ? 1 : 0;
-  ip_address_copy_addr (rmp->source_ip,
-                       &ip_prefix_addr (&(lfe->key->rmt.ippref)));
-  ip_address_copy_addr (rmp->destination_ip,
-                       &ip_prefix_addr (&(lfe->key->rmt.ippref)));
-
-  rmp->encap_fib_id = htonl (0);
-  rmp->decap_fib_id = htonl (lfe->eid_fib_index);
-  rmp->iid = htonl (lfe->key->vni);
-  rmp->context = context;
-
-  vl_msg_api_send_shmem (q, (u8 *) & rmp);
-}
-
-static void
-vl_api_lisp_gpe_tunnel_dump_t_handler (vl_api_lisp_gpe_tunnel_dump_t * mp)
-{
-  unix_shared_memory_queue_t *q = NULL;
-  lisp_gpe_main_t *lgm = &lisp_gpe_main;
-  lisp_gpe_fwd_entry_t *lfe = NULL;
-
-  if (pool_elts (lgm->lisp_fwd_entry_pool) == 0)
-    {
-      return;
-    }
-
-  q = vl_api_client_index_to_input_queue (mp->client_index);
-  if (q == 0)
-    {
-      return;
-    }
-
-  /* *INDENT-OFF* */
-  pool_foreach(lfe, lgm->lisp_fwd_entry_pool,
-  ({
-    send_lisp_gpe_fwd_entry_details(lfe, q, mp->context);
-  }));
-  /* *INDENT-ON* */
-}
-
 static void
 vl_api_interface_name_renumber_t_handler (vl_api_interface_name_renumber_t *
                                          mp)
index 9c17365..abd0e8f 100644 (file)
@@ -36,6 +36,7 @@
  * IPSEC APIs: see .../vnet/vnet/ipsec/{ipsec.api, ipsec_api.c}
  * IPSEC-GRE APIs: see .../vnet/vnet/ipsec-gre/{ipsec_gre.api, ipsec_gre_api.c}
  * LISP APIs: see .../vnet/vnet/lisp/{lisp.api, lisp_api.c}
+ * LISP-GPE APIs: see .../vnet/vnet/lisp-gpe/{lisp_gpe.api, lisp_gpe_api.c}
  */
 
 /** \brief Create a new subinterface with the given vlan id
@@ -1491,106 +1492,6 @@ define l2_fib_table_dump
   u32 bd_id;
 };
 
-/** \brief add or delete lisp gpe tunnel
-    @param client_index - opaque cookie to identify the sender
-    @param context - sender context, to match reply w/ request
-    @param is_add - add address if non-zero, else delete
-    @param eid_type -
-      0 : ipv4
-      1 : ipv6
-      2 : mac
-    @param rmt_eid - remote eid
-    @param lcl_eid - local eid
-    @param rmt_len - remote prefix len
-    @param lcl_len - local prefix len
-    @param vni - virtual network identifier
-    @param dp_table - vrf/bridge domain id
-    @param loc_num - number of locators
-    @param lcl_locs - array of local locators
-    @param rmt_locs - array of remote locators
-    @param action - negative action when 0 locators configured
-*/
-define lisp_gpe_add_del_fwd_entry
-{
-  u32 client_index;
-  u32 context;
-  u8 is_add;
-  u8 eid_type;
-  u8 rmt_eid[16];
-  u8 lcl_eid[16];
-  u8 rmt_len;
-  u8 lcl_len;
-  u32 vni;
-  u32 dp_table;
-  u32 loc_num;
-  u8 lcl_locs[loc_num];
-  u8 rmt_locs[loc_num];
-  u8 action;
-};
-
-/** \brief Reply for gpe_fwd_entry add/del
-    @param context - returned sender context, to match reply w/ request
-    @param retval - return code
-*/
-define lisp_gpe_add_del_fwd_entry_reply
-{
-  u32 context;
-  i32 retval;
-};
-
-/** \brief add or delete gpe_iface
-    @param client_index - opaque cookie to identify the sender
-    @param context - sender context, to match reply w/ request
-    @param is_add - add address if non-zero, else delete
-*/
-define lisp_gpe_add_del_iface
-{
-  u32 client_index;
-  u32 context;
-  u8 is_add;
-  u8 is_l2;
-  u32 dp_table;
-  u32 vni;
-};
-
-/** \brief Reply for gpe_iface add/del
-    @param context - returned sender context, to match reply w/ request
-    @param retval - return code
-*/
-define lisp_gpe_add_del_iface_reply
-{
-  u32 context;
-  i32 retval;
-};
-
-define lisp_gpe_tunnel_details
-{
-  u32 context;
-  u32 tunnels;
-  u8 is_ipv6;
-  u8 source_ip[16];
-  u8 destination_ip[16];
-  u32 encap_fib_id;
-  u32 decap_fib_id;
-  u32 dcap_next;
-  u8 lisp_ver;
-  u8 next_protocol;
-  u8 flags;
-  u8 ver_res;
-  u8 res;
-  u32 iid;
-};
-
-/** \brief Request for gpe tunnel summary status
-    @param client_index - opaque cookie to identify the sender
-    @param context - sender context, to match reply w/ request
- */
-define lisp_gpe_tunnel_dump
-{
-  u32 client_index;
-  u32 context;
-};
-
 /* Gross kludge, DGMS */
 define interface_name_renumber
 {