get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 114255,
    "url": "http://patchwork.dpdk.org/api/patches/114255/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dts/patch/20220727035054.1412427-4-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": "<20220727035054.1412427-4-qi.fu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/20220727035054.1412427-4-qi.fu@intel.com",
    "date": "2022-07-27T03:50:53",
    "name": "[V1,3/4] test_plans:add test plan for ice rss protocol agnostic flow offloading",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "af98ff8d07e0fab4b5a5d5d0e6d0510e857861db",
    "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/20220727035054.1412427-4-qi.fu@intel.com/mbox/",
    "series": [
        {
            "id": 24096,
            "url": "http://patchwork.dpdk.org/api/series/24096/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dts/list/?series=24096",
            "date": "2022-07-27T03:50:50",
            "name": "test_plans: add test plans for CVL PF/VF FDIR/RSS protocol agnostic flow offloading",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/24096/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/114255/comments/",
    "check": "pending",
    "checks": "http://patchwork.dpdk.org/api/patches/114255/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 44115A00C4;\n\tWed, 27 Jul 2022 05:51:17 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 3A4ED40E03;\n\tWed, 27 Jul 2022 05:51:17 +0200 (CEST)",
            "from mga04.intel.com (mga04.intel.com [192.55.52.120])\n by mails.dpdk.org (Postfix) with ESMTP id 2106B400D7\n for <dts@dpdk.org>; Wed, 27 Jul 2022 05:51:14 +0200 (CEST)",
            "from orsmga006.jf.intel.com ([10.7.209.51])\n by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 26 Jul 2022 20:51:14 -0700",
            "from dpdk-qifu-cxl.sh.intel.com ([10.67.119.10])\n by orsmga006.jf.intel.com with ESMTP; 26 Jul 2022 20:51:13 -0700"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1658893875; x=1690429875;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=ulr9ttt7plFEkRzhbqFMlH/X3wWqXhdT6CDPXfWxLTM=;\n b=IrnnUX1i/Ffl7azTmoqaIDisVuqDKTGeYl/wq1DkgTOjiaHW31JVwbY9\n ooiY8OQ6ADEVsVxM+z9vkUYmv/jJTwp4BQo7key9CxZALJDyf1dbeFs0h\n l3OtJEojIKBOI+R5tKBtvTBp0B40fvIZrBIxvlxIpvUZWJ4hgfuzz/GMB\n EqKwfUObaBjKQUN6u3dI3rXWjSGABJk08JcZ6iR7IownmUk7bVbCNV5H7\n 3oZrghA6Wk/ltX+eHzGCU/qX9GD9nF149V7Q9SJpU2W7ALGuB8T1CICdW\n gIsy2ZazPeNB2RYkfjtXydvye8PnGXlVFHf3TiONUQ9u68jhMGog3XMQa g==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6400,9594,10420\"; a=\"286891998\"",
            "E=Sophos;i=\"5.93,194,1654585200\"; d=\"scan'208\";a=\"286891998\"",
            "E=Sophos;i=\"5.93,194,1654585200\"; d=\"scan'208\";a=\"575798017\""
        ],
        "X-ExtLoop1": "1",
        "From": "Qi Fu <qi.fu@intel.com>",
        "To": "dts@dpdk.org",
        "Cc": "Qi Fu <qi.fu@intel.com>",
        "Subject": "[dts][PATCH V1 3/4]test_plans:add test plan for ice rss protocol\n agnostic flow offloading",
        "Date": "Wed, 27 Jul 2022 11:50:53 +0800",
        "Message-Id": "<20220727035054.1412427-4-qi.fu@intel.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20220727035054.1412427-1-qi.fu@intel.com>",
        "References": "<20220727035054.1412427-1-qi.fu@intel.com>",
        "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 ice rss protocol agnostic flow offloading.\n\nSigned-off-by: Qi Fu <qi.fu@intel.com>\n---\n ...e_rss_protocol_agnostic_flow_test_plan.rst | 368 ++++++++++++++++++\n test_plans/index.rst                          |   1 +\n 2 files changed, 369 insertions(+)\n create mode 100644 test_plans/ice_rss_protocol_agnostic_flow_test_plan.rst",
    "diff": "diff --git a/test_plans/ice_rss_protocol_agnostic_flow_test_plan.rst b/test_plans/ice_rss_protocol_agnostic_flow_test_plan.rst\nnew file mode 100644\nindex 00000000..ab1e1b35\n--- /dev/null\n+++ b/test_plans/ice_rss_protocol_agnostic_flow_test_plan.rst\n@@ -0,0 +1,368 @@\n+.. Copyright (c) <2022>, 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 PF enable Protocol agnostic flow offloading in RSS\r\n+======================================================\r\n+\r\n+Description\r\n+===========\r\n+CVL PF enable protocol agnostic flow offloading in rss, that means we can use raw packet filter instead of naming filter(legacy flow offloading).\r\n+As the raw packet filter using spec and mask to describr pattern and input set,\r\n+the protocol agnostic flow offloading is more flexible and customizable compared with legacy flow offloading.\r\n+To reduce redundancy, we don't check all the patterns and input set which is covered by naming filter test cases.\r\n+this plan only cover below test hints to check the feasibility of protocol agnostic flow offloading:\r\n+\r\n+1. try RSS with regular 5 tuples for any UDP or TCP packet\r\n+2. try RSS with VXLAN inner IP match (make sure VXLAN tunnel port has been configured either by DCF or swtichdev)\r\n+3. try RSS with GTPU inner IP match\r\n+4. try RSS with GTPU outer IP match\r\n+5. try RSS with un-word-aligned key\r\n+\r\n+And all the rules are created by packageviewer(CVL parser emulator).\r\n+..note::\r\n+there will be conflict between raw packet filter and naming filter, so need to disable default rss when testing raw packet filter.\r\n+\r\n+Prerequisites\r\n+=============\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+5. Import layers when start scapy::\r\n+\r\n+    >>> import sys\r\n+    >>> from scapy.contrib.gtp import *\r\n+\r\n+\r\n+Test Case\r\n+=========\r\n+common steps\r\n+------------\r\n+toeplitz cases:\r\n+1. validate rules.\r\n+2. create rules and list rules.\r\n+3. send a basic hit pattern packet,record the hash value.\r\n+   check the packet distributed to queue by rss.\r\n+4. send hit pattern packets with changed input set in the rule.\r\n+   check the received packets have different hash value with basic packet.ICE_\r\n+   check all the packets are distributed to queues by rss.\r\n+5. send hit pattern packets with changed input set not in the rule.\r\n+   check the received packet have same hash value with the basic packet.\r\n+   check all the packets are distributed to queues by rss.\r\n+   note: if there is not this type packet in the case, omit this step.\r\n+6. destroy the rule and list rule. check the flow list has no rule.\r\n+\r\n+symmetric cases:\r\n+1. validate rules.\r\n+2. create rules and list rules.\r\n+3. send a basic hit pattern packet,record the hash value.\r\n+4. send a hit pattern packet with switched value of input set in the rule.\r\n+   check the received packets have same hash value.\r\n+   check both the packets are distributed to queues by rss.\r\n+5. destroy the rule and list rule.\r\n+6. send the packet in step 4.\r\n+   check the received packet has different hash value with which in step 3(including the case has no hash value).\r\n+\r\n+Test case 1: ICE_RSS_MAC/IPv4/UDP\r\n+---------------------------------\r\n+rule::\r\n+\r\n+    flow create 0 ingress pattern raw pattern spec 00112233445500000000000208004500001C0000000000110000C0A80014C0A800150016001700080000 pattern mask 0000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF00000000 / end actions rss queues end / end\r\n+\r\n+basic packet::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/UDP(sport=22,dport=23)/Raw('x' * 80)],iface=\"ens786f0\")\r\n+\r\n+hit pattern and defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.10.20\",dst=\"192.168.0.21\")/UDP(sport=22,dport=23)/Raw('x' * 80)],iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\",dst=\"192.168.10.21\")/UDP(sport=22,dport=23)/Raw('x' * 80)],iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/UDP(sport=32,dport=23)/Raw('x' * 80)],iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/UDP(sport=22,dport=33)/Raw('x' * 80)],iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/TCP(sport=22,dport=23)/Raw('x' * 80)],iface=\"ens786f0\")\r\n+\r\n+hit pattern but not defined input set::\r\n+\r\n+\r\n+Test case 2: ICE_RSS_MAC/IPv6/TCP_sysmetric\r\n+-------------------------------------------\r\n+rule::\r\n+\r\n+    flow create 0 ingress pattern raw pattern spec 00112233445500000000000286DD6000000000140600CDCD910A222254988475111139001010CDCD910A2222549884751111390020200016001700000000000000005000000000000000 pattern mask 00000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 / end actions rss func symmetric_toeplitz queues end / end\r\n+\r\n+packets::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", src=\"CDCD:910A:2222:5498:8475:1111:3900:1010\")/TCP(sport=22,dport=23)/(\"X\"*480)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:2020\", src=\"CDCD:910A:2222:5498:8475:1111:3900:1010\")/TCP(sport=23,dport=22)/(\"X\"*480)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:1010\", src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=22,dport=23)/(\"X\"*480)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IPv6(dst=\"CDCD:910A:2222:5498:8475:1111:3900:1010\", src=\"CDCD:910A:2222:5498:8475:1111:3900:2020\")/TCP(sport=23,dport=22)/(\"X\"*480)], iface=\"ens786f0\")\r\n+\r\n+\r\n+Test case 3: ICE_RSS_MAC/IPv4/UDP/VXLAN/MAC/IPv4/PAY\r\n+----------------------------------------------------\r\n+rule::\r\n+\r\n+    flow create 0 ingress pattern raw pattern spec 00112233445500000000000208004500004600000000001100000101010102020202000012B50032000008000000000003000000000000010000000000020800450000140000000000000000C0A80014C0A80015 pattern mask 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF / end actions rss queues end / end\r\n+\r\n+basic packet::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/Raw('x' * 80)],iface=\"ens786f0\")\r\n+\r\n+hit pattern and defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.10.20\",dst=\"192.168.0.21\")/Raw('x' * 80)],iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.10.21\")/Raw('x' * 80)],iface=\"ens786f0\")\r\n+\r\n+hit pattern but not defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.10\")/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/Raw('x' * 80)],iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(dst=\"192.168.0.10\")/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/Raw('x' * 80)],iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN(vni=33)/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/Raw('x' * 80)],iface=\"ens786f0\")\r\n+\r\n+\r\n+Test case 4: ICE_RSS_MAC/IPv4/UDP/VXLAN/MAC/IPv4/UDP\r\n+----------------------------------------------------\r\n+rule::\r\n+\r\n+    flow create 0 ingress pattern raw pattern spec 00112233445500000000000208004500004E00000000001100000101010102020202000012B5003A0000080000000000000000000000000100000000000208004500001C0000000000110000C0A80014C0A800150000000000080000 pattern mask 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF0000000000000000 / end actions rss queues end / end\r\n+\r\n+basic packet::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/UDP()/(\"X\"*480)], iface=\"ens786f0\")\r\n+\r\n+hit pattern and defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.10.20\",dst=\"192.168.0.21\")/UDP()/(\"X\"*480)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.10.21\")/UDP()/(\"X\"*480)], iface=\"ens786f0\")\r\n+\r\n+hit pattern but not defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.10\")/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/UDP()/(\"X\"*480)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(dst=\"192.168.0.10\")/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/UDP()/(\"X\"*480)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN(vni=33)/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/UDP()/(\"X\"*480)], iface=\"ens786f0\")\r\n+\r\n+\r\n+Test case 5: ICE_RSS_MAC/IPv4/UDP/VXLAN/MAC/IPv4_sysmetric\r\n+----------------------------------------------------------\r\n+rule::\r\n+\r\n+    flow create 0 ingress pattern raw pattern spec 00112233445500000000000208004500004600000000001100000101010102020202000012B50032000008000000000000000000000000010000000000020800450000140000000000000000C0A80014C0A80015 pattern mask 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF / end actions rss func symmetric_toeplitz queues end / end\r\n+\r\n+packets::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/Raw('x' * 80)],iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.21\",dst=\"192.168.0.20\")/Raw('x' * 80)],iface=\"ens786f0\")\r\n+\r\n+\r\n+Test case 6: ICE_RSS_IPv4/UDP/VXLAN/MAC/IPv4_inner-l3-src-only\r\n+--------------------------------------------------------------\r\n+rule::\r\n+\r\n+    flow create 0 ingress pattern raw pattern spec 00112233445500000000000208004500004600000000001100000101010102020202000012B50032000008000000000000000000000000010000000000020800450000140000000000000000C0A80014C0A80015 pattern mask 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF00000000 / end actions rss queues end / end\r\n+\r\n+basic packet::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/(\"X\"*480)], iface=\"ens786f0\")\r\n+\r\n+hit pattern and defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.10.20\",dst=\"192.168.0.21\")/(\"X\"*480)], iface=\"ens786f0\")\r\n+\r\n+hit pattern but not defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.10.21\")/(\"X\"*480)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.10\")/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/(\"X\"*480)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(dst=\"192.168.0.10\")/UDP()/VXLAN()/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/(\"X\"*480)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN(vni=22)/Ether()/IP(src=\"192.168.0.20\",dst=\"192.168.0.21\")/(\"X\"*480)], iface=\"ens786f0\")\r\n+\r\n+\r\n+Test case 7: ICE_RSS_MAC/IPV4/UDP/GTPU/IPV4\r\n+-------------------------------------------\r\n+rule::\r\n+\r\n+    flow create 0 ingress pattern raw pattern spec 0011223344550000000000020800450000380000000000110000C0A80014C0A80015000008680024000030FF001400000000450000140000000000000000C0A80A14C0A80A15 pattern mask 0000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF / end actions rss queues end / end\r\n+\r\n+basic packet::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(src=\"192.168.10.20\", dst=\"192.168.10.21\")/Raw('x'*20)], iface=\"ens786f0\")\r\n+\r\n+hit pattern and defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.30\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(src=\"192.168.10.20\", dst=\"192.168.10.21\")/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.31\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(src=\"192.168.10.20\", dst=\"192.168.10.21\")/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(src=\"192.168.10.30\", dst=\"192.168.10.21\")/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IP(src=\"192.168.10.20\", dst=\"192.168.10.31\")/Raw('x'*20)], iface=\"ens786f0\")\r\n+\r\n+hit pattern but not defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x567)/IP(src=\"192.168.10.20\", dst=\"192.168.10.21\")/Raw('x'*20)], iface=\"ens786f0\")\r\n+\r\n+\r\n+Test case 8: ICE_RSS_MAC/IPV4/UDP/GTPU/IPV6/UDP_outer-l3\r\n+--------------------------------------------------------\r\n+rule::\r\n+\r\n+    flow create 0 ingress pattern raw pattern spec 0011223344550000000000020800450000540000000000110000C0A80014C0A80015000008680040000030FF0030000000006000000000081100CDCD910A222254988475111139001010CDCD910A2222549884751111390020210000000000080000 pattern mask 0000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 / end actions rss queues end / end\r\n+\r\n+basic packet::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1010\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+\r\n+hit pattern and defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.21\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1010\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.22\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1010\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+\r\n+hit pattern but not defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1011\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1010\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2022\")/UDP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12)/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1010\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/UDP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+\r\n+\r\n+Test case 9: ICE_RSS_MAC/IPV4/UDP/GTPU/EH/IPV4/UDP_innersysmetric\r\n+-----------------------------------------------------------------\r\n+rule::\r\n+\r\n+    flow create 0 ingress pattern raw pattern spec 0011223344550000000000020800450000440000000000110000C0A80014C0A80014000008680030000034FF00240000000000000085010000004500001C0000000000110000C0A80114C0A801150000000000080000 pattern mask 0000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF0000000000000000 / end actions rss func symmetric_toeplitz queues end / end\r\n+\r\n+packets::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer()/IP(src=\"192.168.1.20\", dst=\"192.168.1.21\")/UDP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer()/IP(src=\"192.168.1.21\", dst=\"192.168.1.20\")/UDP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.21\", dst=\"192.168.0.20\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer()/IP(src=\"192.168.1.20\", dst=\"192.168.1.21\")/UDP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.21\", dst=\"192.168.0.20\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer()/IP(src=\"192.168.1.21\", dst=\"192.168.1.20\")/UDP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+\r\n+\r\n+Test case 10: ICE_RSS_MAC/IPV4/UDP/GTPU/UL/IPV4_inner-l3-dst-only\r\n+-----------------------------------------------------------------\r\n+rule::\r\n+\r\n+    flow create 0 ingress pattern raw pattern spec 00112233445500000000000208004500003C0000000000110000C0A80014C0A80015000008680028000034FF001C000000000000008501100000450000140000000000000000C0A80114C0A80115 pattern mask 000000000000000000000000000000000000000000000000000000000000FFFFFFFF000000000000000000000000000000000000000000F000000000000000000000000000000000000000000000 / end actions rss queues end / end\r\n+\r\n+basic packet::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=\"192.168.1.20\", dst=\"192.168.1.21\")/Raw('x'*20)], iface=\"ens786f0\")\r\n+\r\n+hit pattern and defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.10.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=\"192.168.1.20\", dst=\"192.168.1.21\")/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src=\"192.168.1.20\", dst=\"192.168.1.21\")/Raw('x'*20)], iface=\"ens786f0\")\r\n+\r\n+hit pattern but not defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.10.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=\"192.168.1.20\", dst=\"192.168.1.21\")/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=\"192.168.11.20\", dst=\"192.168.1.21\")/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=\"192.168.1.20\", dst=\"192.168.11.21\")/Raw('x'*20)], iface=\"ens786f0\")\r\n+\r\n+\r\n+Test case 11: ICE_RSS_MAC/IPV4/UDP/GTPU/DL/IPV4/TCP_un-word-aligned key\r\n+-----------------------------------------------------------------------\r\n+rule::\r\n+\r\n+    flow create 0 ingress pattern raw pattern spec 0011223344550000000000020800450000500000000000110000C0A80014C0A8001500000868003C000034FF0030000000000000008501000000450000280000000000060000C0A80114C0A801150000000000000000000000005000000000000000 pattern mask 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000000000000000000000000000FFFF0000000000000000000000000000000000000000000000000000 / end actions rss queues end / end\r\n+    \r\n+basic packet::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src=\"192.168.1.20\", dst=\"192.168.1.21\")/TCP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+\r\n+hit pattern and defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src=\"191.168.1.20\", dst=\"192.168.1.21\")/TCP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src=\"192.161.1.20\", dst=\"192.168.1.21\")/TCP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=1, P=1, QFI=0x34)/IP(src=\"192.168.1.20\", dst=\"192.168.1.21\")/TCP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+\r\n+hit pattern but not defined input set::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.10.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src=\"192.168.1.20\", dst=\"192.168.1.21\")/TCP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.10.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src=\"192.168.1.20\", dst=\"192.168.1.21\")/TCP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src=\"192.168.11.20\", dst=\"192.168.1.21\")/TCP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src=\"192.168.1.21\", dst=\"192.168.1.21\")/TCP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x12345678)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src=\"192.168.1.20\", dst=\"192.168.1.22\")/TCP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123)/GTPPDUSessionContainer(type=0, P=1, QFI=0x34)/IP(src=\"192.168.1.20\", dst=\"192.168.1.22\")/TCP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP(src=\"192.168.0.20\", dst=\"192.168.0.21\")/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123)/GTPPDUSessionContainer(pdu_type=0, qos_flow=0x12)/IP(src=\"192.168.1.20\", dst=\"192.168.1.22\")/TCP()/Raw('x'*20)], iface=\"ens786f0\")\r\n+\r\n+\r\n+Test case 12: ICE_RSS_multi-rules_MAC/IPv4/UDP/VXLAN/IPv6\r\n+---------------------------------------------------------\r\n+1. create 2 rules, same pattern, different inputset::\r\n+\r\n+    flow create 0 ingress pattern raw pattern spec 00112233445500000000000208004500004C00000000001100000101010102020202000012B50038000008000000000000006000000000000000CDCD910A222254988475111139001010CDCD910A222254988475111139002021 pattern mask 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF / end actions rss queues end / end\r\n+    flow create 0 ingress pattern raw pattern spec 00112233445500000000000208004500004C00000000001100000101010102020202000012B50038000008000000000000006000000000000000CDCD910A222254988475111139001010CDCD910A222254988475111139002021 pattern mask 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 / end actions rss queues end / end\r\n+\r\n+2. send basic packet and save hash value.\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN()/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1010\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/(\"X\"*480)], iface=\"ens786f0\")\r\n+\r\n+3. send packets hit rules, check the hash value of first packet is same with basic packet, the second packet is different::\r\n+\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN()/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1010\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2022\")/(\"X\"*480)], iface=\"ens786f0\")\r\n+    sendp([Ether(dst=\"00:11:22:33:44:55\")/IP()/UDP()/VXLAN()/IPv6(src=\"CDCD:910A:2222:5498:8475:1111:3900:1011\", dst=\"CDCD:910A:2222:5498:8475:1111:3900:2021\")/(\"X\"*480)], iface=\"ens786f0\")\n\\ No newline at end of file\ndiff --git a/test_plans/index.rst b/test_plans/index.rst\nindex 4b71cf03..d4d10cb8 100644\n--- a/test_plans/index.rst\n+++ b/test_plans/index.rst\n@@ -38,6 +38,7 @@ The following are the test plans for the DPDK DTS automated test system.\n     ice_ecpri_test_plan\n     ice_fdir_test_plan\n     ice_fdir_protocol_agnostic_flow_test_plan\n+    ice_rss_protocol_agnostic_flow_test_plan\n     ice_ip_fragment_rte_flow_test_plan\n     ice_iavf_ip_fragment_rte_flow_test_plan\n     ice_iavf_rss_configure_test_plan\n",
    "prefixes": [
        "V1",
        "3/4"
    ]
}