get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 114211,
    "url": "https://patches.dpdk.org/api/patches/114211/?format=api",
    "web_url": "https://patches.dpdk.org/project/dts/patch/20220725052137.25801-3-hailinx.xu@intel.com/",
    "project": {
        "id": 3,
        "url": "https://patches.dpdk.org/api/projects/3/?format=api",
        "name": "DTS",
        "link_name": "dts",
        "list_id": "dts.dpdk.org",
        "list_email": "dts@dpdk.org",
        "web_url": "",
        "scm_url": "git://dpdk.org/tools/dts",
        "webscm_url": "http://git.dpdk.org/tools/dts/",
        "list_archive_url": "https://inbox.dpdk.org/dts",
        "list_archive_url_format": "https://inbox.dpdk.org/dts/{}",
        "commit_url_format": ""
    },
    "msgid": "<20220725052137.25801-3-hailinx.xu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/20220725052137.25801-3-hailinx.xu@intel.com",
    "date": "2022-07-25T05:21:37",
    "name": "[v1,2/2] tests/ice_fdir: support ipv6 next protocol id",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "6f76f6f1cb8843122a9a7066d051d1d5ac28e27f",
    "submitter": {
        "id": 1704,
        "url": "https://patches.dpdk.org/api/people/1704/?format=api",
        "name": "hailinx",
        "email": "hailinx.xu@intel.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dts/patch/20220725052137.25801-3-hailinx.xu@intel.com/mbox/",
    "series": [
        {
            "id": 24078,
            "url": "https://patches.dpdk.org/api/series/24078/?format=api",
            "web_url": "https://patches.dpdk.org/project/dts/list/?series=24078",
            "date": "2022-07-25T05:21:35",
            "name": "ice support ipv6 next protocol id",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/24078/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/114211/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/114211/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 A0901A00C5;\n\tTue, 26 Jul 2022 07:23:52 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 5F49A42685;\n\tTue, 26 Jul 2022 07:23:52 +0200 (CEST)",
            "from mga17.intel.com (mga17.intel.com [192.55.52.151])\n by mails.dpdk.org (Postfix) with ESMTP id 018B640DDD\n for <dts@dpdk.org>; Tue, 26 Jul 2022 07:23:50 +0200 (CEST)",
            "from orsmga003.jf.intel.com ([10.7.209.27])\n by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 25 Jul 2022 22:23:40 -0700",
            "from unknown (HELO localhost.localdomain) ([10.239.252.63])\n by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 25 Jul 2022 22:23:38 -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=1658813031; x=1690349031;\n h=from:to:cc:subject:date:message-id:in-reply-to: references;\n bh=pfQUdduJIrS9wLE2JSPimJroAKoi9y3FohdnYmTK4OU=;\n b=NbNbHqTf7pUmEaNd4weN75ZW8aaxcW7LlNFZ72I1z8Kz7q+xf7UBmbDi\n K+stm6ESjUYY5c6di9eyy0JMz8owNtl7hE8bocHr/vUyicYxVE9nc+psD\n t8TLZD3Ev8rbnsVDfDFu0Z4mapJhmHh2L08XCZdLuaAz/v90omKU9ZBbW\n 68+7Fxm4rzH5JkiLTQzZOkBh1VwYTbkD1JCNlW3Cbm567nX68h70uwLx6\n M7Uu5fIpr1WhdBnQytlidGeSmtBWDY3PWAlPmX+UxMakarCeoXwvFc3l0\n sxNja6QMuvCp7BJvsd05TZtZeC8IaBJRNnIEhTh55qedF4LnzZsfSNJYX g==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6400,9594,10419\"; a=\"268252523\"",
            "E=Sophos;i=\"5.93,193,1654585200\"; d=\"scan'208\";a=\"268252523\"",
            "E=Sophos;i=\"5.93,193,1654585200\"; d=\"scan'208\";a=\"550263359\""
        ],
        "From": "hailinx xu <hailinx.xu@intel.com>",
        "To": "qi.fu@intel.com,\n\tdts@dpdk.org",
        "Cc": "hailinx xu <hailinx.xu@intel.com>",
        "Subject": "[dts][PATCH v1 2/2] tests/ice_fdir: support ipv6 next protocol id",
        "Date": "Mon, 25 Jul 2022 13:21:37 +0800",
        "Message-Id": "<20220725052137.25801-3-hailinx.xu@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20220725052137.25801-1-hailinx.xu@intel.com>",
        "References": "<20220725052137.25801-1-hailinx.xu@intel.com>",
        "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 ice support ipv6 next protocol id test cases\n\n---\n tests/TestSuite_ice_fdir.py | 331 ++++++++++++++++++++++++++++++++++++\n 1 file changed, 331 insertions(+)",
    "diff": "diff --git a/tests/TestSuite_ice_fdir.py b/tests/TestSuite_ice_fdir.py\nindex 26f32b29..a6e9c9c3 100644\n--- a/tests/TestSuite_ice_fdir.py\n+++ b/tests/TestSuite_ice_fdir.py\n@@ -377,6 +377,83 @@ MAC_IPV6_NAT_T_ESP = {\n     ],\n }\n \n+# 22.07 new feature\n+MAC_IPV6_PROTOCOL = {\n+    \"match\": [\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6(nh=123)/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt(nh=123)/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting(nh=123)/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrHopByHop(nh=123)/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrSegmentRouting(nh=123)/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt()/IPv6ExtHdrDestOpt(nh=123)/Raw('x'*40)\",\n+    ],\n+    \"unmatched\": [\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6(nh=111)/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/UDP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/TCP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/SCTP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrFragment(nh=123)/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting()/IPv6ExtHdrRouting(nh=111)/Raw('x'*40)\",\n+    ],\n+}\n+\n+MAC_IPV6_PROTOCOL_TCP = {\n+    \"match\": [\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6(nh=6)/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6(nh=6)/TCP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt(nh=6)/TCP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting(nh=6)/TCP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrHopByHop(nh=6)/TCP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrSegmentRouting(nh=6)/TCP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt()/IPv6ExtHdrDestOpt(nh=6)/TCP()/Raw('x'*40)\",\n+    ],\n+    \"unmatched\": [\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6(nh=17)/TCP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/UDP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/SCTP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrFragment(nh=6)/TCP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting()/IPv6ExtHdrRouting(nh=111)/TCP()/Raw('x'*40)\",\n+    ],\n+}\n+\n+MAC_IPV6_PROTOCOL_UDP = {\n+    \"match\": [\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6(nh=17)/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/UDP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt(nh=17)/UDP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting(nh=17)/UDP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrHopByHop(nh=17)/UDP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrSegmentRouting(nh=17)/UDP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt()/IPv6ExtHdrDestOpt(nh=17)/UDP()/Raw('x'*40)\",\n+    ],\n+    \"unmatched\": [\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6(nh=6)/UDP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/TCP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/SCTP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrFragment(nh=6)/UDP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting()/IPv6ExtHdrRouting(nh=111)/UDP()/Raw('x'*40)\",\n+    ],\n+}\n+\n+MAC_IPV6_PROTOCOL_SCTP = {\n+    \"match\": [\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6(nh=132)/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/SCTP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt(nh=132)/SCTP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting(nh=132)/SCTP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrHopByHop(nh=132)/SCTP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrSegmentRouting(nh=132)/SCTP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrDestOpt()/IPv6ExtHdrDestOpt(nh=132)/SCTP()/Raw('x'*40)\",\n+    ],\n+    \"unmatched\": [\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6(nh=6)/SCTP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/UDP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/TCP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrFragment(nh=6)/SCTP()/Raw('x'*40)\",\n+        \"Ether(dst='00:11:22:33:44:55')/IPv6()/IPv6ExtHdrRouting()/IPv6ExtHdrRouting(nh=111)/SCTP()/Raw('x'*40)\",\n+    ],\n+}\n+\n tv_mac_ipv4_pay_queue_index = {\n     \"name\": \"test_mac_ipv4_pay_queue_index\",\n     \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv4 src is 192.168.0.20 dst is 192.168.0.21 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / mark / end\",\n@@ -2682,6 +2759,235 @@ vectors_mac_ipv6_nat_t_esp = [\n     tv_mac_ipv6_nat_t_esp_mark,\n ]\n \n+# 22.07 new feature\n+tv_mac_ipv6_protocol_queue_index = {\n+    \"name\": \"test_mac_ipv6_protocol_queue_index\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions queue index 1 / mark / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"queue\": 1, \"mark_id\": 0},\n+}\n+\n+tv_mac_ipv6_protocol_rss_queues = {\n+    \"name\": \"test_mac_ipv6_protocol_rss_queues\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions rss queues 2 3 end / mark id 1 / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"queue\": [2, 3], \"mark_id\": 1},\n+}\n+\n+tv_mac_ipv6_protocol_passthru = {\n+    \"name\": \"test_mac_ipv6_protocol_passthru\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions passthru / mark / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"rss\": True, \"mark_id\": 0},\n+}\n+\n+tv_mac_ipv6_protocol_drop = {\n+    \"name\": \"test_mac_ipv6_protocol_drop\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions drop / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"drop\": True},\n+}\n+\n+tv_mac_ipv6_protocol_mark_rss = {\n+    \"name\": \"test_mac_ipv6_protocol_mark_rss\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions mark / rss / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"mark_id\": 0, \"rss\": True},\n+}\n+\n+tv_mac_ipv6_protocol_mark = {\n+    \"name\": \"test_mac_ipv6_protocol_mark\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 123 / end actions mark / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"mark_id\": 0, \"rss\": True},\n+}\n+\n+vectors_mac_ipv6_protocol = [\n+    tv_mac_ipv6_protocol_queue_index,\n+    tv_mac_ipv6_protocol_rss_queues,\n+    tv_mac_ipv6_protocol_passthru,\n+    tv_mac_ipv6_protocol_drop,\n+    tv_mac_ipv6_protocol_mark_rss,\n+    tv_mac_ipv6_protocol_mark,\n+]\n+\n+tv_mac_ipv6_protocol_tcp_queue_index = {\n+    \"name\": \"test_mac_ipv6_protocol_tcp_queue_index\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions queue index 3 / mark / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_TCP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"queue\": 3, \"mark_id\": 0},\n+}\n+\n+tv_mac_ipv6_protocol_tcp_rss_queues = {\n+    \"name\": \"test_mac_ipv6_protocol_tcp_rss_queues\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions rss queues 5 6 end / mark id 1 / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_TCP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"queue\": [5, 6], \"mark_id\": 1},\n+}\n+\n+tv_mac_ipv6_protocol_tcp_passthru = {\n+    \"name\": \"test_mac_ipv6_protocol_tcp_passthru\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions passthru / mark / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_TCP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"rss\": True, \"mark_id\": 0},\n+}\n+\n+tv_mac_ipv6_protocol_tcp_drop = {\n+    \"name\": \"test_mac_ipv6_protocol_tcp_drop\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions drop / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_TCP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"drop\": True},\n+}\n+\n+tv_mac_ipv6_protocol_tcp_mark_rss = {\n+    \"name\": \"test_mac_ipv6_protocol_tcp_mark_rss\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions mark / rss / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_TCP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"mark_id\": 0, \"rss\": True},\n+}\n+\n+tv_mac_ipv6_protocol_tcp_mark = {\n+    \"name\": \"test_mac_ipv6_protocol_tcp_mark\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 6 / tcp / end actions mark / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_TCP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"mark_id\": 0, \"rss\": True},\n+}\n+\n+vectors_mac_ipv6_protocol_tcp = [\n+    tv_mac_ipv6_protocol_tcp_queue_index,\n+    tv_mac_ipv6_protocol_tcp_rss_queues,\n+    tv_mac_ipv6_protocol_tcp_passthru,\n+    tv_mac_ipv6_protocol_tcp_drop,\n+    tv_mac_ipv6_protocol_tcp_mark_rss,\n+    tv_mac_ipv6_protocol_tcp_mark,\n+]\n+\n+tv_mac_ipv6_protocol_udp_queue_index = {\n+    \"name\": \"test_mac_ipv6_protocol_udp_queue_index\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 17 / udp / end actions queue index 3 / mark / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_UDP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"queue\": 3, \"mark_id\": 0},\n+}\n+\n+tv_mac_ipv6_protocol_udp_rss_queues = {\n+    \"name\": \"test_mac_ipv6_protocol_udp_rss_queues\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 17 / udp / end actions rss queues 7 8 end / mark id 1 / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_UDP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"queue\": [7, 8], \"mark_id\": 1},\n+}\n+\n+tv_mac_ipv6_protocol_udp_passthru = {\n+    \"name\": \"test_mac_ipv6_protocol_udp_passthru\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 17 / udp / end actions passthru / mark / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_UDP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"rss\": True, \"mark_id\": 0},\n+}\n+\n+tv_mac_ipv6_protocol_udp_drop = {\n+    \"name\": \"test_mac_ipv6_protocol_udp_drop\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 17 / udp / end actions drop / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_UDP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"drop\": True},\n+}\n+\n+tv_mac_ipv6_protocol_udp_mark_rss = {\n+    \"name\": \"test_mac_ipv6_protocol_udp_mark_rss\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 17 / udp / end actions mark / rss / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_UDP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"mark_id\": 0, \"rss\": True},\n+}\n+\n+tv_mac_ipv6_protocol_udp_mark = {\n+    \"name\": \"test_mac_ipv6_protocol_udp_mark\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 17 / udp / end actions mark / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_UDP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"mark_id\": 0, \"rss\": True},\n+}\n+\n+vectors_mac_ipv6_protocol_udp = [\n+    tv_mac_ipv6_protocol_udp_queue_index,\n+    tv_mac_ipv6_protocol_udp_rss_queues,\n+    tv_mac_ipv6_protocol_udp_passthru,\n+    tv_mac_ipv6_protocol_udp_drop,\n+    tv_mac_ipv6_protocol_udp_mark_rss,\n+    tv_mac_ipv6_protocol_udp_mark,\n+]\n+\n+tv_mac_ipv6_protocol_sctp_queue_index = {\n+    \"name\": \"test_mac_ipv6_protocol_sctp_queue_index\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 132 / sctp / end actions queue index 5 / mark id 3 / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_SCTP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"queue\": 5, \"mark_id\": 3},\n+}\n+\n+tv_mac_ipv6_protocol_sctp_rss_queues = {\n+    \"name\": \"test_mac_ipv6_protocol_sctp_rss_queues\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 132 / sctp / end actions rss queues 1 2 end / mark id 1 / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_SCTP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"queue\": [1, 2], \"mark_id\": 1},\n+}\n+\n+tv_mac_ipv6_protocol_sctp_passthru = {\n+    \"name\": \"test_mac_ipv6_protocol_sctp_passthru\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 132 / sctp / end actions passthru / mark id 4 / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_SCTP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"rss\": True, \"mark_id\": 4},\n+}\n+\n+tv_mac_ipv6_protocol_sctp_drop = {\n+    \"name\": \"test_mac_ipv6_protocol_sctp_drop\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 132 / sctp / end actions drop / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_SCTP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"drop\": True},\n+}\n+\n+tv_mac_ipv6_protocol_sctp_mark_rss = {\n+    \"name\": \"test_mac_ipv6_protocol_sctp_mark_rss\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 132 / sctp / end actions mark / rss / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_SCTP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"mark_id\": 0, \"rss\": True},\n+}\n+\n+tv_mac_ipv6_protocol_sctp_mark = {\n+    \"name\": \"test_mac_ipv6_protocol_sctp_mark\",\n+    \"rule\": \"flow create 0 ingress pattern eth dst is 00:11:22:33:44:55 / ipv6 proto is 132 / sctp / end actions mark / end\",\n+    \"scapy_str\": MAC_IPV6_PROTOCOL_SCTP,\n+    \"check_func\": rfc.check_mark,\n+    \"check_param\": {\"port_id\": 0, \"mark_id\": 0, \"rss\": True},\n+}\n+\n+vectors_mac_ipv6_protocol_sctp = [\n+    tv_mac_ipv6_protocol_sctp_queue_index,\n+    tv_mac_ipv6_protocol_sctp_rss_queues,\n+    tv_mac_ipv6_protocol_sctp_passthru,\n+    tv_mac_ipv6_protocol_sctp_drop,\n+    tv_mac_ipv6_protocol_sctp_mark_rss,\n+    tv_mac_ipv6_protocol_sctp_mark,\n+]\n+\n \n class TestICEFdir(TestCase):\n     def query_count(self, hits_set, hits, port_id=0, rule_id=0):\n@@ -4169,6 +4475,31 @@ class TestICEFdir(TestCase):\n         )\n         self.check_fdir_rule(stats=True)\n \n+    # 22.07 new feature\n+    def test_ipv6_protocal(self):\n+        self._rte_flow_validate(vectors_mac_ipv6_protocol)\n+\n+    def test_ipv6_protocal_tcp(self):\n+        self._rte_flow_validate(vectors_mac_ipv6_protocol_tcp)\n+\n+    def test_ipv6_protocal_udp(self):\n+        self._rte_flow_validate(vectors_mac_ipv6_protocol_udp)\n+\n+    def test_ipv6_protocal_sctp(self):\n+        self._rte_flow_validate(vectors_mac_ipv6_protocol_sctp)\n+\n+    def test_mac_ipv6_protocol_exclusive(self):\n+        rule = \"flow create 0 priority 0 ingress pattern eth / ipv6 proto is 123 / end actions queue index 1 / mark / end\"\n+        self.create_fdir_rule(rule, check_stats=True)\n+        self.pmd_output.execute_cmd(\"flow flush 0\")\n+        rule1 = \"flow create 0 ingress pattern eth / ipv6 proto is 123 / end actions queue index 1 / mark / end\"\n+        rule2 = \"flow create 0 ingress pattern eth / ipv6 proto is 123 / end actions rss queues 2 3 end / mark / end\"\n+        self.create_fdir_rule(rule1, check_stats=True)\n+        out = self.pmd_output.execute_cmd(rule2)\n+        self.verify(\n+            \"Rule already exists!: File exists\" in out, \"created rule successfully!!!\"\n+        )\n+\n     def tear_down(self):\n         try:\n             # destroy all flow rule on port 0\n",
    "prefixes": [
        "v1",
        "2/2"
    ]
}