aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_l2_flood.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_l2_flood.py')
-rw-r--r--test/test_l2_flood.py196
1 files changed, 117 insertions, 79 deletions
diff --git a/test/test_l2_flood.py b/test/test_l2_flood.py
index 7f3c57a399d..00bd7e6f311 100644
--- a/test/test_l2_flood.py
+++ b/test/test_l2_flood.py
@@ -1,9 +1,9 @@
#!/usr/bin/env python3
import unittest
-import socket
-from framework import VppTestCase, VppTestRunner
+from framework import VppTestCase
+from asfframework import VppTestRunner
from vpp_ip_route import VppIpRoute, VppRoutePath
from vpp_l2 import L2_PORT_TYPE, BRIDGE_FLAGS
@@ -15,7 +15,7 @@ NUM_PKTS = 67
class TestL2Flood(VppTestCase):
- """ L2-flood """
+ """L2-flood"""
@classmethod
def setUpClass(cls):
@@ -52,42 +52,48 @@ class TestL2Flood(VppTestCase):
super(TestL2Flood, self).tearDown()
def test_flood(self):
- """ L2 Flood Tests """
+ """L2 Flood Tests"""
#
# Create a single bridge Domain
#
- self.vapi.bridge_domain_add_del(bd_id=1)
+ self.vapi.bridge_domain_add_del_v2(
+ bd_id=1, is_add=1, flood=1, uu_flood=1, forward=1, learn=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(rx_sw_if_index=i.sw_if_index,
- bd_id=1, shg=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(rx_sw_if_index=i.sw_if_index,
- bd_id=1, shg=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(rx_sw_if_index=i.sw_if_index,
- bd_id=1, shg=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)
+ 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",
- src="00:00:de:ad:be:ef") /
- IP(src="10.10.10.10", dst="1.1.1.1") /
- UDP(sport=1234, dport=1234) /
- Raw(b'\xa5' * 100))
+ p = (
+ 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(b"\xa5" * 100)
+ )
#
# input on pg0 expect copies on pg1->11
# this is in SHG=0 so its flooded to all, expect the pg0 since that's
# the ingress link
#
- self.pg0.add_stream(p*NUM_PKTS)
+ self.pg0.add_stream(p * NUM_PKTS)
self.pg_enable_capture(self.pg_interfaces)
self.pg_start()
@@ -98,7 +104,7 @@ class TestL2Flood(VppTestCase):
# input on pg4 (SHG=1) expect copies on pg0->3 (SHG=0)
# and pg8->11 (SHG=2)
#
- self.pg4.add_stream(p*NUM_PKTS)
+ self.pg4.add_stream(p * NUM_PKTS)
self.pg_enable_capture(self.pg_interfaces)
self.pg_start()
@@ -112,9 +118,12 @@ class TestL2Flood(VppTestCase):
#
# An IP route so the packet that hits the BVI is sent out of pg12
#
- ip_route = VppIpRoute(self, "1.1.1.1", 32,
- [VppRoutePath(self.pg12.remote_ip4,
- self.pg12.sw_if_index)])
+ ip_route = VppIpRoute(
+ self,
+ "1.1.1.1",
+ 32,
+ [VppRoutePath(self.pg12.remote_ip4, self.pg12.sw_if_index)],
+ )
ip_route.add_vpp_config()
self.logger.info(self.vapi.cli("sh bridge 1 detail"))
@@ -124,7 +133,7 @@ class TestL2Flood(VppTestCase):
# this is in SHG=0 so its flooded to all, expect the pg0 since that's
# the ingress link
#
- self.pg0.add_stream(p*NUM_PKTS)
+ self.pg0.add_stream(p * NUM_PKTS)
self.pg_enable_capture(self.pg_interfaces)
self.pg_start()
@@ -135,7 +144,7 @@ class TestL2Flood(VppTestCase):
# input on pg4 (SHG=1) expect copies on pg0->3 (SHG=0)
# and pg8->12 (SHG=2)
#
- self.pg4.add_stream(p*NUM_PKTS)
+ self.pg4.add_stream(p * NUM_PKTS)
self.pg_enable_capture(self.pg_interfaces)
self.pg_start()
@@ -150,91 +159,105 @@ class TestL2Flood(VppTestCase):
# cleanup
#
for i in self.pg_interfaces[:12]:
- self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index,
- bd_id=1, enable=0)
+ 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.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(bd_id=1, is_add=0)
+ self.vapi.bridge_domain_add_del_v2(bd_id=1, is_add=0)
def test_flood_one(self):
- """ L2 no-Flood Test """
+ """L2 no-Flood Test"""
#
# Create a single bridge Domain
#
- self.vapi.bridge_domain_add_del(bd_id=1)
+ self.vapi.bridge_domain_add_del_v2(
+ bd_id=1, is_add=1, flood=1, uu_flood=1, forward=1, learn=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(rx_sw_if_index=i.sw_if_index,
- bd_id=1, shg=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") /
- IP(src="10.10.10.10", dst="1.1.1.1") /
- UDP(sport=1234, dport=1234) /
- Raw(b'\xa5' * 100))
+ p = (
+ 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(b"\xa5" * 100)
+ )
#
# input on pg0 expect copies on pg1
#
- self.send_and_expect(self.pg0, p*NUM_PKTS, self.pg1)
+ self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg1)
#
# cleanup
#
for i in self.pg_interfaces[:2]:
- 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)
+ 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_v2(bd_id=1, is_add=0)
def test_uu_fwd(self):
- """ UU Flood """
+ """UU Flood"""
#
# Create a single bridge Domain
#
- self.vapi.bridge_domain_add_del(bd_id=1, uu_flood=1)
+ self.vapi.bridge_domain_add_del_v2(
+ bd_id=1, is_add=1, uu_flood=1, flood=1, forward=1, learn=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(rx_sw_if_index=i.sw_if_index,
- bd_id=1, shg=0)
+ self.vapi.sw_interface_set_l2_bridge(
+ rx_sw_if_index=i.sw_if_index, bd_id=1, shg=0
+ )
#
# 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(b'\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(b'\xa5' * 100))
+ 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(b"\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(b"\xa5" * 100)
+ )
#
# input on pg0, expected copies on pg1->4
#
- self.pg0.add_stream(p_uu*NUM_PKTS)
+ self.pg0.add_stream(p_uu * NUM_PKTS)
self.pg_enable_capture(self.pg_interfaces)
self.pg_start()
for i in self.pg_interfaces[1:4]:
rx0 = i.get_capture(NUM_PKTS, timeout=1)
- self.pg0.add_stream(p_bm*NUM_PKTS)
+ self.pg0.add_stream(p_bm * NUM_PKTS)
self.pg_enable_capture(self.pg_interfaces)
self.pg_start()
@@ -245,13 +268,16 @@ class TestL2Flood(VppTestCase):
# use pg8 as the uu-fwd interface
#
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)
+ 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
#
- self.pg0.add_stream(p_uu*NUM_PKTS)
+ self.pg0.add_stream(p_uu * NUM_PKTS)
self.pg_enable_capture(self.pg_interfaces)
self.pg_start()
@@ -260,7 +286,7 @@ 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*NUM_PKTS)
+ self.pg0.add_stream(p_bm * NUM_PKTS)
self.pg_enable_capture(self.pg_interfaces)
self.pg_start()
@@ -271,10 +297,14 @@ class TestL2Flood(VppTestCase):
# remove the uu-fwd interface and expect UU to be flooded again
#
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*NUM_PKTS)
+ 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 * NUM_PKTS)
self.pg_enable_capture(self.pg_interfaces)
self.pg_start()
@@ -292,11 +322,14 @@ class TestL2Flood(VppTestCase):
# re-add the uu-fwd interface
#
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)
+ 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*NUM_PKTS)
+ self.pg0.add_stream(p_uu * NUM_PKTS)
self.pg_enable_capture(self.pg_interfaces)
self.pg_start()
@@ -309,19 +342,24 @@ class TestL2Flood(VppTestCase):
# remove the uu-fwd interface
#
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)
+ 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(rx_sw_if_index=i.sw_if_index,
- bd_id=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(bd_id=1, is_add=0)
+ self.vapi.bridge_domain_add_del_v2(bd_id=1, is_add=0)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main(testRunner=VppTestRunner)