gtpu: use explicit types in api

Type: fix
Signed-off-by: Ole Troan <ot@cisco.com>
Change-Id: I16fcbd5e63526dbf062a3032701479324fe2a4f5
This commit is contained in:
Ole Troan
2019-12-08 14:14:37 +01:00
committed by Andrew Yourtchenko
parent 60f5108a99
commit 55636cb623
7 changed files with 83 additions and 112 deletions
+16 -18
View File
@@ -13,13 +13,14 @@
* 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
@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)
@@ -31,11 +32,10 @@ define gtpu_add_del_tunnel
{
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;
@@ -51,7 +51,7 @@ define gtpu_add_del_tunnel_reply
{
u32 context;
i32 retval;
u32 sw_if_index;
vl_api_interface_index_t sw_if_index;
};
/** \brief Dump GTPU tunnel
@@ -63,14 +63,13 @@ define gtpu_tunnel_dump
{
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
@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)
@@ -81,11 +80,10 @@ define gtpu_tunnel_dump
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;
@@ -102,9 +100,9 @@ autoreply define sw_interface_set_gtpu_bypass
{
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]";
};
+1 -2
View 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 is_ip6 = a->is_ip6;
bool is_ip6 = !ip46_address_is_ip4 (&a->dst);
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;
a->is_ip6 = ipv6_set;
#define _(x) a->x = x;
foreach_copy_field;
-1
View File
@@ -245,7 +245,6 @@ u8 *format_gtpu_encap_trace (u8 * s, va_list * args);
typedef struct
{
u8 is_add;
u8 is_ip6;
ip46_address_t src, dst;
u32 mcast_sw_if_index;
u32 encap_fib_index;
+13 -17
View File
@@ -24,9 +24,10 @@
#include <vppinfra/byte_order.h>
#include <vlibmemory/api.h>
#include <vnet/ip/ip_types_api.h>
#include <gtpu/gtpu.h>
#include <vnet/format_fns.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,
.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),
.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)
@@ -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);
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->is_ipv6 = is_ipv6;
rmp->context = context;
vl_api_send_msg (reg, (u8 *) rmp);
+10 -14
View File
@@ -18,10 +18,12 @@
#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>
#include <vnet/format_fns.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);
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->is_ipv6 = ipv6_set;
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;
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,
+43 -26
View File
@@ -74,31 +74,39 @@ class TestGtpuUDP(VppTestCase):
""" 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)
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()
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()
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):
@@ -235,10 +243,12 @@ class TestGtpu(BridgeDomain, VppTestCase):
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(
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)
@@ -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(
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)
@@ -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
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(
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)
@@ -331,8 +343,11 @@ class TestGtpu(BridgeDomain, VppTestCase):
# 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)
@@ -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(
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,
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)
-34
View 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, },
'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, },
@@ -918,38 +916,6 @@ class VppPapiProvider(object):
'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,