[V1,2/2] tests/mac_filter: add the vlan filter check after setting multicast filter

Message ID 20230112091519.29607-2-weiyuanx.li@intel.com (mailing list archive)
State Accepted
Headers
Series [V1,1/2] test_plans/mac_filter: add the vlan filter check after setting multicast filter |

Checks

Context Check Description
ci/Intel-dts-format-test success Testing OK
ci/Intel-dts-pylama-test success Testing OK
ci/Intel-dts-doc-test success Testing OK
ci/Intel-dts-suite-test success Testing OK

Commit Message

Weiyuan Li Jan. 12, 2023, 9:15 a.m. UTC
  Add the vlan filter check after setting multicast filter.

1. Enable vlan filter and add vlan id. Send a packet with multicast dst
mac and vlan tag can receive packet.
2. Disable vlan filter and remove vlan id. Send a packet with multicast
dst mac can receive packet.

Signed-off-by: Weiyuan Li <weiyuanx.li@intel.com>
---
 tests/TestSuite_mac_filter.py | 45 +++++++++++++++++++++++++++++++----
 1 file changed, 41 insertions(+), 4 deletions(-)
  

Comments

Tu, Lijuan Jan. 13, 2023, 2:46 a.m. UTC | #1
On Thu, 12 Jan 2023 17:15:19 +0800, Weiyuan Li <weiyuanx.li@intel.com> wrote:
> Add the vlan filter check after setting multicast filter.
> 
> 1. Enable vlan filter and add vlan id. Send a packet with multicast dst
> mac and vlan tag can receive packet.
> 2. Disable vlan filter and remove vlan id. Send a packet with multicast
> dst mac can receive packet.
> 
> Signed-off-by: Weiyuan Li <weiyuanx.li@intel.com>

Acked-by: Lijuan Tu <lijuan.tu@intel.com>
Series applied, thanks
  

Patch

diff --git a/tests/TestSuite_mac_filter.py b/tests/TestSuite_mac_filter.py
index a0ba65c7..afd99080 100644
--- a/tests/TestSuite_mac_filter.py
+++ b/tests/TestSuite_mac_filter.py
@@ -8,6 +8,7 @@  Test the support of Allowlist Features by Poll Mode Drivers
 """
 
 import operator
+import random
 import time
 
 import framework.utils as utils
@@ -15,6 +16,8 @@  from framework.packet import Packet
 from framework.pmd_output import PmdOutput
 from framework.test_case import TestCase
 
+MAX_VLAN = 4095
+
 
 class TestMacFilter(TestCase):
     def set_up_all(self):
@@ -56,7 +59,9 @@  class TestMacFilter(TestCase):
             out, "Maximum number of MAC addresses: ([0-9]+)"
         )
 
-    def allowlist_send_packet(self, portid, destMac="00:11:22:33:44:55", count=-1):
+    def allowlist_send_packet(
+        self, portid, destMac="00:11:22:33:44:55", count=-1, pkt_type="UDP", vlan=""
+    ):
         """
         Send 1 packet to portid.
         """
@@ -65,8 +70,13 @@  class TestMacFilter(TestCase):
             count = self.frames_to_send
 
         itf = self.tester.get_interface(self.tester.get_local_port(portid))
-        pkt = Packet(pkt_type="UDP")
-        pkt.config_layer("ether", {"src": "52:00:00:00:00:00", "dst": destMac})
+        if pkt_type == "VLAN_UDP" and vlan is not None:
+            pkt = Packet(pkt_type="VLAN_UDP")
+            pkt.config_layer("vlan", {"vlan": vlan})
+            pkt.config_layer("ether", {"dst": destMac})
+        else:
+            pkt = Packet(pkt_type="UDP")
+            pkt.config_layer("ether", {"src": "52:00:00:00:00:00", "dst": destMac})
         pkt.send_pkt(self.tester, tx_port=itf, count=count)
 
     def test_add_remove_mac_address(self):
@@ -188,6 +198,7 @@  class TestMacFilter(TestCase):
         Remove mac address and check packet can't received
         """
         # initialise first port without promiscuous mode
+        random_vlan = random.randint(1, MAX_VLAN)
         mcast_addr = "01:00:5E:00:00:00"
         portid = self.dutPorts[0]
         self.dut.send_expect(f"set promisc {portid:d} off", "testpmd> ")
@@ -201,7 +212,33 @@  class TestMacFilter(TestCase):
             "received" in out,
             "Packet has not been received when it should have on a broadcast address",
         )
-
+        # enable vlan filter
+        self.dut.send_expect("vlan set filter on 0", "testpmd> ")
+        self.dut.send_expect("rx_vlan add %d 0" % random_vlan, "testpmd> ")
+        # passed vlan id
+        self.allowlist_send_packet(
+            portid, destMac=mcast_addr, pkt_type="VLAN_UDP", vlan=random_vlan
+        )
+        out = self.dut.get_session_output()
+        self.verify("received" in out, "Not receive vlan packet with multicast mac!!!")
+        # wrong vlan id
+        self.allowlist_send_packet(
+            portid, destMac=mcast_addr, pkt_type="VLAN_UDP", vlan=random_vlan - 1
+        )
+        out = self.dut.get_session_output()
+        self.verify(
+            "received" not in out,
+            "Wrong vlan packet can't receive with multicast mac!!!",
+        )
+        # disbale vlan filter and remove vlan id
+        self.dut.send_expect("rx_vlan rm %d 0" % random_vlan, "testpmd> ")
+        self.dut.send_expect("vlan set filter off 0", "testpmd> ")
+        self.allowlist_send_packet(portid, mcast_addr, count=1)
+        out = self.dut.get_session_output()
+        self.verify(
+            "received" in out,
+            "Packet has not been received when it should have on a broadcast address",
+        )
         self.dut.send_expect(f"mcast_addr remove {portid:d} {mcast_addr}", "testpmd>")
         self.allowlist_send_packet(portid, mcast_addr, count=1)
         time.sleep(1)