X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=test%2Ftest_l2_flood.py;h=35d325e132907d1ef98b869b069734c836185cba;hb=8feeaff56;hp=8b8a3f0f960cbba7d516785df2ff62ca97e109ec;hpb=b9fa29d513bfad0d9f18e8ed8c2da3feaa6d3bf0;p=vpp.git diff --git a/test/test_l2_flood.py b/test/test_l2_flood.py index 8b8a3f0f960..35d325e1329 100644 --- a/test/test_l2_flood.py +++ b/test/test_l2_flood.py @@ -5,7 +5,7 @@ import socket from framework import VppTestCase, VppTestRunner from vpp_ip_route import VppIpRoute, VppRoutePath -from vpp_papi_provider import L2_PORT_TYPE, BRIDGE_FLAGS +from vpp_l2 import L2_PORT_TYPE, BRIDGE_FLAGS from scapy.packet import Raw from scapy.layers.l2 import Ether @@ -20,24 +20,24 @@ class TestL2Flood(VppTestCase): # 12 l2 interface and one l3 self.create_pg_interfaces(range(13)) - self.create_loopback_interfaces(1) + self.create_bvi_interfaces(1) for i in self.pg_interfaces: i.admin_up() - for i in self.lo_interfaces: + for i in self.bvi_interfaces: i.admin_up() self.pg12.config_ip4() self.pg12.resolve_arp() - self.loop0.config_ip4() + self.bvi0.config_ip4() def tearDown(self): self.pg12.unconfig_ip4() - self.loop0.unconfig_ip4() + self.bvi0.unconfig_ip4() for i in self.pg_interfaces: i.admin_down() - for i in self.lo_interfaces: + for i in self.bvi_interfaces: i.admin_down() super(TestL2Flood, self).tearDown() @@ -47,19 +47,23 @@ class TestL2Flood(VppTestCase): # # Create a single bridge Domain # - self.vapi.bridge_domain_add_del(1) + self.vapi.bridge_domain_add_del(bd_id=1) # # add each interface to the BD. 3 interfaces per split horizon group # for i in self.pg_interfaces[0:4]: - self.vapi.sw_interface_set_l2_bridge(i.sw_if_index, 1, 0) + self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index, + bd_id=1, shg=0) for i in self.pg_interfaces[4:8]: - self.vapi.sw_interface_set_l2_bridge(i.sw_if_index, 1, 1) + self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index, + bd_id=1, shg=1) for i in self.pg_interfaces[8:12]: - self.vapi.sw_interface_set_l2_bridge(i.sw_if_index, 1, 2) - for i in self.lo_interfaces: - self.vapi.sw_interface_set_l2_bridge(i.sw_if_index, 1, 2, + self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index, + bd_id=1, shg=2) + for i in self.bvi_interfaces: + self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index, + bd_id=1, shg=2, port_type=L2_PORT_TYPE.BVI) p = (Ether(dst="ff:ff:ff:ff:ff:ff", @@ -136,13 +140,15 @@ class TestL2Flood(VppTestCase): # cleanup # for i in self.pg_interfaces[:12]: - self.vapi.sw_interface_set_l2_bridge(i.sw_if_index, 1, enable=0) - for i in self.lo_interfaces: - self.vapi.sw_interface_set_l2_bridge(i.sw_if_index, 1, 2, + self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index, + bd_id=1, enable=0) + for i in self.bvi_interfaces: + self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index, + bd_id=1, shg=2, port_type=L2_PORT_TYPE.BVI, enable=0) - self.vapi.bridge_domain_add_del(1, is_add=0) + self.vapi.bridge_domain_add_del(bd_id=1, is_add=0) def test_flood_one(self): """ L2 no-Flood Test """ @@ -150,14 +156,15 @@ class TestL2Flood(VppTestCase): # # Create a single bridge Domain # - self.vapi.bridge_domain_add_del(1) + self.vapi.bridge_domain_add_del(bd_id=1) # # add 2 interfaces to the BD. this means a flood goes to only # one member # for i in self.pg_interfaces[:2]: - self.vapi.sw_interface_set_l2_bridge(i.sw_if_index, 1, 0) + self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index, + bd_id=1, shg=0) p = (Ether(dst="ff:ff:ff:ff:ff:ff", src="00:00:de:ad:be:ef") / @@ -174,8 +181,9 @@ class TestL2Flood(VppTestCase): # cleanup # for i in self.pg_interfaces[:2]: - self.vapi.sw_interface_set_l2_bridge(i.sw_if_index, 1, enable=0) - self.vapi.bridge_domain_add_del(1, is_add=0) + self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index, + bd_id=1, enable=0) + self.vapi.bridge_domain_add_del(bd_id=1, is_add=0) def test_uu_fwd(self): """ UU Flood """ @@ -183,22 +191,28 @@ class TestL2Flood(VppTestCase): # # Create a single bridge Domain # - self.vapi.bridge_domain_add_del(1, uu_flood=1) + self.vapi.bridge_domain_add_del(bd_id=1, uu_flood=1) # # add each interface to the BD. 3 interfaces per split horizon group # for i in self.pg_interfaces[0:4]: - self.vapi.sw_interface_set_l2_bridge(i.sw_if_index, 1, 0) + self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index, + bd_id=1, shg=0) # - # an unknown unicast packet + # an unknown unicast and broadcast packets # p_uu = (Ether(dst="00:00:00:c1:5c:00", src="00:00:de:ad:be:ef") / IP(src="10.10.10.10", dst="1.1.1.1") / UDP(sport=1234, dport=1234) / Raw('\xa5' * 100)) + p_bm = (Ether(dst="ff:ff:ff:ff:ff:ff", + src="00:00:de:ad:be:ef") / + IP(src="10.10.10.10", dst="1.1.1.1") / + UDP(sport=1234, dport=1234) / + Raw('\xa5' * 100)) # # input on pg0, expected copies on pg1->4 @@ -207,14 +221,22 @@ class TestL2Flood(VppTestCase): self.pg_enable_capture(self.pg_interfaces) self.pg_start() + for i in self.pg_interfaces[1:4]: + rx0 = i.get_capture(65, timeout=1) + + self.pg0.add_stream(p_bm*65) + self.pg_enable_capture(self.pg_interfaces) + self.pg_start() + for i in self.pg_interfaces[1:4]: rx0 = i.get_capture(65, timeout=1) # # use pg8 as the uu-fwd interface # - self.vapi.sw_interface_set_l2_bridge(self.pg8.sw_if_index, 1, 0, - port_type=L2_PORT_TYPE.UU_FWD) + self.vapi.sw_interface_set_l2_bridge( + rx_sw_if_index=self.pg8.sw_if_index, bd_id=1, shg=0, + port_type=L2_PORT_TYPE.UU_FWD) # # expect the UU packet on the uu-fwd interface and not be flooded @@ -228,12 +250,19 @@ class TestL2Flood(VppTestCase): for i in self.pg_interfaces[0:4]: i.assert_nothing_captured(remark="UU not flooded") + self.pg0.add_stream(p_bm*65) + self.pg_enable_capture(self.pg_interfaces) + self.pg_start() + + for i in self.pg_interfaces[1:4]: + rx0 = i.get_capture(65, timeout=1) + # # remove the uu-fwd interface and expect UU to be flooded again # - self.vapi.sw_interface_set_l2_bridge(self.pg8.sw_if_index, 1, 0, - port_type=L2_PORT_TYPE.UU_FWD, - enable=0) + self.vapi.sw_interface_set_l2_bridge( + rx_sw_if_index=self.pg8.sw_if_index, bd_id=1, shg=0, + port_type=L2_PORT_TYPE.UU_FWD, enable=0) self.pg0.add_stream(p_uu*65) self.pg_enable_capture(self.pg_interfaces) @@ -245,15 +274,16 @@ class TestL2Flood(VppTestCase): # # change the BD config to not support UU-flood # - self.vapi.bridge_flags(1, 0, BRIDGE_FLAGS.UU_FLOOD) + self.vapi.bridge_flags(bd_id=1, is_set=0, flags=BRIDGE_FLAGS.UU_FLOOD) self.send_and_assert_no_replies(self.pg0, p_uu) # # re-add the uu-fwd interface # - self.vapi.sw_interface_set_l2_bridge(self.pg8.sw_if_index, 1, 0, - port_type=L2_PORT_TYPE.UU_FWD) + self.vapi.sw_interface_set_l2_bridge( + rx_sw_if_index=self.pg8.sw_if_index, bd_id=1, shg=0, + port_type=L2_PORT_TYPE.UU_FWD) self.logger.info(self.vapi.cli("sh bridge 1 detail")) self.pg0.add_stream(p_uu*65) @@ -268,18 +298,19 @@ class TestL2Flood(VppTestCase): # # remove the uu-fwd interface # - self.vapi.sw_interface_set_l2_bridge(self.pg8.sw_if_index, 1, 0, - port_type=L2_PORT_TYPE.UU_FWD, - enable=0) + self.vapi.sw_interface_set_l2_bridge( + rx_sw_if_index=self.pg8.sw_if_index, bd_id=1, shg=0, + port_type=L2_PORT_TYPE.UU_FWD, enable=0) self.send_and_assert_no_replies(self.pg0, p_uu) # # cleanup # for i in self.pg_interfaces[:4]: - self.vapi.sw_interface_set_l2_bridge(i.sw_if_index, 1, enable=0) + self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index, + bd_id=1, enable=0) - self.vapi.bridge_domain_add_del(1, is_add=0) + self.vapi.bridge_domain_add_del(bd_id=1, is_add=0) if __name__ == '__main__':