Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/129267/?format=api
http://patches.dpdk.org/api/patches/129267/?format=api", "web_url": "http://patches.dpdk.org/project/dts/patch/20230705105344.1031168-5-zhiminx.huang@intel.com/", "project": { "id": 3, "url": "http://patches.dpdk.org/api/projects/3/?format=api", "name": "DTS", "link_name": "dts", "list_id": "dts.dpdk.org", "list_email": "dts@dpdk.org", "web_url": "", "scm_url": "git://dpdk.org/tools/dts", "webscm_url": "http://git.dpdk.org/tools/dts/", "list_archive_url": "https://inbox.dpdk.org/dts", "list_archive_url_format": "https://inbox.dpdk.org/dts/{}", "commit_url_format": "" }, "msgid": "<20230705105344.1031168-5-zhiminx.huang@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dts/20230705105344.1031168-5-zhiminx.huang@intel.com", "date": "2023-07-05T10:53:42", "name": "[V2,4/6] tests/ice_kernelpf_dcf:add new suite to cover dcf pmd function", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "a41d3b23744517bd097cfd902bc9c66e94309073", "submitter": { "id": 1685, "url": "http://patches.dpdk.org/api/people/1685/?format=api", "name": "Huang, ZhiminX", "email": "zhiminx.huang@intel.com" }, "delegate": null, "mbox": "http://patches.dpdk.org/project/dts/patch/20230705105344.1031168-5-zhiminx.huang@intel.com/mbox/", "series": [ { "id": 28816, "url": "http://patches.dpdk.org/api/series/28816/?format=api", "web_url": "http://patches.dpdk.org/project/dts/list/?series=28816", "date": "2023-07-05T10:53:38", "name": "add new common module and add new suites", "version": 2, "mbox": "http://patches.dpdk.org/series/28816/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/129267/comments/", "check": "pending", "checks": "http://patches.dpdk.org/api/patches/129267/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dts-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 7F11E42DAB;\n\tWed, 5 Jul 2023 04:39:06 +0200 (CEST)", "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 7AE70410F2;\n\tWed, 5 Jul 2023 04:39:06 +0200 (CEST)", "from mga12.intel.com (mga12.intel.com [192.55.52.136])\n by mails.dpdk.org (Postfix) with ESMTP id B3771406BC\n for <dts@dpdk.org>; Wed, 5 Jul 2023 04:39:04 +0200 (CEST)", "from fmsmga008.fm.intel.com ([10.253.24.58])\n by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 04 Jul 2023 19:38:38 -0700", "from unknown (HELO localhost.localdomain) ([10.239.252.96])\n by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 04 Jul 2023 19:38:32 -0700" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1688524744; x=1720060744;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=UFnhRc9TJI2TR3JqS4cX1GExfhGvldAL4gNtTGJojrE=;\n b=B495hicqUNDj1yLBlAbbV49gwxmQfgTlYp3EqudHcQTTwJDgbneOAWJ8\n 2UHVPL/xrReQMODa8rdLZJJB8BHYop2vQpFpa7IztMCa7IEBRK8UpC2tm\n Y1WoXpMnfSSxTJbPxnndns2nfs75omrg3nHwSlQp2KCc5lbjnikQP40xr\n QxZGKPuahTLP7ykJrGoC2GOAYLdw357IjA/d21PN2R5YxZhPrDu7y1TME\n aDDUUbSOoptbhWuDyPRFnBlFkZz+rqQctTnhqMIPd7J0Jl/T0JdZSGAZP\n HVUyUsZzKRKvVUa9UCcLT0olFIqedPzDSPSvoQn7Mw6B/aaSMuoozbA+e Q==;", "X-IronPort-AV": [ "E=McAfee;i=\"6600,9927,10761\"; a=\"342821742\"", "E=Sophos;i=\"6.01,181,1684825200\"; d=\"scan'208\";a=\"342821742\"", "E=McAfee;i=\"6600,9927,10761\"; a=\"784364070\"", "E=Sophos;i=\"6.01,181,1684825200\"; d=\"scan'208\";a=\"784364070\"" ], "X-ExtLoop1": "1", "From": "Zhimin Huang <zhiminx.huang@intel.com>", "To": "dts@dpdk.org", "Cc": "Zhimin Huang <zhiminx.huang@intel.com>", "Subject": "[dts][PATCH V2 4/6] tests/ice_kernelpf_dcf:add new suite to cover dcf\n pmd function", "Date": "Wed, 5 Jul 2023 10:53:42 +0000", "Message-Id": "<20230705105344.1031168-5-zhiminx.huang@intel.com>", "X-Mailer": "git-send-email 2.25.1", "In-Reply-To": "<20230705105344.1031168-1-zhiminx.huang@intel.com>", "References": "<20230705105344.1031168-1-zhiminx.huang@intel.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-BeenThere": "dts@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "test suite reviews and discussions <dts.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dts>,\n <mailto:dts-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dts/>", "List-Post": "<mailto:dts@dpdk.org>", "List-Help": "<mailto:dts-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dts>,\n <mailto:dts-request@dpdk.org?subject=subscribe>", "Errors-To": "dts-bounces@dpdk.org" }, "content": "add new test suite to test dcf pmd function, and use func_test_base to\nrefactor test cases.\n\nSigned-off-by: Zhimin Huang <zhiminx.huang@intel.com>\n---\nv2:\nadjust test case to use same testpmd\n\n tests/TestSuite_ice_kernelpf_dcf.py | 710 ++++++++++++++++++++++++++++\n 1 file changed, 710 insertions(+)\n create mode 100644 tests/TestSuite_ice_kernelpf_dcf.py", "diff": "diff --git a/tests/TestSuite_ice_kernelpf_dcf.py b/tests/TestSuite_ice_kernelpf_dcf.py\nnew file mode 100644\nindex 00000000..d0047c24\n--- /dev/null\n+++ b/tests/TestSuite_ice_kernelpf_dcf.py\n@@ -0,0 +1,710 @@\n+# SPDX-License-Identifier: BSD-3-Clause\n+# Copyright(c) 2023 Intel Corporation\n+#\n+\n+import random\n+\n+from framework.exception import VerifyFailure\n+from framework.settings import ETH_800_SERIES\n+from framework.test_case import TestCase, check_supported_nic\n+\n+from .func_test_base import *\n+\n+VF_MAC_ADDR = \"00:01:23:45:67:89\"\n+VF_WRONG_MAC_ADDR = \"00:01:23:45:67:99\"\n+MULTICAST_MAC_ADDR = \"01:80:C2:00:00:08\"\n+BROADCAST_MAC_ADDR = \"FF:FF:FF:FF:FF:FF\"\n+\n+MAX_VLAN_ID = 4095\n+RANDOM_VLAN_ID = random.randint(2, MAX_VLAN_ID)\n+OUTER_VLAN_ID = 1\n+INNTER_VLAN_ID = 2\n+\n+MATCHED_VLAN_PKT = FuncTestBase.generate_using_packets(\n+ pkt_type=\"VLAN_UDP\", vlan_id=RANDOM_VLAN_ID, dst_mac=VF_MAC_ADDR\n+)\n+UNMATCHED_VLAN_PKT = FuncTestBase.generate_using_packets(\n+ pkt_type=\"VLAN_UDP\", vlan_id=RANDOM_VLAN_ID - 1, dst_mac=VF_MAC_ADDR\n+)\n+\n+\n+class TestIceKernelpfDcf(TestCase):\n+ @check_supported_nic(ETH_800_SERIES)\n+ def set_up_all(self):\n+ self.dut_port = self.dut.get_ports(self.nic)\n+ self.used_dut_tx_port = self.dut_port[0]\n+ self.used_dut_rx_port = self.dut_port[1]\n+ self.port_obj = [self.dut.ports_info[port][\"port\"] for port in self.dut_port]\n+ self.tester_tx_interface = self.tester.get_interface(\n+ self.tester.get_local_port(self.used_dut_tx_port)\n+ )\n+ self.tester_rx_interface = self.tester.get_interface(\n+ self.tester.get_local_port(self.used_dut_rx_port)\n+ )\n+ self.rxtx_base = RxTxBaseTest(\n+ self, self.tester_tx_interface, self.tester_rx_interface\n+ )\n+ self.vlan_func = VlanFuncBaseTest(\n+ self, self.tester_tx_interface, self.tester_rx_interface\n+ )\n+ self.rxtx_base.check_port_num_for_test(2)\n+ self.setup_env_configuration()\n+ self.testpmd_flag = False\n+ self.launch_testpmd()\n+\n+ def set_up(self):\n+ pass\n+\n+ def pf_config(self):\n+ self.flag = \"vf-vlan-pruning\"\n+ self.dut.bind_interfaces_linux(self.kdriver)\n+ self.default_stats = self.dut.get_priv_flags_state(\n+ self.port_obj[self.used_dut_tx_port].get_interface_name(), self.flag\n+ )\n+ if not self.default_stats:\n+ self.logger.warning(\n+ f\"{self.kdriver + '_' + self.nic_obj.driver_version} driver does not have vf-vlan-pruning flag.\"\n+ )\n+ else:\n+ self.dut.send_expect(\n+ \"ethtool --set-priv-flags %s %s on\"\n+ % (\n+ self.port_obj[self.used_dut_tx_port].get_interface_name(),\n+ self.flag,\n+ ),\n+ \"# \",\n+ )\n+ self.dut.send_expect(\n+ \"ethtool --set-priv-flags %s %s on\"\n+ % (\n+ self.port_obj[self.used_dut_rx_port].get_interface_name(),\n+ self.flag,\n+ ),\n+ \"# \",\n+ )\n+\n+ def vf_config(self):\n+ self.orig_vf_mac = self.rxtx_base.get_vf_mac_through_pf(\n+ self.port_obj[self.used_dut_tx_port].get_interface_name()\n+ )\n+ self.port_obj[self.used_dut_tx_port].set_vf_mac_addr(mac=VF_MAC_ADDR)\n+ self.dut.send_expect(\n+ \"ip link set %s vf 0 spoofchk off\"\n+ % (self.port_obj[self.used_dut_tx_port].get_interface_name()),\n+ \"# \",\n+ )\n+ self.dut.send_expect(\n+ \"ip link set %s vf 0 trust on\"\n+ % (self.port_obj[self.used_dut_tx_port].get_interface_name()),\n+ \"# \",\n+ )\n+ self.dut.send_expect(\n+ \"ip link set %s vf 0 spoofchk off\"\n+ % (self.port_obj[self.used_dut_rx_port].get_interface_name()),\n+ \"# \",\n+ )\n+ self.dut.send_expect(\n+ \"ip link set %s vf 0 trust on\"\n+ % (self.port_obj[self.used_dut_rx_port].get_interface_name()),\n+ \"# \",\n+ )\n+\n+ def launch_testpmd(self, **kwargs):\n+ if not self.testpmd_flag:\n+ self.rxtx_base.launch_testpmd(\n+ ports=self.vm_pci,\n+ port_options={self.vm_pci[0]: \"cap=dcf\", self.vm_pci[1]: \"cap=dcf\"},\n+ **kwargs,\n+ )\n+ self.testpmd_flag = True\n+\n+ def quit_testpmd(self):\n+ if self.testpmd_flag:\n+ self.rxtx_base.pmd_session.quit()\n+ self.testpmd_flag = False\n+\n+ def restart_testpmd(self, param=\"\"):\n+ self.quit_testpmd()\n+ self.launch_testpmd(param=param)\n+\n+ def setup_env_configuration(self):\n+ self.vm_obj, self.vm_dut = self.rxtx_base.vf_test_preset_env_vm(\n+ pf_port=[self.used_dut_tx_port, self.used_dut_rx_port],\n+ vfs_num=1,\n+ vm_name=\"vm0\",\n+ )\n+ self.vm_pci = [\n+ self.vm_obj.pci_maps[i][\"guestpci\"]\n+ for i in range(len(self.vm_obj.pci_maps))\n+ ]\n+ self.rxtx_base.init_pmd_session(self.vm_dut)\n+ self.vlan_func.init_pmd_session(self.vm_dut)\n+\n+ def test_dcf_basic_rxtx(self):\n+ self.rxtx_base.basic_rx_check(packets_num=100, packet_dst_mac=VF_MAC_ADDR)\n+ self.rxtx_base.basic_tx_check()\n+\n+ def test_dcf_promisc_mode(self):\n+ self.rxtx_base.basic_promisc_check(\n+ match_mac=VF_MAC_ADDR,\n+ unmatch_mac=VF_WRONG_MAC_ADDR,\n+ pmd_commands=\"set promisc all on\",\n+ )\n+\n+ def test_dcf_multicast(self):\n+ self.rxtx_base.basic_multicast_check(\n+ normal_mac=VF_MAC_ADDR, multicast_mac=MULTICAST_MAC_ADDR\n+ )\n+\n+ def test_dcf_broadcast(self):\n+ self.rxtx_base.basic_rx_check(packets_num=1, packet_dst_mac=BROADCAST_MAC_ADDR)\n+\n+ def test_dcf_queue_start_stop(self):\n+ self.rxtx_base.basic_macfwd_check(\n+ packet_num=4, dst_mac=VF_MAC_ADDR, rx_port=self.used_dut_rx_port\n+ )\n+ packets_captured, _, stats = self.rxtx_base.execute_fwd_check_process(\n+ packets=self.rxtx_base.generate_random_packets(\n+ dstmac=VF_MAC_ADDR, pktnum=4\n+ ),\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=[\"stop\", \"port 0 rxq 0 stop\", \"start\"],\n+ )\n+ self.verify(\n+ len(packets_captured) == 0\n+ and stats[self.used_dut_rx_port][\"TX-packets\"] == 0,\n+ \"receive packet num is not match\",\n+ )\n+ packets_captured, _, stats = self.rxtx_base.execute_fwd_check_process(\n+ packets=self.rxtx_base.generate_random_packets(\n+ dstmac=VF_MAC_ADDR, pktnum=4\n+ ),\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=[\"stop\", \"port 0 rxq 0 start\", \"port 1 txq 0 stop\", \"start\"],\n+ )\n+ self.verify(\n+ len(packets_captured) == 0\n+ and stats[self.used_dut_rx_port][\"TX-packets\"] == 0,\n+ \"receive packet num is not match\",\n+ )\n+ self.rxtx_base.basic_macfwd_check(\n+ packet_num=4,\n+ dst_mac=VF_MAC_ADDR,\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=[\"stop\", \"port 1 txq 0 start\", \"start\"],\n+ )\n+\n+ def test_dcf_rss(self):\n+ rss_type = [\"ip\", \"tcp\", \"udp\"]\n+ rss_reta = [3, 2, 1, 0] * 16\n+ try:\n+ self.restart_testpmd(param=\"--rxq=4 --txq=4\")\n+ self.rxtx_base.rss_reta_config_check(rss_reta)\n+ for _rss in rss_type:\n+ hash_table = self.rxtx_base.basic_rss_check(\n+ dst_mac=VF_MAC_ADDR, rss_type=_rss, queue_num=4\n+ )\n+ self.rxtx_base.rss_reta_hit_check(hash_table, rss_reta)\n+ self.rxtx_base.execute_pmd_cmd(\"stop\")\n+ except Exception as e:\n+ raise VerifyFailure(e)\n+ finally:\n+ self.restart_testpmd()\n+\n+ def test_dcf_rss_hash_key(self):\n+ update_hash_key = \"1b9d58a4b961d9cd1c56ad1621c3ad51632c16a5d16c21c3513d132c135d132c13ad1531c23a51d6ac49879c499d798a7d949c8a\"\n+ try:\n+ self.restart_testpmd(param=\"--rxq=4 --txq=4\")\n+ self.rxtx_base.basic_rss_hash_key_check(\n+ dst_mac=VF_MAC_ADDR, hash_key=update_hash_key\n+ )\n+ except Exception as e:\n+ raise VerifyFailure(e)\n+ finally:\n+ self.restart_testpmd()\n+\n+ def test_dcf_rss_rxq_txq_inconsistent(self):\n+ params = [\n+ \"--rxq=4 --txq=8\",\n+ \"--rxq=6 --txq=8\",\n+ \"--rxq=3 --txq=9\",\n+ \"--rxq=4 --txq=16\",\n+ ]\n+ if self.kdriver == \"ixgbe\":\n+ params = [\n+ \"--rxq=2 --txq=4\",\n+ \"--rxq=1 --txq=2\",\n+ ]\n+ try:\n+ for param in params:\n+ queue_num = re.search(r\"--rxq=(\\d+)\", param).group(1)\n+ self.restart_testpmd(param=param)\n+ self.rxtx_base.basic_rss_check(\n+ dst_mac=VF_MAC_ADDR, rss_type=\"ip\", queue_num=queue_num\n+ )\n+ except Exception as e:\n+ raise VerifyFailure(e)\n+ finally:\n+ self.restart_testpmd()\n+\n+ def test_dcf_port_start_stop(self):\n+ for i in range(10):\n+ self.rxtx_base.execute_pmd_cmd(\"port stop all\")\n+ self.rxtx_base.execute_pmd_cmd(\"port start all\")\n+ self.rxtx_base.basic_macfwd_check(\n+ packet_num=100, dst_mac=VF_MAC_ADDR, rx_port=self.used_dut_rx_port\n+ )\n+\n+ def test_dcf_statistic_reset(self):\n+ out = self.rxtx_base.execute_pmd_cmd(\"show port stats all\")\n+ self.verify(\n+ \"RX-packets: 0\" in out and \"TX-packets: 0\" in out,\n+ \"receive some misc packet\",\n+ )\n+ self.rxtx_base.basic_macfwd_check(\n+ packet_num=100, dst_mac=VF_MAC_ADDR, rx_port=self.used_dut_rx_port\n+ )\n+ self.rxtx_base.execute_pmd_cmd(\"clear port stats all\")\n+ out = self.rxtx_base.execute_pmd_cmd(\"show port stats all\")\n+ self.verify(\n+ \"RX-packets: 0\" in out and \"TX-packets: 0\" in out,\n+ \"clear port stats fail\",\n+ )\n+\n+ def test_dcf_information(self):\n+ self.rxtx_base.basic_pmd_info_check(self.port_obj[0])\n+ self.rxtx_base.basic_macfwd_check(\n+ packet_num=100, dst_mac=VF_MAC_ADDR, rx_port=self.used_dut_rx_port\n+ )\n+\n+ def test_dcf_xstats_check(self):\n+ try:\n+ self.quit_testpmd()\n+ self.tester.send_expect(\n+ \"ifconfig {} mtu {}\".format(self.tester_tx_interface, 3000), \"# \"\n+ )\n+ if self.kdriver == \"ixgbe\":\n+ self.rxtx_base.execute_host_cmd(\n+ \"ifconfig {} mtu 3000\".format(\n+ self.port_obj[self.used_dut_tx_port].get_interface_name()\n+ )\n+ )\n+ self.launch_testpmd(param=\"--rxq=4 --txq=4 --max-pkt-len=9000\")\n+ for _payload_size in [64, 128, 256, 512, 1024, 1523]:\n+\n+ stats_table, xstats_table = self.rxtx_base.basic_xstats_check(\n+ packet_num=100,\n+ dst_mac=VF_MAC_ADDR,\n+ rx_port=self.used_dut_rx_port,\n+ payload_size=_payload_size,\n+ )\n+ self.verify(\n+ xstats_table[self.used_dut_tx_port][\"rx_good_packets\"]\n+ == stats_table[self.used_dut_tx_port][\"RX-packets\"]\n+ == xstats_table[self.used_dut_rx_port][\"tx_good_packets\"]\n+ == stats_table[self.used_dut_rx_port][\"TX-packets\"]\n+ == 100,\n+ \"pkt recieve or transport count error!\",\n+ )\n+ self.verify(\n+ xstats_table[self.used_dut_tx_port][\"rx_good_bytes\"]\n+ == stats_table[self.used_dut_tx_port][\"RX-bytes\"]\n+ == xstats_table[self.used_dut_rx_port][\"tx_good_bytes\"]\n+ == stats_table[self.used_dut_rx_port][\"TX-bytes\"],\n+ \"pkt recieve or transport bytes error!\",\n+ )\n+ except Exception as e:\n+ raise VerifyFailure(e)\n+ finally:\n+ self.tester.send_expect(\n+ \"ifconfig {} mtu {}\".format(self.tester_tx_interface, 1500), \"# \"\n+ )\n+ self.quit_testpmd()\n+ if self.kdriver == \"ixgbe\":\n+ self.rxtx_base.execute_host_cmd(\n+ \"ifconfig {} mtu 1500\".format(\n+ self.port_obj[self.used_dut_tx_port].get_interface_name()\n+ )\n+ )\n+ self.launch_testpmd()\n+\n+ def test_dcf_unicast(self):\n+ self.rxtx_base.basic_macfwd_check(\n+ packet_num=10,\n+ dst_mac=VF_WRONG_MAC_ADDR,\n+ check_miss=True,\n+ pmd_commands=[\n+ \"set promisc all off\",\n+ \"set allmulti all off\",\n+ \"set verbose 1\",\n+ \"set fwd mac\",\n+ \"start\",\n+ ],\n+ rx_port=self.used_dut_rx_port,\n+ )\n+ self.rxtx_base.basic_macfwd_check(\n+ packet_num=10, dst_mac=VF_MAC_ADDR, rx_port=self.used_dut_rx_port\n+ )\n+\n+ def test_dcf_mac_add_filter(self):\n+ try:\n+ self.quit_testpmd()\n+ self.port_obj[self.used_dut_tx_port].set_vf_mac_addr(\n+ mac=self.orig_vf_mac[0]\n+ )\n+ self.launch_testpmd()\n+ default_vf_mac = self.rxtx_base.get_vf_mac_through_pf(\n+ self.port_obj[self.used_dut_tx_port].get_interface_name()\n+ )\n+ self.rxtx_base.basic_macfwd_check(\n+ packet_num=100,\n+ dst_mac=VF_MAC_ADDR,\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=[\n+ \"port stop all\",\n+ \"port config all crc-strip on\",\n+ \"port start all\",\n+ \"set promisc all off\",\n+ \"mac_addr add 0 {}\".format(VF_MAC_ADDR),\n+ \"set verbose 1\",\n+ \"set fwd mac\",\n+ \"start\",\n+ ],\n+ )\n+ self.rxtx_base.basic_macfwd_check(\n+ packet_num=100,\n+ dst_mac=default_vf_mac[0],\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=[\"clear port stats all\"],\n+ )\n+ self.rxtx_base.basic_macfwd_check(\n+ packet_num=100,\n+ dst_mac=VF_MAC_ADDR,\n+ rx_port=self.used_dut_rx_port,\n+ check_miss=True,\n+ pmd_commands=[\n+ \"clear port stats all\",\n+ \"mac_addr remove 0 {}\".format(VF_MAC_ADDR),\n+ ],\n+ )\n+ self.rxtx_base.basic_macfwd_check(\n+ packet_num=100,\n+ dst_mac=VF_WRONG_MAC_ADDR,\n+ rx_port=self.used_dut_rx_port,\n+ check_miss=True,\n+ pmd_commands=[\n+ \"clear port stats all\",\n+ ],\n+ )\n+ except Exception as e:\n+ raise VerifyFailure(e)\n+ finally:\n+ self.quit_testpmd()\n+ self.port_obj[self.used_dut_tx_port].set_vf_mac_addr(mac=VF_MAC_ADDR)\n+ self.launch_testpmd()\n+\n+ def test_dcf_vlan_filter(self):\n+ self.vlan_func.basic_vlan_filter_check(\n+ vlan_id=RANDOM_VLAN_ID,\n+ match_pkt=MATCHED_VLAN_PKT,\n+ unmatch_pkt=UNMATCHED_VLAN_PKT,\n+ pmd_commands=[\n+ \"set promisc all off\",\n+ \"vlan set filter on 0\",\n+ \"vlan set strip off 0\",\n+ \"rx_vlan add %d 0\" % RANDOM_VLAN_ID,\n+ \"set verbose 1\",\n+ \"set fwd mac\",\n+ \"start\",\n+ ],\n+ rx_port=self.used_dut_rx_port,\n+ )\n+ _, _, _, vlan_id_list = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=MATCHED_VLAN_PKT,\n+ pmd_commands=[\n+ \"rx_vlan rm %d 0\" % RANDOM_VLAN_ID,\n+ \"vlan set filter off 0\",\n+ ],\n+ )\n+ if not self.default_stats:\n+ self.verify(len(vlan_id_list) == 1, \"Failed to received vlan packet!!!\")\n+ else:\n+ self.verify(len(vlan_id_list) == 0, \"Failed to received vlan packet!!!\")\n+\n+ def test_dcf_vlan_strip(self):\n+ self.vlan_func.basic_vlan_strip_check(\n+ vlan_id=RANDOM_VLAN_ID,\n+ match_pkt=MATCHED_VLAN_PKT,\n+ pmd_commands=[\n+ \"set promisc all off\",\n+ \"vlan set filter on 0\",\n+ \"rx_vlan add %d 0\" % RANDOM_VLAN_ID,\n+ \"vlan set strip on 0\",\n+ \"set verbose 1\",\n+ \"set fwd mac\",\n+ \"start\",\n+ ],\n+ rx_port=self.used_dut_rx_port,\n+ )\n+\n+ def test_dcf_vlan_insertion(self):\n+ try:\n+ self.vlan_func.basic_vlan_insert_check(\n+ vlan_id=RANDOM_VLAN_ID,\n+ insert_vlan=RANDOM_VLAN_ID,\n+ match_pkt=self.vlan_func.generate_using_packets(\n+ pkt_type=\"UDP\", dst_mac=VF_MAC_ADDR\n+ ),\n+ pmd_commands=[\n+ \"port stop all\",\n+ \"set promisc all off\",\n+ \"vlan set filter on 0\",\n+ \"tx_vlan set 1 %s\" % RANDOM_VLAN_ID,\n+ \"rx_vlan add %s 0\" % RANDOM_VLAN_ID,\n+ \"port start all\",\n+ \"set verbose 1\",\n+ \"set fwd mac\",\n+ \"start\",\n+ ],\n+ )\n+ except Exception as e:\n+ raise VerifyFailure(e)\n+ finally:\n+ self.restart_testpmd()\n+\n+ def test_dcf_vlan_pvid_base_tx(self):\n+ try:\n+ self.quit_testpmd()\n+ self.vlan_func.set_pvid_from_pf(\n+ pf_intf=self.port_obj[self.used_dut_tx_port].get_interface_name(),\n+ vlan_id=RANDOM_VLAN_ID,\n+ )\n+ self.launch_testpmd()\n+ packets_captured, _, _ = self.vlan_func.execute_fwd_check_process(\n+ packets=self.vlan_func.generate_using_packets(\n+ pkt_type=\"UDP\",\n+ dst_mac=self.vlan_func.get_vf_mac_through_pf(\n+ pf_intf=self.port_obj[\n+ self.used_dut_rx_port\n+ ].get_interface_name()\n+ ),\n+ ),\n+ tx_port=1,\n+ tester_tx_interface=self.tester_rx_interface,\n+ tester_rx_interface=self.tester_tx_interface,\n+ pmd_commands=[\"set fwd mac\", \"set verbose 1\", \"start\"],\n+ )\n+ self.verify(len(packets_captured) == 1, \"Not receive expected packet\")\n+ except Exception as e:\n+ raise VerifyFailure(e)\n+ finally:\n+ self.quit_testpmd()\n+ self.vlan_func.execute_host_cmd(\n+ \"ip link set {} vf 0 vlan 0\".format(\n+ self.port_obj[self.used_dut_tx_port].get_interface_name()\n+ )\n+ )\n+ self.launch_testpmd()\n+\n+ def test_dcf_vlan_pvid_base_rx(self):\n+ try:\n+ self.quit_testpmd()\n+ self.vlan_func.set_pvid_from_pf(\n+ pf_intf=self.port_obj[self.used_dut_tx_port].get_interface_name(),\n+ vlan_id=RANDOM_VLAN_ID,\n+ )\n+ self.launch_testpmd()\n+ rece_num, _, _, _ = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=[MATCHED_VLAN_PKT, UNMATCHED_VLAN_PKT],\n+ pmd_commands=[\n+ \"set fwd rxonly\",\n+ \"set verbose 1\",\n+ \"set promisc all off\",\n+ \"start\",\n+ ],\n+ )\n+ self.verify(rece_num == 1, \"Failed to received matched vlan pkt\")\n+ rece_num, _, _, _ = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=self.vlan_func.generate_using_packets(\n+ pkt_type=\"UDP\", dst_mac=VF_MAC_ADDR\n+ ),\n+ rx_port=self.used_dut_rx_port,\n+ )\n+ self.verify(rece_num == 0, \"Failed to received udp pkt without vlan\")\n+ self.quit_testpmd()\n+ self.vlan_func.set_pvid_from_pf(\n+ pf_intf=self.port_obj[self.used_dut_tx_port].get_interface_name(),\n+ vlan_id=0,\n+ )\n+ self.launch_testpmd()\n+ rece_num, _, _, _ = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=MATCHED_VLAN_PKT,\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=[\n+ \"set fwd rxonly\",\n+ \"set verbose 1\",\n+ \"set promisc all off\",\n+ \"start\",\n+ ],\n+ )\n+ if not self.default_stats:\n+ self.verify(rece_num == 1, \"Failed to received vlan packet!!!\")\n+ else:\n+ self.verify(rece_num == 0, \"Failed to received vlan packet!!!\")\n+\n+ rece_num, _, _, _ = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=[\n+ self.vlan_func.generate_using_packets(\n+ pkt_type=\"VLAN_UDP\", vlan_id=0, dst_mac=VF_MAC_ADDR\n+ ),\n+ self.vlan_func.generate_using_packets(\n+ pkt_type=\"UDP\", dst_mac=VF_MAC_ADDR\n+ ),\n+ ],\n+ rx_port=self.used_dut_rx_port,\n+ )\n+ self.verify(rece_num == 2, \"Not received expect packet\")\n+ except Exception as e:\n+ raise VerifyFailure(e)\n+ finally:\n+ self.quit_testpmd()\n+ self.vlan_func.execute_host_cmd(\n+ \"ip link set {} vf 0 vlan 0\".format(\n+ self.port_obj[self.used_dut_tx_port].get_interface_name()\n+ )\n+ )\n+ self.launch_testpmd()\n+\n+ def test_dcf_vlan_rx_combination(self):\n+ rx_vlans = [1, RANDOM_VLAN_ID, MAX_VLAN_ID]\n+ \"\"\"\n+ the dcf not support '--enable-hw-vlan', So change to scalar path to test dcf vlan offload.\n+ \"\"\"\n+ try:\n+ self.quit_testpmd()\n+ self.launch_testpmd(\n+ eal_param=\"--force-max-simd-bitwidth=64\",\n+ )\n+ rece_num, _, _, _ = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=self.vlan_func.generate_using_packets(\n+ pkt_type=\"UDP\", dst_mac=VF_MAC_ADDR\n+ ),\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=[\n+ \"set fwd rxonly\",\n+ \"set verbose 1\",\n+ \"vlan set strip on 0\",\n+ \"vlan set filter on 0\",\n+ \"set promisc all off\",\n+ \"start\",\n+ ],\n+ )\n+ self.verify(rece_num == 1, \"Not received normal packet as default\")\n+ _, pmdout, _ = self.vlan_func.execute_fwd_check_process(\n+ packets=self.vlan_func.generate_using_packets(\n+ pkt_type=\"VLAN_UDP\", vlan_id=0, dst_mac=VF_MAC_ADDR\n+ ),\n+ rx_port=self.used_dut_rx_port,\n+ )\n+ self.verify(\n+ \"VLAN tci=0x0\" in pmdout, \"Not received vlan 0 packet as default\"\n+ )\n+ for rx_vlan in rx_vlans:\n+ _, pmdout, _ = self.vlan_func.execute_fwd_check_process(\n+ packets=self.vlan_func.generate_using_packets(\n+ pkt_type=\"VLAN_UDP\", vlan_id=rx_vlan, dst_mac=VF_MAC_ADDR\n+ ),\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=\"rx_vlan add {} 0\".format(rx_vlan),\n+ )\n+ self.verify(\n+ \"VLAN tci={}\".format(hex(rx_vlan)) in pmdout,\n+ \"Not received expected vlan packet\",\n+ )\n+ if rx_vlan == MAX_VLAN_ID:\n+ continue\n+ rece_num, _, _, _ = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=self.vlan_func.generate_using_packets(\n+ pkt_type=\"VLAN_UDP\", vlan_id=rx_vlan + 1, dst_mac=VF_MAC_ADDR\n+ ),\n+ rx_port=self.used_dut_rx_port,\n+ )\n+ self.verify(rece_num == 0, \"failed to receive unmatch vlan pkt\")\n+ for rx_vlan in rx_vlans:\n+ self.vlan_func.execute_pmd_cmd(\"rx_vlan rm {} 0\".format(rx_vlan))\n+ _, pmdout, _ = self.vlan_func.execute_fwd_check_process(\n+ packets=self.vlan_func.generate_using_packets(\n+ pkt_type=\"VLAN_UDP\", vlan_id=0, dst_mac=VF_MAC_ADDR\n+ ),\n+ rx_port=self.used_dut_rx_port,\n+ )\n+ self.verify(\n+ \"VLAN tci=0x0\" in pmdout, \"Not received vlan 0 packet as default\"\n+ )\n+ rece_num, _, _, _ = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=self.vlan_func.generate_using_packets(\n+ pkt_type=\"UDP\", dst_mac=VF_MAC_ADDR\n+ ),\n+ rx_port=self.used_dut_rx_port,\n+ )\n+ self.verify(\n+ rece_num == 1, \"Not received normal packet after remove vlan filter\"\n+ )\n+ rece_num, _, _, _ = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=MATCHED_VLAN_PKT,\n+ rx_port=self.used_dut_rx_port,\n+ )\n+ if not self.default_stats:\n+ self.verify(rece_num == 1, \"Failed to received vlan packet!!!\")\n+ else:\n+ self.verify(rece_num == 0, \"Failed to received vlan packet!!!\")\n+ except Exception as e:\n+ raise VerifyFailure(e)\n+ finally:\n+ self.restart_testpmd()\n+\n+ def test_dcf_vlan_promisc(self):\n+ rece_num, _, _, _ = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=[\n+ self.vlan_func.generate_using_packets(\n+ pkt_str=[\n+ 'Ether(dst=\"{}\",type=0x8100)/Dot1Q(vlan=100,type=0x0800)/IP(src=\"196.222.232.{}\")/(\"X\"*480)'.format(\n+ VF_MAC_ADDR, i\n+ )\n+ for i in range(10)\n+ ]\n+ )\n+ ],\n+ pmd_commands=[\n+ \"port stop all\",\n+ \"set promisc all on\",\n+ \"set fwd mac\",\n+ \"set verbose 1\",\n+ \"vlan set filter off 0\",\n+ \"vlan set strip off 0\",\n+ \"port start all\",\n+ \"start\",\n+ ],\n+ )\n+ self.verify(rece_num == 10, \"Not receive expected packet\")\n+ rece_num, _, _, _ = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=[\n+ self.vlan_func.generate_using_packets(\n+ pkt_str=[\n+ 'Ether(dst=\"{}\")/IP(src=\"196.222.232.{}\")/(\"X\"*480)'.format(\n+ VF_MAC_ADDR, i\n+ )\n+ for i in range(10)\n+ ]\n+ )\n+ ],\n+ )\n+ self.verify(rece_num == 10, \"Not receive expected packet\")\n+\n+ def tear_down(self):\n+ self.rxtx_base.execute_pmd_cmd(\"stop\")\n+\n+ def tear_down_all(self):\n+ self.quit_testpmd()\n+ self.rxtx_base.destroy_vm_env()\n+ self.rxtx_base.destroy_vf()\n", "prefixes": [ "V2", "4/6" ] }{ "id": 129267, "url": "