aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorNeale Ranns <nranns@cisco.com>2019-12-31 05:13:14 +0000
committerDamjan Marion <dmarion@me.com>2020-01-30 20:12:19 +0000
commite5b94dded0dfd7258d5fd0f4ef897d9ccb48715b (patch)
tree819c62a17acf0b234a76c8eef2f00e944e1da8b3 /test
parent9ace36d0f9b04e2d4db410607ee33a8e72ef00c5 (diff)
gre: Tunnel encap/decap flags
Type: feature common funcitons across IP-in-IP and GRE tunnels for encap/decap functions Signed-off-by: Neale Ranns <nranns@cisco.com> Change-Id: I325b66824878d843af167adfe5a7a96b0ab90566
Diffstat (limited to 'test')
-rw-r--r--test/test_gre.py62
-rw-r--r--test/vpp_gre_interface.py37
-rw-r--r--test/vpp_papi_provider.py37
3 files changed, 66 insertions, 70 deletions
diff --git a/test/test_gre.py b/test/test_gre.py
index e3e21c0ad99..e73ba2f99a6 100644
--- a/test/test_gre.py
+++ b/test/test_gre.py
@@ -108,26 +108,28 @@ class TestGRE(VppTestCase):
self.pg1.set_table_ip4(0)
super(TestGRE, self).tearDown()
- def create_stream_ip4(self, src_if, src_ip, dst_ip):
+ def create_stream_ip4(self, src_if, src_ip, dst_ip, dscp=0, ecn=0):
pkts = []
+ tos = (dscp << 2) | ecn
for i in range(0, 257):
info = self.create_packet_info(src_if, src_if)
payload = self.info_to_payload(info)
p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
- IP(src=src_ip, dst=dst_ip) /
+ IP(src=src_ip, dst=dst_ip, tos=tos) /
UDP(sport=1234, dport=1234) /
Raw(payload))
info.data = p.copy()
pkts.append(p)
return pkts
- def create_stream_ip6(self, src_if, src_ip, dst_ip):
+ def create_stream_ip6(self, src_if, src_ip, dst_ip, dscp=0, ecn=0):
pkts = []
+ tc = (dscp << 2) | ecn
for i in range(0, 257):
info = self.create_packet_info(src_if, src_if)
payload = self.info_to_payload(info)
p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
- IPv6(src=src_ip, dst=dst_ip) /
+ IPv6(src=src_ip, dst=dst_ip, tc=tc) /
UDP(sport=1234, dport=1234) /
Raw(payload))
info.data = p.copy()
@@ -225,9 +227,11 @@ class TestGRE(VppTestCase):
return pkts
def verify_tunneled_4o4(self, src_if, capture, sent,
- tunnel_src, tunnel_dst):
+ tunnel_src, tunnel_dst,
+ dscp=0, ecn=0):
self.assertEqual(len(capture), len(sent))
+ tos = (dscp << 2) | ecn
for i in range(len(capture)):
try:
@@ -239,6 +243,7 @@ class TestGRE(VppTestCase):
self.assertEqual(rx_ip.src, tunnel_src)
self.assertEqual(rx_ip.dst, tunnel_dst)
+ self.assertEqual(rx_ip.tos, tos)
rx_gre = rx[GRE]
rx_ip = rx_gre[IP]
@@ -254,9 +259,11 @@ class TestGRE(VppTestCase):
raise
def verify_tunneled_6o6(self, src_if, capture, sent,
- tunnel_src, tunnel_dst):
+ tunnel_src, tunnel_dst,
+ dscp=0, ecn=0):
self.assertEqual(len(capture), len(sent))
+ tc = (dscp << 2) | ecn
for i in range(len(capture)):
try:
@@ -268,6 +275,7 @@ class TestGRE(VppTestCase):
self.assertEqual(rx_ip.src, tunnel_src)
self.assertEqual(rx_ip.dst, tunnel_dst)
+ self.assertEqual(rx_ip.tc, tc)
rx_gre = GRE(scapy.compat.raw(rx_ip[IPv6].payload))
rx_ip = rx_gre[IPv6]
@@ -719,6 +727,8 @@ class TestGRE(VppTestCase):
def test_gre_vrf(self):
""" GRE tunnel VRF Tests """
+ e = VppEnum.vl_api_tunnel_encap_decap_flags_t
+
#
# Create an L3 GRE tunnel whose destination is in the non-default
# table. The underlay is thus non-default - the overlay is still
@@ -726,9 +736,13 @@ class TestGRE(VppTestCase):
# - set it admin up
# - assign an IP Addres
#
- gre_if = VppGreInterface(self, self.pg1.local_ip4,
- "2.2.2.2",
- outer_table_id=1)
+ gre_if = VppGreInterface(
+ self, self.pg1.local_ip4,
+ "2.2.2.2",
+ outer_table_id=1,
+ flags=(e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP |
+ e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN))
+
gre_if.add_vpp_config()
gre_if.admin_up()
gre_if.config_ip4()
@@ -756,10 +770,12 @@ class TestGRE(VppTestCase):
# - packets are GRE encapped
#
self.vapi.cli("clear trace")
- tx = self.create_stream_ip4(self.pg0, "5.5.5.5", "9.9.9.9")
+ tx = self.create_stream_ip4(self.pg0, "5.5.5.5", "9.9.9.9",
+ dscp=5, ecn=3)
rx = self.send_and_expect(self.pg0, tx, self.pg1)
self.verify_tunneled_4o4(self.pg1, rx, tx,
- self.pg1.local_ip4, "2.2.2.2")
+ self.pg1.local_ip4, "2.2.2.2",
+ dscp=5, ecn=3)
#
# Send tunneled packets that match the created tunnel and
@@ -1100,6 +1116,8 @@ class TestGRE(VppTestCase):
self.pg0.config_ip6()
self.pg0.resolve_ndp()
+ e = VppEnum.vl_api_tunnel_encap_decap_flags_t
+
for itf in self.pg_interfaces[3:]:
#
# one underlay nh for each overlay/tunnel peer
@@ -1114,11 +1132,14 @@ class TestGRE(VppTestCase):
# - assign an IP Addres
# - Add a route via the tunnel
#
- gre_if = VppGreInterface(self,
- itf.local_ip6,
- "::",
- mode=(VppEnum.vl_api_tunnel_mode_t.
- TUNNEL_API_MODE_MP))
+ gre_if = VppGreInterface(
+ self,
+ itf.local_ip6,
+ "::",
+ mode=(VppEnum.vl_api_tunnel_mode_t.
+ TUNNEL_API_MODE_MP),
+ flags=e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP)
+
gre_if.add_vpp_config()
gre_if.admin_up()
gre_if.config_ip6()
@@ -1151,11 +1172,13 @@ class TestGRE(VppTestCase):
# Send a packet stream that is routed into the tunnel
# - packets are GRE encapped
#
- tx_e = self.create_stream_ip6(self.pg0, "5::5", route_addr)
+ tx_e = self.create_stream_ip6(self.pg0, "5::5", route_addr,
+ dscp=2, ecn=1)
rx = self.send_and_expect(self.pg0, tx_e, itf)
self.verify_tunneled_6o6(self.pg0, rx, tx_e,
itf.local_ip6,
- itf._remote_hosts[ii].ip6)
+ itf._remote_hosts[ii].ip6,
+ dscp=2)
tx_i = self.create_tunnel_stream_6o6(self.pg0,
itf._remote_hosts[ii].ip6,
itf.local_ip6,
@@ -1174,7 +1197,8 @@ class TestGRE(VppTestCase):
rx = self.send_and_expect(self.pg0, tx_e, itf)
self.verify_tunneled_6o6(self.pg0, rx, tx_e,
itf.local_ip6,
- itf._remote_hosts[ii].ip6)
+ itf._remote_hosts[ii].ip6,
+ dscp=2)
rx = self.send_and_expect(self.pg0, tx_i, self.pg0)
self.verify_decapped_6o6(self.pg0, rx, tx_i)
diff --git a/test/vpp_gre_interface.py b/test/vpp_gre_interface.py
index 9a9069ac9ab..770292e80b8 100644
--- a/test/vpp_gre_interface.py
+++ b/test/vpp_gre_interface.py
@@ -10,7 +10,7 @@ class VppGreInterface(VppInterface):
"""
def __init__(self, test, src_ip, dst_ip, outer_table_id=0,
- type=None, mode=None,
+ type=None, mode=None, flags=0,
session=0):
""" Create VPP GRE interface """
super(VppGreInterface, self).__init__(test)
@@ -18,6 +18,7 @@ class VppGreInterface(VppInterface):
self.t_dst = dst_ip
self.t_outer_table = outer_table_id
self.t_session = session
+ self.t_flags = flags
self.t_type = type
if not self.t_type:
self.t_type = (VppEnum.vl_api_gre_tunnel_type_t.
@@ -29,12 +30,16 @@ class VppGreInterface(VppInterface):
def add_vpp_config(self):
r = self.test.vapi.gre_tunnel_add_del(
- self.t_src,
- self.t_dst,
- outer_table_id=self.t_outer_table,
- type=self.t_type,
- mode=self.t_mode,
- session_id=self.t_session)
+ is_add=1,
+ tunnel={
+ 'src': self.t_src,
+ 'dst': self.t_dst,
+ 'outer_table_id': self.t_outer_table,
+ 'instance': 0xffffffff,
+ 'type': self.t_type,
+ 'mode': self.t_mode,
+ 'flags': self.t_flags,
+ 'session_id': self.t_session})
self.set_sw_if_index(r.sw_if_index)
self.generate_remote_hosts()
self.test.registry.register(self, self.test.logger)
@@ -42,13 +47,17 @@ class VppGreInterface(VppInterface):
def remove_vpp_config(self):
self.unconfig()
- self.test.vapi.gre_tunnel_add_del(self.t_src,
- self.t_dst,
- outer_table_id=self.t_outer_table,
- type=self.t_type,
- mode=self.t_mode,
- session_id=self.t_session,
- is_add=0)
+ self.test.vapi.gre_tunnel_add_del(
+ is_add=0,
+ tunnel={
+ 'src': self.t_src,
+ 'dst': self.t_dst,
+ 'outer_table_id': self.t_outer_table,
+ 'instance': 0xffffffff,
+ 'type': self.t_type,
+ 'mode': self.t_mode,
+ 'flags': self.t_flags,
+ 'session_id': self.t_session})
def object_id(self):
return "gre-%d" % self.sw_if_index
diff --git a/test/vpp_papi_provider.py b/test/vpp_papi_provider.py
index 964b68c1761..789e3c083d5 100644
--- a/test/vpp_papi_provider.py
+++ b/test/vpp_papi_provider.py
@@ -45,7 +45,6 @@ defaultmapping = {
'gbp_subnet_add_del': {'sw_if_index': 4294967295, 'epg_id': 65535, },
'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, },
'input_acl_set_interface': {'ip4_table_index': 4294967295,
'ip6_table_index': 4294967295,
'l2_table_index': 4294967295, },
@@ -505,42 +504,6 @@ class VppPapiProvider(object):
}
)
- def gre_tunnel_add_del(self,
- src,
- dst,
- outer_table_id=0,
- type=0,
- mode=0,
- instance=0xFFFFFFFF,
- session_id=0,
- is_add=1):
- """ Add a GRE tunnel
-
- :param src_address:
- :param dst_address:
- :param outer_fib_id: (Default value = 0)
- :param tunnel_type: (Default value = 0)
- :param instance: (Default value = 0xFFFFFFFF)
- :param session_id: (Default value = 0)
- :param is_add: (Default value = 1)
- :param is_ipv6: (Default value = 0)
- """
-
- return self.api(
- self.papi.gre_tunnel_add_del,
- {'is_add': is_add,
- 'tunnel':
- {
- 'type': type,
- 'mode': mode,
- 'instance': instance,
- 'src': src,
- 'dst': dst,
- 'outer_table_id': outer_table_id,
- 'session_id': session_id}
- }
- )
-
def udp_encap_add(self,
src_ip,
dst_ip,