get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 106978,
    "url": "https://patches.dpdk.org/api/patches/106978/?format=api",
    "web_url": "https://patches.dpdk.org/project/dts/patch/20220207230405.488339-1-yaqi.tang@intel.com/",
    "project": {
        "id": 3,
        "url": "https://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": "<20220207230405.488339-1-yaqi.tang@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/20220207230405.488339-1-yaqi.tang@intel.com",
    "date": "2022-02-07T23:04:05",
    "name": "[V2] tests/dcf_lifecycle: add test cases for CVL DCF enable device reset API",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "bbf41df6e7ee914d4e5065a2cd250b62ec99146f",
    "submitter": {
        "id": 2357,
        "url": "https://patches.dpdk.org/api/people/2357/?format=api",
        "name": "Yaqi Tang",
        "email": "yaqi.tang@intel.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dts/patch/20220207230405.488339-1-yaqi.tang@intel.com/mbox/",
    "series": [
        {
            "id": 21498,
            "url": "https://patches.dpdk.org/api/series/21498/?format=api",
            "web_url": "https://patches.dpdk.org/project/dts/list/?series=21498",
            "date": "2022-02-07T23:04:05",
            "name": "[V2] tests/dcf_lifecycle: add test cases for CVL DCF enable device reset API",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/21498/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/106978/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/106978/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 13CDDA034F;\n\tMon,  7 Feb 2022 16:05:55 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id D9DE8410F3;\n\tMon,  7 Feb 2022 16:05:54 +0100 (CET)",
            "from mga01.intel.com (mga01.intel.com [192.55.52.88])\n by mails.dpdk.org (Postfix) with ESMTP id 1E240410EA\n for <dts@dpdk.org>; Mon,  7 Feb 2022 16:05:52 +0100 (CET)",
            "from fmsmga002.fm.intel.com ([10.253.24.26])\n by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 07 Feb 2022 07:05:51 -0800",
            "from dpdk-yaqi.sh.intel.com ([10.67.119.205])\n by fmsmga002.fm.intel.com with ESMTP; 07 Feb 2022 07:05:50 -0800"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1644246353; x=1675782353;\n h=from:to:cc:subject:date:message-id:mime-version:\n content-transfer-encoding;\n bh=4UuhgBGnkna2Md1xRGg5rhp/2JT514Zzx6F0vKiwCC8=;\n b=B2d1tqOQFLCNrlY33kTB/aYOKOp83LIdvTj8ufIoA/kiJv7mg+9PNilI\n XV77TFWSVgaezkYjUD3z+fFbrbFgRtz41W3laKdyzOjty2aIn9k3EaPP/\n a5p5ZEYf3bhydYwPPRqodU9W/jkYSGfcdLkNn8XCxUngPCVvdYA1iPbuQ\n ON/B3S67jb/srMsIUi+DXvAEjnFqLpGIBfNGAgZ4DTIBc5FQOzjNoof97\n qBV9rnm/dRUXdtFOnpSoRpmn1fkYNU9kFfIUeJVkXKdJezrOkKii9ywD3\n Jdv1Lf/vXxpJ/Z/ySYGMcTdrc8DnFQ7CA5+VR4Vs/K+GDUjuNIZZW9VLZ g==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6200,9189,10250\"; a=\"273252086\"",
            "E=Sophos;i=\"5.88,350,1635231600\"; d=\"scan'208\";a=\"273252086\"",
            "E=Sophos;i=\"5.88,350,1635231600\"; d=\"scan'208\";a=\"628549269\""
        ],
        "X-ExtLoop1": "1",
        "From": "Yaqi Tang <yaqi.tang@intel.com>",
        "To": "dts@dpdk.org",
        "Cc": "Yaqi Tang <yaqi.tang@intel.com>",
        "Subject": "[dts][PATCH V2] tests/dcf_lifecycle: add test cases for CVL DCF\n enable device reset API",
        "Date": "Mon,  7 Feb 2022 23:04:05 +0000",
        "Message-Id": "<20220207230405.488339-1-yaqi.tang@intel.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "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": "The rte_eth_dev_reset API provides a more elegant way for the application to reset DCF through the commmad \"port reset all\" when reconnecting.\n\nSigned-off-by: Yaqi Tang <yaqi.tang@intel.com>\nTested-by: Yaqi Tang < yaqi.tang@intel.com>\n---\n tests/TestSuite_dcf_lifecycle.py | 391 +++++++++++++++++++++++++++++++\n 1 file changed, 391 insertions(+)",
    "diff": "diff --git a/tests/TestSuite_dcf_lifecycle.py b/tests/TestSuite_dcf_lifecycle.py\nindex 65b80e69..fcbd4a05 100755\n--- a/tests/TestSuite_dcf_lifecycle.py\n+++ b/tests/TestSuite_dcf_lifecycle.py\n@@ -257,6 +257,7 @@ class TestDcfLifeCycle(TestCase):\n             'pf1_vf1': f\"-a {pf1_vf1}\",\n             'pf2_vf0_dcf': f\"-a {pf2_vf0},cap=dcf\",\n             'pf1_vf0': f\"-a {pf1_vf0}\",\n+            'pf1_vf0_dcf_vf1': f\"-a {pf1_vf0},cap=dcf -a {pf1_vf1}\",\n         }\n         return allowlist\n \n@@ -463,6 +464,30 @@ class TestDcfLifeCycle(TestCase):\n         status_change_func = getattr(self, func_name)\n         status_change_func(**kwargs)\n         self.check_vf_pmd2_stats(traffic, verbose_parser, is_traffic_valid=flag)\n+    \n+    def check_vf_traffic(self, func_name, topo=None, flag=False,**kwargs):\n+        dut_port_id, vf_id = topo if topo else [0, 1]\n+        pkt = self.config_stream(dut_port_id, vf_id)\n+        traffic = partial(self.send_packet_by_scapy, pkt, dut_port_id, vf_id)\n+        verbose_parser = partial(self.parse_pmd2_verbose_pkt_count, dut_port_id, vf_id)\n+        self.vf_pmd2_clear_port_stats()\n+        self.check_vf_pmd2_stats(traffic, verbose_parser)\n+        status_change_func = getattr(self, func_name)\n+        status_change_func(**kwargs)\n+\n+    def check_vf_dcf_traffic(self, func_name, topo=None, flag=False,**kwargs):\n+        self.send_pkt_to_vf1()\n+        self.d_con(['show port stats all', \"testpmd> \", 15])\n+        status_change_func = getattr(self, func_name)\n+        status_change_func(**kwargs)\n+\n+    def send_pkt_to_vf1(self):\n+        tester_port_id = self.tester.get_local_port(0)\n+        tester_itf = self.tester.get_interface(tester_port_id)\n+        p = Packet()\n+        p.append_pkt('Ether(src=\"00:11:22:33:44:55\", dst=\"C6:44:32:0A:EC:E1\")/IP(src=\"192.168.0.2\", dst=\"192.168.0.3\")/(\"X\"*64)')\n+        p.send_pkt(self.tester, tx_port=tester_itf)\n+        time.sleep(1)\n \n     def run_test_pre(self, pmd_opitons):\n         pri_pmd_option = pmd_opitons[0]\n@@ -1519,3 +1544,369 @@ class TestDcfLifeCycle(TestCase):\n         self.create_acl_rule_by_kernel_cmd(port_id=1)\n         self.d_con(['quit', \"# \", 15])\n         self.delete_acl_rule_by_kernel_cmd(port_id=1)\n+\n+    def vf_dcf_testpmd_reset_port(self):\n+        if not self.is_vf_dcf_pmd_on:\n+            return\n+        cmds = [\n+            'stop',\n+            'port stop all',\n+            'port reset all',\n+            'port start all',\n+            'start',\n+            'flow list 0',\n+        ]\n+        [self.d_con([cmd, \"testpmd> \", 15]) for cmd in cmds]\n+\n+    def vf_dcf_reset_device(self):\n+        pf1_vf0 = self.vf_ports_info[0].get('vfs_pci')[0]\n+        cmd = f\"echo 1 > /sys/bus/pci/devices/{pf1_vf0}/reset\"\n+        self.d_a_con(cmd)\n+        self.vf_dcf_testpmd_reset_port()\n+\n+    def vf_dcf_reset_port_detach(self):\n+        if not self.is_vf_dcf_pmd_on:\n+            return\n+        pf1_vf0 = self.vf_ports_info[0].get('vfs_pci')[0]\n+        cmd = f\"echo 1 > /sys/bus/pci/devices/{pf1_vf0}/reset\"\n+        self.d_a_con(cmd)\n+        cmds = [\n+            'stop',\n+            'port stop 0',\n+            'port detach 0',\n+            f\"port attach {pf1_vf0},cap=dcf\",\n+            'port reset 0',\n+            'port start 0',\n+            'start',\n+            'flow list 0',\n+        ]\n+        [self.d_con([cmd, \"testpmd> \", 15]) for cmd in cmds]\n+\n+    def vf_dcf_reset_mtu(self, dut_port_id=0, vf_id=0):\n+        intf = self.dut.ports_info[dut_port_id]['port'].intf_name\n+        cmd = f\"ifconfig {intf} mtu 3000\"\n+        self.d_a_con(cmd)\n+        self.vf_dcf_testpmd_reset_port()\n+\n+    def vf_dcf_set_mac_addr(self, dut_port_id=0, vf_id=0):\n+        intf = self.dut.ports_info[dut_port_id]['port'].intf_name\n+        cmd = f\"ip link set {intf} vf 0 mac 00:01:02:03:04:05\"\n+        self.d_a_con(cmd)\n+        self.vf_dcf_testpmd_reset_port()\n+   \n+    def verify_two_testpmd_dcf_reset_port(self):\n+        '''\n+         Lauch two testpmd, kill DCF process, and DCF reset port.\n+        '''\n+        except_content = None\n+        try:\n+            self.vf_set_trust()\n+            pmd_opts = [['pf1_vf0_dcf', 'dcf'], ['pf1_vf1', 'vf']]\n+            self.run_test_pre(pmd_opts)\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_traffic('kill_vf_dcf_process', flag=True,**{'file_prefix':pmd_opts[0][1]})\n+            self.run_test_pre(pmd_opts)\n+            self.check_vf_traffic('vf_dcf_testpmd_reset_port')\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_traffic('close_vf_dcf_testpmd')\n+        except Exception as e:\n+            self.logger.error(traceback.format_exc())\n+            except_content = e\n+        finally:\n+            self.run_test_post()\n+        # re-raise verify exception result\n+        if except_content:\n+            raise VerifyFailure(except_content)\n+\n+    def verify_two_testpmd_dcf_reset_device(self):\n+        '''\n+         Lauch two testpmd, and DCF reset device.\n+        '''\n+        except_content = None\n+        try:\n+            self.vf_set_trust()\n+            pmd_opts = [['pf1_vf0_dcf', 'dcf'], ['pf1_vf1', 'vf']]\n+            self.run_test_pre(pmd_opts)\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_traffic('vf_dcf_reset_device')\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_traffic('close_vf_dcf_testpmd')\n+        except Exception as e:\n+            self.logger.error(traceback.format_exc())\n+            except_content = e\n+        finally:\n+            self.run_test_post()\n+        # re-raise verify exception result\n+        if except_content:\n+            raise VerifyFailure(except_content)\n+    \n+    def verify_two_testpmd_dcf_reset_port_detach(self):\n+        '''\n+         Lauch two testpmd, and DCF reset port detach.\n+        '''\n+        except_content = None\n+        try:\n+            self.vf_set_trust()\n+            pmd_opts = [['pf1_vf0_dcf', 'dcf'], ['pf1_vf1', 'vf']]\n+            self.run_test_pre(pmd_opts)\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_traffic('vf_dcf_reset_port_detach')\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_traffic('close_vf_dcf_testpmd')\n+        except Exception as e:\n+            self.logger.error(traceback.format_exc())\n+            except_content = e\n+        finally:\n+            self.run_test_post()\n+        # re-raise verify exception result\n+        if except_content:\n+            raise VerifyFailure(except_content)\n+\n+    def verify_two_testpmd_dcf_reset_mtu(self):\n+        '''\n+         Lauch two testpmd, and DCF reset mtu.\n+        '''\n+        except_content = None\n+        try:\n+            self.vf_set_trust()\n+            pmd_opts = [['pf1_vf0_dcf', 'dcf'], ['pf1_vf1', 'vf']]\n+            self.run_test_pre(pmd_opts)\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_traffic('vf_dcf_reset_mtu')\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_traffic('close_vf_dcf_testpmd')\n+        except Exception as e:\n+            self.logger.error(traceback.format_exc())\n+            except_content = e\n+        finally:\n+            self.run_test_post()\n+        # re-raise verify exception result\n+        if except_content:\n+            raise VerifyFailure(except_content)\n+    \n+    def verify_two_testpmd_dcf_reset_mac(self):\n+        '''\n+         Lauch two testpmd, and DCF reset mac.\n+        '''\n+        except_content = None\n+        try:\n+            self.vf_set_trust()\n+            pmd_opts = [['pf1_vf0_dcf', 'dcf'], ['pf1_vf1', 'vf']]\n+            self.run_test_pre(pmd_opts)\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_traffic('vf_dcf_set_mac_addr')\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_traffic('close_vf_dcf_testpmd')\n+        except Exception as e:\n+            self.logger.error(traceback.format_exc())\n+            except_content = e\n+        finally:\n+            self.run_test_post()\n+        # re-raise verify exception result\n+        if except_content:\n+            raise VerifyFailure(except_content)\n+\n+    def verify_one_testpmd_dcf_reset_port(self):\n+        '''\n+         Lauch one testpmd, kill DCF process, and DCF reset port.\n+        '''\n+        except_content = None\n+        try:\n+            self.vf_set_trust()\n+            pmd_opts = [['pf1_vf0_dcf_vf1', 'dcf']]\n+            self.run_test_pre(pmd_opts)\n+            cmds = ['set fwd mac', 'set verbose 1', 'start']\n+            [self.d_con([cmd, \"testpmd> \", 15]) for cmd in cmds]\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_dcf_traffic('kill_vf_dcf_process', flag=True,**{'file_prefix':'dcf'})\n+            self.run_test_pre(pmd_opts)\n+            cmds = ['set fwd mac', 'set verbose 1', 'start']\n+            [self.d_con([cmd, \"testpmd> \", 15]) for cmd in cmds]\n+            self.check_vf_dcf_traffic('vf_dcf_testpmd_reset_port')\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_dcf_traffic('close_vf_dcf_testpmd')\n+        except Exception as e:\n+            self.logger.error(traceback.format_exc())\n+            except_content = e\n+        finally:\n+            self.run_test_post()\n+        # re-raise verify exception result\n+        if except_content:\n+            raise VerifyFailure(except_content)\n+\n+    def verify_one_testpmd_dcf_reset_device(self):\n+        '''\n+         Lauch one testpmd, and DCF reset device.\n+        '''\n+        except_content = None\n+        try:\n+            self.vf_set_trust()\n+            pmd_opts = [['pf1_vf0_dcf_vf1', 'dcf']]\n+            self.run_test_pre(pmd_opts)\n+            cmds = ['set fwd mac', 'set verbose 1', 'start']\n+            [self.d_con([cmd, \"testpmd> \", 15]) for cmd in cmds]\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_dcf_traffic('vf_dcf_reset_device')\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_dcf_traffic('close_vf_dcf_testpmd')\n+        except Exception as e:\n+            self.logger.error(traceback.format_exc())\n+            except_content = e\n+        finally:\n+            self.run_test_post()\n+        # re-raise verify exception result\n+        if except_content:\n+            raise VerifyFailure(except_content)\n+\n+    def verify_one_testpmd_dcf_reset_port_detach(self):\n+        '''\n+         Lauch one testpmd, and DCF reset port detach.\n+        '''\n+        except_content = None\n+        try:\n+            self.vf_set_trust()\n+            pmd_opts = [['pf1_vf0_dcf_vf1', 'dcf']]\n+            self.run_test_pre(pmd_opts)\n+            cmds = ['set fwd mac', 'set verbose 1', 'start']\n+            [self.d_con([cmd, \"testpmd> \", 15]) for cmd in cmds]\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_dcf_traffic('vf_dcf_reset_port_detach')\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_dcf_traffic('close_vf_dcf_testpmd')\n+        except Exception as e:\n+            self.logger.error(traceback.format_exc())\n+            except_content = e\n+        finally:\n+            self.run_test_post()\n+        # re-raise verify exception result\n+        if except_content:\n+            raise VerifyFailure(except_content)\n+   \n+    def verify_one_testpmd_dcf_reset_mtu(self):\n+        '''\n+         Lauch one testpmd, and DCF reset mtu.\n+        '''\n+        except_content = None\n+        try:\n+            self.vf_set_trust()\n+            pmd_opts = [['pf1_vf0_dcf_vf1', 'dcf']]\n+            self.run_test_pre(pmd_opts)\n+            cmds = ['set fwd mac', 'set verbose 1', 'start']\n+            [self.d_con([cmd, \"testpmd> \", 15]) for cmd in cmds]\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_dcf_traffic('vf_dcf_reset_mtu')\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_dcf_traffic('close_vf_dcf_testpmd')\n+        except Exception as e:\n+            self.logger.error(traceback.format_exc())\n+            except_content = e\n+        finally:\n+            self.run_test_post()\n+        # re-raise verify exception result\n+        if except_content:\n+            raise VerifyFailure(except_content)\n+\n+    def verify_one_testpmd_dcf_reset_mac(self):\n+        '''\n+         Lauch one testpmd, and DCF reset mac.\n+        '''\n+        except_content = None\n+        try:\n+            self.vf_set_trust()\n+            pmd_opts = [['pf1_vf0_dcf_vf1', 'dcf']]\n+            self.run_test_pre(pmd_opts)\n+            cmds = ['set fwd mac', 'set verbose 1', 'start']\n+            [self.d_con([cmd, \"testpmd> \", 15]) for cmd in cmds]\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_dcf_traffic('vf_dcf_set_mac_addr')\n+            self.vf_dcf_testpmd_set_flow_rule()\n+            self.check_vf_dcf_traffic('close_vf_dcf_testpmd')\n+        except Exception as e:\n+            self.logger.error(traceback.format_exc())\n+            except_content = e\n+        finally:\n+            self.run_test_post()\n+        # re-raise verify exception result\n+        if except_content:\n+            raise VerifyFailure(except_content)\n+   \n+    def test_two_testpmd_dcf_reset_port(self):\n+        '''\n+         Lauch two testpmd, DCF reset port, and DCF shall clean up all the rules.\n+        '''\n+        msg = \"begin : Kill DCF process, and DCF reset port\"\n+        self.logger.info(msg)\n+        self.verify_two_testpmd_dcf_reset_port()\n+\n+    def test_two_testpmd_dcf_reset_device(self):\n+        '''\n+         Lauch two testpmd, DCF reset device, and DCF shall clean up all the rules.\n+        '''\n+        msg = \"begin :DCF reset device\"\n+        self.logger.info(msg)\n+        self.verify_two_testpmd_dcf_reset_device()\n+\n+    def test_two_testpmd_dcf_reset_port_detach(self):\n+        '''\n+         Lauch two testpmd, DCF reset port detach, and DCF shall clean up all the rules.\n+        '''\n+        msg = \"begin : DCF reset port detach\"\n+        self.logger.info(msg)\n+        self.verify_two_testpmd_dcf_reset_port_detach()\n+\n+    def test_two_testpmd_dcf_reset_mtu(self):\n+        '''\n+         Lauch two testpmd, DCF reset mtu, and DCF shall clean up all the rules.\n+        '''\n+        msg = \"begin : DCF reset mtu\"\n+        self.logger.info(msg)\n+        self.verify_two_testpmd_dcf_reset_mtu()\n+\n+    def test_two_testpmd_dcf_reset_mac(self):\n+        '''\n+         Lauch two testpmd, DCF reset mac, and DCF shall clean up all the rules.\n+        '''\n+        msg = \"begin : DCF reset mac\"\n+        self.logger.info(msg)\n+        self.verify_two_testpmd_dcf_reset_mac()\n+\n+    def test_one_testpmd_dcf_reset_port(self):\n+        '''\n+         Lauch one testpmd, kill DCF process, and DCF reset port, DCF shall clean up all the rules.\n+        '''\n+        msg = \"begin : Kill DCF process, and DCF reset port\"\n+        self.logger.info(msg)\n+        self.verify_one_testpmd_dcf_reset_port()\n+\n+    def test_one_testpmd_dcf_reset_device(self):\n+        '''\n+         Lauch one testpmd, DCF reset device, and DCF shall clean up all the rules.\n+        '''\n+        msg = \"begin : DCF reset device\"\n+        self.logger.info(msg)\n+        self.verify_one_testpmd_dcf_reset_device()\n+\n+    def test_one_testpmd_dcf_reset_port_detach(self):\n+        '''\n+         Lauch one testpmd, DCF reset port detach, and DCF shall clean up all the rules.\n+        '''\n+        msg = \"begin : DCF reset port detach\"\n+        self.logger.info(msg)\n+        self.verify_one_testpmd_dcf_reset_port_detach()\n+   \n+    def test_one_testpmd_dcf_reset_mtu(self):\n+        '''\n+         Lauch one testpmd, DCF reset mtu, and DCF shall clean up all the rules.\n+        '''\n+        msg = \"begin : DCF reset mtu\"\n+        self.logger.info(msg)\n+        self.verify_one_testpmd_dcf_reset_mtu()\n+\n+    def test_one_testpmd_dcf_reset_mac(self):\n+        '''\n+         Lauch one testpmd, DCF reset mac, and DCF shall clean up all the rules.\n+        '''\n+        msg = \"begin : DCF reset mac\"\n+        self.logger.info(msg)\n+        self.verify_one_testpmd_dcf_reset_mac()\n+\n",
    "prefixes": [
        "V2"
    ]
}