gtpu: use explicit types in api
Type: fix Signed-off-by: Ole Troan <ot@cisco.com> Change-Id: I16fcbd5e63526dbf062a3032701479324fe2a4f5
This commit is contained in:
committed by
Andrew Yourtchenko
parent
60f5108a99
commit
55636cb623
+16
-18
@@ -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]";
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user