get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 73033,
    "url": "https://patches.dpdk.org/api/patches/73033/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20200703111644.73351-6-gordon.noonan@intel.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20200703111644.73351-6-gordon.noonan@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200703111644.73351-6-gordon.noonan@intel.com",
    "date": "2020-07-03T11:16:41",
    "name": "[RFC,5/8] Support dst ip only for RSS",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "25aed38a72fcc4379caa582f44279f9ef6618700",
    "submitter": {
        "id": 1810,
        "url": "https://patches.dpdk.org/api/people/1810/?format=api",
        "name": null,
        "email": "Gordon@dpdk.org, Noonan@dpdk.org, gordon.noonan@intel.com"
    },
    "delegate": {
        "id": 1540,
        "url": "https://patches.dpdk.org/api/users/1540/?format=api",
        "username": "qzhan15",
        "first_name": "Qi",
        "last_name": "Zhang",
        "email": "qi.z.zhang@intel.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20200703111644.73351-6-gordon.noonan@intel.com/mbox/",
    "series": [
        {
            "id": 10779,
            "url": "https://patches.dpdk.org/api/series/10779/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=10779",
            "date": "2020-07-03T11:16:36",
            "name": "net/iavf: Enable 256 queues",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/10779/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/73033/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/73033/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id A39A3A0519;\n\tFri,  3 Jul 2020 16:39:57 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id CA84F1DC8B;\n\tFri,  3 Jul 2020 16:38:01 +0200 (CEST)",
            "from mga14.intel.com (mga14.intel.com [192.55.52.115])\n by dpdk.org (Postfix) with ESMTP id A2F811D8CF\n for <dev@dpdk.org>; Fri,  3 Jul 2020 13:17:17 +0200 (CEST)",
            "from fmsmga003.fm.intel.com ([10.253.24.29])\n by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 03 Jul 2020 04:17:17 -0700",
            "from silpixa00400380.ir.intel.com ([10.237.213.188])\n by FMSMGA003.fm.intel.com with ESMTP; 03 Jul 2020 04:17:15 -0700"
        ],
        "IronPort-SDR": [
            "\n /ZAqqQU6tLL3cHLGFBCsFmxgr+PR43kYFszbt7hfxp8AfbFGlrVtJwzRbhx2RznXT2O56HLknz\n FIOFFlNV2smg==",
            "\n Q0R+SlJP3QstYGMJi7dD6b25bWJAViPEXCBTp1f5LuwJmqxz1fGpndVJWRfAU7mndUWIE9hiMP\n S1XdIp/ktPqQ=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9670\"; a=\"146220554\"",
            "E=Sophos;i=\"5.75,308,1589266800\"; d=\"scan'208\";a=\"146220554\"",
            "E=Sophos;i=\"5.75,308,1589266800\"; d=\"scan'208\";a=\"321780362\""
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "From": "Gordon@dpdk.org, Noonan@dpdk.org, gordon.noonan@intel.com",
        "To": "dev@dpdk.org",
        "Cc": "gordon.noonan@intel.com",
        "Date": "Fri,  3 Jul 2020 12:16:41 +0100",
        "Message-Id": "<20200703111644.73351-6-gordon.noonan@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20200703111644.73351-1-gordon.noonan@intel.com>",
        "References": "<20200703111644.73351-1-gordon.noonan@intel.com>",
        "X-Mailman-Approved-At": "Fri, 03 Jul 2020 16:37:41 +0200",
        "Subject": "[dpdk-dev] [PATCH RFC 5/8] Support dst ip only for RSS",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: gordonno <gordon.noonan@intel.com>\n\n---\n drivers/net/iavf/iavf_hash.c | 476 +++++++++++++++++++++--------------\n 1 file changed, 281 insertions(+), 195 deletions(-)",
    "diff": "diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c\nindex af528863b..a7691ef0c 100644\n--- a/drivers/net/iavf/iavf_hash.c\n+++ b/drivers/net/iavf/iavf_hash.c\n@@ -35,6 +35,12 @@ enum iavf_pattern_hint_type {\n \tIAVF_PATTERN_HINT_IPV6_SCTP,\n };\n \n+enum iavf_gtpu_hint {\n+\tIAVF_GTPU_HINT_DOWNLINK,\n+\tIAVF_GTPU_HINT_UPLINK,\n+\tIAVF_GTPU_HINT_NONE,\n+};\n+\n struct iavf_pattern_match_type {\n \tenum iavf_pattern_hint_type phint_type;\n };\n@@ -43,6 +49,7 @@ struct iavf_hash_match_type {\n \tenum iavf_pattern_hint_type phint_type;\n \tuint64_t hash_type;\n \tstruct virtchnl_proto_hdrs *proto_hdrs;\n+\tenum iavf_gtpu_hint gtpu_hint;\n };\n \n struct iavf_rss_meta {\n@@ -147,9 +154,6 @@ static struct iavf_pattern_match_item iavf_hash_pattern_list[] = {\n \t{iavf_pattern_empty, IAVF_INSET_NONE, &phint_empty},\n };\n \n-#define\tGTP_EH_PDU_LINK_UP\t\t1\n-#define\tGTP_EH_PDU_LINK_DWN\t\t0\n-\n #define TUNNEL_LEVEL_OUTER\t\t0\n #define TUNNEL_LEVEL_FIRST_INNER\t1\n \n@@ -160,103 +164,112 @@ static struct iavf_pattern_match_item iavf_hash_pattern_list[] = {\n #define BUFF_NOUSED\t\t\t0\n #define FIELD_FOR_PROTO_ONLY\t\t0\n \n+#define FIELD_SELECTOR(proto_hdr_field) \\\n+\t\t(1UL << ((proto_hdr_field) & PROTO_HDR_FIELD_MASK))\n+\n #define proto_hint_eth_src { \\\n-\tVIRTCHNL_PROTO_HDR_ETH, VIRTCHNL_PROTO_HDR_ETH_SRC, {BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_ETH, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_ETH_SRC), \\\n+\t{BUFF_NOUSED } }\n \n #define proto_hint_eth_dst { \\\n-\tVIRTCHNL_PROTO_HDR_ETH, VIRTCHNL_PROTO_HDR_ETH_DST, {BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_ETH, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_ETH_DST), \\\n+\t{BUFF_NOUSED } }\n \n #define proto_hint_eth_only { \\\n \tVIRTCHNL_PROTO_HDR_ETH, FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }\n \n #define proto_hint_eth { \\\n \tVIRTCHNL_PROTO_HDR_ETH, \\\n-\tVIRTCHNL_PROTO_HDR_ETH_SRC | VIRTCHNL_PROTO_HDR_ETH_DST, \\\n-\t{BUFF_NOUSED } }\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_ETH_SRC) | \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_ETH_DST), {BUFF_NOUSED } }\n \n #define proto_hint_svlan { \\\n-\tVIRTCHNL_PROTO_HDR_S_VLAN, VIRTCHNL_PROTO_HDR_S_VLAN_ID, \\\n-\t{BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_S_VLAN, \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_S_VLAN_ID), {BUFF_NOUSED } }\n \n #define proto_hint_cvlan { \\\n-\tVIRTCHNL_PROTO_HDR_C_VLAN, VIRTCHNL_PROTO_HDR_C_VLAN_ID, \\\n-\t{BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_C_VLAN, \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_C_VLAN_ID), {BUFF_NOUSED } }\n \n #define proto_hint_ipv4_src { \\\n-\tVIRTCHNL_PROTO_HDR_IPV4, VIRTCHNL_PROTO_HDR_IPV4_SRC, {BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC), \\\n+\t{BUFF_NOUSED } }\n \n #define proto_hint_ipv4_dst { \\\n-\tVIRTCHNL_PROTO_HDR_IPV4, VIRTCHNL_PROTO_HDR_IPV4_DST, {BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_IPV4, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST), \\\n+\t{BUFF_NOUSED } }\n \n #define proto_hint_ipv4_only { \\\n \tVIRTCHNL_PROTO_HDR_IPV4, FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }\n \n #define proto_hint_ipv4 { \\\n \tVIRTCHNL_PROTO_HDR_IPV4, \\\n-\tVIRTCHNL_PROTO_HDR_IPV4_SRC | VIRTCHNL_PROTO_HDR_IPV4_DST, \\\n-\t{BUFF_NOUSED } }\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_SRC) | \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV4_DST), {BUFF_NOUSED } }\n \n #define proto_hint_udp_src_port { \\\n-\tVIRTCHNL_PROTO_HDR_UDP, VIRTCHNL_PROTO_HDR_UDP_SRC_PORT, \\\n-\t{BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_UDP, \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_SRC_PORT), {BUFF_NOUSED } }\n \n #define proto_hint_udp_dst_port { \\\n-\tVIRTCHNL_PROTO_HDR_UDP, VIRTCHNL_PROTO_HDR_UDP_DST_PORT, \\\n-\t{BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_UDP, \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_DST_PORT), {BUFF_NOUSED } }\n \n #define proto_hint_udp_only { \\\n \tVIRTCHNL_PROTO_HDR_UDP, FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }\n \n #define proto_hint_udp { \\\n \tVIRTCHNL_PROTO_HDR_UDP, \\\n-\tVIRTCHNL_PROTO_HDR_UDP_SRC_PORT | VIRTCHNL_PROTO_HDR_UDP_DST_PORT, \\\n-\t{BUFF_NOUSED } }\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_SRC_PORT) | \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_UDP_DST_PORT), {BUFF_NOUSED } }\n \n #define proto_hint_tcp_src_port { \\\n-\tVIRTCHNL_PROTO_HDR_TCP, VIRTCHNL_PROTO_HDR_TCP_SRC_PORT, \\\n-\t{BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_TCP, \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_SRC_PORT), {BUFF_NOUSED } }\n \n #define proto_hint_tcp_dst_port { \\\n-\tVIRTCHNL_PROTO_HDR_TCP, VIRTCHNL_PROTO_HDR_TCP_DST_PORT, \\\n-\t{BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_TCP, \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_DST_PORT), {BUFF_NOUSED } }\n \n #define proto_hint_tcp_only { \\\n \tVIRTCHNL_PROTO_HDR_TCP, FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }\n \n #define proto_hint_tcp { \\\n \tVIRTCHNL_PROTO_HDR_TCP, \\\n-\tVIRTCHNL_PROTO_HDR_TCP_SRC_PORT | VIRTCHNL_PROTO_HDR_TCP_DST_PORT, \\\n-\t{BUFF_NOUSED } }\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_SRC_PORT) | \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_TCP_DST_PORT), {BUFF_NOUSED } }\n \n #define proto_hint_sctp_src_port { \\\n-\tVIRTCHNL_PROTO_HDR_SCTP, VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT, \\\n-\t{BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_SCTP, \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT), {BUFF_NOUSED } }\n \n #define proto_hint_sctp_dst_port { \\\n-\tVIRTCHNL_PROTO_HDR_SCTP, VIRTCHNL_PROTO_HDR_SCTP_DST_PORT, \\\n-\t{BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_SCTP, \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_DST_PORT), {BUFF_NOUSED } }\n \n #define proto_hint_sctp_only { \\\n \tVIRTCHNL_PROTO_HDR_SCTP, FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }\n \n #define proto_hint_sctp { \\\n \tVIRTCHNL_PROTO_HDR_SCTP, \\\n-\tVIRTCHNL_PROTO_HDR_SCTP_SRC_PORT | VIRTCHNL_PROTO_HDR_SCTP_DST_PORT, \\\n-\t{BUFF_NOUSED } }\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_SRC_PORT) | \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_SCTP_DST_PORT), {BUFF_NOUSED } }\n \n #define proto_hint_ipv6_src { \\\n-\tVIRTCHNL_PROTO_HDR_IPV6, VIRTCHNL_PROTO_HDR_IPV6_SRC, {BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_IPV6, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_SRC), \\\n+\t{BUFF_NOUSED } }\n \n #define proto_hint_ipv6_dst { \\\n-\tVIRTCHNL_PROTO_HDR_IPV6, VIRTCHNL_PROTO_HDR_IPV6_DST, {BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_IPV6, FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_DST), \\\n+\t{BUFF_NOUSED } }\n \n #define proto_hint_ipv6_only { \\\n \tVIRTCHNL_PROTO_HDR_IPV6, FIELD_FOR_PROTO_ONLY, {BUFF_NOUSED } }\n \n #define proto_hint_ipv6 { \\\n \tVIRTCHNL_PROTO_HDR_IPV6, \\\n-\tVIRTCHNL_PROTO_HDR_IPV6_SRC | VIRTCHNL_PROTO_HDR_IPV6_DST, \\\n-\t{BUFF_NOUSED } }\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_SRC) | \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_IPV6_DST), {BUFF_NOUSED } }\n \n #define proto_hint_gtpu_up_only { \\\n \tVIRTCHNL_PROTO_HDR_GTPU_EH_PDU_UP, \\\n@@ -268,18 +281,19 @@ static struct iavf_pattern_match_item iavf_hash_pattern_list[] = {\n \n #define proto_hint_esp { \\\n \tVIRTCHNL_PROTO_HDR_ESP, \\\n-\tVIRTCHNL_PROTO_HDR_ESP_SPI, {BUFF_NOUSED } }\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_ESP_SPI), {BUFF_NOUSED } }\n \n #define proto_hint_ah { \\\n \tVIRTCHNL_PROTO_HDR_AH, \\\n-\tVIRTCHNL_PROTO_HDR_AH_SPI, {BUFF_NOUSED } }\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_AH_SPI), {BUFF_NOUSED } }\n \n #define proto_hint_l2tpv3 { \\\n \tVIRTCHNL_PROTO_HDR_L2TPV3, \\\n-\tVIRTCHNL_PROTO_HDR_L2TPV3_SESS_ID, {BUFF_NOUSED } }\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_L2TPV3_SESS_ID), {BUFF_NOUSED } }\n \n #define proto_hint_pfcp { \\\n-\tVIRTCHNL_PROTO_HDR_PFCP, VIRTCHNL_PROTO_HDR_PFCP_SEID, {BUFF_NOUSED } }\n+\tVIRTCHNL_PROTO_HDR_PFCP, \\\n+\tFIELD_SELECTOR(VIRTCHNL_PROTO_HDR_PFCP_SEID), {BUFF_NOUSED } }\n \n struct virtchnl_proto_hdrs hdrs_hint_eth_src = {\n \tTUNNEL_LEVEL_OUTER, PROTO_COUNT_ONE, {proto_hint_eth_src }\n@@ -314,6 +328,16 @@ struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_up = {\n \tproto_hint_ipv4_src }\n };\n \n+struct virtchnl_proto_hdrs hdrs_hint_ipv4_src_gtpu_dwn = {\n+\tTUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,\n+\tproto_hint_ipv4_src }\n+};\n+\n+struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_up = {\n+\tTUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_up_only,\n+\tproto_hint_ipv4_dst }\n+};\n+\n struct virtchnl_proto_hdrs hdrs_hint_ipv4_dst_gtpu_dwn = {\n \tTUNNEL_LEVEL_FIRST_INNER, PROTO_COUNT_TWO, {proto_hint_gtpu_dwn_only,\n \tproto_hint_ipv4_dst }\n@@ -589,272 +613,333 @@ struct virtchnl_proto_hdrs hdrs_hint_ipv6_sctp = {\n  * The first member is pattern hint type,\n  * the second member is hash type,\n  * the third member is virtchnl protocol hdrs.\n+ * the forth member is downlink/uplink type.\n  */\n struct iavf_hash_match_type iavf_hash_type_list[] = {\n \t/* IPV4 */\n-\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_L2_SRC_ONLY, &hdrs_hint_eth_src},\n-\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_L2_DST_ONLY, &hdrs_hint_eth_dst},\n+\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_L2_SRC_ONLY, &hdrs_hint_eth_src,\n+\t\t\t\t\t\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_L2_DST_ONLY, &hdrs_hint_eth_dst,\n+\t\t\t\t\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_ETH | ETH_RSS_L2_SRC_ONLY,\n-\t\t\t\t\t\t&hdrs_hint_eth_src},\n+\t\t\t&hdrs_hint_eth_src, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_ETH | ETH_RSS_L2_DST_ONLY,\n-\t\t\t\t\t\t&hdrs_hint_eth_dst},\n-\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_ETH, &hdrs_hint_eth},\n-\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_S_VLAN, &hdrs_hint_svlan},\n-\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_C_VLAN, &hdrs_hint_cvlan},\n-\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src},\n-\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst},\n+\t\t\t&hdrs_hint_eth_dst, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_ETH, &hdrs_hint_eth,\n+\t\t\t\t\t\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_S_VLAN, &hdrs_hint_svlan,\n+\t\t\t\t\t\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_C_VLAN, &hdrs_hint_cvlan,\n+\t\t\t\t\t\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src,\n+\t\t\t\t\t\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst,\n+\t\t\t\t\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY,\n-\t\t\t\t\t\t&hdrs_hint_ipv4_src},\n+\t\t\t&hdrs_hint_ipv4_src, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_IPV4 | ETH_RSS_L3_DST_ONLY,\n-\t\t\t\t\t\t&hdrs_hint_ipv4_dst},\n-\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_ESP, &hdrs_hint_ipv4_esp},\n-\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_AH, &hdrs_hint_ipv4_ah},\n-\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_L2TPV3, &hdrs_hint_ipv4_l2tpv3},\n-\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_IPV4, &hdrs_hint_ipv4},\n+\t\t\t&hdrs_hint_ipv4_dst, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_ESP, &hdrs_hint_ipv4_esp,\n+\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_AH, &hdrs_hint_ipv4_ah,\n+\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_L2TPV3, &hdrs_hint_ipv4_l2tpv3,\n+\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_IPV4, &hdrs_hint_ipv4,\n+\tIAVF_GTPU_HINT_NONE},\n \t/* IPV4 UDP */\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_src_udp_src_port},\n+\t\t&hdrs_hint_ipv4_src_udp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_src_udp_dst_port},\n+\t\t&hdrs_hint_ipv4_src_udp_dst_port, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_SRC_ONLY | ETH_RSS_GTPU,\n+\t\t&hdrs_hint_ipv4_src_gtpu_up, IAVF_GTPU_HINT_UPLINK},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_SRC_ONLY | ETH_RSS_GTPU,\n-\t\t\t\t\t&hdrs_hint_ipv4_src_gtpu_up},\n+\t\t&hdrs_hint_ipv4_src_gtpu_dwn, IAVF_GTPU_HINT_DOWNLINK},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_src},\n+\t\t&hdrs_hint_ipv4_src, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_dst_udp_src_port},\n+\t\t&hdrs_hint_ipv4_dst_udp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_dst_udp_dst_port},\n+\t\t&hdrs_hint_ipv4_dst_udp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_DST_ONLY | ETH_RSS_GTPU,\n-\t\t\t\t\t&hdrs_hint_ipv4_dst_gtpu_dwn},\n+\t\t&hdrs_hint_ipv4_dst_gtpu_up, IAVF_GTPU_HINT_UPLINK},\n+\t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_DST_ONLY | ETH_RSS_GTPU,\n+\t\t&hdrs_hint_ipv4_dst_gtpu_dwn, IAVF_GTPU_HINT_DOWNLINK},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L3_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_dst},\n+\t\t&hdrs_hint_ipv4_dst, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP |\n \t\tETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t&hdrs_hint_ipv4_src_udp_src_port},\n+\t\t&hdrs_hint_ipv4_src_udp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP |\n \t\tETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t&hdrs_hint_ipv4_src_udp_dst_port},\n+\t\t&hdrs_hint_ipv4_src_udp_dst_port, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP |\n+\t\tETH_RSS_L3_SRC_ONLY | ETH_RSS_GTPU,\n+\t\t&hdrs_hint_ipv4_src_gtpu_up, IAVF_GTPU_HINT_UPLINK},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP |\n \t\tETH_RSS_L3_SRC_ONLY | ETH_RSS_GTPU,\n-\t\t&hdrs_hint_ipv4_src_gtpu_up},\n+\t\t&hdrs_hint_ipv4_src_gtpu_dwn, IAVF_GTPU_HINT_DOWNLINK},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP |\n-\t\tETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src},\n+\t\tETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP |\n \t\tETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t&hdrs_hint_ipv4_dst_udp_src_port},\n+\t\t&hdrs_hint_ipv4_dst_udp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP |\n \t\tETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t&hdrs_hint_ipv4_dst_udp_dst_port},\n+\t\t&hdrs_hint_ipv4_dst_udp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP |\n \t\tETH_RSS_L3_DST_ONLY | ETH_RSS_GTPU,\n-\t\t&hdrs_hint_ipv4_dst_gtpu_dwn},\n+\t\t&hdrs_hint_ipv4_dst_gtpu_up, IAVF_GTPU_HINT_UPLINK},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP |\n-\t\tETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst},\n+\t\tETH_RSS_L3_DST_ONLY | ETH_RSS_GTPU,\n+\t\t&hdrs_hint_ipv4_dst_gtpu_dwn, IAVF_GTPU_HINT_DOWNLINK},\n+\t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP |\n+\t\tETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_udp_src_port},\n+\t\t&hdrs_hint_ipv4_udp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_udp_dst_port},\n+\t\t&hdrs_hint_ipv4_udp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_PFCP,\n-\t\t\t\t\t&hdrs_hint_ipv4_pfcp},\n+\t\t&hdrs_hint_ipv4_pfcp, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_UDP, ETH_RSS_NONFRAG_IPV4_UDP,\n-\t\t\t\t\t&hdrs_hint_ipv4_udp},\n+\t\t&hdrs_hint_ipv4_udp, IAVF_GTPU_HINT_NONE},\n \t/* IPV4 TCP */\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_src_tcp_src_port},\n+\t\t&hdrs_hint_ipv4_src_tcp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_src_tcp_dst_port},\n+\t\t&hdrs_hint_ipv4_src_tcp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L3_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_src},\n+\t\t&hdrs_hint_ipv4_src, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_dst_tcp_src_port},\n+\t\t&hdrs_hint_ipv4_dst_tcp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_dst_tcp_dst_port},\n+\t\t&hdrs_hint_ipv4_dst_tcp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L3_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_dst},\n+\t\t&hdrs_hint_ipv4_dst, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_NONFRAG_IPV4_TCP |\n \t\tETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t&hdrs_hint_ipv4_src_tcp_src_port},\n+\t\t&hdrs_hint_ipv4_src_tcp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_NONFRAG_IPV4_TCP |\n \t\tETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t&hdrs_hint_ipv4_src_tcp_dst_port},\n+\t\t&hdrs_hint_ipv4_src_tcp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_NONFRAG_IPV4_TCP |\n-\t\tETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src},\n+\t\tETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_NONFRAG_IPV4_TCP |\n \t\tETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t&hdrs_hint_ipv4_dst_tcp_src_port},\n+\t\t&hdrs_hint_ipv4_dst_tcp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_NONFRAG_IPV4_TCP |\n \t\tETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t&hdrs_hint_ipv4_dst_tcp_dst_port},\n+\t\t&hdrs_hint_ipv4_dst_tcp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_NONFRAG_IPV4_TCP |\n-\t\tETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst},\n+\t\tETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_tcp_src_port},\n+\t\t&hdrs_hint_ipv4_tcp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_tcp_dst_port},\n+\t\t&hdrs_hint_ipv4_tcp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_TCP, ETH_RSS_NONFRAG_IPV4_TCP,\n-\t\t\t\t\t&hdrs_hint_ipv4_tcp},\n+\t\t&hdrs_hint_ipv4_tcp, IAVF_GTPU_HINT_NONE},\n \t/* IPV4 SCTP */\n-\t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_src_sctp_src_port},\n-\t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_src_sctp_dst_port},\n+\t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_SRC_ONLY |\n+\t\tETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv4_src_sctp_src_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_SRC_ONLY |\n+\t\tETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv4_src_sctp_dst_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_src},\n-\t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_dst_sctp_src_port},\n-\t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_dst_sctp_dst_port},\n+\t\t&hdrs_hint_ipv4_src, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_DST_ONLY |\n+\t\tETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv4_dst_sctp_src_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_DST_ONLY |\n+\t\tETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv4_dst_sctp_dst_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L3_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_dst},\n+\t\t&hdrs_hint_ipv4_dst, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_NONFRAG_IPV4_SCTP |\n \t\tETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t&hdrs_hint_ipv4_src_sctp_src_port},\n+\t\t&hdrs_hint_ipv4_src_sctp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_NONFRAG_IPV4_SCTP |\n \t\tETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t&hdrs_hint_ipv4_src_sctp_dst_port},\n+\t\t&hdrs_hint_ipv4_src_sctp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_NONFRAG_IPV4_SCTP |\n-\t\tETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src},\n+\t\tETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv4_src,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_NONFRAG_IPV4_SCTP |\n \t\tETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t&hdrs_hint_ipv4_dst_sctp_src_port},\n+\t\t&hdrs_hint_ipv4_dst_sctp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_NONFRAG_IPV4_SCTP |\n \t\tETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t&hdrs_hint_ipv4_dst_sctp_dst_port},\n+\t\t&hdrs_hint_ipv4_dst_sctp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_NONFRAG_IPV4_SCTP |\n-\t\tETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst},\n+\t\tETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv4_dst,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_sctp_src_port},\n+\t\t&hdrs_hint_ipv4_sctp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv4_sctp_dst_port},\n+\t\t&hdrs_hint_ipv4_sctp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV4_SCTP, ETH_RSS_NONFRAG_IPV4_SCTP,\n-\t\t\t\t\t&hdrs_hint_ipv4_sctp},\n+\t\t&hdrs_hint_ipv4_sctp, IAVF_GTPU_HINT_NONE},\n \t/* IPV6 */\n-\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_L2_SRC_ONLY, &hdrs_hint_eth_src},\n-\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_L2_DST_ONLY, &hdrs_hint_eth_dst},\n+\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_L2_SRC_ONLY,\n+\t\t&hdrs_hint_eth_src, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_L2_DST_ONLY,\n+\t\t&hdrs_hint_eth_dst, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_IPV6 | ETH_RSS_L2_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_eth_src},\n+\t\t&hdrs_hint_eth_src, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_IPV6 | ETH_RSS_L2_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_eth_dst},\n-\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_ETH, &hdrs_hint_eth},\n-\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_S_VLAN, &hdrs_hint_svlan},\n-\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_C_VLAN, &hdrs_hint_cvlan},\n-\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src},\n-\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst},\n+\t\t&hdrs_hint_eth_dst, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_ETH,\n+\t\t&hdrs_hint_eth, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_S_VLAN,\n+\t\t&hdrs_hint_svlan, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV4, ETH_RSS_C_VLAN,\n+\t\t&hdrs_hint_cvlan, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_L3_SRC_ONLY,\n+\t\t&hdrs_hint_ipv6_src, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_L3_DST_ONLY,\n+\t\t&hdrs_hint_ipv6_dst, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_IPV6 | ETH_RSS_L3_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_src},\n+\t\t&hdrs_hint_ipv6_src, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_IPV6 | ETH_RSS_L3_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_dst},\n-\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_ESP, &hdrs_hint_ipv6_esp},\n-\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_AH, &hdrs_hint_ipv6_ah},\n-\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_L2TPV3, &hdrs_hint_ipv6_l2tpv3},\n-\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_IPV6, &hdrs_hint_ipv6},\n+\t\t&hdrs_hint_ipv6_dst, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_ESP,\n+\t\t&hdrs_hint_ipv6_esp, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_AH,\n+\t\t&hdrs_hint_ipv6_ah, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_L2TPV3,\n+\t\t&hdrs_hint_ipv6_l2tpv3, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6, ETH_RSS_IPV6,\n+\t\t&hdrs_hint_ipv6, IAVF_GTPU_HINT_NONE},\n \t/* IPV6 UDP */\n-\t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_src_udp_src_port},\n-\t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_src_udp_dst_port},\n+\t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_SRC_ONLY |\n+\t\tETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv6_src_udp_src_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_SRC_ONLY |\n+\t\tETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv6_src_udp_dst_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_src},\n-\t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_dst_udp_src_port},\n-\t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_dst_udp_dst_port},\n+\t\t&hdrs_hint_ipv6_src, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_DST_ONLY |\n+\t\tETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv6_dst_udp_src_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_DST_ONLY |\n+\t\tETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv6_dst_udp_dst_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L3_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_dst},\n+\t\t&hdrs_hint_ipv6_dst, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_NONFRAG_IPV6_UDP |\n \t\tETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t&hdrs_hint_ipv6_src_udp_src_port},\n+\t\t&hdrs_hint_ipv6_src_udp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_NONFRAG_IPV6_UDP |\n \t\tETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t&hdrs_hint_ipv6_src_udp_dst_port},\n+\t\t&hdrs_hint_ipv6_src_udp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_NONFRAG_IPV6_UDP |\n-\t\tETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src},\n+\t\tETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_NONFRAG_IPV6_UDP |\n \t\tETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t&hdrs_hint_ipv6_dst_udp_src_port},\n+\t\t&hdrs_hint_ipv6_dst_udp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_NONFRAG_IPV6_UDP |\n \t\tETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t&hdrs_hint_ipv6_dst_udp_dst_port},\n+\t\t&hdrs_hint_ipv6_dst_udp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_NONFRAG_IPV6_UDP |\n-\t\tETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst},\n+\t\tETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_udp_src_port},\n+\t\t&hdrs_hint_ipv6_udp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_udp_dst_port},\n+\t\t&hdrs_hint_ipv6_udp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_PFCP,\n-\t\t\t\t\t&hdrs_hint_ipv6_pfcp},\n+\t\t&hdrs_hint_ipv6_pfcp, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_UDP, ETH_RSS_NONFRAG_IPV6_UDP,\n-\t\t\t\t\t&hdrs_hint_ipv6_udp},\n+\t\t&hdrs_hint_ipv6_udp, IAVF_GTPU_HINT_NONE},\n \t/* IPV6 TCP */\n-\t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_src_tcp_src_port},\n-\t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_src_tcp_dst_port},\n+\t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_SRC_ONLY |\n+\t\tETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv6_src_tcp_src_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_SRC_ONLY |\n+\t\tETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv6_src_tcp_dst_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_src},\n-\t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_dst_tcp_src_port},\n-\t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_dst_tcp_dst_port},\n+\t\t&hdrs_hint_ipv6_src, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_DST_ONLY |\n+\t\tETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv6_dst_tcp_src_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_DST_ONLY |\n+\t\tETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv6_dst_tcp_dst_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L3_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_dst},\n+\t\t&hdrs_hint_ipv6_dst, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_NONFRAG_IPV6_TCP |\n \t\tETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t&hdrs_hint_ipv6_src_tcp_src_port},\n+\t\t&hdrs_hint_ipv6_src_tcp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_NONFRAG_IPV6_TCP |\n \t\tETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t&hdrs_hint_ipv6_src_tcp_dst_port},\n+\t\t&hdrs_hint_ipv6_src_tcp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_NONFRAG_IPV6_TCP |\n-\t\tETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src},\n+\t\tETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_NONFRAG_IPV6_TCP |\n \t\tETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t&hdrs_hint_ipv6_dst_tcp_src_port},\n+\t\t&hdrs_hint_ipv6_dst_tcp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_NONFRAG_IPV6_TCP |\n \t\tETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t&hdrs_hint_ipv6_dst_tcp_dst_port},\n+\t\t&hdrs_hint_ipv6_dst_tcp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_NONFRAG_IPV6_TCP |\n-\t\tETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst},\n+\t\tETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_tcp_src_port},\n+\t\t&hdrs_hint_ipv6_tcp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_tcp_dst_port},\n+\t\t&hdrs_hint_ipv6_tcp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_TCP, ETH_RSS_NONFRAG_IPV6_TCP,\n-\t\t\t\t\t&hdrs_hint_ipv6_tcp},\n+\t\t&hdrs_hint_ipv6_tcp, IAVF_GTPU_HINT_NONE},\n \t/* IPV6 SCTP */\n-\t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_src_sctp_src_port},\n-\t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_src_sctp_dst_port},\n+\t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_SRC_ONLY |\n+\t\tETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv6_src_sctp_src_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_SRC_ONLY |\n+\t\tETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv6_src_sctp_dst_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_src},\n-\t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_dst_sctp_src_port},\n-\t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_dst_sctp_dst_port},\n+\t\t&hdrs_hint_ipv6_src, IAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_DST_ONLY |\n+\t\tETH_RSS_L4_SRC_ONLY, &hdrs_hint_ipv6_dst_sctp_src_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n+\t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_DST_ONLY |\n+\t\tETH_RSS_L4_DST_ONLY, &hdrs_hint_ipv6_dst_sctp_dst_port,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L3_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_dst},\n+\t\t&hdrs_hint_ipv6_dst, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_NONFRAG_IPV6_SCTP |\n \t\tETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t&hdrs_hint_ipv6_src_sctp_src_port},\n+\t\t&hdrs_hint_ipv6_src_sctp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_NONFRAG_IPV6_SCTP |\n \t\tETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t&hdrs_hint_ipv6_src_sctp_dst_port},\n+\t\t&hdrs_hint_ipv6_src_sctp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_NONFRAG_IPV6_SCTP |\n-\t\tETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src},\n+\t\tETH_RSS_L3_SRC_ONLY, &hdrs_hint_ipv6_src,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_NONFRAG_IPV6_SCTP |\n \t\tETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,\n-\t\t&hdrs_hint_ipv6_dst_sctp_src_port},\n+\t\t&hdrs_hint_ipv6_dst_sctp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_NONFRAG_IPV6_SCTP |\n \t\tETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,\n-\t\t&hdrs_hint_ipv6_dst_sctp_dst_port},\n+\t\t&hdrs_hint_ipv6_dst_sctp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_NONFRAG_IPV6_SCTP |\n-\t\tETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst},\n+\t\tETH_RSS_L3_DST_ONLY, &hdrs_hint_ipv6_dst,\n+\t\tIAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L4_SRC_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_sctp_src_port},\n+\t\t&hdrs_hint_ipv6_sctp_src_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_L4_DST_ONLY,\n-\t\t\t\t\t&hdrs_hint_ipv6_sctp_dst_port},\n+\t\t&hdrs_hint_ipv6_sctp_dst_port, IAVF_GTPU_HINT_NONE},\n \t{IAVF_PATTERN_HINT_IPV6_SCTP, ETH_RSS_NONFRAG_IPV6_SCTP,\n-\t\t\t\t\t&hdrs_hint_ipv6_sctp},\n+\t\t&hdrs_hint_ipv6_sctp, IAVF_GTPU_HINT_NONE},\n };\n \n struct virtchnl_proto_hdrs *iavf_hash_default_hdrs[] = {\n@@ -969,8 +1054,9 @@ iavf_hash_check_inset(const struct rte_flow_item pattern[],\n \treturn 0;\n }\n \n-static uint64_t\n-iavf_hash_refine_type(uint64_t rss_type, const struct rte_flow_item pattern[])\n+static void\n+iavf_hash_refine_type(uint64_t *rss_type, const struct rte_flow_item pattern[],\n+\t\t      enum iavf_gtpu_hint *gtpu_hint)\n {\n \tconst struct rte_flow_item *item;\n \n@@ -978,14 +1064,13 @@ iavf_hash_refine_type(uint64_t rss_type, const struct rte_flow_item pattern[])\n \t\tif (item->type == RTE_FLOW_ITEM_TYPE_GTP_PSC) {\n \t\t\tconst struct rte_flow_item_gtp_psc *psc = item->spec;\n \n-\t\t\tif (psc && (psc->pdu_type == GTP_EH_PDU_LINK_UP ||\n-\t\t\t\t    psc->pdu_type == GTP_EH_PDU_LINK_DWN)) {\n-\t\t\t\trss_type |= ETH_RSS_GTPU;\n+\t\t\tif (psc && (psc->pdu_type == IAVF_GTPU_HINT_UPLINK ||\n+\t\t\t\t    psc->pdu_type == IAVF_GTPU_HINT_DOWNLINK)) {\n+\t\t\t\t*rss_type |= ETH_RSS_GTPU;\n+\t\t\t\t*gtpu_hint = psc->pdu_type;\n \t\t\t}\n \t\t}\n \t}\n-\n-\treturn rss_type;\n }\n \n static int\n@@ -994,9 +1079,12 @@ iavf_hash_parse_action(struct iavf_pattern_match_item *pattern_match_item,\n \t\t       const struct rte_flow_action actions[],\n \t\t       void **meta, struct rte_flow_error *error)\n {\n+\tstruct iavf_pattern_match_type *mt = (struct iavf_pattern_match_type *)\n+\t\t\t\t\t(pattern_match_item->meta);\n \tstruct iavf_rss_meta *rss_meta = (struct iavf_rss_meta *)*meta;\n \tuint32_t type_list_len = RTE_DIM(iavf_hash_type_list);\n \tstruct iavf_hash_match_type *type_match_item;\n+\tenum iavf_gtpu_hint gtpu_hint = IAVF_GTPU_HINT_NONE;\n \tenum rte_flow_action_type action_type;\n \tconst struct rte_flow_action_rss *rss;\n \tconst struct rte_flow_action *action;\n@@ -1004,9 +1092,6 @@ iavf_hash_parse_action(struct iavf_pattern_match_item *pattern_match_item,\n \tuint64_t rss_type;\n \tuint16_t i;\n \n-\tstruct iavf_pattern_match_type *tt = (struct iavf_pattern_match_type *)\n-\t\t(pattern_match_item->meta);\n-\n \t/* Supported action is RSS. */\n \tfor (action = actions; action->type !=\n \t\tRTE_FLOW_ACTION_TYPE_END; action++) {\n@@ -1026,7 +1111,7 @@ iavf_hash_parse_action(struct iavf_pattern_match_item *pattern_match_item,\n \t\t\t * Refine the hash type base on some specific item of\n \t\t\t * the pattern, such as identify the gtpu hash.\n \t\t\t */\n-\t\t\trss_type = iavf_hash_refine_type(rss_type, pattern);\n+\t\t\tiavf_hash_refine_type(&rss_type, pattern, &gtpu_hint);\n \n \t\t\t/* Check if pattern is empty. */\n \t\t\tif (pattern_match_item->pattern_list !=\n@@ -1079,7 +1164,8 @@ iavf_hash_parse_action(struct iavf_pattern_match_item *pattern_match_item,\n \t\t\t\tstruct iavf_hash_match_type *ht_map =\n \t\t\t\t\t&iavf_hash_type_list[i];\n \t\t\t\tif (rss_type == ht_map->hash_type &&\n-\t\t\t\t    tt->phint_type == ht_map->phint_type) {\n+\t\t\t\t    mt->phint_type == ht_map->phint_type &&\n+\t\t\t\t    gtpu_hint == ht_map->gtpu_hint) {\n \t\t\t\t\ttype_match_item->hash_type =\n \t\t\t\t\t\tht_map->hash_type;\n \t\t\t\t\ttype_match_item->proto_hdrs =\n",
    "prefixes": [
        "RFC",
        "5/8"
    ]
}