test suite reviews and discussions
 help / color / mirror / Atom feed
From: "Peng, Yuan" <yuan.peng@intel.com>
To: "Xie, WeiX" <weix.xie@intel.com>, "dts@dpdk.org" <dts@dpdk.org>
Cc: "Xie, WeiX" <weix.xie@intel.com>
Subject: Re: [dts] [PATCH V1]	tests/TestSuite_cvl_vf_support_multicast_address:add cvl vf	support multicast suite
Date: Tue, 8 Dec 2020 07:51:42 +0000	[thread overview]
Message-ID: <CO1PR11MB505825F2FA0FD915F2BEE1D8FECD0@CO1PR11MB5058.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20201207052003.613-1-weix.xie@intel.com>

Acked by Peng, Yuan <yuan.peng@intel.com>

-----Original Message-----
From: dts <dts-bounces@dpdk.org> On Behalf Of Xie wei
Sent: Monday, December 7, 2020 1:20 PM
To: dts@dpdk.org
Cc: Xie, WeiX <weix.xie@intel.com>
Subject: [dts] [PATCH V1] tests/TestSuite_cvl_vf_support_multicast_address:add cvl vf support multicast suite

*add new script about cvl vf support multicast.

Signed-off-by: Xie wei <weix.xie@intel.com>
---
 ...tSuite_cvl_vf_support_multicast_address.py | 483 ++++++++++++++++++
 1 file changed, 483 insertions(+)
 create mode 100644 tests/TestSuite_cvl_vf_support_multicast_address.py

diff --git a/tests/TestSuite_cvl_vf_support_multicast_address.py b/tests/TestSuite_cvl_vf_support_multicast_address.py
new file mode 100644
index 00000000..1b148c6c
--- /dev/null
+++ b/tests/TestSuite_cvl_vf_support_multicast_address.py
@@ -0,0 +1,483 @@
+# BSD LICENSE
+#
+# Copyright(c) 2020 Intel Corporation. All rights reserved.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without # 
+modification, are permitted provided that the following conditions # 
+are met:
+#
+#   * Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in
+#     the documentation and/or other materials provided with the
+#     distribution.
+#   * Neither the name of Intel Corporation nor the names of its
+#     contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # 
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # 
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # 
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # 
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # 
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # 
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # 
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # 
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # 
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import re
+from test_case import TestCase
+from pmd_output import PmdOutput
+from packet import Packet
+
+vf0_mac = "00:11:22:33:44:55"
+vf1_mac = "00:11:22:33:44:66"
+mul_mac_0 = "33:33:00:00:00:01"
+mul_mac_1 = "33:33:00:40:10:01"
+vf0_wrong_mac = "00:11:22:33:44:56"
+
+class TestCvlVfSupportMulticastAdress(TestCase):
+
+    def set_up_all(self):
+        """
+        Prerequisite steps for each test suite.
+        """
+        self.dut_ports = self.dut.get_ports(self.nic)
+        self.verify(len(self.dut_ports) >= 2, "Insufficient ports for testing")
+        self.used_dut_port = self.dut_ports[0]
+        self.pf_interface = self.dut.ports_info[self.dut_ports[0]]['intf']
+        self.vf_flag = False
+        self.create_iavf()
+        self.pmd_output = PmdOutput(self.dut)
+
+        localPort = self.tester.get_local_port(self.dut_ports[0])
+        self.tester_itf = self.tester.get_interface(localPort)
+
+    def set_up(self):
+        """
+        Run before each test case.
+        """
+        if self.running_case == "test_maxnum_multicast_address_with_vfs_trust_off":
+            # set two VFs trust off
+            self.dut.send_expect("ip link set dev %s vf 0 trust off" % self.pf_interface, "# ")
+            self.dut.send_expect("ip link set dev %s vf 1 trust off" % self.pf_interface, "# ")
+        else:
+            self.dut.send_expect("ip link set dev %s vf 0 trust on" % self.pf_interface, "# ")
+            self.dut.send_expect("ip link set dev %s vf 1 trust on" % self.pf_interface, "# ")
+        self.launch_testpmd()
+
+    def create_iavf(self):
+        # Generate 2 VFs on PF
+        if self.vf_flag is False:
+            self.dut.bind_interfaces_linux('ice')
+            self.dut.generate_sriov_vfs_by_port(self.used_dut_port, 2)
+            self.sriov_vfs_port = self.dut.ports_info[self.used_dut_port]['vfs_port']
+            self.vf_flag = True
+
+            try:
+                for port in self.sriov_vfs_port:
+                    port.bind_driver(self.drivername)
+
+                self.dut.send_expect("ifconfig %s up" % self.pf_interface, "# ")
+                self.dut.send_expect("ethtool --set-priv-flags %s vf-true-promisc-support on" % self.pf_interface, "# ")
+                self.dut.send_expect("ip link set %s vf 0 mac %s" % (self.pf_interface, vf0_mac), "# ")
+                self.dut.send_expect("ip link set %s vf 1 mac %s" % (self.pf_interface, vf1_mac), "# ")
+            except Exception as e:
+                self.destroy_iavf()
+                raise Exception(e)
+
+    def destroy_iavf(self):
+        if self.vf_flag is True:
+            self.dut.destroy_sriov_vfs_by_port(self.used_dut_port)
+            self.vf_flag = False
+
+    def launch_testpmd(self):
+        param = "--portmask=0x3 --rxq=16 --txq=16"
+        self.pmd_output.start_testpmd(cores="1S/4C/1T", param=param, ports=[self.sriov_vfs_port[0].pci, self.sriov_vfs_port[1].pci])
+        self.pmd_output.execute_cmd("set fwd rxonly")
+        self.pmd_output.execute_cmd("set verbose 1")
+        self.pmd_output.execute_cmd("start")
+        self.pmd_output.execute_cmd("set promisc all off")
+        self.pmd_output.execute_cmd("set allmulti all off")
+
+    def check_ports_multicast_address_number(self, num_0, num_1):
+        out_0 = self.pmd_output.execute_cmd("show port 0 mcast_macs")
+        number_0 = re.compile('Number of Multicast MAC address added:\s+(.*?)\s+?').findall(out_0)
+        if not len(number_0):
+            number_0 = 0
+            self.verify(number_0 == num_0, 'configure multicast address on port 0 failed')
+        else:
+            self.verify(int(number_0[0]) == num_0, 'configure multicast address on port 0 failed')
+        out_1 = self.pmd_output.execute_cmd("show port 1 mcast_macs")
+        number_1 = re.compile('Number of Multicast MAC address added:\s+(.*?)\s+?').findall(out_1)
+        if not len(number_1):
+            number_1 = 0
+            self.verify(number_1 == num_1, 'configure multicast address on port 1 failed')
+        else:
+            self.verify(int(number_1[0]) == num_1, 'configure multicast 
+ address on port 1 failed')
+
+    def check_pkts_received(self):
+        out = self.pmd_output.get_output(timeout=1)
+        result = re.compile(r'port\s+(.*?)/queue.*?dst=(.*?)\s+').findall(''.join(out.split('\n')))
+        return result
+
+    def config_mac(self, num_start, num_end):
+        list = []
+        Mac_list = []
+        for i in range(num_start, num_end):
+            list.append(hex(i))
+        for j in list:
+            if j.startswith('0x'):
+                Mac_list.append('33:33:00:00:00:{}'.format((j[2:].upper()).zfill(2)))
+        return Mac_list
+
+    def config_pkts_and_send(self, num_start, num_end):
+        pkts = []
+        mac_list = self.config_mac(num_start, num_end)
+        if num_end == 17:
+            for i in range(0, num_end-1):
+                pkt = 'Ether(dst="{}")/IP(src="224.0.0.{}")/UDP(sport=22,dport=23)/("X"*480)'.format(mac_list[i], i+1)
+                pkts.append(pkt)
+        else:
+            for i in range(0, num_end):
+                pkt = 'Ether(dst="{}")/IP(src="224.0.0.{}")/UDP(sport=22,dport=23)/("X"*480)'.format(mac_list[i], i)
+                pkts.append(pkt)
+        pkt_last = 'Ether(dst="33:33:00:00:00:{}")/IP(src="224.0.0.{}")/UDP(sport=22,dport=23)/("X"*480)'.format(hex(num_end)[2:], num_end)
+        pkts.append(pkt_last)
+        p = Packet()
+        for i in pkts:
+            p.append_pkt(i)
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+
+    def test_one_multicast_address(self):
+        # send 4 packets
+        pkt1 = 'Ether(dst="%s")/IP(src="224.0.0.1")/UDP(sport=22,dport=23)/("X"*480)' % mul_mac_0
+        pkt2 = 'Ether(dst="%s")/IP(src="224.192.16.1")/UDP(sport=22,dport=23)/("X"*480)' % mul_mac_1
+        pkt3 = 'Ether(dst="%s")/IP(src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)' % vf0_mac
+        pkt4 = 'Ether(dst="%s")/IP(src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)' % vf1_mac
+        pkts = [pkt1, pkt2, pkt3, pkt4]
+        p = Packet()
+        for i in pkts:
+            p.append_pkt(i)
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        out_1 = self.check_pkts_received()
+        self.verify(len(out_1) == 2, "Wrong number of pkts received")
+        self.verify(('0', vf0_mac) in out_1, "pkt3 can't be received by port 0")
+        self.verify(('1', vf1_mac) in out_1, "pkt4 can't be received by 
+ port 1")
+
+        # configure multicast address
+        self.pmd_output.execute_cmd("mcast_addr add 0 %s" % mul_mac_0)
+        self.check_ports_multicast_address_number(1, 0)
+        # send 4 packets
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        out_2 = self.check_pkts_received()
+        self.verify(len(out_2) == 3, "Wrong number of pkts received")
+        self.verify(('0', vf0_mac) in out_2, "pkt3 can't be received by port 0")
+        self.verify(('1', vf1_mac) in out_2, "pkt4 can't be received by port 1")
+        self.verify(('0', mul_mac_0) in out_2, "pkt1 can't be received 
+ by port 0")
+
+        # remove the multicast address configuration
+        self.pmd_output.execute_cmd("mcast_addr remove 0 %s" % mul_mac_0)
+        self.check_ports_multicast_address_number(0, 0)
+        # send 4 packets
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        out_3 = self.check_pkts_received()
+        self.verify(len(out_3) == 2, "Wrong number of pkts received")
+        self.verify(('0', vf0_mac) in out_3, "pkt3 can't be received by port 0")
+        self.verify(('1', vf1_mac) in out_3, "pkt4 can't be received by 
+ port 1")
+
+    def test_two_multicast_address(self):
+        # configure multicast address
+        self.pmd_output.execute_cmd("mcast_addr add 0 %s" % mul_mac_0)
+        self.pmd_output.execute_cmd("mcast_addr add 0 %s" % mul_mac_1)
+        self.check_ports_multicast_address_number(2, 0)
+
+        # send 4 packets
+        pkt1 = 'Ether(dst="%s")/IP(src="224.0.0.1")/UDP(sport=22,dport=23)/("X"*480)' % mul_mac_0
+        pkt2 = 'Ether(dst="%s")/IP(src="224.192.16.1")/UDP(sport=22,dport=23)/("X"*480)' % mul_mac_1
+        pkt3 = 'Ether(dst="%s")/IP(src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)' % vf0_mac
+        pkt4 = 'Ether(dst="%s")/IP(src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)' % vf1_mac
+        pkts = [pkt1, pkt2, pkt3, pkt4]
+        p = Packet()
+        for i in pkts:
+            p.append_pkt(i)
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        out_1 = self.check_pkts_received()
+        self.verify(len(out_1) == 4, "Wrong number of pkts received")
+        self.verify(('0', vf0_mac) in out_1, "pkt3 can't be received by port 0")
+        self.verify(('1', vf1_mac) in out_1, "pkt4 can't be received by port 1")
+        self.verify(('0', mul_mac_0) in out_1 and ('0', mul_mac_1) in 
+ out_1, "pkt1-2 can't be received by port 0")
+
+        # remove the multicast address configuration
+        self.pmd_output.execute_cmd("mcast_addr remove 0 %s" % mul_mac_0)
+        self.check_ports_multicast_address_number(1, 0)
+        # send 4 packets
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        out_2 = self.check_pkts_received()
+        self.verify(len(out_2) == 3, "Wrong number of pkts received")
+        self.verify(('0', vf0_mac) in out_2, "pkt3 can't be received by port 0")
+        self.verify(('1', vf1_mac) in out_2, "pkt4 can't be received by port 1")
+        self.verify(('0', mul_mac_1) in out_2, "pkt2 can't be received 
+ by port 0")
+
+    def test_multicast_address_on_two_vf_ports(self):
+        # configure multicast address on port 0 and port 1
+        self.pmd_output.execute_cmd("mcast_addr add 0 33:33:00:00:00:01")
+        self.pmd_output.execute_cmd("mcast_addr add 1 33:33:00:00:00:01")
+        self.pmd_output.execute_cmd("mcast_addr add 0 33:33:00:00:00:02")
+        self.pmd_output.execute_cmd("mcast_addr add 1 33:33:00:00:00:03")
+        self.check_ports_multicast_address_number(2, 2)
+
+        # send 3 packets
+        pkt1 = 'Ether(dst="33:33:00:00:00:01")/IP(src="224.0.0.1")/UDP(sport=22,dport=23)/("X"*480)'
+        pkt2 = 'Ether(dst="33:33:00:00:00:02")/IP(src="224.0.0.2")/UDP(sport=22,dport=23)/("X"*480)'
+        pkt3 = 'Ether(dst="33:33:00:00:00:03")/IP(src="224.0.0.3")/UDP(sport=22,dport=23)/("X"*480)'
+        pkts = [pkt1, pkt2, pkt3]
+        p = Packet()
+        for i in pkts:
+            p.append_pkt(i)
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        out_1 = self.check_pkts_received()
+        self.verify(len(out_1) == 4, "Wrong number of pkts received")
+        self.verify(('0', "33:33:00:00:00:01") in out_1, "pkt1 can't be received by port 0")
+        self.verify(('1', "33:33:00:00:00:01") in out_1, "pkt1 can't be received by port 1")
+        self.verify(('0', "33:33:00:00:00:02") in out_1, "pkt2 can't be received by port 0")
+        self.verify(('1', "33:33:00:00:00:03") in out_1, "pkt3 can't be 
+ received by port 1")
+
+        # remove some multicast address configurations
+        self.pmd_output.execute_cmd("mcast_addr remove 0 33:33:00:00:00:01")
+        self.pmd_output.execute_cmd("mcast_addr remove 1 33:33:00:00:00:03")
+        self.check_ports_multicast_address_number(1, 1)
+        # send 3 packets
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        out_2 = self.check_pkts_received()
+        self.verify(len(out_2) == 2, "Wrong number of pkts received")
+        self.verify(('1', "33:33:00:00:00:01") in out_2, "pkt1 can't be received by port 1")
+        self.verify(('0', "33:33:00:00:00:02") in out_2, "pkt2 can't be 
+ received by port 0")
+
+    def test_maxnum_multicast_address_with_vfs_trust_off(self):
+        # configure 16 multicast address on port 0 and port 1
+        mac_addr_list = self.config_mac(1, 17)
+        for i in mac_addr_list:
+            self.pmd_output.execute_cmd("mcast_addr add 0 %s" % i)
+            self.pmd_output.execute_cmd("mcast_addr add 1 %s" % i)
+        self.check_ports_multicast_address_number(16, 16)
+
+        # configure one more multicast address on port 0 and port 1
+        out_0 = self.pmd_output.execute_cmd("mcast_addr add 0 33:33:00:00:00:11")
+        self.verify('rte_eth_dev_set_mc_addr_list(port=0, nb=17) failed' in out_0, 'Configure one more multicast address on port 0 successfullly')
+        out_1 = self.pmd_output.execute_cmd("mcast_addr add 1 33:33:00:00:00:11")
+        self.verify('rte_eth_dev_set_mc_addr_list(port=1, nb=17) failed' in out_1, 'Configure one more multicast address on port 1 successfullly')
+        self.check_ports_multicast_address_number(16, 16)
+        # send packets
+        self.config_pkts_and_send(1, 17)
+        output_1 = self.check_pkts_received()
+        self.verify(len(output_1) == 32, "Wrong number of pkts received")
+        self.verify(('0', "33:33:00:00:00:11") not in output_1, "pkt last can be received by port 0")
+        self.verify(('1', "33:33:00:00:00:11") not in output_1, "pkt last can be received by port 1")
+        for i in range(len(mac_addr_list)):
+            self.verify(('0', mac_addr_list[i]) in output_1, "pkt%s can't be received by port 0" % (i+1))
+            self.verify(('1', mac_addr_list[i]) in output_1, "pkt%s 
+ can't be received by port 1" % (i+1))
+
+        # remove one multicast address on port 0
+        self.pmd_output.execute_cmd("mcast_addr remove 0 33:33:00:00:00:0B")
+        self.pmd_output.execute_cmd("mcast_addr remove 1 33:33:00:00:00:01")
+        self.check_ports_multicast_address_number(15, 15)
+        self.pmd_output.execute_cmd("mcast_addr add 0 33:33:00:00:00:11")
+        self.pmd_output.execute_cmd("mcast_addr add 1 33:33:00:00:00:11")
+        self.check_ports_multicast_address_number(16, 16)
+        # send packts
+        self.config_pkts_and_send(1, 17)
+        output_2 = self.check_pkts_received()
+        self.verify(len(output_2) == 32, "Wrong number of pkts received")
+        for i in range(len(mac_addr_list)):
+            if mac_addr_list[i] == '33:33:00:00:00:0B':
+                self.verify(('0', "33:33:00:00:00:0B") not in output_2, "pkt11 can be received by port 0")
+                self.verify(('1', "33:33:00:00:00:0B") in output_2, "pkt11 can't be received by port 1")
+            elif mac_addr_list[i] == '33:33:00:00:00:01':
+                self.verify(('1', "33:33:00:00:00:01") not in output_2, "pkt1 can be received by port 1")
+                self.verify(('0', "33:33:00:00:00:01") in output_2, "pkt1 can't be received by port 0")
+            else:
+                self.verify(('0', mac_addr_list[i]) in output_2, "pkt%s can't be received by port 0" % (i+1))
+                self.verify(('1', mac_addr_list[i]) in output_2, "pkt%s 
+ can't be received by port 1" % (i+1))
+
+        # remove all the multicast address configuration on two ports
+        for i in mac_addr_list:
+            self.pmd_output.execute_cmd("mcast_addr remove 0 %s" % i)
+            self.pmd_output.execute_cmd("mcast_addr remove 1 %s" % i)
+        self.pmd_output.execute_cmd("mcast_addr remove 0 33:33:00:00:00:11")
+        self.pmd_output.execute_cmd("mcast_addr remove 1 33:33:00:00:00:11")
+        self.check_ports_multicast_address_number(0, 0)
+        # send packts
+        self.config_pkts_and_send(1, 17)
+        output_3 = self.check_pkts_received()
+        self.verify(len(output_3) == 0, "Wrong number of pkts 
+ received")
+
+    def test_maxnum_multicast_address_with_vfs_trust_on(self):
+        # configure 64 multicast address on port 0 and port 1
+        mac_addr_list = self.config_mac(0, 64)
+        for i in mac_addr_list:
+            self.pmd_output.execute_cmd("mcast_addr add 0 %s" % i)
+            self.pmd_output.execute_cmd("mcast_addr add 1 %s" % i)
+        self.check_ports_multicast_address_number(64, 64)
+
+        # configure one more multicast address on each port
+        out_0 = self.pmd_output.execute_cmd("mcast_addr add 0 33:33:00:00:00:40")
+        self.verify('rte_eth_dev_set_mc_addr_list(port=0, nb=65) failed' in out_0, 'Configure one more multicast address on port 0 successfullly')
+        out_1 = self.pmd_output.execute_cmd("mcast_addr add 1 33:33:00:00:00:40")
+        self.verify('rte_eth_dev_set_mc_addr_list(port=1, nb=65) failed' in out_1, 'Configure one more multicast address on port 1 successfullly')
+        self.check_ports_multicast_address_number(64, 64)
+
+        # send packets
+        self.config_pkts_and_send(0, 64)
+        output_1 = self.check_pkts_received()
+        self.verify(len(output_1) == 128, "Wrong number of pkts received")
+        self.verify(('0', "33:33:00:00:00:40") not in output_1, "pkt last can be received by port 0")
+        self.verify(('1', "33:33:00:00:00:40") not in output_1, "pkt lsat can be received by port 1")
+        for i in range(len(mac_addr_list)):
+            self.verify(('0', mac_addr_list[i]) in output_1, "pkt%s can't be received by port 0" % i)
+            self.verify(('1', mac_addr_list[i]) in output_1, "pkt%s 
+ can't be received by port 1" % i)
+
+        # remove one multicast address on port 0
+        self.pmd_output.execute_cmd("mcast_addr remove 0 33:33:00:00:00:0B")
+        self.pmd_output.execute_cmd("mcast_addr remove 1 33:33:00:00:00:01")
+        self.check_ports_multicast_address_number(63, 63)
+        self.pmd_output.execute_cmd("mcast_addr add 0 33:33:00:00:00:40")
+        self.pmd_output.execute_cmd("mcast_addr add 1 33:33:00:00:00:40")
+        self.check_ports_multicast_address_number(64, 64)
+
+        # send packts
+        self.config_pkts_and_send(0, 64)
+        output_2 = self.check_pkts_received()
+        self.verify(len(output_2) == 128, "Wrong number of pkts received")
+        for i in range(len(mac_addr_list)):
+            if mac_addr_list[i] == '33:33:00:00:00:0B':
+                self.verify(('0', "33:33:00:00:00:0B") not in output_2, "pkt11 can be received by port 0")
+                self.verify(('1', "33:33:00:00:00:0B") in output_2, "pkt11 can't be received by port 1")
+            elif mac_addr_list[i] == '33:33:00:00:00:01':
+                self.verify(('1', "33:33:00:00:00:01") not in output_2, "pkt1 can be received by port 1")
+                self.verify(('0', "33:33:00:00:00:01") in output_2, "pkt1 can't be received by port 0")
+            else:
+                self.verify(('0', mac_addr_list[i]) in output_2, "pkt%s can't be received by port 0" % i)
+                self.verify(('1', mac_addr_list[i]) in output_2, "pkt%s 
+ can't be received by port 1" % i)
+
+        # remove all the multicast address configuration on port 0
+        for i in mac_addr_list:
+            self.pmd_output.execute_cmd("mcast_addr remove 0 %s" % i)
+        self.pmd_output.execute_cmd("mcast_addr remove 0 33:33:00:00:00:40")
+        self.check_ports_multicast_address_number(0, 64)
+        # send packts
+        self.config_pkts_and_send(0, 64)
+        output_3 = self.check_pkts_received()
+        self.verify(len(output_3) == 64, "Wrong number of pkts received")
+        for i in range(len(mac_addr_list)):
+            self.verify(('0', mac_addr_list[i]) not in output_3, "pkt%s 
+ can be received by port 0" % i)
+
+        # remove all the multicast address configuration on port 1
+        for i in mac_addr_list:
+            self.pmd_output.execute_cmd("mcast_addr remove 1 %s" % i)
+        self.pmd_output.execute_cmd("mcast_addr remove 1 33:33:00:00:00:40")
+        self.check_ports_multicast_address_number(0, 0)
+        # send packts
+        self.config_pkts_and_send(0, 64)
+        output_4 = self.check_pkts_received()
+        self.verify(len(output_4) == 0, "Wrong number of pkts 
+ received")
+
+    def test_set_allmulti_on(self):
+        # set allmulti on and promisc off
+        self.pmd_output.execute_cmd("set promisc all off")
+        self.pmd_output.execute_cmd("set allmulti all on")
+
+        # send 5 packets
+        pkt1 = 'Ether(dst="%s")/IP(src="224.0.0.1")/UDP(sport=22,dport=23)/("X"*480)' % mul_mac_0
+        pkt2 = 'Ether(dst="%s")/IP(src="224.192.16.1")/UDP(sport=22,dport=23)/("X"*480)' % mul_mac_1
+        pkt3 = 'Ether(dst="%s")/IP(src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)' % vf0_mac
+        pkt4 = 'Ether(dst="%s")/IP(src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)' % vf1_mac
+        pkt5 = 'Ether(dst="%s")/IP(src="192.168.0.1")/UDP(sport=22,dport=23)/("X"*480)' % vf0_wrong_mac
+        pkts = [pkt1, pkt2, pkt3, pkt4, pkt5]
+        p = Packet()
+        for i in pkts:
+            p.append_pkt(i)
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        output_1 = self.check_pkts_received()
+        self.verify(len(output_1) == 6, "Wrong number of pkts received")
+        self.verify(('0', vf0_mac) in output_1, "pkt3 can't be received by port 0")
+        self.verify(('1', vf1_mac) in output_1, "pkt4 can't be received by port 1")
+        self.verify(('0', mul_mac_0) in output_1 and ('0', mul_mac_1) in output_1, "pkt1-2 can't be received by port 0")
+        self.verify(('1', mul_mac_0) in output_1 and ('1', mul_mac_1) 
+ in output_1, "pkt1-2 can't be received by port 1")
+
+        # set allmulti off and promisc on
+        self.pmd_output.execute_cmd("set promisc all on")
+        self.pmd_output.execute_cmd("set allmulti all off")
+        # send 5 packets
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        output_2 = self.check_pkts_received()
+        self.verify(len(output_2) == 6, "Wrong number of pkts received")
+        self.verify(('0', vf0_mac) in output_2 and ('0', vf1_mac) in output_2 and ('0', vf0_wrong_mac) in output_2, "pkt3-5 can't be received by port 0")
+        self.verify(('1', vf0_mac) in output_2 and ('1', vf1_mac) in 
+ output_2 and ('1', vf0_wrong_mac) in output_2, "pkt3-5 can't be 
+ received by port 1")
+
+    def test_negative_case(self):
+        # send one packet
+        p = Packet()
+        p.append_pkt('Ether(dst="33:33:00:00:00:40")/IP(src="224.0.0.1")/UDP(sport=22,dport=23)/("X"*480)')
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        output_1 = self.check_pkts_received()
+        self.verify(len(output_1) == 0, "Wrong number of pkts 
+ received")
+
+        # add a multicast address
+        self.pmd_output.execute_cmd("mcast_addr add 0 33:33:00:00:00:40")
+        # send one packet
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        output_2 = self.check_pkts_received()
+        self.verify(len(output_2) == 1, "Wrong number of pkts received")
+        self.verify(('0', "33:33:00:00:00:40") in output_2, "pkt can't 
+ be received by port 0")
+
+        # add a same multicast address
+        result = self.pmd_output.execute_cmd("mcast_addr add 0 33:33:00:00:00:40")
+        self.verify('multicast address already filtered by port' in result, "add a same multicast address successfully")
+        # send one packet
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        output_3 = self.check_pkts_received()
+        self.verify(len(output_3) == 1, "Wrong number of pkts received")
+        self.verify(('0', "33:33:00:00:00:40") in output_3, "pkt can't 
+ be received by port 0")
+
+        # remove nonexistent multicast address
+        result = self.pmd_output.execute_cmd("mcast_addr remove 0 33:33:00:00:00:41")
+        self.verify('multicast address not filtered by port 0' in result, "remove nonexistent multicast address successfully")
+        # send one packet
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        output_4 = self.check_pkts_received()
+        self.verify(len(output_4) == 1, "Wrong number of pkts received")
+        self.verify(('0', "33:33:00:00:00:40") in output_4, "pkt can't 
+ be received by port 0")
+
+        # add wrong multicast address
+        result = self.pmd_output.execute_cmd("mcast_addr add 0 32:33:00:00:00:41")
+        self.verify('Invalid multicast addr 32:33:00:00:00:41' in result, "add wrong multicast address successfully")
+        # send one packet
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        output_5 = self.check_pkts_received()
+        self.verify(len(output_5) == 1, "Wrong number of pkts received")
+        self.verify(('0', "33:33:00:00:00:40") in output_5, "pkt can't 
+ be received by port 0")
+
+        # remove the multicast address
+        self.pmd_output.execute_cmd("mcast_addr remove 0 33:33:00:00:00:40")
+        # send one packet
+        p.send_pkt(self.tester, tx_port=self.tester_itf)
+        output_6 = self.check_pkts_received()
+        self.verify(len(output_6) == 0, "Wrong number of pkts 
+ received")
+
+    def tear_down(self):
+        """
+        Run after each test case.
+        """
+        self.dut.send_expect("quit", "# ", 30)
+
+    def tear_down_all(self):
+        """
+        Run after each test suite.
+        """
+        self.dut.kill_all()
+        self.destroy_iavf()
--
2.17.1


  parent reply	other threads:[~2020-12-08  7:51 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-07  5:20 Xie wei
2020-12-07  5:26 ` Xie, WeiX
2020-12-08  7:51 ` Peng, Yuan [this message]
2020-12-10  8:40 ` Tu, Lijuan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CO1PR11MB505825F2FA0FD915F2BEE1D8FECD0@CO1PR11MB5058.namprd11.prod.outlook.com \
    --to=yuan.peng@intel.com \
    --cc=dts@dpdk.org \
    --cc=weix.xie@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).