Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/129265/?format=api
http://patches.dpdk.org/api/patches/129265/?format=api", "web_url": "http://patches.dpdk.org/project/dts/patch/20230705105344.1031168-3-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-3-zhiminx.huang@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dts/20230705105344.1031168-3-zhiminx.huang@intel.com", "date": "2023-07-05T10:53:40", "name": "[V2,2/6] tests/kernelpf_vf:add new suite to cover most of the basic vf cases", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "629cbfa18866657e5e4574bb9f45b1938746add6", "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-3-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/129265/comments/", "check": "pending", "checks": "http://patches.dpdk.org/api/patches/129265/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 222B742DAB;\n\tWed, 5 Jul 2023 04:38:28 +0200 (CEST)", "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 1CC4D40FAE;\n\tWed, 5 Jul 2023 04:38:28 +0200 (CEST)", "from mga12.intel.com (mga12.intel.com [192.55.52.136])\n by mails.dpdk.org (Postfix) with ESMTP id 51633406BC\n for <dts@dpdk.org>; Wed, 5 Jul 2023 04:38:26 +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:25 -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:17 -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=1688524706; x=1720060706;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=HoyPgx1JgsO1h9PYWtDOk9MmiDlBn7FlfmW7Spf9q6g=;\n b=MUcDflUjYTpfyvIPE+MARAY4FDvi/TskCdbo56kZAFanKnAbGgHs8ZX2\n spwdbGd36+65Wtx5FJboJNugepjBec56Lv4y+sDvom+K4iIrBpELhwoQm\n oRTLWGCJ15dsa4I/xnBcmmBQsCK7yeG4nDrbaQ3VHW9fp3xmpqYBoqXzg\n 1rz038FummrkjP/yHMgQyedeyWdNlKsjQrbOlJmsB6NT1xV7Qx7QVUP3S\n i9p/GDqd15HH45SVlAYXMooqRW7AFqZkA3OqxED2FfJVy8n+aZU1MkHIN\n khVlKe1CifHytwu4g+e1wYuVkI1c5VljZy12axV5hkNVqNRPQAGCdta/O Q==;", "X-IronPort-AV": [ "E=McAfee;i=\"6600,9927,10761\"; a=\"342821693\"", "E=Sophos;i=\"6.01,181,1684825200\"; d=\"scan'208\";a=\"342821693\"", "E=McAfee;i=\"6600,9927,10761\"; a=\"784364021\"", "E=Sophos;i=\"6.01,181,1684825200\"; d=\"scan'208\";a=\"784364021\"" ], "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 2/6] tests/kernelpf_vf:add new suite to cover most of\n the basic vf cases", "Date": "Wed, 5 Jul 2023 10:53:40 +0000", "Message-Id": "<20230705105344.1031168-3-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 kernelpf_vf new suite and refactor with func_test_base common module:\ncover kernelpf_iavf/vf_vlan/vf_macfilter/vf_rss/vf_xstats_check.\n\nSigned-off-by: Zhimin Huang <zhiminx.huang@intel.com>\n---\nv2:\nadjust test case to use same testpmd\n\n tests/TestSuite_kernelpf_vf.py | 1055 ++++++++++++++++++++++++++++++++\n 1 file changed, 1055 insertions(+)\n create mode 100644 tests/TestSuite_kernelpf_vf.py", "diff": "diff --git a/tests/TestSuite_kernelpf_vf.py b/tests/TestSuite_kernelpf_vf.py\nnew file mode 100644\nindex 00000000..2d9d1b6b\n--- /dev/null\n+++ b/tests/TestSuite_kernelpf_vf.py\n@@ -0,0 +1,1055 @@\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 DPDK_RXMODE_SETTING, ETH_800_SERIES, load_global_setting\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+MATCHED_DOUBLE_VLAN_PKT = [\n+ FuncTestBase.generate_using_packets(pkt_str=_pkt)\n+ for _pkt in [\n+ 'Ether(dst=\"%s\",type=0x8100)/Dot1Q(vlan=%d,type=0x8100,prio=1)/Dot1Q(vlan=%d,type=0x0800,prio=2)/IP('\n+ 'src=\"196.222.232.221\")/(\"X\"*480)'\n+ % (VF_MAC_ADDR, OUTER_VLAN_ID, INNTER_VLAN_ID),\n+ 'Ether(dst=\"%s\",type=0x8100)/Dot1Q(vlan=%d,type=0x0800)/IP('\n+ 'src=\"196.222.232.221\")/(\"X\"*480)' % (VF_MAC_ADDR, OUTER_VLAN_ID),\n+ ]\n+]\n+\n+UNMATCHED_DOUBLE_VLAN_PKT = [\n+ FuncTestBase.generate_using_packets(pkt_str=_pkt)\n+ for _pkt in [\n+ 'Ether(dst=\"%s\",type=0x8100)/Dot1Q(vlan=%d,type=0x8100,prio=1)/Dot1Q(vlan=%d,type=0x0800,prio=2)/IP('\n+ 'src=\"196.222.232.221\")/(\"X\"*480)'\n+ % (VF_MAC_ADDR, OUTER_VLAN_ID + 10, INNTER_VLAN_ID),\n+ 'Ether(dst=\"%s\",type=0x8100)/Dot1Q(vlan=%d,type=0x0800)/IP('\n+ 'src=\"196.222.232.221\")/(\"X\"*480)' % (VF_MAC_ADDR, OUTER_VLAN_ID + 10),\n+ ]\n+]\n+\n+\n+class TestKernelpfVf(TestCase):\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.rx_mode = load_global_setting(DPDK_RXMODE_SETTING)\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+ if (\n+ any([self.is_eth_series_nic(800), self.kdriver == \"i40e\"])\n+ and self.default_stats\n+ ):\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 spoofchk off\"\n+ % (self.port_obj[self.used_dut_rx_port].get_interface_name()),\n+ \"# \",\n+ )\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.rxtx_base.init_pmd_session(self.vm_dut)\n+ self.vlan_func.init_pmd_session(self.vm_dut)\n+\n+ def launch_testpmd(self, **kwargs):\n+ if not self.testpmd_flag:\n+ self.rxtx_base.launch_testpmd(**kwargs)\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, **kwargs):\n+ self.quit_testpmd()\n+ self.launch_testpmd(**kwargs)\n+\n+ def test_vf_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_vf_promisc_mode(self):\n+ self.quit_testpmd()\n+ try:\n+ self.rxtx_base.execute_host_cmd(\n+ \"ip link set dev %s vf 0 trust on\"\n+ % self.port_obj[self.used_dut_tx_port].get_interface_name()\n+ )\n+ self.launch_testpmd()\n+ self.rxtx_base.basic_promisc_check(\n+ match_mac=VF_MAC_ADDR, unmatch_mac=VF_WRONG_MAC_ADDR\n+ )\n+ except Exception as e:\n+ raise VerifyFailure(e)\n+ finally:\n+ self.quit_testpmd()\n+ self.rxtx_base.execute_host_cmd(\n+ \"ip link set dev %s vf 0 trust off\"\n+ % self.port_obj[self.used_dut_tx_port].get_interface_name()\n+ )\n+ self.vf_config()\n+ self.launch_testpmd()\n+\n+ def test_vf_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_vf_broadcast(self):\n+ self.rxtx_base.basic_rx_check(packets_num=1, packet_dst_mac=BROADCAST_MAC_ADDR)\n+\n+ def test_vf_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_vf_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_vf_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_vf_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_vf_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_vf_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_vf_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_vf_xstats_check(self):\n+ self.quit_testpmd()\n+ try:\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+ 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.quit_testpmd()\n+ self.tester.send_expect(\n+ \"ifconfig {} mtu {}\".format(self.tester_tx_interface, 1500), \"# \"\n+ )\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_vf_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_vf_mac_add_filter(self):\n+ self.quit_testpmd()\n+ try:\n+ # reset vf mac\n+ self.port_obj[self.used_dut_tx_port].set_vf_mac_addr(\n+ mac=\"00:00:00:00:00:00\"\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_vf_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 (\n+ (self.kdriver == \"i40e\" and self.nic_obj.driver_version < \"2.13.10\")\n+ or (self.kdriver == \"i40e\" and not self.default_stats)\n+ or (self.kdriver == \"ice\" and not self.default_stats)\n+ ):\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_vf_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_vf_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_vf_vlan_pvid_base_tx(self):\n+ self.quit_testpmd()\n+ try:\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_vf_vlan_pvid_base_rx(self):\n+ self.quit_testpmd()\n+ try:\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+ \"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+ \"start\",\n+ ],\n+ )\n+ if (\n+ (self.kdriver == \"i40e\" and self.nic_obj.driver_version < \"2.13.10\")\n+ or (self.kdriver == \"i40e\" and not self.default_stats)\n+ or (self.kdriver == \"ice\" and not self.default_stats)\n+ ):\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_vf_vlan_rx_combination(self):\n+ rx_vlans = [1, RANDOM_VLAN_ID, MAX_VLAN_ID]\n+ param = \"--enable-hw-vlan\" if self.kdriver != \"ixgbe\" else \"\"\n+ try:\n+ self.restart_testpmd(param=param)\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 (\n+ (self.kdriver == \"i40e\" and self.nic_obj.driver_version < \"2.13.10\")\n+ or (self.kdriver == \"i40e\" and not self.default_stats)\n+ or (self.kdriver == \"ice\" and not self.default_stats)\n+ ):\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_vf_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+ if (\n+ (self.kdriver == \"i40e\" and self.nic_obj.driver_version < \"2.13.10\")\n+ or (self.kdriver == \"i40e\" and not self.default_stats)\n+ or (self.kdriver == \"ice\" and not self.default_stats)\n+ ):\n+ self.verify(rece_num == 10, \"Not receive expected packet\")\n+ else:\n+ self.verify(rece_num == 0, \"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 test_iavf_dual_vlan_filter(self):\n+ rece_num, _, _, _ = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=MATCHED_DOUBLE_VLAN_PKT,\n+ pmd_commands=[\n+ \"vlan set filter on 0\",\n+ \"set verbose 1\",\n+ \"set fwd mac\",\n+ \"start\",\n+ ],\n+ )\n+ self.vlan_func.vlan_offload_flag_check(filter=\"on\")\n+ if self.default_stats:\n+ self.verify(rece_num == 0, \"Failed received vlan packet!\")\n+ else:\n+ self.verify(\n+ rece_num == len(MATCHED_DOUBLE_VLAN_PKT),\n+ \"Failed received vlan packet!\",\n+ )\n+ self.vlan_func.basic_vlan_filter_check(\n+ vlan_id=OUTER_VLAN_ID,\n+ match_pkt=MATCHED_DOUBLE_VLAN_PKT[0],\n+ unmatch_pkt=UNMATCHED_DOUBLE_VLAN_PKT[0],\n+ pmd_commands=[\n+ \"rx_vlan add %d 0\" % OUTER_VLAN_ID,\n+ ],\n+ double_vlan=True,\n+ rx_port=self.used_dut_rx_port,\n+ )\n+ self.vlan_func.vlan_prio_check(\n+ pkts=MATCHED_DOUBLE_VLAN_PKT[0], outer=1, inner=2\n+ )\n+ self.vlan_func.basic_vlan_filter_check(\n+ vlan_id=OUTER_VLAN_ID,\n+ match_pkt=MATCHED_DOUBLE_VLAN_PKT[1],\n+ unmatch_pkt=UNMATCHED_DOUBLE_VLAN_PKT[1],\n+ double_vlan=False,\n+ rx_port=self.used_dut_rx_port,\n+ )\n+ rece_num, _, _, _ = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=MATCHED_DOUBLE_VLAN_PKT,\n+ pmd_commands=[\n+ \"rx_vlan rm %d 0\" % OUTER_VLAN_ID,\n+ ],\n+ )\n+ if self.default_stats:\n+ self.verify(rece_num == 0, \"Failed error received vlan packet!\")\n+ else:\n+ self.verify(rece_num == 2, \"Failed error received vlan packet!\")\n+\n+ def test_iavf_dual_vlan_strip(self):\n+ rece_num, _, _, vlan_id_list = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=MATCHED_DOUBLE_VLAN_PKT,\n+ pmd_commands=[\n+ \"vlan set filter on 0\",\n+ \"rx_vlan add %d 0\" % OUTER_VLAN_ID,\n+ \"vlan set strip on 0\",\n+ \"set verbose 1\",\n+ \"set fwd mac\",\n+ \"start\",\n+ ],\n+ )\n+ self.vlan_func.vlan_offload_flag_check(filter=\"on\", strip=\"on\")\n+ self.verify(\n+ rece_num == len(MATCHED_DOUBLE_VLAN_PKT)\n+ and len(vlan_id_list) == 1\n+ and INNTER_VLAN_ID in vlan_id_list,\n+ \"Failed to receive vlan pkts with vlan tag\",\n+ )\n+ rece_num, _, _, vlan_id_list = self.vlan_func.vlan_pkts_fwd_check(\n+ pkts=MATCHED_DOUBLE_VLAN_PKT,\n+ pmd_commands=[\n+ \"vlan set strip off 0\",\n+ ],\n+ )\n+ self.vlan_func.vlan_offload_flag_check(strip=\"off\")\n+ self.verify(\n+ rece_num == len(MATCHED_DOUBLE_VLAN_PKT) and len(vlan_id_list) == 3,\n+ \"Failed to receive vlan pkts with vlan tag\",\n+ )\n+\n+ def test_iavf_dual_vlan_insert(self):\n+ \"\"\"\n+ Test case: IAVF DUAL VLAN header insertion\n+ \"\"\"\n+\n+ \"\"\"\n+ according to dpdk commit d048a0aaae27809523969904c2f7b71fe3cc1bb6,\n+ when the ice driver version newer than 1.8.9, avx512 tx path not support\n+ insert correct vlag tag(outer of QinQ)\n+ \"\"\"\n+ if self.rx_mode == \"avx512\" and self.vlan_func.convert_driver_version_value(\n+ self.nic_obj.driver_version\n+ ) > self.vlan_func.convert_driver_version_value(\"1.8.9\"):\n+ self.skip_case(False, \"avx512 tx path not support insert correct vlan tag\")\n+ try:\n+ self.vlan_func.basic_vlan_insert_check(\n+ vlan_id=RANDOM_VLAN_ID,\n+ insert_vlan=INNTER_VLAN_ID,\n+ match_pkt=MATCHED_VLAN_PKT,\n+ pmd_commands=[\n+ \"vlan set filter on 0\",\n+ \"rx_vlan add {} 0\".format(RANDOM_VLAN_ID),\n+ \"port stop 1\",\n+ \"tx_vlan set 1 {}\".format(INNTER_VLAN_ID),\n+ \"port start 1\",\n+ \"set verbose 1\",\n+ \"set fwd mac\",\n+ \"start\",\n+ ],\n+ rx_port=self.used_dut_rx_port,\n+ double_vlan=INNTER_VLAN_ID,\n+ )\n+ self.vlan_func.basic_vlan_insert_check(\n+ vlan_id=RANDOM_VLAN_ID,\n+ insert_vlan=INNTER_VLAN_ID,\n+ match_pkt=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+ except Exception as e:\n+ raise VerifyFailure(e)\n+ finally:\n+ self.restart_testpmd()\n+\n+ @check_supported_nic(ETH_800_SERIES)\n+ def test_enable_disable_iavf_crc_strip(self):\n+ \"\"\"\n+ Test case: Enable/disable AVF CRC stripping\n+ \"\"\"\n+ try:\n+ self.restart_testpmd(param=\"--disable-crc-strip\")\n+ packets_captured, pmdout, stats = self.rxtx_base.execute_fwd_check_process(\n+ packets=self.rxtx_base.generate_random_packets(\n+ dstmac=VF_MAC_ADDR, pktnum=1\n+ ),\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=[\"set verbose 1\", \"set fwd mac\", \"start\"],\n+ )\n+ pkt_len_list = self.rxtx_base.get_pmd_rece_pkt_len(pmdout)\n+ self.verify(\n+ int(pkt_len_list[0]) + 4 == stats[self.used_dut_tx_port][\"RX-bytes\"],\n+ \"CRC strip off failed\",\n+ )\n+\n+ packets_captured, pmdout, stats = self.rxtx_base.execute_fwd_check_process(\n+ packets=self.rxtx_base.generate_random_packets(\n+ dstmac=VF_MAC_ADDR, pktnum=1\n+ ),\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=[\n+ \"stop\",\n+ \"port stop 0\",\n+ \"port config 0 rx_offload keep_crc off\",\n+ \"port start 0\",\n+ \"start\",\n+ ],\n+ )\n+ pkt_len_list = self.rxtx_base.get_pmd_rece_pkt_len(pmdout)\n+ self.verify(\n+ int(pkt_len_list[0]) == stats[self.used_dut_tx_port][\"RX-bytes\"],\n+ \"CRC strip off failed\",\n+ )\n+\n+ packets_captured, pmdout, stats = self.rxtx_base.execute_fwd_check_process(\n+ packets=self.rxtx_base.generate_random_packets(\n+ dstmac=VF_MAC_ADDR, pktnum=1\n+ ),\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=[\n+ \"stop\",\n+ \"port stop 0\",\n+ \"port config 0 rx_offload keep_crc on\",\n+ \"port start 0\",\n+ \"start\",\n+ ],\n+ )\n+ pkt_len_list = self.rxtx_base.get_pmd_rece_pkt_len(pmdout)\n+ self.verify(\n+ int(pkt_len_list[0]) + 4 == stats[self.used_dut_tx_port][\"RX-bytes\"],\n+ \"CRC strip off failed\",\n+ )\n+\n+ self.restart_testpmd()\n+ packets_captured, pmdout, stats = self.rxtx_base.execute_fwd_check_process(\n+ packets=self.rxtx_base.generate_random_packets(\n+ dstmac=VF_MAC_ADDR, pktnum=1\n+ ),\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=[\n+ \"set verbose 1\",\n+ \"set fwd mac\",\n+ \"start\",\n+ ],\n+ )\n+ pkt_len_list = self.rxtx_base.get_pmd_rece_pkt_len(pmdout)\n+ self.verify(\n+ int(pkt_len_list[0]) == stats[self.used_dut_tx_port][\"RX-bytes\"],\n+ \"CRC strip off failed\",\n+ )\n+ except Exception as e:\n+ raise VerifyFailure(e)\n+ finally:\n+ self.restart_testpmd()\n+\n+ @check_supported_nic(ETH_800_SERIES)\n+ def test_crc_strip_iavf_vlan_strip_coexists(self):\n+ \"\"\"\n+ Test case: IAVF CRC strip and Vlan strip co-exists\n+ \"\"\"\n+ self.vlan_func.set_pmd_fwd_mode(\"mac\")\n+ self.vlan_func.vlan_offload_flag_check(strip=\"off\")\n+ # vlan strip off, CRC strip on\n+ self.vlan_func.execute_pmd_cmd([\"stop\", \"vlan set strip off 0\"])\n+ self.vlan_func.vlan_offload_flag_check(strip=\"off\")\n+ packets_captured, pmdout, stats = self.vlan_func.execute_fwd_check_process(\n+ packets=MATCHED_DOUBLE_VLAN_PKT[0],\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=[\n+ \"vlan set filter on 0\",\n+ \"rx_vlan add %d 0\" % OUTER_VLAN_ID,\n+ \"start\",\n+ ],\n+ )\n+ _, vlan_id_list = self.vlan_func.get_pkts_vlan_layer(packets_captured, \"vlan\")\n+ pkt_len_list = self.vlan_func.get_pmd_rece_pkt_len(pmdout)\n+ self.verify(\n+ len(vlan_id_list) == 2\n+ and stats[self.used_dut_tx_port][\"RX-bytes\"]\n+ == stats[self.used_dut_rx_port][\"TX-bytes\"]\n+ == int(pkt_len_list[0]),\n+ \"CRC strip on and vlan strip off should have same values for rx/tx bytes and pkt_len\",\n+ )\n+ compare_pkt_len = int(pkt_len_list[0])\n+ # vlan strip on, CRC strip on\n+ self.vlan_func.execute_pmd_cmd(\"vlan set strip on 0\")\n+ self.vlan_func.vlan_offload_flag_check(strip=\"on\")\n+ packets_captured, pmdout, stats = self.vlan_func.execute_fwd_check_process(\n+ packets=MATCHED_DOUBLE_VLAN_PKT[0],\n+ rx_port=self.used_dut_rx_port,\n+ )\n+ _, vlan_id_list = self.vlan_func.get_pkts_vlan_layer(packets_captured, \"vlan\")\n+ pkt_len_list = self.vlan_func.get_pmd_rece_pkt_len(pmdout)\n+ self.verify(\n+ stats[self.used_dut_tx_port][\"RX-bytes\"] == int(pkt_len_list[0]) + 4\n+ and int(pkt_len_list[0]) + 4 == compare_pkt_len\n+ and len(vlan_id_list) == 1,\n+ \"CRC strip on, vlan strip on, coexists test failed\",\n+ )\n+ # vlan strip off, CRC strip off\n+ self.vlan_func.execute_pmd_cmd(\"vlan set strip off 0\")\n+ self.vlan_func.vlan_offload_flag_check(strip=\"off\")\n+ packets_captured, pmdout, stats = self.vlan_func.execute_fwd_check_process(\n+ packets=MATCHED_DOUBLE_VLAN_PKT[0],\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=[\n+ \"stop\",\n+ \"port stop 0\",\n+ \"port config 0 rx_offload keep_crc on\",\n+ \"port start 0\",\n+ \"start\",\n+ ],\n+ )\n+ _, vlan_id_list = self.vlan_func.get_pkts_vlan_layer(packets_captured, \"vlan\")\n+ pkt_len_list = self.vlan_func.get_pmd_rece_pkt_len(pmdout)\n+ self.verify(\n+ stats[self.used_dut_tx_port][\"RX-bytes\"] == int(pkt_len_list[0]) + 4\n+ and int(pkt_len_list[0]) == compare_pkt_len\n+ and len(vlan_id_list) == 2,\n+ \"CRC strip off, vlan strip off, coexists test failed\",\n+ )\n+ # vlan strip on, CRC strip off\n+ out = self.vlan_func.execute_pmd_cmd(\"vlan set strip on 0\")\n+ self.verify(\n+ \"iavf_config_vlan_strip_v2(): fail to execute command VIRTCHNL_OP_ENABLE_VLAN_STRIPPING_V2\"\n+ in out,\n+ \"set vlan strip on successfully\",\n+ )\n+ packets_captured, pmdout, stats = self.vlan_func.execute_fwd_check_process(\n+ packets=MATCHED_DOUBLE_VLAN_PKT[0],\n+ rx_port=self.used_dut_rx_port,\n+ )\n+ _, vlan_id_list = self.vlan_func.get_pkts_vlan_layer(packets_captured, \"vlan\")\n+ pkt_len_list = self.vlan_func.get_pmd_rece_pkt_len(pmdout)\n+ self.verify(\n+ stats[self.used_dut_tx_port][\"RX-bytes\"] == int(pkt_len_list[0]) + 4\n+ and int(pkt_len_list[0]) == compare_pkt_len\n+ and len(vlan_id_list) == 2,\n+ \"CRC strip off, vlan strip off, coexists test failed\",\n+ )\n+ # vlan strip off, CRC strip on\n+ self.vlan_func.execute_pmd_cmd(\"vlan set strip off 0\")\n+ self.vlan_func.vlan_offload_flag_check(strip=\"off\")\n+ packets_captured, pmdout, stats = self.vlan_func.execute_fwd_check_process(\n+ packets=MATCHED_DOUBLE_VLAN_PKT[0],\n+ rx_port=self.used_dut_rx_port,\n+ pmd_commands=[\n+ \"stop\",\n+ \"port stop 0\",\n+ \"port config 0 rx_offload keep_crc off\",\n+ \"port start 0\",\n+ \"start\",\n+ ],\n+ )\n+ self.verify(\n+ stats[self.used_dut_tx_port][\"RX-bytes\"] == int(pkt_len_list[0])\n+ and int(pkt_len_list[0]) == compare_pkt_len\n+ and len(vlan_id_list) == 2,\n+ \"CRC strip on, vlan strip off, coexists test failed\",\n+ )\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", "2/6" ] }{ "id": 129265, "url": "