gtpu: use explicit types in api 66/23866/2
authorOle Troan <ot@cisco.com>
Sun, 8 Dec 2019 13:14:37 +0000 (14:14 +0100)
committerAndrew Yourtchenko <ayourtch@gmail.com>
Mon, 9 Dec 2019 12:43:47 +0000 (12:43 +0000)
Type: fix
Signed-off-by: Ole Troan <ot@cisco.com>
Change-Id: I16fcbd5e63526dbf062a3032701479324fe2a4f5

src/plugins/gtpu/gtpu.api
src/plugins/gtpu/gtpu.c
src/plugins/gtpu/gtpu.h
src/plugins/gtpu/gtpu_api.c
src/plugins/gtpu/gtpu_test.c
src/plugins/gtpu/test/test_gtpu.py
test/vpp_papi_provider.py

index b5f4f02..052e6a2 100644 (file)
  * limitations under the License.
  */
 
  * limitations under the License.
  */
 
-option version = "1.0.0";
+option version = "2.0.0";
+import "vnet/interface_types.api";
+import "vnet/ip/ip_types.api";
 
 /** \brief Set or delete an GTPU 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
 
 /** \brief Set or delete an GTPU 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 is_ipv6 - src_address and dst_address is ipv6 or not
     @param src_address - GTPU tunnel's source address.
     @param dst_address - GTPU tunnel's destination address.
     @param mcast_sw_if_index - version, O-bit and C-bit (see nsh_packet.h)
     @param src_address - GTPU tunnel's source address.
     @param dst_address - GTPU tunnel's destination address.
     @param mcast_sw_if_index - version, O-bit and C-bit (see nsh_packet.h)
@@ -31,11 +32,10 @@ define gtpu_add_del_tunnel
 {
   u32 client_index;
   u32 context;
 {
   u32 client_index;
   u32 context;
-  u8 is_add;
-  u8 is_ipv6;
-  u8 src_address[16];
-  u8 dst_address[16];
-  u32 mcast_sw_if_index;
+  bool is_add;
+  vl_api_address_t src_address;
+  vl_api_address_t dst_address;
+  vl_api_interface_index_t mcast_sw_if_index;
   u32 encap_vrf_id;
   u32 decap_next_index;
   u32 teid;
   u32 encap_vrf_id;
   u32 decap_next_index;
   u32 teid;
@@ -51,7 +51,7 @@ define gtpu_add_del_tunnel_reply
 {
   u32 context;
   i32 retval;
 {
   u32 context;
   i32 retval;
-  u32 sw_if_index;
+  vl_api_interface_index_t sw_if_index;
 };
 
 /** \brief Dump GTPU tunnel
 };
 
 /** \brief Dump GTPU tunnel
@@ -63,14 +63,13 @@ define gtpu_tunnel_dump
 {
   u32 client_index;
   u32 context;
 {
   u32 client_index;
   u32 context;
-  u32 sw_if_index;
+  vl_api_interface_index_t sw_if_index;
   option vat_help = "[<intfc> | sw_if_index <nn>]";
 };
 
 /** \brief dump details of an GTPU tunnel
     @param context - sender context, to match reply w/ request
     @param sw_if_index - software index of the interface
   option vat_help = "[<intfc> | sw_if_index <nn>]";
 };
 
 /** \brief dump details of an GTPU tunnel
     @param context - sender context, to match reply w/ request
     @param sw_if_index - software index of the interface
-    @param is_ipv6 - src_address and dst_address is ipv6 or not
     @param src_address - GTPU tunnel's source address.
     @param dst_address - GTPU tunnel's destination address.
     @param mcast_sw_if_index - version, O-bit and C-bit (see nsh_packet.h)
     @param src_address - GTPU tunnel's source address.
     @param dst_address - GTPU tunnel's destination address.
     @param mcast_sw_if_index - version, O-bit and C-bit (see nsh_packet.h)
@@ -81,11 +80,10 @@ define gtpu_tunnel_dump
 define gtpu_tunnel_details
 {
   u32 context;
 define gtpu_tunnel_details
 {
   u32 context;
-  u32 sw_if_index;
-  u8 is_ipv6;
-  u8 src_address[16];
-  u8 dst_address[16];
-  u32 mcast_sw_if_index;
+  vl_api_interface_index_t sw_if_index;
+  vl_api_address_t src_address;
+  vl_api_address_t dst_address;
+  vl_api_interface_index_t mcast_sw_if_index;
   u32 encap_vrf_id;
   u32 decap_next_index;
   u32 teid;
   u32 encap_vrf_id;
   u32 decap_next_index;
   u32 teid;
@@ -102,9 +100,9 @@ autoreply define sw_interface_set_gtpu_bypass
 {
   u32 client_index;
   u32 context;
 {
   u32 client_index;
   u32 context;
-  u32 sw_if_index;
-  u8 is_ipv6;
-  u8 enable;
+  vl_api_interface_index_t sw_if_index;
+  bool is_ipv6;
+  bool enable;
   option vat_help = "<intfc> | sw_if_index <id> [ip4 | ip6] [enable | disable]";
 };
 
   option vat_help = "<intfc> | sw_if_index <id> [ip4 | ip6] [enable | disable]";
 };
 
index dc5c689..8a1610c 100644 (file)
@@ -379,7 +379,7 @@ int vnet_gtpu_add_del_tunnel
   u32 sw_if_index = ~0;
   gtpu4_tunnel_key_t key4;
   gtpu6_tunnel_key_t key6;
   u32 sw_if_index = ~0;
   gtpu4_tunnel_key_t key4;
   gtpu6_tunnel_key_t key6;
-  u32 is_ip6 = a->is_ip6;
+  bool is_ip6 = !ip46_address_is_ip4 (&a->dst);
 
   if (!is_ip6)
     {
 
   if (!is_ip6)
     {
@@ -820,7 +820,6 @@ gtpu_add_del_tunnel_command_fn (vlib_main_t * vm,
   clib_memset (a, 0, sizeof (*a));
 
   a->is_add = is_add;
   clib_memset (a, 0, sizeof (*a));
 
   a->is_add = is_add;
-  a->is_ip6 = ipv6_set;
 
 #define _(x) a->x = x;
   foreach_copy_field;
 
 #define _(x) a->x = x;
   foreach_copy_field;
index 7296ece..dc36308 100644 (file)
@@ -245,7 +245,6 @@ u8 *format_gtpu_encap_trace (u8 * s, va_list * args);
 typedef struct
 {
   u8 is_add;
 typedef struct
 {
   u8 is_add;
-  u8 is_ip6;
   ip46_address_t src, dst;
   u32 mcast_sw_if_index;
   u32 encap_fib_index;
   ip46_address_t src, dst;
   u32 mcast_sw_if_index;
   u32 encap_fib_index;
index 77ae334..0c4a315 100644 (file)
 
 #include <vppinfra/byte_order.h>
 #include <vlibmemory/api.h>
 
 #include <vppinfra/byte_order.h>
 #include <vlibmemory/api.h>
-
+#include <vnet/ip/ip_types_api.h>
 #include <gtpu/gtpu.h>
 
 #include <gtpu/gtpu.h>
 
+#include <vnet/format_fns.h>
 #include <gtpu/gtpu.api_enum.h>
 #include <gtpu/gtpu.api_types.h>
 
 #include <gtpu/gtpu.api_enum.h>
 #include <gtpu/gtpu.api_types.h>
 
@@ -67,14 +68,13 @@ static void vl_api_gtpu_add_del_tunnel_t_handler
 
   vnet_gtpu_add_del_tunnel_args_t a = {
     .is_add = mp->is_add,
 
   vnet_gtpu_add_del_tunnel_args_t a = {
     .is_add = mp->is_add,
-    .is_ip6 = mp->is_ipv6,
     .mcast_sw_if_index = ntohl (mp->mcast_sw_if_index),
     .encap_fib_index = p[0],
     .decap_next_index = ntohl (mp->decap_next_index),
     .teid = ntohl (mp->teid),
     .mcast_sw_if_index = ntohl (mp->mcast_sw_if_index),
     .encap_fib_index = p[0],
     .decap_next_index = ntohl (mp->decap_next_index),
     .teid = ntohl (mp->teid),
-    .dst = to_ip46 (mp->is_ipv6, mp->dst_address),
-    .src = to_ip46 (mp->is_ipv6, mp->src_address),
   };
   };
+  ip_address_decode (&mp->dst_address, &a.dst);
+  ip_address_decode (&mp->src_address, &a.src);
 
   /* Check src & dst are different */
   if (ip46_address_cmp (&a.dst, &a.src) == 0)
 
   /* Check src & dst are different */
   if (ip46_address_cmp (&a.dst, &a.src) == 0)
@@ -113,23 +113,19 @@ static void send_gtpu_tunnel_details
   rmp = vl_msg_api_alloc (sizeof (*rmp));
   clib_memset (rmp, 0, sizeof (*rmp));
   rmp->_vl_msg_id = ntohs (VL_API_GTPU_TUNNEL_DETAILS + gtm->msg_id_base);
   rmp = vl_msg_api_alloc (sizeof (*rmp));
   clib_memset (rmp, 0, sizeof (*rmp));
   rmp->_vl_msg_id = ntohs (VL_API_GTPU_TUNNEL_DETAILS + gtm->msg_id_base);
-  if (is_ipv6)
-    {
-      memcpy (rmp->src_address, t->src.ip6.as_u8, 16);
-      memcpy (rmp->dst_address, t->dst.ip6.as_u8, 16);
-      rmp->encap_vrf_id = htonl (im6->fibs[t->encap_fib_index].ft_table_id);
-    }
-  else
-    {
-      memcpy (rmp->src_address, t->src.ip4.as_u8, 4);
-      memcpy (rmp->dst_address, t->dst.ip4.as_u8, 4);
-      rmp->encap_vrf_id = htonl (im4->fibs[t->encap_fib_index].ft_table_id);
-    }
+
+  ip_address_encode (&t->src, is_ipv6 ? IP46_TYPE_IP6 : IP46_TYPE_IP4,
+                    &rmp->src_address);
+  ip_address_encode (&t->dst, is_ipv6 ? IP46_TYPE_IP6 : IP46_TYPE_IP4,
+                    &rmp->dst_address);
+
+  rmp->encap_vrf_id =
+    is_ipv6 ? htonl (im6->fibs[t->encap_fib_index].ft_table_id) :
+    htonl (im4->fibs[t->encap_fib_index].ft_table_id);
   rmp->mcast_sw_if_index = htonl (t->mcast_sw_if_index);
   rmp->teid = htonl (t->teid);
   rmp->decap_next_index = htonl (t->decap_next_index);
   rmp->sw_if_index = htonl (t->sw_if_index);
   rmp->mcast_sw_if_index = htonl (t->mcast_sw_if_index);
   rmp->teid = htonl (t->teid);
   rmp->decap_next_index = htonl (t->decap_next_index);
   rmp->sw_if_index = htonl (t->sw_if_index);
-  rmp->is_ipv6 = is_ipv6;
   rmp->context = context;
 
   vl_api_send_msg (reg, (u8 *) rmp);
   rmp->context = context;
 
   vl_api_send_msg (reg, (u8 *) rmp);
index 36f4a8e..55c5363 100644 (file)
 #include <vlibmemory/api.h>
 #include <vppinfra/error.h>
 #include <gtpu/gtpu.h>
 #include <vlibmemory/api.h>
 #include <vppinfra/error.h>
 #include <gtpu/gtpu.h>
+#include <vnet/ip/ip_types_api.h>
 
 #define __plugin_msg_base gtpu_test_main.msg_id_base
 #include <vlibapi/vat_helper_macros.h>
 
 
 #define __plugin_msg_base gtpu_test_main.msg_id_base
 #include <vlibapi/vat_helper_macros.h>
 
+#include <vnet/format_fns.h>
 #include <gtpu/gtpu.api_enum.h>
 #include <gtpu/gtpu.api_types.h>
 
 #include <gtpu/gtpu.api_enum.h>
 #include <gtpu/gtpu.api_types.h>
 
@@ -299,22 +301,15 @@ api_gtpu_add_del_tunnel (vat_main_t * vam)
 
   M (GTPU_ADD_DEL_TUNNEL, mp);
 
 
   M (GTPU_ADD_DEL_TUNNEL, mp);
 
-  if (ipv6_set)
-    {
-      clib_memcpy (mp->src_address, &src.ip6, sizeof (src.ip6));
-      clib_memcpy (mp->dst_address, &dst.ip6, sizeof (dst.ip6));
-    }
-  else
-    {
-      clib_memcpy (mp->src_address, &src.ip4, sizeof (src.ip4));
-      clib_memcpy (mp->dst_address, &dst.ip4, sizeof (dst.ip4));
-    }
+  ip_address_encode(&src, ipv6_set ? IP46_TYPE_IP6 : IP46_TYPE_IP4,
+                   &mp->src_address);
+  ip_address_encode(&dst, ipv6_set ? IP46_TYPE_IP6 : IP46_TYPE_IP4,
+                   &mp->dst_address);
   mp->encap_vrf_id = ntohl (encap_vrf_id);
   mp->decap_next_index = ntohl (decap_next_index);
   mp->mcast_sw_if_index = ntohl (mcast_sw_if_index);
   mp->teid = ntohl (teid);
   mp->is_add = is_add;
   mp->encap_vrf_id = ntohl (encap_vrf_id);
   mp->decap_next_index = ntohl (decap_next_index);
   mp->mcast_sw_if_index = ntohl (mcast_sw_if_index);
   mp->teid = ntohl (teid);
   mp->is_add = is_add;
-  mp->is_ipv6 = ipv6_set;
 
   S (mp);
   W (ret);
 
   S (mp);
   W (ret);
@@ -325,9 +320,10 @@ static void vl_api_gtpu_tunnel_details_t_handler
   (vl_api_gtpu_tunnel_details_t * mp)
 {
   vat_main_t *vam = &vat_main;
   (vl_api_gtpu_tunnel_details_t * mp)
 {
   vat_main_t *vam = &vat_main;
-  ip46_address_t src = to_ip46 (mp->is_ipv6, mp->dst_address);
-  ip46_address_t dst = to_ip46 (mp->is_ipv6, mp->src_address);
-
+  ip46_address_t src;
+  ip46_address_t dst;
+  ip_address_decode(&mp->dst_address, &dst);
+  ip_address_decode(&mp->src_address, &src);
   print (vam->ofp, "%11d%24U%24U%14d%18d%13d%19d",
        ntohl (mp->sw_if_index),
        format_ip46_address, &src, IP46_TYPE_ANY,
   print (vam->ofp, "%11d%24U%24U%14d%18d%13d%19d",
        ntohl (mp->sw_if_index),
        format_ip46_address, &src, IP46_TYPE_ANY,
index b6a7012..e6d9c9e 100644 (file)
@@ -74,31 +74,39 @@ class TestGtpuUDP(VppTestCase):
         """ test UDP ports
         Check if there are no udp listeners before gtpu is enabled
         """
         """ test UDP ports
         Check if there are no udp listeners before gtpu is enabled
         """
-
         # UDP ports should be disabled unless a tunnel is configured
         self._check_udp_port_ip4(False)
         self._check_udp_port_ip6(False)
 
         # UDP ports should be disabled unless a tunnel is configured
         self._check_udp_port_ip4(False)
         self._check_udp_port_ip6(False)
 
-        r = self.vapi.gtpu_add_del_tunnel(src_addr=self.pg0.local_ip4n,
-                                          dst_addr=self.pg0.remote_ip4n)
+        r = self.vapi.gtpu_add_del_tunnel(is_add=True,
+                                          mcast_sw_if_index=0xFFFFFFFF,
+                                          decap_next_index=0xFFFFFFFF,
+                                          src_address=self.pg0.local_ip4,
+                                          dst_address=self.pg0.remote_ip4)
 
         # UDP port 2152 enabled for ip4
         self._check_udp_port_ip4()
 
 
         # UDP port 2152 enabled for ip4
         self._check_udp_port_ip4()
 
-        r = self.vapi.gtpu_add_del_tunnel(is_ipv6=1,
-                                          src_addr=self.pg0.local_ip6n,
-                                          dst_addr=self.pg0.remote_ip6n)
+        r = self.vapi.gtpu_add_del_tunnel(is_add=True,
+                                          mcast_sw_if_index=0xFFFFFFFF,
+                                          decap_next_index=0xFFFFFFFF,
+                                          src_address=self.pg0.local_ip6,
+                                          dst_address=self.pg0.remote_ip6)
 
         # UDP port 2152 enabled for ip6
         self._check_udp_port_ip6()
 
 
         # UDP port 2152 enabled for ip6
         self._check_udp_port_ip6()
 
-        r = self.vapi.gtpu_add_del_tunnel(is_add=0,
-                                          src_addr=self.pg0.local_ip4n,
-                                          dst_addr=self.pg0.remote_ip4n)
+        r = self.vapi.gtpu_add_del_tunnel(is_add=False,
+                                          mcast_sw_if_index=0xFFFFFFFF,
+                                          decap_next_index=0xFFFFFFFF,
+                                          src_address=self.pg0.local_ip4,
+                                          dst_address=self.pg0.remote_ip4)
 
 
-        r = self.vapi.gtpu_add_del_tunnel(is_add=0, is_ipv6=1,
-                                          src_addr=self.pg0.local_ip6n,
-                                          dst_addr=self.pg0.remote_ip6n)
+        r = self.vapi.gtpu_add_del_tunnel(is_add=False,
+                                          mcast_sw_if_index=0xFFFFFFFF,
+                                          decap_next_index=0xFFFFFFFF,
+                                          src_address=self.pg0.local_ip6,
+                                          dst_address=self.pg0.remote_ip6)
 
 
 class TestGtpu(BridgeDomain, VppTestCase):
 
 
 class TestGtpu(BridgeDomain, VppTestCase):
@@ -235,10 +243,12 @@ class TestGtpu(BridgeDomain, VppTestCase):
                                            INVALID_INDEX)],
                              register=False)
             rip.add_vpp_config()
                                            INVALID_INDEX)],
                              register=False)
             rip.add_vpp_config()
-            dest_ip4n = socket.inet_pton(socket.AF_INET, dest_ip4)
             r = cls.vapi.gtpu_add_del_tunnel(
             r = cls.vapi.gtpu_add_del_tunnel(
-                src_addr=cls.pg0.local_ip4n,
-                dst_addr=dest_ip4n,
+                is_add=True,
+                mcast_sw_if_index=0xFFFFFFFF,
+                decap_next_index=0xFFFFFFFF,
+                src_address=cls.pg0.local_ip4,
+                dst_address=dest_ip4,
                 teid=teid)
             cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
                                                 bd_id=teid)
                 teid=teid)
             cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
                                                 bd_id=teid)
@@ -254,8 +264,9 @@ class TestGtpu(BridgeDomain, VppTestCase):
         teid_end = teid_start + n_shared_dst_tunnels
         for teid in range(teid_start, teid_end):
             r = cls.vapi.gtpu_add_del_tunnel(
         teid_end = teid_start + n_shared_dst_tunnels
         for teid in range(teid_start, teid_end):
             r = cls.vapi.gtpu_add_del_tunnel(
-                src_addr=cls.pg0.local_ip4n,
-                dst_addr=cls.mcast_ip4n,
+                decap_next_index=0xFFFFFFFF,
+                src_address=cls.pg0.local_ip4,
+                dst_address=cls.mcast_ip4,
                 mcast_sw_if_index=1,
                 teid=teid,
                 is_add=is_add)
                 mcast_sw_if_index=1,
                 teid=teid,
                 is_add=is_add)
@@ -278,12 +289,13 @@ class TestGtpu(BridgeDomain, VppTestCase):
         n_distinct_dst_tunnels = 20
         ip_range_start = 10
         ip_range_end = ip_range_start + n_distinct_dst_tunnels
         n_distinct_dst_tunnels = 20
         ip_range_start = 10
         ip_range_end = ip_range_start + n_distinct_dst_tunnels
-        for dest_ip4n in ip4n_range(cls.mcast_ip4n, ip_range_start,
-                                    ip_range_end):
-            teid = bytearray(dest_ip4n)[3]
+        for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start,
+                                  ip_range_end):
+            teid = int(dest_ip4.split('.')[3])
             cls.vapi.gtpu_add_del_tunnel(
             cls.vapi.gtpu_add_del_tunnel(
-                src_addr=cls.pg0.local_ip4n,
-                dst_addr=dest_ip4n,
+                decap_next_index=0xFFFFFFFF,
+                src_address=cls.pg0.local_ip4,
+                dst_address=dest_ip4,
                 mcast_sw_if_index=1,
                 teid=teid,
                 is_add=is_add)
                 mcast_sw_if_index=1,
                 teid=teid,
                 is_add=is_add)
@@ -331,8 +343,11 @@ class TestGtpu(BridgeDomain, VppTestCase):
             #  into BD.
             cls.single_tunnel_bd = 11
             r = cls.vapi.gtpu_add_del_tunnel(
             #  into BD.
             cls.single_tunnel_bd = 11
             r = cls.vapi.gtpu_add_del_tunnel(
-                src_addr=cls.pg0.local_ip4n,
-                dst_addr=cls.pg0.remote_ip4n,
+                is_add=True,
+                mcast_sw_if_index=0xFFFFFFFF,
+                decap_next_index=0xFFFFFFFF,
+                src_address=cls.pg0.local_ip4,
+                dst_address=cls.pg0.remote_ip4,
                 teid=cls.single_tunnel_bd)
             cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
                                                 bd_id=cls.single_tunnel_bd)
                 teid=cls.single_tunnel_bd)
             cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
                                                 bd_id=cls.single_tunnel_bd)
@@ -345,9 +360,11 @@ class TestGtpu(BridgeDomain, VppTestCase):
             cls.create_gtpu_flood_test_bd(cls.mcast_flood_bd,
                                           cls.n_ucast_tunnels)
             r = cls.vapi.gtpu_add_del_tunnel(
             cls.create_gtpu_flood_test_bd(cls.mcast_flood_bd,
                                           cls.n_ucast_tunnels)
             r = cls.vapi.gtpu_add_del_tunnel(
-                src_addr=cls.pg0.local_ip4n,
-                dst_addr=cls.mcast_ip4n,
+                is_add=True,
+                src_address=cls.pg0.local_ip4,
+                dst_address=cls.mcast_ip4,
                 mcast_sw_if_index=1,
                 mcast_sw_if_index=1,
+                decap_next_index=0xFFFFFFFF,
                 teid=cls.mcast_flood_bd)
             cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
                                                 bd_id=cls.mcast_flood_bd)
                 teid=cls.mcast_flood_bd)
             cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
                                                 bd_id=cls.mcast_flood_bd)
index 109ae0e..309fc3f 100644 (file)
@@ -46,8 +46,6 @@ defaultmapping = {
     'geneve_add_del_tunnel': {'mcast_sw_if_index': 4294967295, 'is_add': 1,
                               'decap_next_index': 4294967295, },
     'gre_tunnel_add_del': {'instance': 4294967295, 'is_add': 1, },
     'geneve_add_del_tunnel': {'mcast_sw_if_index': 4294967295, 'is_add': 1,
                               'decap_next_index': 4294967295, },
     'gre_tunnel_add_del': {'instance': 4294967295, 'is_add': 1, },
-    'gtpu_add_del_tunnel': {'is_add': 1, 'mcast_sw_if_index': 4294967295,
-                            'decap_next_index': 4294967295, },
     'input_acl_set_interface': {'ip4_table_index': 4294967295,
                                 'ip6_table_index': 4294967295,
                                 'l2_table_index': 4294967295, },
     'input_acl_set_interface': {'ip4_table_index': 4294967295,
                                 'ip6_table_index': 4294967295,
                                 'l2_table_index': 4294967295, },
@@ -918,38 +916,6 @@ class VppPapiProvider(object):
                 'reid_len': reid_len,
             })
 
                 'reid_len': reid_len,
             })
 
-    def gtpu_add_del_tunnel(
-            self,
-            src_addr,
-            dst_addr,
-            is_add=1,
-            is_ipv6=0,
-            mcast_sw_if_index=0xFFFFFFFF,
-            encap_vrf_id=0,
-            decap_next_index=0xFFFFFFFF,
-            teid=0):
-        """
-
-        :param is_add:  (Default value = 1)
-        :param is_ipv6:  (Default value = 0)
-        :param src_addr:
-        :param dst_addr:
-        :param mcast_sw_if_index:  (Default value = 0xFFFFFFFF)
-        :param encap_vrf_id:  (Default value = 0)
-        :param decap_next_index:  (Default value = 0xFFFFFFFF)
-        :param teid:  (Default value = 0)
-
-        """
-        return self.api(self.papi.gtpu_add_del_tunnel,
-                        {'is_add': is_add,
-                         'is_ipv6': is_ipv6,
-                         'src_address': src_addr,
-                         'dst_address': dst_addr,
-                         'mcast_sw_if_index': mcast_sw_if_index,
-                         'encap_vrf_id': encap_vrf_id,
-                         'decap_next_index': decap_next_index,
-                         'teid': teid})
-
     def vxlan_gpe_add_del_tunnel(
             self,
             src_addr,
     def vxlan_gpe_add_del_tunnel(
             self,
             src_addr,