X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_vxlan6.py;h=d9e2d8159d14e050f53f81796ab7e5d4028ccb1a;hb=d7fc12f07;hp=53658433ef7cf1e2195b8091452e8bfcdcc70054;hpb=7c0eb56f40b3ccf8acd8f04e208aa50231aebeba;p=vpp.git diff --git a/test/test_vxlan6.py b/test/test_vxlan6.py index 53658433ef7..d9e2d8159d1 100644 --- a/test/test_vxlan6.py +++ b/test/test_vxlan6.py @@ -6,9 +6,11 @@ from framework import VppTestCase, VppTestRunner from template_bd import BridgeDomain from scapy.layers.l2 import Ether -from scapy.layers.inet6 import IPv6, UDP +from scapy.packet import Raw +from scapy.layers.inet6 import IP, IPv6, UDP from scapy.layers.vxlan import VXLAN -from scapy.utils import atol + +import util from vpp_ip_route import VppIpRoute, VppRoutePath from vpp_vxlan_tunnel import VppVxlanTunnel from vpp_ip import INVALID_INDEX @@ -79,7 +81,8 @@ class TestVxlan6(BridgeDomain, VppTestCase): # Verify UDP destination port is VXLAN 4789, source UDP port could be # arbitrary. self.assertEqual(pkt[UDP].dport, type(self).dport) - # TODO: checksum check + # Verify UDP checksum + self.assert_udp_checksum_valid(pkt, ignore_zero_checksum=False) # Verify VNI self.assertEqual(pkt[VXLAN].vni, vni) @@ -125,16 +128,15 @@ class TestVxlan6(BridgeDomain, VppTestCase): for pg in cls.pg_interfaces: pg.admin_up() - # Configure IPv4 addresses on VPP pg0. + # Configure IPv6 addresses on VPP pg0. cls.pg0.config_ip6() # Resolve MAC address for VPP's IP address on pg0. cls.pg0.resolve_ndp() + # Our Multicast address cls.mcast_ip6 = 'ff0e::1' - cls.mcast_ip6n = socket.inet_pton(socket.AF_INET6, cls.mcast_ip6) - cls.mcast_mac = "33:33:00:00:00:%02x" % (1) - + cls.mcast_mac = util.mcast_ip_to_mac(cls.mcast_ip6) except Exception: super(TestVxlan6, cls).tearDownClass() raise @@ -147,9 +149,11 @@ class TestVxlan6(BridgeDomain, VppTestCase): super(TestVxlan6, self).setUp() # Create VXLAN VTEP on VPP pg0, and put vxlan_tunnel0 and pg1 # into BD. + self.single_tunnel_vni = 0x12345 self.single_tunnel_bd = 1 r = VppVxlanTunnel(self, src=self.pg0.local_ip6, - dst=self.pg0.remote_ip6, vni=self.single_tunnel_bd) + dst=self.pg0.remote_ip6, + vni=self.single_tunnel_vni) r.add_vpp_config() self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index, bd_id=self.single_tunnel_bd) @@ -188,6 +192,35 @@ class TestVxlan6(BridgeDomain, VppTestCase): self.logger.info(self.vapi.cli("show bridge-domain 3 detail")) self.logger.info(self.vapi.cli("show vxlan tunnel")) + def test_encap_fragmented_packet(self): + """ Encapsulation test send fragments from pg1 + Verify receipt of encapsulated frames on pg0 + """ + + frame = (Ether(src='00:00:00:00:00:02', dst='00:00:00:00:00:01') / + IP(src='4.3.2.1', dst='1.2.3.4') / + UDP(sport=20000, dport=10000) / + Raw(b'\xa5' * 1000)) + + frags = util.fragment_rfc791(frame, 400) + + self.pg1.add_stream(frags) + + self.pg0.enable_capture() + + self.pg_start() + + out = self.pg0.get_capture(3) + + payload = [] + for pkt in out: + payload.append(self.decapsulate(pkt)) + self.check_encapsulation(pkt, self.single_tunnel_vni) + + reassembled = util.reassemble4(payload) + + self.assertEqual(Ether(raw(frame))[IP], reassembled[IP]) + if __name__ == '__main__': unittest.main(testRunner=VppTestRunner)