summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/l2tp/CMakeLists.txt38
-rw-r--r--src/plugins/l2tp/FEATURE.yaml (renamed from src/vnet/l2tp/FEATURE.yaml)0
-rw-r--r--src/plugins/l2tp/decap.c (renamed from src/vnet/l2tp/decap.c)2
-rw-r--r--src/plugins/l2tp/encap.c (renamed from src/vnet/l2tp/encap.c)2
-rw-r--r--src/plugins/l2tp/l2tp.api (renamed from src/vnet/l2tp/l2tp.api)0
-rw-r--r--src/plugins/l2tp/l2tp.c (renamed from src/vnet/l2tp/l2tp.c)2
-rw-r--r--src/plugins/l2tp/l2tp.h (renamed from src/vnet/l2tp/l2tp.h)2
-rw-r--r--src/plugins/l2tp/l2tp_api.c (renamed from src/vnet/l2tp/l2tp_api.c)76
-rw-r--r--src/plugins/l2tp/l2tp_test.c315
-rw-r--r--src/plugins/l2tp/packet.h (renamed from src/vnet/l2tp/packet.h)0
-rw-r--r--src/plugins/l2tp/pg.c (renamed from src/vnet/l2tp/pg.c)2
-rw-r--r--src/plugins/l2tp/test/test_l2tp.py47
-rw-r--r--src/vat/api_format.c324
-rw-r--r--src/vnet/CMakeLists.txt23
-rw-r--r--src/vnet/vnet_all_api_h.h1
-rw-r--r--src/vpp/api/custom_dump.c100
16 files changed, 432 insertions, 502 deletions
diff --git a/src/plugins/l2tp/CMakeLists.txt b/src/plugins/l2tp/CMakeLists.txt
new file mode 100644
index 00000000000..c8261abcd9c
--- /dev/null
+++ b/src/plugins/l2tp/CMakeLists.txt
@@ -0,0 +1,38 @@
+# Copyright (c) 2018 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.
+
+##############################################################################
+# Tunnel protocol: l2tpv3
+##############################################################################
+add_vpp_plugin(l2tp
+ SOURCES
+ l2tp.c
+ encap.c
+ decap.c
+ pg.c
+ l2tp_api.c
+
+ MULTIARCH_SOURCES
+ encap.c
+ decap.c
+
+ INSTALL_HEADERS
+ l2tp.h
+ packet.h
+
+ API_FILES
+ l2tp.api
+
+ API_TEST_SOURCES
+ l2tp_test.c
+)
diff --git a/src/vnet/l2tp/FEATURE.yaml b/src/plugins/l2tp/FEATURE.yaml
index 58df9b2215e..58df9b2215e 100644
--- a/src/vnet/l2tp/FEATURE.yaml
+++ b/src/plugins/l2tp/FEATURE.yaml
diff --git a/src/vnet/l2tp/decap.c b/src/plugins/l2tp/decap.c
index 787cc115a7e..8c41bdd2357 100644
--- a/src/vnet/l2tp/decap.c
+++ b/src/plugins/l2tp/decap.c
@@ -20,7 +20,7 @@
#include <vnet/vnet.h>
#include <vnet/ip/ip.h>
#include <vnet/ethernet/ethernet.h>
-#include <vnet/l2tp/l2tp.h>
+#include <l2tp/l2tp.h>
#include <vnet/l2/l2_input.h>
/* Statistics (not really errors) */
diff --git a/src/vnet/l2tp/encap.c b/src/plugins/l2tp/encap.c
index 8863ddfa20d..fbb5fc6ea46 100644
--- a/src/vnet/l2tp/encap.c
+++ b/src/plugins/l2tp/encap.c
@@ -20,7 +20,7 @@
#include <vnet/vnet.h>
#include <vnet/ip/ip.h>
#include <vnet/ethernet/ethernet.h>
-#include <vnet/l2tp/l2tp.h>
+#include <l2tp/l2tp.h>
/* Statistics (not really errors) */
#define foreach_l2t_encap_error \
diff --git a/src/vnet/l2tp/l2tp.api b/src/plugins/l2tp/l2tp.api
index 618c4122fd6..618c4122fd6 100644
--- a/src/vnet/l2tp/l2tp.api
+++ b/src/plugins/l2tp/l2tp.api
diff --git a/src/vnet/l2tp/l2tp.c b/src/plugins/l2tp/l2tp.c
index fa112ee7986..242f4323e37 100644
--- a/src/vnet/l2tp/l2tp.c
+++ b/src/plugins/l2tp/l2tp.c
@@ -21,7 +21,7 @@
#include <vnet/ip/ip.h>
#include <vnet/l2/l2_input.h>
#include <vnet/ethernet/ethernet.h>
-#include <vnet/l2tp/l2tp.h>
+#include <l2tp/l2tp.h>
l2t_main_t l2t_main;
diff --git a/src/vnet/l2tp/l2tp.h b/src/plugins/l2tp/l2tp.h
index 49873380057..949d5d369bd 100644
--- a/src/vnet/l2tp/l2tp.h
+++ b/src/plugins/l2tp/l2tp.h
@@ -20,7 +20,7 @@
#include <vlib/vlib.h>
#include <vnet/ip/ip.h>
-#include <vnet/l2tp/packet.h>
+#include <l2tp/packet.h>
typedef struct
{
diff --git a/src/vnet/l2tp/l2tp_api.c b/src/plugins/l2tp/l2tp_api.c
index 3a31372253f..fb675ddff5e 100644
--- a/src/vnet/l2tp/l2tp_api.c
+++ b/src/plugins/l2tp/l2tp_api.c
@@ -22,34 +22,22 @@
#include <vnet/interface.h>
#include <vnet/api_errno.h>
-#include <vnet/l2tp/l2tp.h>
+#include <l2tp/l2tp.h>
#include <vnet/ip/ip_types_api.h>
-#include <vnet/vnet_msg_enum.h>
+/* define message IDs */
+#include <vnet/format_fns.h>
+#include <l2tp/l2tp.api_enum.h>
+#include <l2tp/l2tp.api_types.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
+/**
+ * Base message ID fot the plugin
+ */
+static u32 l2tp_base_msg_id;
+#define REPLY_MSG_ID_BASE l2tp_base_msg_id
#include <vlibapi/api_helper_macros.h>
-#define foreach_vpe_api_msg \
-_(L2TPV3_CREATE_TUNNEL, l2tpv3_create_tunnel) \
-_(L2TPV3_SET_TUNNEL_COOKIES, l2tpv3_set_tunnel_cookies) \
-_(L2TPV3_INTERFACE_ENABLE_DISABLE, l2tpv3_interface_enable_disable) \
-_(L2TPV3_SET_LOOKUP_KEY, l2tpv3_set_lookup_key) \
-_(SW_IF_L2TPV3_TUNNEL_DUMP, sw_if_l2tpv3_tunnel_dump)
-
static void
send_sw_if_l2tpv3_tunnel_details (vpe_api_main_t * am,
vl_api_registration_t * reg,
@@ -67,9 +55,10 @@ send_sw_if_l2tpv3_tunnel_details (vpe_api_main_t * am,
mp = vl_msg_api_alloc (sizeof (*mp));
clib_memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_SW_IF_L2TPV3_TUNNEL_DETAILS);
- strncpy ((char *) mp->interface_name,
- (char *) if_name, ARRAY_LEN (mp->interface_name) - 1);
+ mp->_vl_msg_id =
+ ntohs (VL_API_SW_IF_L2TPV3_TUNNEL_DETAILS + REPLY_MSG_ID_BASE);
+ strncpy ((char *) mp->interface_name, (char *) if_name,
+ ARRAY_LEN (mp->interface_name) - 1);
mp->sw_if_index = ntohl (si->sw_if_index);
mp->local_session_id = s->local_session_id;
mp->remote_session_id = s->remote_session_id;
@@ -227,43 +216,32 @@ out:
* 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_l2tp;
-#undef _
-}
+#include <l2tp/l2tp.api.c>
static clib_error_t *
l2tp_api_hookup (vlib_main_t * vm)
{
- api_main_t *am = vlibapi_get_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);
+ l2tp_base_msg_id = setup_message_id_table ();
return 0;
}
VLIB_API_INIT_FUNCTION (l2tp_api_hookup);
+#include <vlib/unix/plugin.h>
+#include <vpp/app/version.h>
+
+/* *INDENT-OFF* */
+VLIB_PLUGIN_REGISTER () = {
+ .version = VPP_BUILD_VER,
+ .description = "Layer 2 Tunneling Protocol v3 (L2TP)",
+};
+/* *INDENT-ON* */
+
+
/*
* fd.io coding-style-patch-verification: ON
*
diff --git a/src/plugins/l2tp/l2tp_test.c b/src/plugins/l2tp/l2tp_test.c
new file mode 100644
index 00000000000..87abf5d0a2a
--- /dev/null
+++ b/src/plugins/l2tp/l2tp_test.c
@@ -0,0 +1,315 @@
+/*
+ * Copyright (c) 2020 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 <vat/vat.h>
+#include <vlibapi/api.h>
+#include <vlibmemory/api.h>
+#include <vppinfra/error.h>
+
+#include <vnet/ip/ip_format_fns.h>
+#include <vnet/ip/ip.h>
+#include <vnet/ethernet/ethernet_format_fns.h>
+#include <l2tp/l2tp.h>
+
+/* define message IDs */
+#include <l2tp/l2tp.api_enum.h>
+#include <l2tp/l2tp.api_types.h>
+#include <vpp/api/vpe.api_types.h>
+
+typedef struct
+{
+ /* API message ID base */
+ u16 msg_id_base;
+ u32 ping_id;
+ vat_main_t *vat_main;
+} l2tp_test_main_t;
+
+l2tp_test_main_t l2tp_test_main;
+
+#define __plugin_msg_base l2tp_test_main.msg_id_base
+#include <vlibapi/vat_helper_macros.h>
+
+/* Macro to finish up custom dump fns */
+#define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__)
+#define FINISH \
+ vec_add1 (s, 0); \
+ vl_print (handle, (char *)s); \
+ vec_free (s); \
+ return handle;
+
+static void vl_api_l2tpv3_create_tunnel_reply_t_handler
+ (vl_api_l2tpv3_create_tunnel_reply_t * mp)
+{
+ vat_main_t *vam = &vat_main;
+ i32 retval = ntohl (mp->retval);
+ if (vam->async_mode)
+ {
+ vam->async_errors += (retval < 0);
+ }
+ else
+ {
+ vam->retval = retval;
+ vam->sw_if_index = ntohl (mp->sw_if_index);
+ vam->result_ready = 1;
+ }
+}
+
+static int
+api_l2tpv3_create_tunnel (vat_main_t * vam)
+{
+ unformat_input_t *i = vam->input;
+ ip6_address_t client_address, our_address;
+ int client_address_set = 0;
+ int our_address_set = 0;
+ u32 local_session_id = 0;
+ u32 remote_session_id = 0;
+ u64 local_cookie = 0;
+ u64 remote_cookie = 0;
+ u8 l2_sublayer_present = 0;
+ vl_api_l2tpv3_create_tunnel_t *mp;
+ int ret;
+
+ while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+ {
+ if (unformat (i, "client_address %U", unformat_ip6_address,
+ &client_address))
+ client_address_set = 1;
+ else if (unformat (i, "our_address %U", unformat_ip6_address,
+ &our_address))
+ our_address_set = 1;
+ else if (unformat (i, "local_session_id %d", &local_session_id))
+ ;
+ else if (unformat (i, "remote_session_id %d", &remote_session_id))
+ ;
+ else if (unformat (i, "local_cookie %lld", &local_cookie))
+ ;
+ else if (unformat (i, "remote_cookie %lld", &remote_cookie))
+ ;
+ else if (unformat (i, "l2-sublayer-present"))
+ l2_sublayer_present = 1;
+ else
+ break;
+ }
+
+ if (client_address_set == 0)
+ {
+ errmsg ("client_address required");
+ return -99;
+ }
+
+ if (our_address_set == 0)
+ {
+ errmsg ("our_address required");
+ return -99;
+ }
+
+ M (L2TPV3_CREATE_TUNNEL, mp);
+
+ clib_memcpy (mp->client_address.un.ip6, client_address.as_u8,
+ sizeof (ip6_address_t));
+
+ clib_memcpy (mp->our_address.un.ip6, our_address.as_u8,
+ sizeof (ip6_address_t));
+
+ mp->local_session_id = ntohl (local_session_id);
+ mp->remote_session_id = ntohl (remote_session_id);
+ mp->local_cookie = clib_host_to_net_u64 (local_cookie);
+ mp->remote_cookie = clib_host_to_net_u64 (remote_cookie);
+ mp->l2_sublayer_present = l2_sublayer_present;
+
+ S (mp);
+ W (ret);
+ return ret;
+}
+
+static int
+api_l2tpv3_set_tunnel_cookies (vat_main_t * vam)
+{
+ unformat_input_t *i = vam->input;
+ u32 sw_if_index;
+ u8 sw_if_index_set = 0;
+ u64 new_local_cookie = 0;
+ u64 new_remote_cookie = 0;
+ vl_api_l2tpv3_set_tunnel_cookies_t *mp;
+ int ret;
+
+ while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+ {
+ if (unformat (i, "%U", unformat_sw_if_index, vam, &sw_if_index))
+ sw_if_index_set = 1;
+ else if (unformat (i, "sw_if_index %d", &sw_if_index))
+ sw_if_index_set = 1;
+ else if (unformat (i, "new_local_cookie %lld", &new_local_cookie))
+ ;
+ else if (unformat (i, "new_remote_cookie %lld", &new_remote_cookie))
+ ;
+ else
+ break;
+ }
+
+ if (sw_if_index_set == 0)
+ {
+ errmsg ("missing interface name or sw_if_index");
+ return -99;
+ }
+
+ M (L2TPV3_SET_TUNNEL_COOKIES, mp);
+
+ mp->sw_if_index = ntohl (sw_if_index);
+ mp->new_local_cookie = clib_host_to_net_u64 (new_local_cookie);
+ mp->new_remote_cookie = clib_host_to_net_u64 (new_remote_cookie);
+
+ S (mp);
+ W (ret);
+ return ret;
+}
+
+static int
+api_l2tpv3_interface_enable_disable (vat_main_t * vam)
+{
+ unformat_input_t *i = vam->input;
+ vl_api_l2tpv3_interface_enable_disable_t *mp;
+ u32 sw_if_index;
+ u8 sw_if_index_set = 0;
+ u8 enable_disable = 1;
+ int ret;
+
+ while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+ {
+ if (unformat (i, "%U", unformat_sw_if_index, vam, &sw_if_index))
+ sw_if_index_set = 1;
+ else if (unformat (i, "sw_if_index %d", &sw_if_index))
+ sw_if_index_set = 1;
+ else if (unformat (i, "enable"))
+ enable_disable = 1;
+ else if (unformat (i, "disable"))
+ enable_disable = 0;
+ else
+ break;
+ }
+
+ if (sw_if_index_set == 0)
+ {
+ errmsg ("missing interface name or sw_if_index");
+ return -99;
+ }
+
+ M (L2TPV3_INTERFACE_ENABLE_DISABLE, mp);
+
+ mp->sw_if_index = ntohl (sw_if_index);
+ mp->enable_disable = enable_disable;
+
+ S (mp);
+ W (ret);
+ return ret;
+}
+
+static int
+api_l2tpv3_set_lookup_key (vat_main_t * vam)
+{
+ unformat_input_t *i = vam->input;
+ vl_api_l2tpv3_set_lookup_key_t *mp;
+ u8 key = ~0;
+ int ret;
+
+ while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+ {
+ if (unformat (i, "lookup_v6_src"))
+ key = L2T_LOOKUP_SRC_ADDRESS;
+ else if (unformat (i, "lookup_v6_dst"))
+ key = L2T_LOOKUP_DST_ADDRESS;
+ else if (unformat (i, "lookup_session_id"))
+ key = L2T_LOOKUP_SESSION_ID;
+ else
+ break;
+ }
+
+ if (key == (u8) ~ 0)
+ {
+ errmsg ("l2tp session lookup key unset");
+ return -99;
+ }
+
+ M (L2TPV3_SET_LOOKUP_KEY, mp);
+
+ mp->key = key;
+
+ S (mp);
+ W (ret);
+ return ret;
+}
+
+static void vl_api_sw_if_l2tpv3_tunnel_details_t_handler
+ (vl_api_sw_if_l2tpv3_tunnel_details_t * mp)
+{
+ vat_main_t *vam = &vat_main;
+
+ print (vam->ofp, "* %U (our) %U (client) (sw_if_index %d)",
+ format_ip6_address, mp->our_address,
+ format_ip6_address, mp->client_address,
+ clib_net_to_host_u32 (mp->sw_if_index));
+
+ print (vam->ofp,
+ " local cookies %016llx %016llx remote cookie %016llx",
+ clib_net_to_host_u64 (mp->local_cookie[0]),
+ clib_net_to_host_u64 (mp->local_cookie[1]),
+ clib_net_to_host_u64 (mp->remote_cookie));
+
+ print (vam->ofp, " local session-id %d remote session-id %d",
+ clib_net_to_host_u32 (mp->local_session_id),
+ clib_net_to_host_u32 (mp->remote_session_id));
+
+ print (vam->ofp, " l2 specific sublayer %s\n",
+ mp->l2_sublayer_present ? "preset" : "absent");
+
+}
+
+static int
+api_sw_if_l2tpv3_tunnel_dump (vat_main_t * vam)
+{
+ vl_api_sw_if_l2tpv3_tunnel_dump_t *mp;
+ vl_api_control_ping_t *mp_ping;
+ int ret;
+
+ /* Get list of l2tpv3-tunnel interfaces */
+ M (SW_IF_L2TPV3_TUNNEL_DUMP, mp);
+ S (mp);
+
+ /* Use a control ping for synchronization */
+ if (!l2tp_test_main.ping_id)
+ l2tp_test_main.ping_id =
+ vl_msg_api_get_msg_index ((u8 *) (VL_API_CONTROL_PING_CRC));
+ mp_ping = vl_msg_api_alloc_as_if_client (sizeof (*mp_ping));
+ mp_ping->_vl_msg_id = htons (l2tp_test_main.ping_id);
+ mp_ping->client_index = vam->my_client_index;
+
+ fformat (vam->ofp, "Sending ping id=%d\n", l2tp_test_main.ping_id);
+
+ vam->result_ready = 0;
+ S (mp_ping);
+
+ W (ret);
+ return ret;
+}
+
+#include <l2tp/l2tp.api_test.c>
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/src/vnet/l2tp/packet.h b/src/plugins/l2tp/packet.h
index 66dfea2194c..66dfea2194c 100644
--- a/src/vnet/l2tp/packet.h
+++ b/src/plugins/l2tp/packet.h
diff --git a/src/vnet/l2tp/pg.c b/src/plugins/l2tp/pg.c
index 1e523d3bbb0..f8edb6908aa 100644
--- a/src/vnet/l2tp/pg.c
+++ b/src/plugins/l2tp/pg.c
@@ -17,7 +17,7 @@
#include <vlib/vlib.h>
#include <vnet/pg/pg.h>
-#include <vnet/l2tp/l2tp.h>
+#include <l2tp/l2tp.h>
typedef struct
{
diff --git a/src/plugins/l2tp/test/test_l2tp.py b/src/plugins/l2tp/test/test_l2tp.py
new file mode 100644
index 00000000000..c57b5912de1
--- /dev/null
+++ b/src/plugins/l2tp/test/test_l2tp.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python3
+
+import unittest
+
+from scapy.layers.l2 import Ether
+from scapy.layers.inet6 import IPv6
+
+from framework import VppTestCase
+
+
+class TestL2tp(VppTestCase):
+ """ L2TP Test Case """
+
+ @classmethod
+ def setUpClass(cls):
+ super(TestL2tp, cls).setUpClass()
+
+ cls.create_pg_interfaces(range(1))
+ cls.pg0.admin_up()
+ cls.pg0.config_ip6()
+
+ def test_l2tp_decap_local(self):
+ """ L2TP don't accept packets unless configured """
+
+ pkt = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
+ IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6, nh=115))
+
+ self.pg0.add_stream(pkt)
+ self.pg_start()
+
+ # l2tp should not accept packets
+ err = self.statistics.get_counter(
+ '/err/l2tp-decap-local/l2tpv3 session not found')[0]
+ self.assertEqual(err, 0)
+ err_count = err
+
+ self.vapi.l2tpv3_create_tunnel(client_address=self.pg0.local_ip6,
+ our_address=self.pg0.remote_ip6)
+
+ self.pg0.add_stream(pkt)
+ self.pg_start()
+
+ # l2tp accepts packets
+ err = self.statistics.get_counter(
+ '/err/l2tp-decap-local/l2tpv3 session not found')[0]
+ self.assertEqual(err, 1)
+ err_count = err
diff --git a/src/vat/api_format.c b/src/vat/api_format.c
index 0d0ec59d1f8..926f65dcd86 100644
--- a/src/vat/api_format.c
+++ b/src/vat/api_format.c
@@ -27,7 +27,6 @@
#include <vnet/ip-neighbor/ip_neighbor.h>
#include <vnet/ip/ip_types_api.h>
#include <vnet/l2/l2_input.h>
-#include <vnet/l2tp/l2tp.h>
#include <vnet/vxlan/vxlan.h>
#include <vnet/gre/gre.h>
#include <vnet/vxlan-gpe/vxlan_gpe.h>
@@ -2296,40 +2295,6 @@ static void vl_api_mpls_tunnel_add_del_reply_t_handler_json
vam->result_ready = 1;
}
-static void vl_api_l2tpv3_create_tunnel_reply_t_handler
- (vl_api_l2tpv3_create_tunnel_reply_t * mp)
-{
- vat_main_t *vam = &vat_main;
- i32 retval = ntohl (mp->retval);
- if (vam->async_mode)
- {
- vam->async_errors += (retval < 0);
- }
- else
- {
- vam->retval = retval;
- vam->sw_if_index = ntohl (mp->sw_if_index);
- vam->result_ready = 1;
- }
-}
-
-static void vl_api_l2tpv3_create_tunnel_reply_t_handler_json
- (vl_api_l2tpv3_create_tunnel_reply_t * mp)
-{
- vat_main_t *vam = &vat_main;
- vat_json_node_t node;
-
- vat_json_init_object (&node);
- vat_json_object_add_int (&node, "retval", ntohl (mp->retval));
- vat_json_object_add_uint (&node, "sw_if_index", ntohl (mp->sw_if_index));
-
- vat_json_print (vam->ofp, &node);
- vat_json_free (&node);
-
- vam->retval = ntohl (mp->retval);
- vam->result_ready = 1;
-}
-
static void vl_api_gpe_add_del_fwd_entry_reply_t_handler
(vl_api_gpe_add_del_fwd_entry_reply_t * mp)
{
@@ -5121,9 +5086,6 @@ _(sr_steering_add_del_reply) \
_(classify_add_del_session_reply) \
_(classify_set_interface_ip_table_reply) \
_(classify_set_interface_l2_tables_reply) \
-_(l2tpv3_set_tunnel_cookies_reply) \
-_(l2tpv3_interface_enable_disable_reply) \
-_(l2tpv3_set_lookup_key_reply) \
_(l2_fib_clear_table_reply) \
_(l2_interface_efp_filter_reply) \
_(l2_interface_vlan_tag_rewrite_reply) \
@@ -5320,12 +5282,6 @@ _(CLASSIFY_SET_INTERFACE_L2_TABLES_REPLY, \
classify_set_interface_l2_tables_reply) \
_(GET_NODE_INDEX_REPLY, get_node_index_reply) \
_(ADD_NODE_NEXT_REPLY, add_node_next_reply) \
-_(L2TPV3_CREATE_TUNNEL_REPLY, l2tpv3_create_tunnel_reply) \
-_(L2TPV3_SET_TUNNEL_COOKIES_REPLY, l2tpv3_set_tunnel_cookies_reply) \
-_(L2TPV3_INTERFACE_ENABLE_DISABLE_REPLY, \
- l2tpv3_interface_enable_disable_reply) \
-_(L2TPV3_SET_LOOKUP_KEY_REPLY, l2tpv3_set_lookup_key_reply) \
-_(SW_IF_L2TPV3_TUNNEL_DETAILS, sw_if_l2tpv3_tunnel_details) \
_(VXLAN_ADD_DEL_TUNNEL_REPLY, vxlan_add_del_tunnel_reply) \
_(VXLAN_OFFLOAD_RX_REPLY, vxlan_offload_rx_reply) \
_(VXLAN_TUNNEL_DETAILS, vxlan_tunnel_details) \
@@ -11146,274 +11102,6 @@ api_add_node_next (vat_main_t * vam)
return ret;
}
-static int
-api_l2tpv3_create_tunnel (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- ip6_address_t client_address, our_address;
- int client_address_set = 0;
- int our_address_set = 0;
- u32 local_session_id = 0;
- u32 remote_session_id = 0;
- u64 local_cookie = 0;
- u64 remote_cookie = 0;
- u8 l2_sublayer_present = 0;
- vl_api_l2tpv3_create_tunnel_t *mp;
- int ret;
-
- while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (i, "client_address %U", unformat_ip6_address,
- &client_address))
- client_address_set = 1;
- else if (unformat (i, "our_address %U", unformat_ip6_address,
- &our_address))
- our_address_set = 1;
- else if (unformat (i, "local_session_id %d", &local_session_id))
- ;
- else if (unformat (i, "remote_session_id %d", &remote_session_id))
- ;
- else if (unformat (i, "local_cookie %lld", &local_cookie))
- ;
- else if (unformat (i, "remote_cookie %lld", &remote_cookie))
- ;
- else if (unformat (i, "l2-sublayer-present"))
- l2_sublayer_present = 1;
- else
- break;
- }
-
- if (client_address_set == 0)
- {
- errmsg ("client_address required");
- return -99;
- }
-
- if (our_address_set == 0)
- {
- errmsg ("our_address required");
- return -99;
- }
-
- M (L2TPV3_CREATE_TUNNEL, mp);
-
- clib_memcpy (mp->client_address.un.ip6, client_address.as_u8,
- sizeof (ip6_address_t));
-
- clib_memcpy (mp->our_address.un.ip6, our_address.as_u8,
- sizeof (ip6_address_t));
-
- mp->local_session_id = ntohl (local_session_id);
- mp->remote_session_id = ntohl (remote_session_id);
- mp->local_cookie = clib_host_to_net_u64 (local_cookie);
- mp->remote_cookie = clib_host_to_net_u64 (remote_cookie);
- mp->l2_sublayer_present = l2_sublayer_present;
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_l2tpv3_set_tunnel_cookies (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- u32 sw_if_index;
- u8 sw_if_index_set = 0;
- u64 new_local_cookie = 0;
- u64 new_remote_cookie = 0;
- vl_api_l2tpv3_set_tunnel_cookies_t *mp;
- int ret;
-
- while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
- sw_if_index_set = 1;
- else if (unformat (i, "sw_if_index %d", &sw_if_index))
- sw_if_index_set = 1;
- else if (unformat (i, "new_local_cookie %lld", &new_local_cookie))
- ;
- else if (unformat (i, "new_remote_cookie %lld", &new_remote_cookie))
- ;
- else
- break;
- }
-
- if (sw_if_index_set == 0)
- {
- errmsg ("missing interface name or sw_if_index");
- return -99;
- }
-
- M (L2TPV3_SET_TUNNEL_COOKIES, mp);
-
- mp->sw_if_index = ntohl (sw_if_index);
- mp->new_local_cookie = clib_host_to_net_u64 (new_local_cookie);
- mp->new_remote_cookie = clib_host_to_net_u64 (new_remote_cookie);
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_l2tpv3_interface_enable_disable (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_l2tpv3_interface_enable_disable_t *mp;
- u32 sw_if_index;
- u8 sw_if_index_set = 0;
- u8 enable_disable = 1;
- int ret;
-
- while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
- sw_if_index_set = 1;
- else if (unformat (i, "sw_if_index %d", &sw_if_index))
- sw_if_index_set = 1;
- else if (unformat (i, "enable"))
- enable_disable = 1;
- else if (unformat (i, "disable"))
- enable_disable = 0;
- else
- break;
- }
-
- if (sw_if_index_set == 0)
- {
- errmsg ("missing interface name or sw_if_index");
- return -99;
- }
-
- M (L2TPV3_INTERFACE_ENABLE_DISABLE, mp);
-
- mp->sw_if_index = ntohl (sw_if_index);
- mp->enable_disable = enable_disable;
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static int
-api_l2tpv3_set_lookup_key (vat_main_t * vam)
-{
- unformat_input_t *i = vam->input;
- vl_api_l2tpv3_set_lookup_key_t *mp;
- u8 key = ~0;
- int ret;
-
- while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
- {
- if (unformat (i, "lookup_v6_src"))
- key = L2T_LOOKUP_SRC_ADDRESS;
- else if (unformat (i, "lookup_v6_dst"))
- key = L2T_LOOKUP_DST_ADDRESS;
- else if (unformat (i, "lookup_session_id"))
- key = L2T_LOOKUP_SESSION_ID;
- else
- break;
- }
-
- if (key == (u8) ~ 0)
- {
- errmsg ("l2tp session lookup key unset");
- return -99;
- }
-
- M (L2TPV3_SET_LOOKUP_KEY, mp);
-
- mp->key = key;
-
- S (mp);
- W (ret);
- return ret;
-}
-
-static void vl_api_sw_if_l2tpv3_tunnel_details_t_handler
- (vl_api_sw_if_l2tpv3_tunnel_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
-
- print (vam->ofp, "* %U (our) %U (client) (sw_if_index %d)",
- format_ip6_address, mp->our_address,
- format_ip6_address, mp->client_address,
- clib_net_to_host_u32 (mp->sw_if_index));
-
- print (vam->ofp,
- " local cookies %016llx %016llx remote cookie %016llx",
- clib_net_to_host_u64 (mp->local_cookie[0]),
- clib_net_to_host_u64 (mp->local_cookie[1]),
- clib_net_to_host_u64 (mp->remote_cookie));
-
- print (vam->ofp, " local session-id %d remote session-id %d",
- clib_net_to_host_u32 (mp->local_session_id),
- clib_net_to_host_u32 (mp->remote_session_id));
-
- print (vam->ofp, " l2 specific sublayer %s\n",
- mp->l2_sublayer_present ? "preset" : "absent");
-
-}
-
-static void vl_api_sw_if_l2tpv3_tunnel_details_t_handler_json
- (vl_api_sw_if_l2tpv3_tunnel_details_t * mp)
-{
- vat_main_t *vam = &vat_main;
- vat_json_node_t *node = NULL;
- struct in6_addr addr;
-
- if (VAT_JSON_ARRAY != vam->json_tree.type)
- {
- ASSERT (VAT_JSON_NONE == vam->json_tree.type);
- vat_json_init_array (&vam->json_tree);
- }
- node = vat_json_array_add (&vam->json_tree);
-
- vat_json_init_object (node);
-
- clib_memcpy (&addr, mp->our_address.un.ip6, sizeof (addr));
- vat_json_object_add_ip6 (node, "our_address", addr);
- clib_memcpy (&addr, mp->client_address.un.ip6, sizeof (addr));
- vat_json_object_add_ip6 (node, "client_address", addr);
-
- vat_json_node_t *lc = vat_json_object_add (node, "local_cookie");
- vat_json_init_array (lc);
- vat_json_array_add_uint (lc, clib_net_to_host_u64 (mp->local_cookie[0]));
- vat_json_array_add_uint (lc, clib_net_to_host_u64 (mp->local_cookie[1]));
- vat_json_object_add_uint (node, "remote_cookie",
- clib_net_to_host_u64 (mp->remote_cookie));
-
- printf ("local id: %u", clib_net_to_host_u32 (mp->local_session_id));
- vat_json_object_add_uint (node, "local_session_id",
- clib_net_to_host_u32 (mp->local_session_id));
- vat_json_object_add_uint (node, "remote_session_id",
- clib_net_to_host_u32 (mp->remote_session_id));
- vat_json_object_add_string_copy (node, "l2_sublayer",
- mp->l2_sublayer_present ? (u8 *) "present"
- : (u8 *) "absent");
-}
-
-static int
-api_sw_if_l2tpv3_tunnel_dump (vat_main_t * vam)
-{
- vl_api_sw_if_l2tpv3_tunnel_dump_t *mp;
- vl_api_control_ping_t *mp_ping;
- int ret;
-
- /* Get list of l2tpv3-tunnel interfaces */
- M (SW_IF_L2TPV3_TUNNEL_DUMP, mp);
- S (mp);
-
- /* Use a control ping for synchronization */
- MPING (CONTROL_PING, mp_ping);
- S (mp_ping);
-
- W (ret);
- return ret;
-}
-
-
static void vl_api_sw_interface_tap_v2_details_t_handler
(vl_api_sw_interface_tap_v2_details_t * mp)
{
@@ -20425,18 +20113,6 @@ _(classify_set_interface_l2_tables, \
" [other-table <nn>]") \
_(get_node_index, "node <node-name") \
_(add_node_next, "node <node-name> next <next-node-name>") \
-_(l2tpv3_create_tunnel, \
- "client_address <ip6-addr> our_address <ip6-addr>\n" \
- "[local_session_id <nn>][remote_session_id <nn>][local_cookie <nn>]\n" \
- "[remote_cookie <nn>]\n[l2-sublayer-preset]\n") \
-_(l2tpv3_set_tunnel_cookies, \
- "<intfc> | sw_if_index <nn> [new_local_cookie <nn>]\n" \
- "[new_remote_cookie <nn>]\n") \
-_(l2tpv3_interface_enable_disable, \
- "<intfc> | sw_if_index <nn> enable | disable") \
-_(l2tpv3_set_lookup_key, \
- "lookup_v6_src | lookup_v6_dst | lookup_session_id") \
-_(sw_if_l2tpv3_tunnel_dump, "") \
_(vxlan_offload_rx, \
"hw { <interface name> | hw_if_index <nn>} " \
"rx { <vxlan tunnel name> | sw_if_index <nn> } [del]") \
diff --git a/src/vnet/CMakeLists.txt b/src/vnet/CMakeLists.txt
index 8c315ce5d73..579302c4687 100644
--- a/src/vnet/CMakeLists.txt
+++ b/src/vnet/CMakeLists.txt
@@ -762,29 +762,6 @@ list(APPEND VNET_HEADERS
)
##############################################################################
-# Tunnel protocol: l2tpv3
-##############################################################################
-list(APPEND VNET_SOURCES
- l2tp/l2tp.c
- l2tp/encap.c
- l2tp/decap.c
- l2tp/pg.c
- l2tp/l2tp_api.c
-)
-
-list(APPEND VNET_MULTIARCH_SOURCES
- l2tp/encap.c
- l2tp/decap.c
-)
-
-list(APPEND VNET_HEADERS
- l2tp/l2tp.h
- l2tp/packet.h
-)
-
-list(APPEND VNET_API_FILES l2tp/l2tp.api)
-
-##############################################################################
# Tunnel protocol: gre+mpls
##############################################################################
list(APPEND VNET_SOURCES
diff --git a/src/vnet/vnet_all_api_h.h b/src/vnet/vnet_all_api_h.h
index 9daf5e95b4d..86edc88ac49 100644
--- a/src/vnet/vnet_all_api_h.h
+++ b/src/vnet/vnet_all_api_h.h
@@ -40,7 +40,6 @@
#include <vnet/gre/gre.api.h>
#include <vnet/interface.api.h>
#include <vnet/l2/l2.api.h>
-#include <vnet/l2tp/l2tp.api.h>
#include <vnet/span/span.api.h>
#include <vnet/ip/ip.api.h>
#include <vnet/vxlan/vxlan.api.h>
diff --git a/src/vpp/api/custom_dump.c b/src/vpp/api/custom_dump.c
index 46beb685810..b17e7ded2b2 100644
--- a/src/vpp/api/custom_dump.c
+++ b/src/vpp/api/custom_dump.c
@@ -24,7 +24,6 @@
#include <vnet/fib/fib_api.h>
#include <vnet/unix/tuntap.h>
#include <vnet/mpls/mpls.h>
-#include <vnet/l2tp/l2tp.h>
#include <vnet/l2/l2_input.h>
#include <vnet/srv6/sr.h>
#include <vnet/srmpls/sr_mpls.h>
@@ -1429,100 +1428,6 @@ static void *vl_api_add_node_next_t_print
FINISH;
}
-static void *vl_api_l2tpv3_create_tunnel_t_print
- (vl_api_l2tpv3_create_tunnel_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: l2tpv3_create_tunnel ");
-
- s = format (s, "client_address %U our_address %U ",
- format_ip6_address,
- (ip6_address_t *) (mp->client_address.un.ip6),
- format_ip6_address, (ip6_address_t *) (mp->our_address.un.ip6));
- s = format (s, "local_session_id %d ", (mp->local_session_id));
- s = format (s, "remote_session_id %d ", (mp->remote_session_id));
- s = format (s, "local_cookie %lld ",
- clib_net_to_host_u64 (mp->local_cookie));
- s = format (s, "remote_cookie %lld ",
- clib_net_to_host_u64 (mp->remote_cookie));
- if (mp->l2_sublayer_present)
- s = format (s, "l2-sublayer-present ");
-
- FINISH;
-}
-
-static void *vl_api_l2tpv3_set_tunnel_cookies_t_print
- (vl_api_l2tpv3_set_tunnel_cookies_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: l2tpv3_set_tunnel_cookies ");
-
- s = format (s, "sw_if_index %d ", (mp->sw_if_index));
-
- s = format (s, "new_local_cookie %llu ",
- clib_net_to_host_u64 (mp->new_local_cookie));
-
- s = format (s, "new_remote_cookie %llu ",
- clib_net_to_host_u64 (mp->new_remote_cookie));
-
- FINISH;
-}
-
-static void *vl_api_l2tpv3_interface_enable_disable_t_print
- (vl_api_l2tpv3_interface_enable_disable_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: l2tpv3_interface_enable_disable ");
-
- s = format (s, "sw_if_index %d ", (mp->sw_if_index));
-
- if (mp->enable_disable == 0)
- s = format (s, "del ");
-
- FINISH;
-}
-
-static void *vl_api_l2tpv3_set_lookup_key_t_print
- (vl_api_l2tpv3_set_lookup_key_t * mp, void *handle)
-{
- u8 *s;
- char *str = "unknown";
-
- s = format (0, "SCRIPT: l2tpv3_set_lookup_key ");
-
- switch (mp->key)
- {
- case L2T_LOOKUP_SRC_ADDRESS:
- str = "lookup_v6_src";
- break;
- case L2T_LOOKUP_DST_ADDRESS:
- str = "lookup_v6_dst";
- break;
- case L2T_LOOKUP_SESSION_ID:
- str = "lookup_session_id";
- break;
- default:
- break;
- }
-
- s = format (s, "%s ", str);
-
- FINISH;
-}
-
-static void *vl_api_sw_if_l2tpv3_tunnel_dump_t_print
- (vl_api_sw_if_l2tpv3_tunnel_dump_t * mp, void *handle)
-{
- u8 *s;
-
- s = format (0, "SCRIPT: sw_if_l2tpv3_tunnel_dump ");
-
- FINISH;
-}
-
static void *vl_api_vxlan_add_del_tunnel_t_print
(vl_api_vxlan_add_del_tunnel_t * mp, void *handle)
{
@@ -3552,11 +3457,6 @@ _(BRIDGE_DOMAIN_SET_MAC_AGE, bridge_domain_set_mac_age) \
_(CLASSIFY_SET_INTERFACE_IP_TABLE, classify_set_interface_ip_table) \
_(CLASSIFY_SET_INTERFACE_L2_TABLES, classify_set_interface_l2_tables) \
_(ADD_NODE_NEXT, add_node_next) \
-_(L2TPV3_CREATE_TUNNEL, l2tpv3_create_tunnel) \
-_(L2TPV3_SET_TUNNEL_COOKIES, l2tpv3_set_tunnel_cookies) \
-_(L2TPV3_INTERFACE_ENABLE_DISABLE, l2tpv3_interface_enable_disable) \
-_(L2TPV3_SET_LOOKUP_KEY, l2tpv3_set_lookup_key) \
-_(SW_IF_L2TPV3_TUNNEL_DUMP, sw_if_l2tpv3_tunnel_dump) \
_(VXLAN_ADD_DEL_TUNNEL, vxlan_add_del_tunnel) \
_(VXLAN_TUNNEL_DUMP, vxlan_tunnel_dump) \
_(VXLAN_OFFLOAD_RX, vxlan_offload_rx) \