X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_vxlan.py;h=6bdcb258bcd37c5ee37ed43bccb27260f2563aee;hb=d927834a1f4dfd18eb4d0788e69f106fc3780ef8;hp=9dccaf50fb1702ad4ae5e03bbb85732608ede94a;hpb=d81da8c0b5094de6635ad9575a2a2bb6f44070dc;p=vpp.git diff --git a/test/test_vxlan.py b/test/test_vxlan.py index 9dccaf50fb1..6bdcb258bcd 100644 --- a/test/test_vxlan.py +++ b/test/test_vxlan.py @@ -51,17 +51,23 @@ class TestVxlan(BridgeDomain, VppTestCase): # Method for checking VXLAN encapsulation. # - def check_encapsulation(self, pkt, vni, local_only=False): + def check_encapsulation(self, pkt, vni, local_only=False, mcast_pkt=False): # TODO: add error messages # Verify source MAC is VPP_MAC and destination MAC is MY_MAC resolved # by VPP using ARP. self.assertEqual(pkt[Ether].src, self.pg0.local_mac) if not local_only: - self.assertEqual(pkt[Ether].dst, self.pg0.remote_mac) + if not mcast_pkt: + self.assertEqual(pkt[Ether].dst, self.pg0.remote_mac) + else: + self.assertEqual(pkt[Ether].dst, type(self).mcast_mac) # Verify VXLAN tunnel source IP is VPP_IP and destination IP is MY_IP. self.assertEqual(pkt[IP].src, self.pg0.local_ip4) if not local_only: - self.assertEqual(pkt[IP].dst, self.pg0.remote_ip4) + if not mcast_pkt: + self.assertEqual(pkt[IP].dst, self.pg0.remote_ip4) + else: + self.assertEqual(pkt[IP].dst, type(self).mcast_ip4) # Verify UDP destination port is VXLAN 4789, source UDP port could be # arbitrary. self.assertEqual(pkt[UDP].dport, type(self).dport) @@ -86,9 +92,40 @@ class TestVxlan(BridgeDomain, VppTestCase): cls.vapi.sw_interface_set_l2_bridge(r.sw_if_index, bd_id=vni) @classmethod - def add_del_mcast_load(cls, is_add): + def add_del_shared_mcast_dst_load(cls, is_add): + """ + add or del tunnels sharing the same mcast dst + to test vxlan ref_count mechanism + """ + n_shared_dst_tunnels = 2000 + vni_start = 10000 + vni_end = vni_start + n_shared_dst_tunnels + for vni in range(vni_start, vni_end): + r = cls.vapi.vxlan_add_del_tunnel( + src_addr=cls.pg0.local_ip4n, + dst_addr=cls.mcast_ip4n, + mcast_sw_if_index=1, + vni=vni, + is_add=is_add) + if r.sw_if_index == 0xffffffff: + raise "bad sw_if_index" + + @classmethod + def add_shared_mcast_dst_load(cls): + cls.add_del_shared_mcast_dst_load(is_add=1) + + @classmethod + def del_shared_mcast_dst_load(cls): + cls.add_del_shared_mcast_dst_load(is_add=0) + + @classmethod + def add_del_mcast_tunnels_load(cls, is_add): + """ + add or del tunnels to test vxlan stability + """ + n_distinct_dst_tunnels = 200 ip_range_start = 10 - ip_range_end = 210 + 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): vni = bytearray(dest_ip4n)[3] @@ -100,12 +137,12 @@ class TestVxlan(BridgeDomain, VppTestCase): is_add=is_add) @classmethod - def add_mcast_load(cls): - cls.add_del_mcast_load(is_add=1) + def add_mcast_tunnels_load(cls): + cls.add_del_mcast_tunnels_load(is_add=1) @classmethod - def del_mcast_load(cls): - cls.add_del_mcast_load(is_add=0) + def del_mcast_tunnels_load(cls): + cls.add_del_mcast_tunnels_load(is_add=0) # Class method to start the VXLAN test case. # Overrides setUpClass method in VppTestCase class. @@ -166,8 +203,10 @@ class TestVxlan(BridgeDomain, VppTestCase): bd_id=cls.mcast_flood_bd) # Add and delete mcast tunnels to check stability - cls.add_mcast_load() - cls.del_mcast_load() + cls.add_shared_mcast_dst_load() + cls.add_mcast_tunnels_load() + cls.del_shared_mcast_dst_load() + cls.del_mcast_tunnels_load() # Setup vni 3 to test unicast flooding cls.ucast_flood_bd = 3