get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/89436/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 89436,
    "url": "http://patches.dpdk.org/api/patches/89436/?format=api",
    "web_url": "http://patches.dpdk.org/project/dts/patch/1616045251-65532-3-git-send-email-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": "<1616045251-65532-3-git-send-email-zhiminx.huang@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/1616045251-65532-3-git-send-email-zhiminx.huang@intel.com",
    "date": "2021-03-18T05:27:25",
    "name": "[V1,2/8] add decorator to support nic and pkg check",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "5f24f5d6ce8b902db764b26aac139426832a6070",
    "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/1616045251-65532-3-git-send-email-zhiminx.huang@intel.com/mbox/",
    "series": [
        {
            "id": 15752,
            "url": "http://patches.dpdk.org/api/series/15752/?format=api",
            "web_url": "http://patches.dpdk.org/project/dts/list/?series=15752",
            "date": "2021-03-18T05:27:23",
            "name": "modified suite to support pkg check",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/15752/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/89436/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/89436/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 B2117A0561;\n\tThu, 18 Mar 2021 06:39:55 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id A66F7141044;\n\tThu, 18 Mar 2021 06:39:55 +0100 (CET)",
            "from mga02.intel.com (mga02.intel.com [134.134.136.20])\n by mails.dpdk.org (Postfix) with ESMTP id 6EE9E141043\n for <dts@dpdk.org>; Thu, 18 Mar 2021 06:39:53 +0100 (CET)",
            "from fmsmga008.fm.intel.com ([10.253.24.58])\n by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 17 Mar 2021 22:39:52 -0700",
            "from unknown (HELO dpdk-huangzm-d.sh.intel.com) ([10.240.183.72])\n by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 17 Mar 2021 22:39:51 -0700"
        ],
        "IronPort-SDR": [
            "\n T0xTbK99dun1giExnMq0qb8BWx048wlFzg5JoH4oSG4EsKKgjAfB4513Gr5ZA1d/pYi56Syx/P\n J+AekAX4PVxQ==",
            "\n AnQRT6EvxbnCvzCCOyB1+/fV0y2jEN10sNXZZfdXBCzXkS7zdjsqXdI5w8dVEFl53kfw20Acge\n xeIu9UtqwRmg=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9926\"; a=\"176736173\"",
            "E=Sophos;i=\"5.81,257,1610438400\"; d=\"scan'208\";a=\"176736173\"",
            "E=Sophos;i=\"5.81,257,1610438400\"; d=\"scan'208\";a=\"406214321\""
        ],
        "From": "Zhimin Huang <zhiminx.huang@intel.com>",
        "To": "dts@dpdk.org",
        "Cc": "Zhimin Huang <zhiminx.huang@intel.com>",
        "Date": "Thu, 18 Mar 2021 13:27:25 +0800",
        "Message-Id": "<1616045251-65532-3-git-send-email-zhiminx.huang@intel.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1616045251-65532-1-git-send-email-zhiminx.huang@intel.com>",
        "References": "<1616045251-65532-1-git-send-email-zhiminx.huang@intel.com>",
        "Subject": "[dts] [PATCH V1 2/8] add decorator to support nic and pkg check",
        "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",
        "Sender": "\"dts\" <dts-bounces@dpdk.org>"
    },
    "content": "*.remove replace pkg step and add pkg check\n\nSigned-off-by: Zhimin Huang <zhiminx.huang@intel.com>\n---\n ..._cvl_advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp.py | 82 ++++++++--------------\n tests/TestSuite_cvl_fdir.py                        |  8 ++-\n tests/TestSuite_iavf_fdir.py                       | 53 +++++++-------\n tests/TestSuite_l2tp_esp_coverage.py               | 50 ++++++-------\n 4 files changed, 85 insertions(+), 108 deletions(-)",
    "diff": "diff --git a/tests/TestSuite_cvl_advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp.py b/tests/TestSuite_cvl_advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp.py\nindex a54dcf5..f7236ee 100644\n--- a/tests/TestSuite_cvl_advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp.py\n+++ b/tests/TestSuite_cvl_advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp.py\n@@ -32,7 +32,7 @@ import re\n import random\n import string\n import time\n-from test_case import TestCase\n+from test_case import TestCase, skip_unsupported_pkg, check_supported_nic\n from pmd_output import PmdOutput\n from packet import Packet\n from rte_flow_common import RssProcessing\n@@ -831,28 +831,32 @@ class Cvl_advance_iavf_rss_vlan_ah_l2tp_pfcp(TestCase):\n \n         self.pkt = Packet()\n         self.pmd_output = PmdOutput(self.dut)\n-        self.ddp_dir = \"/lib/firmware/updates/intel/ice/ddp/\"\n-        conf_file = 'conf/cvl_advanced_rss_pppoe.cfg'\n-        conf_info = UserConf(conf_file)\n-        conf_section = conf_info.conf._sections['suite']\n-        self.os_default_package = conf_section['os_default_package_file_location']\n-        self.comms_package = conf_section['comms_package_file_location']\n-        self.ice_driver = conf_section['ice_driver_file_location']\n         self.symmetric = False\n         self.rxq = 16\n         self.rsspro = RssProcessing(self, self.pmd_output, [self.tester_iface0, self.tester_iface1], self.rxq)\n         self.logger.info('rssprocess.tester_ifaces: {}'.format(self.rsspro.tester_ifaces))\n         self.logger.info('rssprocess.test_case: {}'.format(self.rsspro.test_case))\n+        self.switch_testpmd(symmetric=self.symmetric)\n+        self.dut_session = self.dut.new_session()\n \n     def set_up(self):\n         \"\"\"\n         Run before each test case.\n         \"\"\"\n-        pass\n+        # check testpmd process status\n+        cmd = \"ps -aux | grep testpmd | grep -v grep\"\n+        out = self.dut_session.send_expect(cmd, \"#\", 15)\n+        if \"testpmd\" not in out:\n+            self.switch_testpmd(symmetric=False)\n+\n+        if self.running_case == \"test_unsupported_pattern_with_OS_default_package\":\n+            self.dut.kill_all()\n+            self.switch_testpmd(symmetric=True)\n \n     def create_iavf(self):\n         if self.vf_flag is False:\n             self.dut.bind_interfaces_linux('ice')\n+            self.dut.send_expect(\"ethtool --set-priv-flags %s vf-vlan-prune-disable on\" % self.pf_interface, \"# \")\n             self.dut.generate_sriov_vfs_by_port(self.used_dut_port, 1)\n             self.sriov_vfs_port = self.dut.ports_info[self.used_dut_port]['vfs_port']\n             self.vf_flag = True\n@@ -876,10 +880,10 @@ class Cvl_advance_iavf_rss_vlan_ah_l2tp_pfcp(TestCase):\n         Run after each test case.\n         \"\"\"\n         # destroy all flow rule on port 0\n-        self.dut.send_command(\"flow flush 0\", timeout=1)\n-        self.dut.send_command(\"clear port stats all\", timeout=1)\n+        self.pmd_output.execute_cmd(\"flow flush 0\", timeout=1)\n+        self.pmd_output.execute_cmd(\"clear port stats all\", timeout=1)\n         self.pmd_output.execute_cmd(\"stop\")\n-        self.dut.kill_all()\n+        self.pmd_output.execute_cmd(\"start\")\n \n     def tear_down_all(self):\n         \"\"\"\n@@ -887,16 +891,7 @@ class Cvl_advance_iavf_rss_vlan_ah_l2tp_pfcp(TestCase):\n         \"\"\"\n         self.dut.kill_all()\n         self.destroy_iavf()\n-\n-    def replace_package(self, package='comms'):\n-        ice_pkg_path = ''.join([self.ddp_dir,\"ice.pkg\"])\n-        self.dut.send_expect(\"rm -f {}\".format(ice_pkg_path), \"# \")\n-        if package == 'os_default':\n-            self.dut.send_expect(\"cp {} {}\".format(self.os_default_package,ice_pkg_path), \"# \")\n-        elif package == 'comms':\n-            self.dut.send_expect(\"cp {} {}\".format(self.comms_package,ice_pkg_path), \"# \")\n-        self.dut.send_expect(\"rmmod ice\", \"# \", 15)\n-        self.dut.send_expect(\"insmod {}\".format(self.ice_driver), \"# \",)\n+        self.dut.send_expect(\"ethtool --set-priv-flags %s vf-vlan-prune-disable off\" % self.pf_interface, \"# \")\n \n     def launch_testpmd(self, symmetric=False):\n         param = \"--rxq=16 --txq=16\"\n@@ -919,48 +914,47 @@ class Cvl_advance_iavf_rss_vlan_ah_l2tp_pfcp(TestCase):\n     def _gener_str(self, str_len=6):\n         return ''.join(random.sample(string.ascii_letters + string.digits, k=str_len))\n \n+    @skip_unsupported_pkg(['os default', 'wireless'])\n     def test_mac_ipv4_pfcp_session(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_ipv4_pfcp_session)\n \n+    @skip_unsupported_pkg(['os default', 'wireless'])\n     def test_mac_ipv6_pfcp_session(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_ipv6_pfcp_session)\n \n+    @skip_unsupported_pkg(['os default', 'wireless'])\n     def test_mac_ipv4_l2tpv3(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_ipv4_l2tpv3)\n \n+    @skip_unsupported_pkg(['os default', 'wireless'])\n     def test_mac_ipv6_l2tpv3(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_ipv6_l2tpv3)\n \n+    @skip_unsupported_pkg(\"os default\")\n     def test_mac_ipv4_esp(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_ipv4_esp)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv4_udp_esp(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_ipv4_udp_esp)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv6_esp(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_ipv6_esp)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv6_udp_esp(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_ipv6_udp_esp)\n \n+    @skip_unsupported_pkg(\"os default\")\n     def test_mac_ipv4_ah(self):\n-        self.switch_testpmd()\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_ipv4_ah)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv6_ah(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_ipv6_ah)\n \n     def test_wrong_hash_input_set(self):\n-        self.switch_testpmd(symmetric=False)\n         rule_list = [\n             'flow create 0 ingress pattern eth / pppoes / ipv4 / end actions rss types l2-src-only l2-dst-only end key_len 0 queues end / end',\n             'flow create 0 ingress pattern eth / pppoes / ipv4 / udp / end actions rss types ipv4-tcp end key_len 0 queues end / end',\n@@ -971,23 +965,18 @@ class Cvl_advance_iavf_rss_vlan_ah_l2tp_pfcp(TestCase):\n             self.rsspro.create_rule(rule, check_stats=False, msg='Invalid argument')\n \n     def test_void_action(self):\n-        self.switch_testpmd(symmetric=False)\n         rule = 'flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions end'\n         self.rsspro.create_rule(rule, check_stats=False, msg='Invalid argument')\n         self.rsspro.check_rule(stats=False, rule_list=[rule])\n \n     def test_delete_nonexisting_rule(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.check_rule(stats=False)\n         out = self.dut.send_command(\"flow destroy 0 rule 0\", timeout=1)\n         self.verify('error' not in out, 'delete nonexisting rule raise err,expected no err')\n         self.dut.send_command(\"flow flush 0\", timeout=1)\n \n+    @skip_unsupported_pkg(['comms', 'wireless'])\n     def test_unsupported_pattern_with_OS_default_package(self):\n-        self.destroy_iavf()\n-        self.replace_package('os_default')\n-        self.create_iavf()\n-        self.switch_testpmd(symmetric=True)\n         rule_list = [\n             'flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end',\n             'flow create 0 ingress pattern eth / ipv4 / l2tpv3oip / end actions rss types l2tpv3 end key_len 0 queues end / end',\n@@ -997,14 +986,9 @@ class Cvl_advance_iavf_rss_vlan_ah_l2tp_pfcp(TestCase):\n         self.rsspro.create_rule(rule_list, check_stats=False, msg='Invalid argument')\n         self.rsspro.check_rule(stats=False)\n         self.dut.kill_all()\n-        self.destroy_iavf()\n-        self.replace_package('comms')\n-        self.create_iavf()\n-        self.switch_testpmd(symmetric=True)\n-        self.rsspro.create_rule(rule_list, check_stats=True)\n+        self.switch_testpmd(symmetric=False)\n \n     def test_invalid_port(self):\n-        self.switch_testpmd(symmetric=False)\n         rule = 'flow create 1 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end'\n         self.rsspro.create_rule(rule, check_stats=False, msg='No such device')\n         self.rsspro.check_rule(stats=False, rule_list=[rule])\n@@ -1014,33 +998,25 @@ class Cvl_advance_iavf_rss_vlan_ah_l2tp_pfcp(TestCase):\n         self.verify(result, 'actual result not match expected,expected result is:{}'.format(pattern))\n \n     def test_mac_vlan_ipv4_pay(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_vlan_ipv4_pay)\n \n     def test_mac_vlan_ipv4_udp_pay(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_vlan_ipv4_udp_pay)\n \n     def test_mac_vlan_ipv4_tcp_pay(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_vlan_ipv4_tcp_pay)\n \n     def test_mac_vlan_ipv4_sctp_pay(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_vlan_ipv4_sctp_pay)\n \n     def test_mac_vlan_ipv6_pay(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_vlan_ipv6_pay)\n \n     def test_mac_vlan_ipv6_udp_pay(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_vlan_ipv6_udp_pay)\n \n     def test_mac_vlan_ipv6_tcp_pay(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_vlan_ipv6_tcp_pay)\n \n     def test_mac_vlan_ipv6_sctp_pay(self):\n-        self.switch_testpmd(symmetric=False)\n         self.rsspro.handle_rss_distribute_cases(cases_info=mac_vlan_ipv6_sctp_pay)\ndiff --git a/tests/TestSuite_cvl_fdir.py b/tests/TestSuite_cvl_fdir.py\nindex 549256b..1d41944 100644\n--- a/tests/TestSuite_cvl_fdir.py\n+++ b/tests/TestSuite_cvl_fdir.py\n@@ -37,7 +37,7 @@ import os\n \n from packet import Packet\n from pmd_output import PmdOutput\n-from test_case import TestCase\n+from test_case import TestCase, skip_unsupported_pkg\n import rte_flow_common as rfc\n \n from utils import GREEN, RED\n@@ -2825,6 +2825,7 @@ class TestCVLFdir(TestCase):\n         out = self.pmd_output.execute_cmd(\"flow query 0 0 count\")\n         self.verify(\"Flow rule #0 not found\" in out, \"query should failed\")\n \n+    @skip_unsupported_pkg('os default')\n     def test_multi_patterns_mark_count_query(self):\n         rule1 = 'flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / tcp src is 22 dst is 23 / end actions queue index 1 / mark id 0 / count / end'\n         rule2 = 'flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.21 / udp src is 22 dst is 23 / end actions drop / mark id 1 / count / end'\n@@ -2943,6 +2944,7 @@ class TestCVLFdir(TestCase):\n         out2 = self.send_pkts_getouput(pkts=pkt, port_id=1)\n         rfc.check_mark(out2, pkt_num=1, check_param={\"port_id\": 1, \"queue\": [2, 3], \"rss\": True}, stats=False)\n \n+    @skip_unsupported_pkg('os default')\n     def test_two_ports_multi_patterns_count_query(self):\n         rules = [\n             'flow create 1 ingress pattern eth / ipv4 dst is 192.168.0.21 proto is 255  tos is 4 / end actions queue index 1 / mark id 1 / count identifier 0x1234 shared on / end',\n@@ -3161,15 +3163,19 @@ class TestCVLFdir(TestCase):\n     def test_mac_ipv4_tun_mac_ipv4_sctp(self):\n         self._rte_flow_validate(vectors_mac_ipv4_tun_mac_ipv4_sctp)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv4_gtpu_eh(self):\n         self._rte_flow_validate(vectors_mac_ipv4_gtpu_eh)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv4_gtpu(self):\n         self._rte_flow_validate(vectors_mac_ipv4_gtpu)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv6_gtpu_eh(self):\n         self._rte_flow_validate(vectors_mac_ipv6_gtpu_eh)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv6_gtpu(self):\n         self._rte_flow_validate(vectors_mac_ipv6_gtpu)\n \ndiff --git a/tests/TestSuite_iavf_fdir.py b/tests/TestSuite_iavf_fdir.py\nindex e83855d..a404814 100644\n--- a/tests/TestSuite_iavf_fdir.py\n+++ b/tests/TestSuite_iavf_fdir.py\n@@ -35,7 +35,7 @@ import time\n \n from packet import Packet\n from pmd_output import PmdOutput\n-from test_case import TestCase\n+from test_case import TestCase, skip_unsupported_pkg\n import rte_flow_common as rfc\n from rte_flow_common import CVL_TXQ_RXQ_NUMBER\n from multiprocessing import Process\n@@ -2234,8 +2234,6 @@ class TestIAVFFdir(TestCase):\n         \"\"\"\n         Run before each test case.\n         \"\"\"\n-        self.re_load_ice_driver()\n-        time.sleep(1)\n         self.setup_2pf_4vf_env()\n         time.sleep(1)\n         self.launch_testpmd()\n@@ -2308,16 +2306,6 @@ class TestIAVFFdir(TestCase):\n         self.dut.destroy_sriov_vfs_by_port(self.dut_ports[0])\n         self.dut.destroy_sriov_vfs_by_port(self.dut_ports[1])\n \n-    def re_load_ice_driver(self):\n-        \"\"\"\n-        remove and reload the ice driver\n-        \"\"\"\n-        self.dut.send_expect(\"rmmod ice\", \"# \", 40)\n-        ice_driver_file_location = self.suite_config[\"ice_driver_file_location\"]\n-        self.dut.send_expect(\"insmod %s\" % ice_driver_file_location, \"# \")\n-        self.dut.send_expect(\"ifconfig %s up\" % self.pf0_intf, \"# \", 15)\n-        self.dut.send_expect(\"ifconfig %s up\" % self.pf1_intf, \"# \", 15)\n-\n     def config_testpmd(self):\n         self.pmd_output.execute_cmd(\"set fwd rxonly\")\n         self.pmd_output.execute_cmd(\"set verbose 1\")\n@@ -2474,39 +2462,51 @@ class TestIAVFFdir(TestCase):\n     def test_mac_ipv6_sctp(self):\n         self.rte_flow_process(vectors_ipv6_sctp)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv4_gtpu_eh(self):\n         self.rte_flow_process(vectors_ipv4_gtpu_eh)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv4_gtpu(self):\n         self.rte_flow_process(vectors_ipv4_gtpu)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv6_gtpu_eh(self):\n         self.rte_flow_process(vectors_ipv6_gtpu_eh)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv6_gtpu(self):\n         self.rte_flow_process(vectors_ipv6_gtpu)\n \n+    @skip_unsupported_pkg(['os default', 'wireless'])\n     def test_mac_ipv4_l2tpv3(self):\n         self.rte_flow_process(vectors_ipv4_l2tpv3)\n \n+    @skip_unsupported_pkg(['os default', 'wireless'])\n     def test_mac_ipv6_l2tpv3(self):\n         self.rte_flow_process(vectors_ipv6_l2tpv3)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv4_esp(self):\n         self.rte_flow_process(vectors_ipv4_esp)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv6_esp(self):\n         self.rte_flow_process(vectors_ipv6_esp)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv4_ah(self):\n         self.rte_flow_process(vectors_ipv4_ah)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv6_ah(self):\n         self.rte_flow_process(vectors_ipv6_ah)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv4_nat_t_esp(self):\n         self.rte_flow_process(vectors_ipv4_nat_t_esp)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv6_nat_t_esp(self):\n         self.rte_flow_process(vectors_ipv6_nat_t_esp)\n \n@@ -2586,6 +2586,7 @@ class TestIAVFFdir(TestCase):\n         out4 = self.send_pkts_getouput(MAC_IPV6_PAY_protocol[\"match\"])\n         rfc.check_iavf_fdir_mark(out4, pkt_num=6, check_param={\"port_id\": 0, \"passthru\": 1}, stats=False)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv4_gtpu_eh_without_teid(self):\n         rules = [\"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end\", \\\n                  \"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc qfi is 0x34 / end actions queue index 1 / mark id 3 / end\"]\n@@ -2621,6 +2622,7 @@ class TestIAVFFdir(TestCase):\n         out3 = self.send_pkts_getouput(MAC_IPV4_GTPU_EH_WITHOUT_TEID[\"match\"])\n         rfc.check_iavf_fdir_mark(out3, pkt_num=1, check_param={\"port_id\": 0, \"passthru\": 1}, stats=False)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_ipv4_gtpu_eh_without_qfi(self):\n         rules = [\"flow create 0 ingress pattern eth / ipv4 / udp / gtpu / gtp_psc / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end\", \\\n                  \"flow create 0 ingress pattern eth / ipv4 / udp / gtpu teid is 0x12345678 / gtp_psc / end actions rss queues 2 3 end / mark id 1 / end\"]\n@@ -2702,6 +2704,7 @@ class TestIAVFFdir(TestCase):\n         out7 = self.send_pkts_getouput(pkts[\"mismatch\"][7])\n         rfc.check_iavf_fdir_mark(out7, pkt_num=1, check_param={\"port_id\": 0, \"drop\": True}, stats=False)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_outer_co_exist_gtpu_eh_dst(self):\n         rules = [\"flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.31 / udp / gtpu / gtp_psc / end actions rss queues 1 2 end / mark id 1 / end\", \\\n                  \"flow create 0 ingress pattern eth / ipv6 dst is ::32 / udp / gtpu / gtp_psc / end actions rss queues 3 4 5 6 end / mark id 2 / end\",\\\n@@ -2733,6 +2736,7 @@ class TestIAVFFdir(TestCase):\n         }\n         self.run_coexist_outer_gtpu(rules, MAC_GTPU_EH)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_outer_co_exist_gtpu_dst(self):\n         rules = [\"flow create 0 ingress pattern eth / ipv4 dst is 192.168.0.31 / udp / gtpu / end actions rss queues 1 2 end / mark id 1 / end\", \\\n                  \"flow create 0 ingress pattern eth / ipv6 dst is ::32 / udp / gtpu / end actions rss queues 3 4 5 6 end / mark id 2 / end\",\\\n@@ -2764,6 +2768,7 @@ class TestIAVFFdir(TestCase):\n         }\n         self.run_coexist_outer_gtpu(rules, MAC_GTPU)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_outer_co_exist_gtpu_eh_src(self):\n         rules = [\"flow create 0 ingress pattern eth / ipv4 src is 192.168.0.21 / udp / gtpu / gtp_psc / end actions rss queues 1 2 end / mark id 1 / end\", \\\n                  \"flow create 0 ingress pattern eth / ipv6 src is ::12 / udp / gtpu / gtp_psc / end actions rss queues 3 4 5 6 end / mark id 2 / end\",\\\n@@ -2795,6 +2800,7 @@ class TestIAVFFdir(TestCase):\n         }\n         self.run_coexist_outer_gtpu(rules, MAC_GTPU_EH)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_outer_co_exist_gtpu_src(self):\n         rules = [\"flow create 0 ingress pattern eth / ipv4 src is 192.168.0.21 / udp / gtpu / end actions rss queues 1 2 end / mark id 1 / end\", \\\n                  \"flow create 0 ingress pattern eth / ipv6 src is ::12 / udp / gtpu / end actions rss queues 3 4 5 6 end / mark id 2 / end\",\\\n@@ -2826,6 +2832,7 @@ class TestIAVFFdir(TestCase):\n         }\n         self.run_coexist_outer_gtpu(rules, MAC_GTPU)\n \n+    @skip_unsupported_pkg('os default')\n     def test_mac_outer_co_exist_gtpu_mix(self):\n         rules = [\"flow create 0 ingress pattern eth / ipv4 src is 192.168.0.21 dst is 192.168.0.31 / udp / gtpu / gtp_psc / end actions rss queues 1 2 end / mark id 1 / end\", \\\n                  \"flow create 0 ingress pattern eth / ipv6 src is ::12 dst is ::32 / udp / gtpu / gtp_psc / end actions rss queues 3 4 5 6 end / mark id 2 / end\",\\\n@@ -2858,6 +2865,7 @@ class TestIAVFFdir(TestCase):\n \n         self.run_coexist_outer_gtpu(rules, MAC_GTPU_MIX)\n \n+    @skip_unsupported_pkg(['os default', 'wireless'])\n     def test_pfcp(self):\n         # open the RSS function for PFCP session packet.\n         out = self.pmd_output.execute_cmd(\"flow create 0 ingress pattern eth / ipv4 / udp / pfcp / end actions rss types pfcp end key_len 0 queues end / end\")\n@@ -2866,6 +2874,7 @@ class TestIAVFFdir(TestCase):\n         self.verify(\"Flow rule #1 created\" in out, \"failed to enable RSS function for MAC_IPV6_PFCP session packet\")\n         self.multirules_process(vectors_pfcp)\n \n+    @skip_unsupported_pkg('os default')\n     def test_l2_ethertype(self):\n         self.multirules_process(vectors_l2_ethertype)\n \n@@ -2955,6 +2964,7 @@ class TestIAVFFdir(TestCase):\n         self.check_fdir_rule(port_id=0, stats=False)\n         self.check_fdir_rule(port_id=1, stats=False)\n \n+    @skip_unsupported_pkg(['comms', 'wireless'])\n     def test_unsupported_pattern_with_OS_package(self):\n         \"\"\"\n         Create GTPU rule, PFCP rule, L2 Ethertype rule, l2tpv3 rule and esp rule with OS default package\n@@ -2964,24 +2974,11 @@ class TestIAVFFdir(TestCase):\n                 \"flow create 0 ingress pattern eth type is 0x8863 / end actions queue index 1 / mark id 1 / end\",\n                 \"flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 17 / end actions rss queues 1 2 end / mark id 6 / end\",\n                 \"flow create 0 ingress pattern eth / ipv6 / udp / esp spi is 6 / end actions rss queues 1 2 end / mark id 6 / end\"]\n-        self.destroy_env()\n-        os_package_location = self.suite_config[\"os_default_package_file_location\"]\n-        comms_package_location = self.suite_config[\"comms_package_file_location\"]\n-        package_location = self.suite_config[\"package_file_location\"]\n-        self.dut.send_expect(\"cp %s %s\" % (os_package_location, package_location), \"# \")\n-        self.re_load_ice_driver()\n-        self.setup_2pf_4vf_env()\n         self.launch_testpmd()\n-\n         self.validate_fdir_rule(rule, check_stats=False)\n         self.create_fdir_rule(rule, check_stats=False)\n         self.check_fdir_rule(port_id=0, stats=False)\n \n-        self.destroy_env()\n-        self.dut.send_expect(\"cp %s %s\" % (comms_package_location, package_location), \"# \")\n-        self.re_load_ice_driver()\n-        self.setup_2pf_4vf_env()\n-\n     def test_create_same_rule_on_pf_vf(self):\n         \"\"\"\n         create same rules on pf and vf, no conflict\n@@ -3441,6 +3438,7 @@ class TestIAVFFdir(TestCase):\n         self.dut.close_session(self.session_secondary)\n         self.dut.close_session(self.session_third)\n \n+    @skip_unsupported_pkg(['os default', 'wireless'])\n     def test_maxnum_128_profiles(self):\n         \"\"\"\n         There are 128 profiles in total.\n@@ -3883,6 +3881,7 @@ class TestIAVFFdir(TestCase):\n             vlans.append(vlan)\n         return vlans\n \n+    @skip_unsupported_pkg(['os default', 'wireless'])\n     def test_pfcp_vlan_strip_on_hw_checksum(self):\n         \"\"\"\n         Set PFCP FDIR rules\n@@ -3979,6 +3978,7 @@ class TestIAVFFdir(TestCase):\n         self.verify(bad_ipcsum == 2, \"Bad-ipcsum check error\")\n         self.verify(bad_l4csum == 4, \"Bad-l4csum check error\")\n \n+    @skip_unsupported_pkg(['os default', 'wireless'])\n     def test_pfcp_vlan_strip_off_sw_checksum(self):\n         \"\"\"\n         Set PFCP FDIR rules\n@@ -4073,6 +4073,7 @@ class TestIAVFFdir(TestCase):\n         self.verify(bad_ipcsum == 2, \"Bad-ipcsum check error\")\n         self.verify(bad_l4csum == 4, \"Bad-l4csum check error\")\n \n+    @skip_unsupported_pkg(['os default', 'wireless'])\n     def test_pfcp_vlan_insert_on(self):\n         \"\"\"\n         Set PFCP FDIR rules\ndiff --git a/tests/TestSuite_l2tp_esp_coverage.py b/tests/TestSuite_l2tp_esp_coverage.py\nindex 89f7cae..10520c8 100644\n--- a/tests/TestSuite_l2tp_esp_coverage.py\n+++ b/tests/TestSuite_l2tp_esp_coverage.py\n@@ -33,7 +33,7 @@ import re\n import time\n from packet import Packet\n from pmd_output import PmdOutput\n-from test_case import TestCase\n+from test_case import TestCase, skip_unsupported_pkg, check_supported_nic\n import rte_flow_common as rfc\n \n vf0_mac = \"00:11:22:33:44:55\"\n@@ -76,9 +76,10 @@ tv_MAC_IPV6_NAT_T_ESP_vlan = {'matched vlan': \"Ether(dst='%s')/Dot1Q(vlan=1)/IPv\n                             'dismatched vlan': \"Ether(dst='%s')/Dot1Q(vlan=2)/IPv6()/UDP(dport=4500)/ESP(spi=1)/Raw('x'*480)\" % vf0_mac,\n                             'no vlan': \"Ether(dst='%s')/IPv6()/UDP(dport=4500)/ESP(spi=1)/Raw('x'*480)\" % vf0_mac}\n \n-\n class L2tpEspCoverage(TestCase):\n+    supported_nic = ['columbiaville_100g', 'columbiaville_25g', 'columbiaville_25gx2']\n \n+    @check_supported_nic(supported_nic)\n     def set_up_all(self):\n         \"\"\"\n         Run at the start of each test suite.\n@@ -95,7 +96,6 @@ class L2tpEspCoverage(TestCase):\n         self.pf_interface = self.dut.ports_info[self.dut_ports[0]]['intf']\n         self.pf_mac = self.dut.get_mac_address(0)\n         self.pf_pci = self.dut.ports_info[self.dut_ports[0]]['pci']\n-        self.verify(self.nic in [\"columbiaville_25g\", \"columbiaville_100g\"], \"%s nic not support ethertype filter\" % self.nic)\n         self.vf_flag = False\n         self.create_iavf()\n         self.pkt = Packet()\n@@ -104,6 +104,7 @@ class L2tpEspCoverage(TestCase):\n         \"\"\"\n         Run before each test case.\n         \"\"\"\n+        cases_list = [\"test_MAC_IPV4_L2TPv3_HW_checksum_vlan_strip\", \"test_MAC_IPV4_L2TPv3_SW_checksum_vlan_insertion\"]\n         self.dut.kill_all()\n \n     def tear_down(self):\n@@ -156,21 +157,12 @@ class L2tpEspCoverage(TestCase):\n         self.dut.send_expect(\"set fwd rxonly\", \"testpmd> \", 15)\n         self.dut.send_expect(\"set verbose 1\", \"testpmd> \", 15)\n \n-    def enable_hw_checksum(self):\n-        self.dut.send_expect(\"stop\",\"testpmd> \")\n-        self.dut.send_expect(\"port stop all\",\"testpmd> \")\n-        self.dut.send_expect(\"csum set ip hw 0\",\"testpmd> \")\n-        self.dut.send_expect(\"csum set udp hw 0\",\"testpmd> \")\n-        self.dut.send_expect(\"port start all\",\"testpmd> \")\n-        self.dut.send_expect(\"set fwd csum\",\"testpmd> \")\n-        self.dut.send_expect(\"set verbose 1\",\"testpmd> \")\n-        self.dut.send_expect(\"start\",\"testpmd> \")\n-    \n-    def enable_sw_checksum(self):\n+    def enable_checksum(self, param_type=\"hw\"):\n+\n         self.dut.send_expect(\"stop\",\"testpmd> \")\n         self.dut.send_expect(\"port stop all\",\"testpmd> \")\n-        self.dut.send_expect(\"csum set ip sw 0\",\"testpmd> \")\n-        self.dut.send_expect(\"csum set udp sw 0\",\"testpmd> \")\n+        self.dut.send_expect(\"csum set ip %s 0\" % param_type,\"testpmd> \")\n+        self.dut.send_expect(\"csum set udp %s 0\" % param_type,\"testpmd> \")\n         self.dut.send_expect(\"port start all\",\"testpmd> \")\n         self.dut.send_expect(\"set fwd csum\",\"testpmd> \")\n         self.dut.send_expect(\"set verbose 1\",\"testpmd> \")\n@@ -221,30 +213,29 @@ class L2tpEspCoverage(TestCase):\n         \n     def test_MAC_IPV4_L2TPv3_HW_checksum(self):\n         self.create_testpmd_command(self.vf0_prop,rx_checksum=1)\n-        self.enable_hw_checksum()\n+        self.enable_checksum()\n         self.checksum_verify(tv_MAC_IPV4_L2TPv3_chksum)\n     \n     def test_MAC_IPV4_ESP_HW_checksum(self):\n         self.create_testpmd_command(self.vf0_prop,rx_checksum=1)\n-        self.enable_hw_checksum()\n+        self.enable_checksum()\n         self.checksum_verify(tv_MAC_IPV4_ESP_chksum)\n     \n     def test_MAC_IPV4_AH_HW_checksum(self):\n         self.create_testpmd_command(self.vf0_prop,rx_checksum=1)\n-        self.enable_hw_checksum()\n+        self.enable_checksum()\n         self.checksum_verify(tv_MAC_IPV4_AH_chksum)\n     \n     def test_MAC_IPV4_NAT_T_ESP_HW_checksum(self):\n         self.create_testpmd_command(self.vf0_prop,rx_checksum=1)\n-        self.enable_hw_checksum()\n+        self.enable_checksum()\n         self.checksum_verify(tv_MAC_IPV4_NAT_T_ESP_chksum)\n     \n     def test_MAC_IPV6_NAT_T_ESP_HW_checksum(self):\n         self.create_testpmd_command(self.vf0_prop,rx_checksum=1)\n-        self.enable_hw_checksum()\n+        self.enable_checksum()\n         self.checksum_verify(tv_MAC_IPV6_NAT_T_ESP_chksum)\n-    \n-    \n+\n     def start_tcpdump(self, rxItf):\n         self.tester.send_expect(\"rm -rf getPackageByTcpdump.cap\", \"#\")\n         self.tester.send_expect(\"tcpdump -A -nn -e -vv -w getPackageByTcpdump.cap -i %s 2> /dev/null& \" % rxItf, \"#\")\n@@ -358,6 +349,7 @@ class L2tpEspCoverage(TestCase):\n         tx_port = self.tx_iface\n         self.pkt.send_pkt(crb=self.tester, tx_port=tx_port)\n \n+    @skip_unsupported_pkg(['os default', 'wireless'])\n     def test_MAC_IPV4_L2TPv3_HW_checksum_vlan_strip(self):\n \n         self.create_testpmd_command(self.vf0_prop,rx_checksum=1)\n@@ -366,7 +358,7 @@ class L2tpEspCoverage(TestCase):\n         self.dut.send_expect(\"vlan set strip on 0\",\"testpmd> \")\n         self.dut.send_expect(\"rx_vlan add 1 0\",\"testpmd> \")\n \n-        self.enable_hw_checksum()\n+        self.enable_checksum()\n         #create rule\n         self.dut.send_expect(\"flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 1 / end actions queue index 1 / mark id 4 / end\",\"testpmd> \")\n         self.dut.send_expect(\"flow create 0 ingress pattern eth / ipv4 / l2tpv3oip session_id is 2 / end actions queue index 2 / mark id 3 / end\",\"testpmd> \")\n@@ -415,6 +407,7 @@ class L2tpEspCoverage(TestCase):\n         receive_pkt = re.findall('vlan 1', tcpdump_out)\n         self.verify(len(receive_pkt) == 1, 'vlan id strip on failed')\n \n+    @skip_unsupported_pkg(['os default', 'wireless'])\n     def test_MAC_IPV4_L2TPv3_SW_checksum_vlan_insertion(self):\n \n         self.create_testpmd_command(self.vf0_prop,rx_checksum=1)\n@@ -446,7 +439,7 @@ class L2tpEspCoverage(TestCase):\n         receive_pkt = re.findall('vlan 1', tcpdump_out)\n         self.verify(len(receive_pkt) == 1, 'vlan insertion failed')\n         \n-        self.enable_sw_checksum()\n+        self.enable_checksum(\"sw\")\n         # bad checksum + mismatched session id\n         pkts=\"Ether(dst='00:11:22:33:44:55')/IP(proto=115,chksum=0x123)/L2TP(b'\\\\x00\\\\x00\\\\x00\\\\x11')/Raw('x'*480)\"\n         self.start_tcpdump(self.tx_iface)\n@@ -468,8 +461,8 @@ class L2tpEspCoverage(TestCase):\n         # check the rx checksum \n         bad_ipcsum = self.pmd_output.get_pmd_value(\"Bad-ipcsum:\", out)\n         self.verify(bad_ipcsum == 1, \"bad ip csum check error\")\n-    \n \n+    @skip_unsupported_pkg('os default')\n     def test_MAC_IPV4_ESP_HW_checksum_vlan_strip(self):\n \n         self.create_testpmd_command(self.vf0_prop,rx_checksum=1)\n@@ -478,7 +471,7 @@ class L2tpEspCoverage(TestCase):\n         self.dut.send_expect(\"vlan set strip on 0\",\"testpmd> \")\n         self.dut.send_expect(\"rx_vlan add 1 0\",\"testpmd> \")\n \n-        self.enable_hw_checksum()\n+        self.enable_checksum()\n         #create rule\n         self.dut.send_expect(\"flow create 0 ingress pattern eth / ipv4 / esp spi is 1 / end actions queue index 1 / mark id 4 / end\",\"testpmd> \")\n         self.dut.send_expect(\"flow create 0 ingress pattern eth / ipv4 / esp spi is 2 / end actions queue index 2 / mark id 3 / end\",\"testpmd> \")\n@@ -527,6 +520,7 @@ class L2tpEspCoverage(TestCase):\n         receive_pkt = re.findall('vlan 1', tcpdump_out)\n         self.verify(len(receive_pkt) == 1, 'vlan id strip on failed')\n \n+    @skip_unsupported_pkg('os default')\n     def test_MAC_IPV4_NAT_T_ESP_SW_checksum_vlan_insertion(self):\n \n         self.create_testpmd_command(self.vf0_prop,rx_checksum=1)\n@@ -557,7 +551,7 @@ class L2tpEspCoverage(TestCase):\n         receive_pkt = re.findall('vlan 1', tcpdump_out)\n         self.verify(len(receive_pkt) == 1, 'vlan insertion failed')\n         \n-        self.enable_sw_checksum()\n+        self.enable_checksum(\"sw\")\n         # bad checksum + mismatched session id\n         pkts=\"Ether(dst='00:11:22:33:44:55')/IP(chksum=0x123)/UDP(dport=4500)/ESP(spi=11)/Raw('x'*480)\"\n         self.start_tcpdump(self.tx_iface)\n",
    "prefixes": [
        "V1",
        "2/8"
    ]
}