get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 105705,
    "url": "http://patchwork.dpdk.org/api/patches/105705/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dts/patch/20220110141243.713106-1-qi.fu@intel.com/",
    "project": {
        "id": 3,
        "url": "http://patchwork.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": "<20220110141243.713106-1-qi.fu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/20220110141243.713106-1-qi.fu@intel.com",
    "date": "2022-01-10T14:12:43",
    "name": "[V1] test_plans: add test plan for cvl flow priority",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "b3909ee72b8eab75482c7b8c2b0995912bffc0ce",
    "submitter": {
        "id": 1689,
        "url": "http://patchwork.dpdk.org/api/people/1689/?format=api",
        "name": "Fu, Qi",
        "email": "qi.fu@intel.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.dpdk.org/project/dts/patch/20220110141243.713106-1-qi.fu@intel.com/mbox/",
    "series": [
        {
            "id": 21105,
            "url": "http://patchwork.dpdk.org/api/series/21105/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dts/list/?series=21105",
            "date": "2022-01-10T14:12:43",
            "name": "[V1] test_plans: add test plan for cvl flow priority",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/21105/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/105705/comments/",
    "check": "fail",
    "checks": "http://patchwork.dpdk.org/api/patches/105705/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 91F48A0351;\n\tMon, 10 Jan 2022 06:41:05 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 654EA41172;\n\tMon, 10 Jan 2022 06:41:05 +0100 (CET)",
            "from mga01.intel.com (mga01.intel.com [192.55.52.88])\n by mails.dpdk.org (Postfix) with ESMTP id 86AB84013F\n for <dts@dpdk.org>; Mon, 10 Jan 2022 06:41:02 +0100 (CET)",
            "from orsmga005.jf.intel.com ([10.7.209.41])\n by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 09 Jan 2022 21:41:01 -0800",
            "from dpdk-qifu-cxl.sh.intel.com ([10.67.119.170])\n by orsmga005.jf.intel.com with ESMTP; 09 Jan 2022 21:40:59 -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=1641793262; x=1673329262;\n h=from:to:cc:subject:date:message-id:mime-version:\n content-transfer-encoding;\n bh=F1UX5lPuaz54nUM9yWlWTIq6vCs0qparlZ81+My2vRc=;\n b=nXJvqmX1rApLnAQBC17xh7linoTGpXkXfWN0zKGhOkFjzSA2A2HbPBnt\n z0CRo/CJDQMLmhtNwnKLu5eNCCVC/B8I2Kom6S9T7xpS7vCjebCjMRtVW\n RhdOz/UTI1ikjEZEV6g5Azl7VXlU8S8NWsquUbPNllvf3/0qQ5huKIIr5\n NSl4z4W3+t7y4xnOs86XgNCMgix8xto5qxSQtJHKEpBhauKykTrXBjl0N\n soHA5ShACE/29NyrAuuBUVuV1Rf/+RIajYtMknurcbdAVn0agLBcF9Iuu\n daXv3VXpfX3TM17Abqt7SrUGiHSWSYDMw4fffdDciUQDTGxsJLR7pSrlv A==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6200,9189,10222\"; a=\"267480843\"",
            "E=Sophos;i=\"5.88,276,1635231600\"; d=\"scan'208\";a=\"267480843\"",
            "E=Sophos;i=\"5.88,276,1635231600\"; d=\"scan'208\";a=\"690459220\""
        ],
        "X-ExtLoop1": "1",
        "From": "qifu <qi.fu@intel.com>",
        "To": "dts@dpdk.org",
        "Cc": "qifu <qi.fu@intel.com>",
        "Subject": "[dts][PATCH V1]test_plans: add test plan for cvl flow priority",
        "Date": "Mon, 10 Jan 2022 22:12:43 +0800",
        "Message-Id": "<20220110141243.713106-1-qi.fu@intel.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "quoted-printable",
        "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 test plan for cvl PF flow priority.\n\nSigned-off-by: qifu <qi.fu@intel.com>\n---\n test_plans/cvl_flow_priority_test_plan.rst | 757 +++++++++++++++++++++\n test_plans/index.rst                       |   1 +\n 2 files changed, 758 insertions(+)\n create mode 100644 test_plans/cvl_flow_priority_test_plan.rst",
    "diff": "diff --git a/test_plans/cvl_flow_priority_test_plan.rst b/test_plans/cvl_flow_priority_test_plan.rst\nnew file mode 100644\nindex 00000000..f0f947ea\n--- /dev/null\n+++ b/test_plans/cvl_flow_priority_test_plan.rst\n@@ -0,0 +1,757 @@\n+.. Copyright (c) <2021>, Intel Corporation\r\n+   All rights reserved.\r\n+\r\n+   Redistribution and use in source and binary forms, with or without\r\n+   modification, are permitted provided that the following conditions\r\n+   are met:\r\n+\r\n+   - Redistributions of source code must retain the above copyright\r\n+     notice, this list of conditions and the following disclaimer.\r\n+\r\n+   - Redistributions in binary form must reproduce the above copyright\r\n+     notice, this list of conditions and the following disclaimer in\r\n+     the documentation and/or other materials provided with the\r\n+     distribution.\r\n+\r\n+   - Neither the name of Intel Corporation nor the names of its\r\n+     contributors may be used to endorse or promote products derived\r\n+     from this software without specific prior written permission.\r\n+\r\n+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n+   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\r\n+   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r\n+   COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n+   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n+   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r\n+   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r\n+   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r\n+   OF THE POSSIBILITY OF SUCH DAMAGE.\r\n+\r\n+===============================\r\n+CVL Support Flow Priority in PF\r\n+===============================\r\n+\r\n+Description\r\n+===========\r\n+In CVL PF rte_flow distribution mode(non-pipeline mode), a flow with priority = 1 will be programmed into switch filter,\r\n+a flow with priority = 0 will be programmed into switch first then fdir. \r\n+Currently only support priority 0 and 1. 1 means low priority and 0 means high priority.\r\n+When looking up rule table, matched pkt will hit the high priority rule firstly,\r\n+it will hit the low priority rule only when there is no high priority rule exist.\r\n+\r\n+\r\n+Prerequisites\r\n+=============\r\n+\r\n+Topology\r\n+--------\r\n+1node/1nic/2port/fwd\r\n+2node/1nic/1port/loopback\r\n+\r\n+Hardware\r\n+--------\r\n+Supportted NICs: columbiaville_25g/columbiaville_100g\r\n+\r\n+Software\r\n+--------\r\n+DPDK: http://dpdk.org/git/dpdk\r\n+Scapy: http://www.secdev.org/projects/scapy/\r\n+\r\n+General Set Up\r\n+--------------\r\n+1. Compile DPDK::\r\n+\r\n+    # CC=gcc meson --werror -Denable_kmods=True -Dlibdir=lib --default-library=static <dpdk build dir>\r\n+    # ninja -C <dpdk build dir> -j 110\r\n+\r\n+2. Get the pci device id and interface of DUT and tester. \r\n+   For example, 0000:18:00.0 and 0000:18:00.1 is pci device id,\r\n+   ens785f0 and ens785f1 is interface::\r\n+\r\n+    <dpdk dir># ./usertools/dpdk-devbind.py -s\r\n+\r\n+    0000:18:00.0 'Device 159b' if=ens785f0 drv=ice unused=vfio-pci\r\n+    0000:18:00.1 'Device 159b' if=ens785f1 drv=ice unused=vfio-pci\r\n+\r\n+3. Bind the DUT port to dpdk::\r\n+\r\n+    <dpdk dir># ./usertools/dpdk-devbind.py -b vfio-pci <DUT port pci device id>\r\n+\r\n+4. Launch the userland ``testpmd`` application on DUT as follows and ::\r\n+\r\n+    <dpdk build dir>/app/dpdk-testpmd <EAL options> -- -i --rxq=<queue number> --txq=<queue number>\r\n+    testpmd> set fwd rxonly\r\n+    testpmd> set verbose 1\r\n+    testpmd> rx_vxlan_port add 4789 0\r\n+    testpmd> start\r\n+\r\n+..note:: \r\n+\r\n+    For <EAL options>, you can use \"-c 0xf -n 1\", you can also refer to testpmd doc for other setings.\r\n+\r\n+\r\n+Test Case\r\n+=========\r\n+\r\n+Common Steps\r\n+------------\r\n+1. validate rules: two rules have same pattern, input set but different priority and actions.\r\n+2. create rules and list rules.\r\n+3. send matched packets, check the action hiting the rule with priority 0.\r\n+4. send mismatched packets, check the packets will not hit any rules.\r\n+5. destroy rule with priority 0, list rules.\r\n+6. send matched packets, check the action hiting the rule with priority 1.\r\n+7. send mismatched packets, check the packets will not hit any rules.\r\n+8. recreate rules which priority is 0, list rule.\r\n+9. destroy rule with priority 1, list rules.\r\n+10. send matched packets, check the action hiting the rule with priority 0.\r\n+11. send mismatched packets, check the packets will not hit any rules.\r\n+12. destroy rule with priority 0, list rules.\r\n+13. send matched packets, check the packets will not hit any rules.\r\n+\r\n+All the packets in this test plan use below settings:\r\n+dst mac: 68:05:ca:8d:ed:a8\r\n+dst mac change inputset: 68:05:ca:8d:ed:a3\r\n+ipv4 src: 192.168.0.1\r\n+ipv4 dst: 192.168.0.2\r\n+ipv4 src change inputset: 192.168.0.3\r\n+ipv4 dst change inputset: 192.168.0.4\r\n+inner ipv4 src: 192.168.1.1\r\n+inner ipv4 src change inputset: 192.168.1.2\r\n+inner ipv4 dst: 192.168.1.3\r\n+inner ipv4 dst change inputset: 192.168.1.4\r\n+ipv6 src: CDCD:910A:2222:5498:8475:1111:3900:1536\r\n+ipv6 dst: CDCD:910A:2222:5498:8475:1111:3900:2020\r\n+ipv6 src change inputset: CDCD:910A:2222:5498:8475:1111:3900:1538\r\n+ipv6 dst change inputset: CDCD:910A:2222:5498:8475:1111:3900:2028\r\n+tos: 4\r\n+tos change inputset: 5\r\n+ttl: 2\r\n+ttl change inputset: 9\r\n+sport: 23\r\n+sport change inputset: 33\r\n+dport: 24\r\n+dport change inputset: 34\r\n+tc: 3\r\n+tc change inputset: 7\r\n+tni: 0x8\r\n+tni change inputset: 0x1\r\n+ethertype: 0x8863\r\n+ethertype change inputset: 0x8864\r\n+tci: 1\r\n+tci change inputset: 2\r\n+seid: 3\r\n+seid change inputset: 4\r\n+ipv4 proto_id: 0x0021\r\n+ipv6 proto_id: 0x0057\r\n+LCP proto_id: 0xc021\r\n+IPCP proto_id: 0x8021\r\n+\r\n+Support Pattern and Input Set\r\n+-----------------------------\r\n+.. table::\r\n+\r\n+    +---------------------+-------------------------------+-------------------------------------------+\r\n+    |    Packet Types     |           Pattern             | input set (non-pipeline mode)             |\r\n+    +=====================+===============================+===========================================+\r\n+    |                     | MAC_IPV4_FRAG                 |  N/A         \t\t\t\t                      |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_IPV4_PAY                  | [Source IP], [Dest IP],[TOS],[TTL]        |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_IPV4_UDP_PAY              | [Source IP], [Dest IP],[TOS],[TTL],       |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    | IPv4/IPv6 + TCP/UDP | MAC_IPV4_TCP                  | [Source IP], [Dest IP],[TOS],[TTL],       |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_IPV6                      | [Source IP], [Dest IP]                    |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_IPV6_UDP_PAY              | [Source IP], [Dest IP],[TOS],[TTL],       |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_IPV6_TCP                  | [Source IP], [Dest IP],[TOS],[TTL],       |\r\n+    +---------------------+-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_IPV4_TUN_IPV4_FRAG        | [Out Dest IP], [VNI/GRE_KEY],             |\r\n+    |                     |                               | [Inner Source IP], [Inner Dest IP]        |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_IPV4_TUN_IPV4_PAY         | [Out Dest IP], [VNI/GRE_KEY],             |\r\n+    |                     |                               | [Inner Source IP], [Inner Dest IP]        |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_IPV4_TUN_IPV4_UDP_PAY     | [Out Dest IP], [VNI/GRE_KEY],             |\r\n+    |                     |                               | [Inner Source IP], [Inner Dest IP],       |\r\n+    |                     |                               | [Inner Source Port], [Inner Dest Port]    |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_IPV4_TUN_IPV4_TCP         | [Out Dest IP], [VNI/GRE_KEY],             |\r\n+    |                     |                               | [Inner Source IP], [Inner Dest IP],       |\r\n+    |                     |                               | [Inner Source Port], [Inner Dest Port]    |\r\n+    |        tunnel       +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_IPV4_TUN_MAC_IPV4_FRAG    | [Out Dest IP], [VNI/GRE_KEY],             |\r\n+    |                     |                               | [Inner Dest MAC],                         |\r\n+    |                     |                               | [Inner Source IP], [Inner Dest IP]        |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_IPV4_TUN_MAC_IPV4_PAY     | [Out Dest IP], [VNI/GRE_KEY],             |\r\n+    |                     |                               | [Inner Dest MAC],                         |\r\n+    |                     |                               | [Inner Source IP], [Inner Dest IP]        |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_IPV4_TUN_MAC_IPV4_UDP_PAY\t| [Out Dest IP], [VNI/GRE_KEY],             |\r\n+    |                     |                               | [Inner Dest MAC],                         |\r\n+    |                     |                               | [Inner Source IP],[Inner Dest IP],        |\r\n+    |                     |                               | [Inner Source Port], [Inner Dest Port]    |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_IPV4_TUN_MAC_IPV4_TCP     | [Out Dest IP], [VNI/GRE_KEY],             |\r\n+    |                     |                               | [Inner Dest MAC],                         |\r\n+    |                     |                               | [Inner Source IP], [Inner Dest IP],       |\r\n+    |                     |                               | [Inner Source Port], [Inner Dest Port]    |\r\n+    +---------------------+-------------------------------+-------------------------------------------+\r\n+    |  ethertype filter   | ethertype filter_PPPOED       | [Ether type]                              |\r\n+    +---------------------+-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_VLAN_PPPOE_IPV4_PAY       | [Dest MAC], [VLAN], [seid],               |\r\n+    |                     | _session_id_proto_id          | [pppoe_proto_id]                          |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                \t    | MAC_VLAN_PPPOE_IPV6_PAY       | [Dest MAC], [VLAN], [seid],               |\r\n+    |                     | _session_id_proto_id          | [pppoe_proto_id]                          |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_PPPOE_IPV4_PAY_session_id | [Dest MAC], [seid], [pppoe_proto_id]      |\r\n+    |                     | _proto_id                     |                                           |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_PPPOE_IPV6_PAY_session_id | [Dest MAC], [seid], [pppoe_proto_id]      |\r\n+    |                     | _proto_id                     |                                           |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_PPPOE_IPV4_PAY_IP_address | [Source IP], [Dest IP]                    |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_PPPOE_IPV4_UDP_PAY        | [Source IP], [Dest IP],                   |\r\n+    |                     |                               | [Source Port], [Dest Port]                |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_PPPOE_IPV4_UDP_PAY        | [Source IP], [Dest IP]                    |\r\n+    |                     | _non_src_dst_port             |                                           |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_PPPOE_IPV4_TCP_PAY        | [Source IP], [Dest IP],                   |\r\n+    |                     |                               | [Source Port], [Dest Port]                |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_PPPOE_IPV4_TCP_PAY        | [Source IP], [Dest IP]                    |\r\n+    |                     | _non_src_dst_port             |                                           |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_PPPOE_IPV6_PAY_IP_address | [Source IP], [Dest IP]                    |\r\n+    |      PPPOES         +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_PPPOE_IPV6_UDP_PAY        | [Source IP], [Dest IP],                   |\r\n+    |                     |                               | [Source Port], [Dest Port]                |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_PPPOE_IPV6_UDP_PAY        | [Source IP], [Dest IP]                    |\r\n+    |                     | _non_src_dst_port             |                                           |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_PPPOE_IPV6_TCP_PAY        | [Source IP], [Dest IP],                   |\r\n+    |                     |                               | [Source Port], [Dest Port]                |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_PPPOE_IPV6_TCP_PAY        | [Source IP], [Dest IP],                   |\r\n+    |                     | _non_src_dst_port             |                                           |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_VLAN_PPPOE_IPV4_PAY       | [VLAN], [Source IP], [Dest IP]            |\r\n+    |                     | _IP_address                   |                                           |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_VLAN_PPPOE_IPV4_UDP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r\n+    |                     |                               | [Source Port], [Dest Port]                |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_VLAN_PPPOE_IPV4_UDP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r\n+    |                     | _non_src_dst_port             |                                           |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_VLAN_PPPOE_IPV4_TCP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r\n+    |                     |                               | [Source Port], [Dest Port]                |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_VLAN_PPPOE_IPV4_TCP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r\n+    |                     | _non_src_dst_port             |                                           |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_VLAN_PPPOE_IPV6_PAY       | [VLAN], [Source IP], [Dest IP]            |\r\n+    |                     | _IP_address                   |                                           |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_VLAN_PPPOE_IPV6_UDP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r\n+    |                     |                               | [Source Port], [Dest Port]                |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_VLAN_PPPOE_IPV6_UDP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r\n+    |                     | _non_src_dst_port             |                                           |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_VLAN_PPPOE_IPV6_TCP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r\n+    |                     |                               | [Source Port], [Dest Port]                |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_VLAN_PPPOE_IPV6_TCP_PAY   | [VLAN], [Source IP], [Dest IP]            |\r\n+    |                     | _non_src_dst_port             |                                           |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_PPPOE_LCP_PAY             | [Dest MAC], [seid], [pppoe_proto_id]      |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_PPPOE_IPCP_PAY            | [Dest MAC], [seid], [pppoe_proto_id]      |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_VLAN_PPPOE_LCP_PAY        | [Dest MAC], [VLAN], [seid],               |\r\n+    |                     |                               | [pppoe_proto_id]                          |\r\n+    |                     +-------------------------------+-------------------------------------------+\r\n+    |                     | MAC_VLAN_PPPOE_IPCP_PAY       | [Dest MAC], [VLAN], [seid],               |\r\n+    |                     |                               | [pppoe_proto_id]                          |\r\n+    +---------------------+-------------------------------+-------------------------------------------+\r\n+\r\n+..note::\r\n+\r\n+    the basic switch function of supported pattern is covered by cvl_switch_filter_test_plan.rst and cvl_switch_filter_pppoe_test_plan.rst.\r\n+    this test plan is designed to check the flow priority in switch, so we only select some patterns not all matrix in test plan.\r\n+\r\n+\r\n+Test Case 1: MAC_IPV4_PAY\r\n+-------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / ipv4 src is <ipv4 src> dst is <ipv4 dst> tos is <tos> ttl is <ttl> / end actions queue index 1 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / ipv4 src is <ipv4 src> dst is <ipv4 dst> tos is <tos> ttl is <ttl> / end actions queue index 4 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\")/IP(src=\"<ipv4 src>\",dst=\"<ipv4 dst>\",tos=<tos>,ttl=<ttl>)/(\"X\"*480)], iface=\"<tester interface>\")\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac change inputset>\")/IP(src=\"<ipv4 src>\",dst=\"<ipv4 dst>\",tos=<tos>,ttl=<ttl>)/(\"X\"*480)], iface=\"<tester interface>\")\r\n+  >>> sendp([Ether(dst=\"<dst mac>\")/IP(src=\"<ipv4 src change inputset>\",dst=\"<ipv4 dst>\",tos=<tos>,ttl=<ttl>)/(\"X\"*480)], iface=\"<tester interface>\")\r\n+  >>> sendp([Ether(dst=\"<dst mac>\")/IP(src=\"<ipv4 src>\",dst=\"<ipv4 dst change inputset>\",tos=<tos>,ttl=<ttl>)/(\"X\"*480)], iface=\"<tester interface>\")\r\n+  >>> sendp([Ether(dst=\"<dst mac>\")/IP(src=\"<ipv4 src>\",dst=\"<ipv4 dst>\",tos=<tos change inputset>,ttl=<ttl>)/(\"X\"*480)], iface=\"<tester interface>\")\r\n+  >>> sendp([Ether(dst=\"<dst mac>\")/IP(src=\"<ipv4 src>\",dst=\"<ipv4 dst>\",tos=<tos>,ttl=<ttl change inputset>)/(\"X\"*480)], iface=\"<tester interface>\")\r\n+\r\n+\r\n+Test Case 2: MAC_IPV4_UDP_PAY\r\n+-----------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> tos is <tos> / udp src is <sport> dst is <dport> / end actions rss queues 4 5 end / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> tos is <tos> / udp src is <sport> dst is <dport> / end actions queue index 2 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether()/IP(src=\"<ipv4 src>\",dst=\"<ipv4 dst>\",tos=<tos>)/UDP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether()/IP(src=\"<ipv4 src change inputset>\",dst=\"<ipv4 dst>\",tos=<tos>)/UDP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\")\r\n+  >>> sendp([Ether()/IP(src=\"<ipv4 src>\",dst=\"<ipv4 dst change inputset>\",tos=<tos>)/UDP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\")\r\n+  >>> sendp([Ether()/IP(src=\"<ipv4 src>\",dst=\"<ipv4 dst>\",tos=<tos change inputset>)/UDP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\")\r\n+  >>> sendp([Ether()/IP(src=\"<ipv4 src>\",dst=\"<ipv4 dst>\",tos=<tos>)/UDP(sport=<sport change inputset>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\")\r\n+  >>> sendp([Ether()/IP(src=\"<ipv4 src>\",dst=\"<ipv4 dst>\",tos=<tos>)/UDP(sport=<sport>,dport=<dport change inputset>)/Raw(\"x\"*80)],iface=\"<tester interface>\")\r\n+\r\n+\r\n+Test Case 3: MAC_IPV6_PAY\r\n+-------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 src is <ipv6 src> dst is <ipv6 dst> / end actions rss queues 4 5 end / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv6 src is <ipv6 src> dst is <ipv6 dst> / end actions queue index 8 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether()/IPv6(src=\"<ipv6 src>\", dst=\"<ipv6 dst>\")/(\"X\"*480)], iface=\"<tester interface>\")\r\n+  >>> sendp([Ether()/IPv6(src=\"<ipv6 src>\", dst=\"<ipv6 dst>\")/IPv6ExtHdrFragment()/(\"X\"*480)], iface=\"<tester interface>\")\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether()/IPv6(src=\"<ipv6 src change inputset>\", dst=\"<ipv6 dst>\")/(\"X\"*480)], iface=\"<tester interface>\")\r\n+  >>> sendp([Ether()/IPv6(src=\"<ipv6 src>\", dst=\"<ipv6 dst change inputset>\")/(\"X\"*480)], iface=\"<tester interface>\")\r\n+  >>> sendp([Ether()/IPv6(src=\"<ipv6 src change inputset>\", dst=\"<ipv6 dst>\")/IPv6ExtHdrFragment()/(\"X\"*480)], iface=\"<tester interface>\")\r\n+  >>> sendp([Ether()/IPv6(src=\"<ipv6 src>\", dst=\"<ipv6 dst change inputset>\")/IPv6ExtHdrFragment()/(\"X\"*480)], iface=\"<tester interface>\")\r\n+\r\n+\r\n+Test Case 4: MAC_IPV6_TCP\r\n+-------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv6 dst is <ipv6 dst> tc is <tc> / tcp src is <sport> dst is <dport> / end actions rss queues 4 5 end / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv6 dst is <ipv6 dst> tc is <tc> / tcp src is <sport> dst is <dport> / end actions queue index 3 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether()/IPv6(src=\"<ipv6 src>\",dst=\"<ipv6 dst>\",tc=<tc>)/TCP(sport=<sport>,dport=23)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether()/IPv6(src=\"<ipv6 src>\",dst=\"<ipv6 dst change inputset>\",tc=<tc>)/TCP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IPv6(src=\"<ipv6 src>\",dst=\"<ipv6 dst>\",tc=<tc change inputset>)/TCP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IPv6(src=\"<ipv6 src>\",dst=\"<ipv6 dst>\",tc=<tc>)/TCP(sport=<sport change inputset>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IPv6(src=\"<ipv6 src>\",dst=\"<ipv6 dst>\",tc=<tc>)/TCP(sport=<sport>,dport=<dport change inputset>)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 5: MAC_IPV4_VXLAN_IPV4_FRAG\r\n+-------------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions rss queues 2 3 end / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 5 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst>\",frag=5)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src=\"<ipv4 src change inputset>\", dst=\"<ipv4 dst>\",frag=5)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst change inputset>\",frag=5)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst>\",frag=5)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 6: MAC_IPV4_VXLAN_IPV4_PAY\r\n+------------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 5 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions rss queues 2 3 end / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst>\")/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst>\")/TCP()/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src=\"<ipv4 src change inputset>\", dst=\"<ipv4 dst>\")/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst change inputset>\")/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst>\")/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst>\")/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src=\"<ipv4 src change inputset>\", dst=\"<ipv4 dst>\")/TCP()/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst change inputset>\")/TCP()/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP()/UDP()/VXLAN()/Ether()/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst>\")/TCP()/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 7: MAC_IPV4_NVGRE_MAC_IPV4_UDP_PAY\r\n+--------------------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 dst is <ipv4 dst> / nvgre tni is <tni> / eth dst is <dst mac> / ipv4 src is <inner ipv4 src> dst is <inner ipv4 dst> / udp src is <sport> dst is <dport> / end actions rss queues 2 3 end / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 dst is <ipv4 dst> / nvgre tni is <tni> / eth dst is <dst mac> / ipv4 src is <inner ipv4 src> dst is <inner ipv4 dst> / udp src is <sport> dst is <dport> / end actions queue index 4 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst>\")/NVGRE(TNI=<tni>)/Ether(dst=\"<dst mac>\")/IP(src=\"<inner ipv4 src>\", dst=\"<inner ipv4 dst>\")/UDP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)], iface=\"<tester interface>\", count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst change inputset>\")/NVGRE(TNI=<tni>)/Ether(dst=\"<dst mac>\")/IP(src=\"<inner ipv4 src>\", dst=\"<inner ipv4 dst>\")/UDP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)], iface=\"<tester interface>\", count=1)\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst>\")/NVGRE(TNI=<tni change inputset>)/Ether(dst=\"<dst mac>\")/IP(src=\"<inner ipv4 src>\", dst=\"<inner ipv4 dst>\")/UDP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)], iface=\"<tester interface>\", count=1)\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst>\")/NVGRE(TNI=<tni>)/Ether(dst=\"<dst mac change inputset>\")/IP(src=\"<inner ipv4 src>\", dst=\"<inner ipv4 dst>\")/UDP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)], iface=\"<tester interface>\", count=1)\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst>\")/NVGRE(TNI=<tni>)/Ether(dst=\"<dst mac>\")/IP(src=\"<inner ipv4 src change inputset>\", dst=\"<inner ipv4 dst>\")/UDP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)], iface=\"<tester interface>\", count=1)\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst>\")/NVGRE(TNI=<tni>)/Ether(dst=\"<dst mac>\")/IP(src=\"<inner ipv4 src>\", dst=\"<inner ipv4 dst change inputset>\")/UDP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)], iface=\"<tester interface>\", count=1)\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst>\")/NVGRE(TNI=<tni>)/Ether(dst=\"<dst mac>\")/IP(src=\"<inner ipv4 src>\", dst=\"<inner ipv4 dst>\")/UDP(sport=<sport change inputset>,dport=<dport>)/Raw(\"x\"*80)], iface=\"<tester interface>\", count=1)\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst>\")/NVGRE(TNI=<tni>)/Ether(dst=\"<dst mac>\")/IP(src=\"<inner ipv4 src>\", dst=\"<inner ipv4 dst>\")/UDP(sport=<sport>,dport=<dport change inputset>)/Raw(\"x\"*80)], iface=\"<tester interface>\", count=1)\r\n+\r\n+\r\n+Test Case 8: MAC_IPV4_NVGRE_MAC_IPV4_TCP\r\n+----------------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 dst is <ipv4 dst> / nvgre tni is <tni> / eth dst is <dst mac>  / ipv4 src is <inner ipv4 src> dst is <inner ipv4 dst> / tcp src is <sport> dst is <dport> / end actions queue index 5 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 dst is <ipv4 dst> / nvgre tni is <tni> / eth dst is <dst mac>  / ipv4 src is <inner ipv4 src> dst is <inner ipv4 dst> / tcp src is <sport> dst is <dport> / end actions rss queues 2 3 end / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst>\")/NVGRE(TNI=<tni>)/Ether(dst=\"<dst mac>\")/IP(src=\"<inner ipv4 src>\", dst=\"<inner ipv4 dst>\")/TCP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst change inputset>\")/NVGRE(TNI=<tni>)/Ether(dst=\"<dst mac>\")/IP(src=\"<inner ipv4 src>\", dst=\"<inner ipv4 dst>\")/TCP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst>\")/NVGRE(TNI=<tni change inputset>)/Ether(dst=\"<dst mac>\")/IP(src=\"<inner ipv4 src>\", dst=\"<inner ipv4 dst>\")/TCP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst>\")/NVGRE(TNI=<tni>)/Ether(dst=\"<dst mac change inputset>\")/IP(src=\"<inner ipv4 src>\", dst=\"<inner ipv4 dst>\")/TCP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst>\")/NVGRE(TNI=<tni>)/Ether(dst=\"<dst mac>\")/IP(src=\"<inner ipv4 src change inputset>\", dst=\"<inner ipv4 dst>\")/TCP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst>\")/NVGRE(TNI=<tni>)/Ether(dst=\"<dst mac>\")/IP(src=\"<inner ipv4 src>\", dst=\"<inner ipv4 dst change inputset>\")/TCP(sport=<sport>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst>\")/NVGRE(TNI=<tni>)/Ether(dst=\"<dst mac>\")/IP(src=\"<inner ipv4 src>\", dst=\"<inner ipv4 dst>\")/TCP(sport=<sport change inputset>,dport=<dport>)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether()/IP(dst=\"<ipv4 dst>\")/NVGRE(TNI=<tni>)/Ether(dst=\"<dst mac>\")/IP(src=\"<inner ipv4 src>2\", dst=\"<inner ipv4 dst>\")/TCP(sport=<sport>,dport=<dport change inputset>)/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 9: ethertype filter_PPPOED\r\n+------------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth type is <ethertype> / end actions queue index 4 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth type is <ethertype> / end actions queue index 2 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\", type=<ethertype>)/Raw(\"x\" *80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\")/PPPoED()/Raw(\"x\" *80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\", type=<ethertype change inputset>)/Raw(\"x\" *80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\")/PPPoE()/Raw(\"x\" *80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 10: MAC_VLAN_PPPOE_IPV4_PAY_session_id_proto_id\r\n+---------------------------------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <ipv4 proto_id> / end actions queue index 1 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <ipv4 proto_id> / end actions queue index 2 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<proto_id>)/IP()/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac change inputset>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci change inputset>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid change inputset>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 11: MAC_VLAN_PPPOE_IPV6_PAY_session_id_proto_id\r\n+---------------------------------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <ipv6 proto_id> / end actions queue index 1 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <ipv6 proto_id> / end actions queue index 2 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac change inputset>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci change inputset>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid change inputset>)/PPP(proto=<ipv6 proto_id>)/IPv6()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 12: MAC_PPPOE_IPV4_PAY_IP_address\r\n+-------------------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / pppoes / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 1 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / pppoes / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 2 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst>\")/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src=\"<ipv4 src change inputset>\", dst=\"<ipv4 dst>\")/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8864)/PPPoE(sessionid=3)/PPP(proto=0x0021)/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst change inputset>\")/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 13: MAC_PPPOE_IPV6_UDP_PAY\r\n+------------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / pppoes / ipv6 dst is <ipv6 dst> / udp src is <sport> dst is <dport> / end actions queue index 1 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / pppoes / ipv6 dst is <ipv6 dst> / udp src is <sport> dst is <dport> / end actions queue index 2 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6(src=\"<ipv6 src>\", dst=\"<ipv6 dst>\")/UDP(sport=<sport>,dport=<dport>)/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6(src=\"<ipv6 src>\", dst=\"<ipv6 dst change inputset>\")/UDP(sport=<sport>,dport=<dport>)/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6(src=\"<ipv6 src>\", dst=\"<ipv6 dst>\")/UDP(sport=<sport change inputset>,dport=<dport>)/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6(src=\"<ipv6 src>\", dst=\"<ipv6 dst>\")/UDP(sport=<sport>,dport=<dport change inputset>)/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 14: MAC_VLAN_PPPOE_IPV4_TCP_PAY_non_src_dst_port\r\n+----------------------------------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / vlan tci is <tci> / pppoes / ipv4 src is <ipv4 src> dst is <ipv4 dst> / tcp / end actions queue index 1 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / vlan tci is <tci> / pppoes / ipv4 src is <ipv4 src> dst is <ipv4 dst> / tcp / end actions queue index 2 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst>\")/TCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci change inputset>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst>\")/TCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP(src=\"<ipv4 src change inputset>\", dst=\"<ipv4 dst>\")/TCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst change inputset>\")/TCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst>\")/UDP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP(src=\"<ipv4 src>\", dst=\"<ipv4 dst>\")/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 15: MAC_VLAN_PPPOE_IPV6_PAY_IP_address\r\n+------------------------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / vlan tci is <tci> / pppoes / ipv6 src is <ipv6 src> / end actions queue index 1 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / vlan tci is <tci> / pppoes / ipv6 src is <ipv6 src> / end actions queue index 2 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6(src=\"<ipv6 src>\", dst=\"<ipv6 dst>\")/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci change inputset>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6(src=\"<ipv6 src>\", dst=\"<ipv6 dst>\")/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv6 proto_id>)/IPv6(src=\"<ipv6 src change inputset>\", dst=\"<ipv6 dst>\")/Raw(\"x\"*80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 16: MAC_PPPOE_LCP_PAY\r\n+-------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / pppoes seid is <seid> / pppoe_proto_id is <LCP proto_id> / end actions queue index 1 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / pppoes seid is <seid> / pppoe_proto_id is <LCP proto_id> / end actions queue index 2 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<LCP proto_id>)/PPP_LCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac change inputset>\",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<LCP proto_id>)/PPP_LCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8864)/PPPoE(sessionid=<seid change inputset>)/PPP(proto=<LCP proto_id>)/PPP_LCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 17: MAC_PPPOE_IPCP_PAY\r\n+--------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / pppoes seid is <seid> / pppoe_proto_id is <IPCP proto_id> / end actions queue index 1 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / pppoes seid is <seid> / pppoe_proto_id is <IPCP proto_id> / end actions queue index 2 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<IPCP proto_id>)/PPP_IPCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac change inputset>\",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<IPCP proto_id>)/PPP_IPCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8864)/PPPoE(sessionid=<seid change inputset>)/PPP(proto=<IPCP proto_id>)/PPP_IPCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 18: MAC_VLAN_PPPOE_LCP_PAY\r\n+------------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <LCP proto_id> / end actions queue index 1 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <LCP proto_id> / end actions queue index 2 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<LCP proto_id>)/PPP_LCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac change inputset>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<LCP proto_id>)/PPP_LCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci change inputset>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<LCP proto_id>)/PPP_LCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid change inputset>)/PPP(proto=<LCP proto_id>)/PPP_LCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 19: MAC_VLAN_PPPOE_IPCP_PAY\r\n+-------------------------------------\r\n+rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <IPCP proto_id> / end actions queue index 1 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <IPCP proto_id> / end actions queue index 2 / end\r\n+\r\n+matched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<IPCP proto_id>)/PPP_IPCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+mismatched packets::\r\n+\r\n+  >>> sendp([Ether(dst=\"<dst mac change inputset>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<IPCP proto_id>)/PPP_IPCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci change inputset>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<IPCP proto_id>)/PPP_IPCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid change inputset>)/PPP(proto=<IPCP proto_id>)/PPP_IPCP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+  >>> sendp([Ether(dst=\"<dst mac>\",type=0x8100)/Dot1Q(vlan=<tci>,type=0x8864)/PPPoE(sessionid=<seid>)/PPP(proto=<ipv4 proto_id>)/IP()/Raw(\"x\" * 80)],iface=\"<tester interface>\",count=1)\r\n+\r\n+\r\n+Test Case 20: check flow priority filter\r\n+----------------------------------------\r\n+1. launch testpmd with --log-level=\"ice,8\"\r\n+\r\n+2. create rules with priority 0, check the rule is created to switch with a log \"Succeeded to create (2) flow\"::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 dst is <ipv4 src> / nvgre tni is <tni> / eth / ipv4 src is <inner ipv4 src> dst is <inner ipv4 dst> / end actions queue index 3 / end\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / tcp src is <sport> dst is <dport> / end actions rss queues 4 5 end / end\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <ipv6 proto_id> / end actions drop / end\r\n+\r\n+3. create rules with priority 0, and the action is mark, check the rule is created to fdir with a log \"Succeeded to create (1) flow\"::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / tcp src is <sport> dst is <dport> / end actions rss queues 4 5 end / mark id 3 / end\r\n+\r\n+4. create rules with priority 1, check the rule is created to switch with a log \"Succeeded to create (2) flow\"::\r\n+\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / tcp src is <sport> dst is <dport> / end actions rss queues 4 5 end / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <ipv6 proto_id> / end actions drop / end\r\n+\r\n+5. create rules with priority 1, and the action is mark, check the rule create fail::\r\n+\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 dst is <ipv4 src> / nvgre tni is <tni> / eth / ipv4 src is <inner ipv4 src> dst is <inner ipv4 dst> / end actions queue index 3 / mark id 3 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 / udp / vxlan / eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / tcp src is <sport> dst is <dport> / end actions rss queues 4 5 end / mark id 3 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth dst is <dst mac> / vlan tci is <tci> / pppoes seid is <seid> / pppoe_proto_id is <ipv6 proto_id> / end actions drop / mark id 3 / end\r\n+\r\n+\r\n+Test Case 21: negative test cases\r\n+---------------------------------\r\n+1. create rules, check all these rules can not be created::\r\n+\r\n+    testpmd> flow create 0 priority 2 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 3 / end\r\n+    testpmd> flow create 0 priority a ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 3 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions mark / rss / end\r\n+\r\n+\r\n+Test Case 22: exclusive test cases\r\n+----------------------------------\r\n+Subcase 1: same pattern/input set/action different priority\r\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n+1. create same pattern, input set and action but different priority, check these two rules can be created::\r\n+\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 3 / end\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 3 / end\r\n+\r\n+2. send matched pkts and check queue 3 receive this pkt::\r\n+\r\n+    >>> sendp([Ether(dst=\"<dst mac>\")/IP(src=\"<ipv4 src>\",dst=\"<ipv4 dst>\")/TCP()/(\"X\"*480)], iface=\"<tester interface>\", count=1)\r\n+\r\n+3. destroy rules::\r\n+\r\n+    flow flush 0\r\n+\r\n+Subcase 2: same pattern/input set/priority different action\r\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n+1. create same pattern, input set and priority but different action, check the second rule can not be created::\r\n+\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions queue index 3 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 src is <ipv4 src> dst is <ipv4 dst> / end actions rss queues 4 5 end / end\r\n+\r\n+Subcase 3: some rules overlap\r\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n+1. create rules::\r\n+\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth / vlan / vlan / pppoes / pppoe_proto_id is 0x21 / end actions queue index 3 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / vlan / vlan / pppoes seid is 1 / ipv4 / end actions queue index 2 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / vlan / vlan tci is 12 / end actions queue index 4 / end\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth dst is 00:00:00:01:03:13 / vlan / vlan / end actions rss queues 1 2 end / end\r\n+    testpmd> flow create 0 priority 0 ingress pattern eth dst is 00:00:00:01:03:03 / end actions queue index 8 / end\r\n+    testpmd> flow create 0 priority 1 ingress pattern eth / vlan tci is 1 / vlan tci is 2 / end actions queue index 4 / end\r\n+\r\n+2. check all the rules exist in the list::\r\n+\r\n+    flow list 0\r\n+\r\n+3. send pkt which match rule 0 and rule 1, check the pkt can be received by queue 3::\r\n+\r\n+    >>> sendp([Ether(type=0x8100)/Dot1Q(vlan=1,type=0x8100)/Dot1Q(vlan=0x2,type=0x8864)/PPPoE(sessionid=0x1)/PPP(proto=0x21)/IP()/UDP(dport=23)/(\"X\"*480)], iface=\"<tester interface>\")\r\n+\r\n+4. destroy rule 0, repeat step 3 and check the pkt can be received by queue 2::\r\n+\r\n+    flow destroy 0 rule 0\r\n+\r\n+5. send pkt which match rule 2 and rule 3, check the pkt can be received by queue 1 or 2::\r\n+\r\n+    >>> sendp([Ether(dst=\"00:00:00:01:03:13\")/Dot1Q(vlan=1)/Dot1Q(vlan=12)/Raw(\"x\"*480)], iface=\"<tester interface>\", count=1)\r\n+\r\n+6. destroy rule 3, repeat step 5 and check the pkt can be received by queue 4::\r\n+\r\n+    flow destroy 0 rule 3\r\n+\r\n+7. send pkt which match rule 4 and rule 5, check the pkt will be received by queue 8::\r\n+\r\n+    >>> sendp([Ether(dst=\"00:00:00:01:03:03\")/Dot1Q(vlan=1)/Dot1Q(vlan=2)/Raw(\"x\"*480)], iface=\"<tester interface>\", count=1)\r\n+\r\n+8. destroy rule 4, repeat step 7 and check the pkts can be received by queue 4::\r\n+\r\n+    flow destroy 0 rule 3\r\ndiff --git a/test_plans/index.rst b/test_plans/index.rst\nindex 68250fca..e614c425 100644\n--- a/test_plans/index.rst\n+++ b/test_plans/index.rst\n@@ -58,6 +58,7 @@ The following are the test plans for the DPDK DTS automated test system.\n     cvl_dcf_switch_filter_gtpu_test_plan\n     cvl_dcf_flow_priority_test_plan\n     cvl_dcf_qos_test_plan\n+    cvl_flow_priority_test_plan\n     cvl_ecpri_test_plan\n     cvl_fdir_test_plan\n     cvl_ip_fragment_rte_flow_test_plan\n",
    "prefixes": [
        "V1"
    ]
}