get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2364,
    "url": "https://patches.dpdk.org/api/patches/2364/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1421650577-25969-7-git-send-email-helin.zhang@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": "<1421650577-25969-7-git-send-email-helin.zhang@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1421650577-25969-7-git-send-email-helin.zhang@intel.com",
    "date": "2015-01-19T06:56:16",
    "name": "[dpdk-dev,6/7] ethdev: unification of RSS offload types",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "81c6e6fa4ceecf005736896b180c34aba4544ca6",
    "submitter": {
        "id": 14,
        "url": "https://patches.dpdk.org/api/people/14/?format=api",
        "name": "Zhang, Helin",
        "email": "helin.zhang@intel.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1421650577-25969-7-git-send-email-helin.zhang@intel.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/2364/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/2364/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 97D795AAA;\n\tMon, 19 Jan 2015 07:56:42 +0100 (CET)",
            "from mga14.intel.com (mga14.intel.com [192.55.52.115])\n\tby dpdk.org (Postfix) with ESMTP id 59B705A6F\n\tfor <dev@dpdk.org>; Mon, 19 Jan 2015 07:56:39 +0100 (CET)",
            "from orsmga002.jf.intel.com ([10.7.209.21])\n\tby fmsmga103.fm.intel.com with ESMTP; 18 Jan 2015 22:51:04 -0800",
            "from shvmail01.sh.intel.com ([10.239.29.42])\n\tby orsmga002.jf.intel.com with ESMTP; 18 Jan 2015 22:56:37 -0800",
            "from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com\n\t[10.239.29.89])\n\tby shvmail01.sh.intel.com with ESMTP id t0J6uZlL015691;\n\tMon, 19 Jan 2015 14:56:35 +0800",
            "from shecgisg004.sh.intel.com (localhost [127.0.0.1])\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP\n\tid t0J6uWuk026045; Mon, 19 Jan 2015 14:56:34 +0800",
            "(from hzhan75@localhost)\n\tby shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id t0J6uWgg026041; \n\tMon, 19 Jan 2015 14:56:32 +0800"
        ],
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.09,425,1418112000\"; d=\"scan'208\";a=\"672084443\"",
        "From": "Helin Zhang <helin.zhang@intel.com>",
        "To": "dev@dpdk.org",
        "Date": "Mon, 19 Jan 2015 14:56:16 +0800",
        "Message-Id": "<1421650577-25969-7-git-send-email-helin.zhang@intel.com>",
        "X-Mailer": "git-send-email 1.7.4.1",
        "In-Reply-To": "<1421650577-25969-1-git-send-email-helin.zhang@intel.com>",
        "References": "<1421650577-25969-1-git-send-email-helin.zhang@intel.com>",
        "Subject": "[dpdk-dev] [PATCH 6/7] ethdev: unification of RSS offload types",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "RSS offload types were defined seperately for 1/10G and 40G NICs,\nand have no relationship with flow types. The modifications are to\nunify all RSS offload types for all PMDs. Unified RSS offload types\nhave new and common names which can be used for any PMD or\napplications, and decouple from specific hardwares.\n\nSigned-off-by: Helin Zhang <helin.zhang@intel.com>\n---\n app/test-pipeline/init.c                |   2 +-\n app/test-pmd/config.c                   |  60 +++++++++----\n examples/distributor/main.c             |   9 +-\n examples/ip_pipeline/init.c             |   2 +-\n examples/l3fwd-acl/main.c               |   7 +-\n lib/librte_ether/rte_ethdev.h           | 147 +++++++++++++-------------------\n lib/librte_pmd_e1000/e1000_ethdev.h     |  11 +++\n lib/librte_pmd_e1000/igb_ethdev.c       |   1 +\n lib/librte_pmd_e1000/igb_rxtx.c         |  27 ++----\n lib/librte_pmd_i40e/i40e_ethdev.c       |  58 ++++++-------\n lib/librte_pmd_i40e/i40e_ethdev.h       |  16 ++--\n lib/librte_pmd_i40e/i40e_ethdev_vf.c    |   1 +\n lib/librte_pmd_ixgbe/ixgbe_ethdev.c     |   1 +\n lib/librte_pmd_ixgbe/ixgbe_ethdev.h     |  11 +++\n lib/librte_pmd_ixgbe/ixgbe_rxtx.c       |  27 ++----\n lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c |   1 +\n lib/librte_pmd_vmxnet3/vmxnet3_ethdev.h |   6 ++\n lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c   |  10 +--\n 18 files changed, 198 insertions(+), 199 deletions(-)",
    "diff": "diff --git a/app/test-pipeline/init.c b/app/test-pipeline/init.c\nindex 17b6d23..cd2ebc4 100644\n--- a/app/test-pipeline/init.c\n+++ b/app/test-pipeline/init.c\n@@ -112,7 +112,7 @@ static struct rte_eth_conf port_conf = {\n \t.rx_adv_conf = {\n \t\t.rss_conf = {\n \t\t\t.rss_key = NULL,\n-\t\t\t.rss_hf = ETH_RSS_IPV4 | ETH_RSS_IPV6,\n+\t\t\t.rss_hf = ETH_RSS_IP,\n \t\t},\n \t},\n \t.txmode = {\ndiff --git a/app/test-pmd/config.c b/app/test-pmd/config.c\nindex 4c61a07..e6c34d0 100644\n--- a/app/test-pmd/config.c\n+++ b/app/test-pmd/config.c\n@@ -347,6 +347,21 @@ port_infos_display(portid_t port_id)\n \trte_eth_dev_info_get(port_id, &dev_info);\n \tif (dev_info.reta_size > 0)\n \t\tprintf(\"Redirection table size: %u\\n\", dev_info.reta_size);\n+\tif (!dev_info.flow_type_rss_offloads)\n+\t\tprintf(\"No flow type is supported.\\n\");\n+\telse {\n+\t\tuint16_t i;\n+\t\tchar *p;\n+\n+\t\tprintf(\"Supported flow types:\\n\");\n+\t\tfor (i = ETH_FLOW_TYPE_UNKNOWN + 1; i < ETH_FLOW_TYPE_MAX;\n+\t\t\t\t\t\t\t\ti++) {\n+\t\t\tif (!(dev_info.flow_type_rss_offloads & (1ULL << i)))\n+\t\t\t\tcontinue;\n+\t\t\tp = flowtype_to_str(i);\n+\t\t\tprintf(\"  %s\\n\", (p ? p : \"unknown\"));\n+\t\t}\n+\t}\n }\n \n int\n@@ -810,6 +825,29 @@ port_rss_reta_info(portid_t port_id,\n void\n port_rss_hash_conf_show(portid_t port_id, int show_rss_key)\n {\n+\tstruct rss_type_info {\n+\t\tchar str[32];\n+\t\tuint64_t rss_type;\n+\t};\n+\tstatic const struct rss_type_info rss_type_table[] = {\n+\t\t{\"ipv4\", ETH_RSS_IPV4},\n+\t\t{\"ipv4-frag\", ETH_RSS_FRAG_IPV4},\n+\t\t{\"ipv4-tcp\", ETH_RSS_NONFRAG_IPV4_TCP},\n+\t\t{\"ipv4-udp\", ETH_RSS_NONFRAG_IPV4_UDP},\n+\t\t{\"ipv4-sctp\", ETH_RSS_NONFRAG_IPV4_SCTP},\n+\t\t{\"ipv4-other\", ETH_RSS_NONFRAG_IPV4_OTHER},\n+\t\t{\"ipv6\", ETH_RSS_IPV6},\n+\t\t{\"ipv6-frag\", ETH_RSS_FRAG_IPV6},\n+\t\t{\"ipv6-tcp\", ETH_RSS_NONFRAG_IPV6_TCP},\n+\t\t{\"ipv6-udp\", ETH_RSS_NONFRAG_IPV6_UDP},\n+\t\t{\"ipv6-sctp\", ETH_RSS_NONFRAG_IPV6_SCTP},\n+\t\t{\"ipv6-other\", ETH_RSS_NONFRAG_IPV6_OTHER},\n+\t\t{\"l2-payload\", ETH_RSS_L2_PAYLOAD},\n+\t\t{\"ipv6-ex\", ETH_RSS_IPV6_EX},\n+\t\t{\"ipv6-tcp-ex\", ETH_RSS_IPV6_TCP_EX},\n+\t\t{\"ipv6-udp-ex\", ETH_RSS_IPV6_UDP_EX},\n+\t};\n+\n \tstruct rte_eth_rss_conf rss_conf;\n \tuint8_t rss_key[10 * 4];\n \tuint64_t rss_hf;\n@@ -841,24 +879,10 @@ port_rss_hash_conf_show(portid_t port_id, int show_rss_key)\n \t\treturn;\n \t}\n \tprintf(\"RSS functions:\\n \");\n-\tif (rss_hf & ETH_RSS_IPV4)\n-\t\tprintf(\"ip4\");\n-\tif (rss_hf & ETH_RSS_IPV4_TCP)\n-\t\tprintf(\" tcp4\");\n-\tif (rss_hf & ETH_RSS_IPV4_UDP)\n-\t\tprintf(\" udp4\");\n-\tif (rss_hf & ETH_RSS_IPV6)\n-\t\tprintf(\" ip6\");\n-\tif (rss_hf & ETH_RSS_IPV6_EX)\n-\t\tprintf(\" ip6-ex\");\n-\tif (rss_hf & ETH_RSS_IPV6_TCP)\n-\t\tprintf(\" tcp6\");\n-\tif (rss_hf & ETH_RSS_IPV6_TCP_EX)\n-\t\tprintf(\" tcp6-ex\");\n-\tif (rss_hf & ETH_RSS_IPV6_UDP)\n-\t\tprintf(\" udp6\");\n-\tif (rss_hf & ETH_RSS_IPV6_UDP_EX)\n-\t\tprintf(\" udp6-ex\");\n+\tfor (i = 0; i < RTE_DIM(rss_type_table); i++) {\n+\t\tif (rss_hf & rss_type_table[i].rss_type)\n+\t\t\tprintf(\"%s \", rss_type_table[i].str);\n+\t}\n \tprintf(\"\\n\");\n \tif (!show_rss_key)\n \t\treturn;\ndiff --git a/examples/distributor/main.c b/examples/distributor/main.c\nindex 89d82bb..13fb04d 100644\n--- a/examples/distributor/main.c\n+++ b/examples/distributor/main.c\n@@ -94,11 +94,10 @@ static const struct rte_eth_conf port_conf_default = {\n \t\t.mq_mode = ETH_MQ_TX_NONE,\n \t},\n \t.rx_adv_conf = {\n-\t\t\t.rss_conf = {\n-\t\t\t\t.rss_hf = ETH_RSS_IPV4 | ETH_RSS_IPV6 |\n-\t\t\t\t\tETH_RSS_IPV4_TCP | ETH_RSS_IPV4_UDP |\n-\t\t\t\t\tETH_RSS_IPV6_TCP | ETH_RSS_IPV6_UDP,\n-\t\t\t}\n+\t\t.rss_conf = {\n+\t\t\t.rss_hf = ETH_RSS_IP | ETH_RSS_UDP |\n+\t\t\t\tETH_RSS_TCP | ETH_RSS_SCTP,\n+\t\t}\n \t},\n };\n \ndiff --git a/examples/ip_pipeline/init.c b/examples/ip_pipeline/init.c\nindex e0c0464..e7ff86a 100644\n--- a/examples/ip_pipeline/init.c\n+++ b/examples/ip_pipeline/init.c\n@@ -113,7 +113,7 @@ struct app_params app = {\n \t\t.rx_adv_conf = {\n \t\t\t.rss_conf = {\n \t\t\t\t.rss_key = NULL,\n-\t\t\t\t.rss_hf = ETH_RSS_IPV4 | ETH_RSS_IPV6,\n+\t\t\t\t.rss_hf = ETH_RSS_IP,\n \t\t\t},\n \t\t},\n \t\t.txmode = {\ndiff --git a/examples/l3fwd-acl/main.c b/examples/l3fwd-acl/main.c\nindex 022ccab..5e56a1b 100644\n--- a/examples/l3fwd-acl/main.c\n+++ b/examples/l3fwd-acl/main.c\n@@ -174,11 +174,8 @@ static struct rte_eth_conf port_conf = {\n \t.rx_adv_conf = {\n \t\t.rss_conf = {\n \t\t\t.rss_key = NULL,\n-\t\t\t.rss_hf = ETH_RSS_IPV4 | ETH_RSS_IPV4_TCP\n-\t\t\t\t| ETH_RSS_IPV4_UDP\n-\t\t\t\t| ETH_RSS_IPV6 | ETH_RSS_IPV6_EX\n-\t\t\t\t| ETH_RSS_IPV6_TCP | ETH_RSS_IPV6_TCP_EX\n-\t\t\t\t| ETH_RSS_IPV6_UDP | ETH_RSS_IPV6_UDP_EX,\n+\t\t\t.rss_hf = ETH_RSS_IP | ETH_RSS_UDP |\n+\t\t\t\tETH_RSS_TCP | ETH_RSS_SCTP,\n \t\t},\n \t},\n \t.txmode = {\ndiff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h\nindex ce0528f..812f7f2 100644\n--- a/lib/librte_ether/rte_ethdev.h\n+++ b/lib/librte_ether/rte_ethdev.h\n@@ -351,97 +351,70 @@ struct rte_eth_rss_conf {\n \tuint64_t rss_hf;     /**< Hash functions to apply - see below. */\n };\n \n-/* Supported RSS offloads */\n-/* for 1G & 10G */\n-#define ETH_RSS_IPV4_SHIFT                    0\n-#define ETH_RSS_IPV4_TCP_SHIFT                1\n-#define ETH_RSS_IPV6_SHIFT                    2\n-#define ETH_RSS_IPV6_EX_SHIFT                 3\n-#define ETH_RSS_IPV6_TCP_SHIFT                4\n-#define ETH_RSS_IPV6_TCP_EX_SHIFT             5\n-#define ETH_RSS_IPV4_UDP_SHIFT                6\n-#define ETH_RSS_IPV6_UDP_SHIFT                7\n-#define ETH_RSS_IPV6_UDP_EX_SHIFT             8\n-/* for 40G only */\n-#define ETH_RSS_NONF_IPV4_UDP_SHIFT           31\n-#define ETH_RSS_NONF_IPV4_TCP_SHIFT           33\n-#define ETH_RSS_NONF_IPV4_SCTP_SHIFT          34\n-#define ETH_RSS_NONF_IPV4_OTHER_SHIFT         35\n-#define ETH_RSS_FRAG_IPV4_SHIFT               36\n-#define ETH_RSS_NONF_IPV6_UDP_SHIFT           41\n-#define ETH_RSS_NONF_IPV6_TCP_SHIFT           43\n-#define ETH_RSS_NONF_IPV6_SCTP_SHIFT          44\n-#define ETH_RSS_NONF_IPV6_OTHER_SHIFT         45\n-#define ETH_RSS_FRAG_IPV6_SHIFT               46\n-#define ETH_RSS_FCOE_OX_SHIFT                 48\n-#define ETH_RSS_FCOE_RX_SHIFT                 49\n-#define ETH_RSS_FCOE_OTHER_SHIFT              50\n-#define ETH_RSS_L2_PAYLOAD_SHIFT              63\n-\n-/* for 1G & 10G */\n-#define ETH_RSS_IPV4                    (1 << ETH_RSS_IPV4_SHIFT)\n-#define ETH_RSS_IPV4_TCP                (1 << ETH_RSS_IPV4_TCP_SHIFT)\n-#define ETH_RSS_IPV6                    (1 << ETH_RSS_IPV6_SHIFT)\n-#define ETH_RSS_IPV6_EX                 (1 << ETH_RSS_IPV6_EX_SHIFT)\n-#define ETH_RSS_IPV6_TCP                (1 << ETH_RSS_IPV6_TCP_SHIFT)\n-#define ETH_RSS_IPV6_TCP_EX             (1 << ETH_RSS_IPV6_TCP_EX_SHIFT)\n-#define ETH_RSS_IPV4_UDP                (1 << ETH_RSS_IPV4_UDP_SHIFT)\n-#define ETH_RSS_IPV6_UDP                (1 << ETH_RSS_IPV6_UDP_SHIFT)\n-#define ETH_RSS_IPV6_UDP_EX             (1 << ETH_RSS_IPV6_UDP_EX_SHIFT)\n-/* for 40G only */\n-#define ETH_RSS_NONF_IPV4_UDP           (1ULL << ETH_RSS_NONF_IPV4_UDP_SHIFT)\n-#define ETH_RSS_NONF_IPV4_TCP           (1ULL << ETH_RSS_NONF_IPV4_TCP_SHIFT)\n-#define ETH_RSS_NONF_IPV4_SCTP          (1ULL << ETH_RSS_NONF_IPV4_SCTP_SHIFT)\n-#define ETH_RSS_NONF_IPV4_OTHER         (1ULL << ETH_RSS_NONF_IPV4_OTHER_SHIFT)\n-#define ETH_RSS_FRAG_IPV4               (1ULL << ETH_RSS_FRAG_IPV4_SHIFT)\n-#define ETH_RSS_NONF_IPV6_UDP           (1ULL << ETH_RSS_NONF_IPV6_UDP_SHIFT)\n-#define ETH_RSS_NONF_IPV6_TCP           (1ULL << ETH_RSS_NONF_IPV6_TCP_SHIFT)\n-#define ETH_RSS_NONF_IPV6_SCTP          (1ULL << ETH_RSS_NONF_IPV6_SCTP_SHIFT)\n-#define ETH_RSS_NONF_IPV6_OTHER         (1ULL << ETH_RSS_NONF_IPV6_OTHER_SHIFT)\n-#define ETH_RSS_FRAG_IPV6               (1ULL << ETH_RSS_FRAG_IPV6_SHIFT)\n-/* FCOE relevant should not be used */\n-#define ETH_RSS_FCOE_OX                 (1ULL << ETH_RSS_FCOE_OX_SHIFT)\n-#define ETH_RSS_FCOE_RX                 (1ULL << ETH_RSS_FCOE_RX_SHIFT)\n-#define ETH_RSS_FCOE_OTHER              (1ULL << ETH_RSS_FCOE_OTHER_SHIFT)\n-#define ETH_RSS_L2_PAYLOAD              (1ULL << ETH_RSS_L2_PAYLOAD_SHIFT)\n+/*\n+ * The RSS offload types are defined based on flow types which are defined\n+ * in rte_eth_ctrl.h. Different NIC hardwares may support different RSS offload\n+ * types. The supported flow types or RSS offload types can be queried by\n+ * rte_eth_dev_info_get().\n+ */\n+#define ETH_RSS_IPV4               (1ULL << ETH_FLOW_TYPE_IPV4)\n+#define ETH_RSS_FRAG_IPV4          (1ULL << ETH_FLOW_TYPE_FRAG_IPV4)\n+#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL << ETH_FLOW_TYPE_NONFRAG_IPV4_TCP)\n+#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL << ETH_FLOW_TYPE_NONFRAG_IPV4_UDP)\n+#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL << ETH_FLOW_TYPE_NONFRAG_IPV4_SCTP)\n+#define ETH_RSS_NONFRAG_IPV4_OTHER (1ULL << ETH_FLOW_TYPE_NONFRAG_IPV4_OTHER)\n+#define ETH_RSS_IPV6               (1ULL << ETH_FLOW_TYPE_IPV6)\n+#define ETH_RSS_FRAG_IPV6          (1ULL << ETH_FLOW_TYPE_FRAG_IPV6)\n+#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL << ETH_FLOW_TYPE_NONFRAG_IPV6_TCP)\n+#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL << ETH_FLOW_TYPE_NONFRAG_IPV6_UDP)\n+#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL << ETH_FLOW_TYPE_NONFRAG_IPV6_SCTP)\n+#define ETH_RSS_NONFRAG_IPV6_OTHER (1ULL << ETH_FLOW_TYPE_NONFRAG_IPV6_OTHER)\n+#define ETH_RSS_L2_PAYLOAD         (1ULL << ETH_FLOW_TYPE_L2_PAYLOAD)\n+#define ETH_RSS_IPV6_EX            (1ULL << ETH_FLOW_TYPE_IPV6_EX)\n+#define ETH_RSS_IPV6_TCP_EX        (1ULL << ETH_FLOW_TYPE_IPV6_TCP_EX)\n+#define ETH_RSS_IPV6_UDP_EX        (1ULL << ETH_FLOW_TYPE_IPV6_UDP_EX)\n \n #define ETH_RSS_IP ( \\\n-\t\tETH_RSS_IPV4 | \\\n-\t\tETH_RSS_IPV6 | \\\n-\t\tETH_RSS_NONF_IPV4_OTHER | \\\n-\t\tETH_RSS_FRAG_IPV4 | \\\n-\t\tETH_RSS_NONF_IPV6_OTHER | \\\n-\t\tETH_RSS_FRAG_IPV6)\n+\tETH_RSS_IPV4 | \\\n+\tETH_RSS_FRAG_IPV4 | \\\n+\tETH_RSS_NONFRAG_IPV4_OTHER | \\\n+\tETH_RSS_IPV6 | \\\n+\tETH_RSS_FRAG_IPV6 | \\\n+\tETH_RSS_NONFRAG_IPV6_OTHER | \\\n+\tETH_RSS_IPV6_EX)\n+\n #define ETH_RSS_UDP ( \\\n-\t\tETH_RSS_IPV4 | \\\n-\t\tETH_RSS_IPV6 | \\\n-\t\tETH_RSS_IPV4_UDP | \\\n-\t\tETH_RSS_IPV6_UDP | \\\n-\t\tETH_RSS_IPV6_UDP_EX | \\\n-\t\tETH_RSS_NONF_IPV4_UDP | \\\n-\t\tETH_RSS_NONF_IPV6_UDP)\n+\tETH_RSS_NONFRAG_IPV4_UDP | \\\n+\tETH_RSS_NONFRAG_IPV6_UDP | \\\n+\tETH_RSS_IPV6_UDP_EX)\n+\n+#define ETH_RSS_TCP ( \\\n+\tETH_RSS_NONFRAG_IPV4_TCP | \\\n+\tETH_RSS_NONFRAG_IPV6_TCP | \\\n+\tETH_RSS_IPV6_TCP_EX)\n+\n+#define ETH_RSS_SCTP ( \\\n+\tETH_RSS_NONFRAG_IPV4_SCTP | \\\n+\tETH_RSS_NONFRAG_IPV6_SCTP)\n+\n /**< Mask of valid RSS hash protocols */\n #define ETH_RSS_PROTO_MASK ( \\\n-\t\tETH_RSS_IPV4 | \\\n-\t\tETH_RSS_IPV4_TCP | \\\n-\t\tETH_RSS_IPV6 | \\\n-\t\tETH_RSS_IPV6_EX | \\\n-\t\tETH_RSS_IPV6_TCP | \\\n-\t\tETH_RSS_IPV6_TCP_EX | \\\n-\t\tETH_RSS_IPV4_UDP | \\\n-\t\tETH_RSS_IPV6_UDP | \\\n-\t\tETH_RSS_IPV6_UDP_EX | \\\n-\t\tETH_RSS_NONF_IPV4_UDP | \\\n-\t\tETH_RSS_NONF_IPV4_TCP | \\\n-\t\tETH_RSS_NONF_IPV4_SCTP | \\\n-\t\tETH_RSS_NONF_IPV4_OTHER | \\\n-\t\tETH_RSS_FRAG_IPV4 | \\\n-\t\tETH_RSS_NONF_IPV6_UDP | \\\n-\t\tETH_RSS_NONF_IPV6_TCP | \\\n-\t\tETH_RSS_NONF_IPV6_SCTP | \\\n-\t\tETH_RSS_NONF_IPV6_OTHER | \\\n-\t\tETH_RSS_FRAG_IPV6 | \\\n-\t\tETH_RSS_L2_PAYLOAD)\n+\tETH_RSS_IPV4 | \\\n+\tETH_RSS_FRAG_IPV4 | \\\n+\tETH_RSS_NONFRAG_IPV4_TCP | \\\n+\tETH_RSS_NONFRAG_IPV4_UDP | \\\n+\tETH_RSS_NONFRAG_IPV4_SCTP | \\\n+\tETH_RSS_NONFRAG_IPV4_OTHER | \\\n+\tETH_RSS_IPV6 | \\\n+\tETH_RSS_FRAG_IPV6 | \\\n+\tETH_RSS_NONFRAG_IPV6_TCP | \\\n+\tETH_RSS_NONFRAG_IPV6_UDP | \\\n+\tETH_RSS_NONFRAG_IPV6_SCTP | \\\n+\tETH_RSS_NONFRAG_IPV6_OTHER | \\\n+\tETH_RSS_L2_PAYLOAD | \\\n+\tETH_RSS_IPV6_EX | \\\n+\tETH_RSS_IPV6_TCP_EX | \\\n+\tETH_RSS_IPV6_UDP_EX)\n \n /*\n  * Definitions used for redirection table entry size.\n@@ -935,6 +908,8 @@ struct rte_eth_dev_info {\n \tuint32_t tx_offload_capa; /**< Device TX offload capabilities. */\n \tuint16_t reta_size;\n \t/**< Device redirection table size, the total number of entries. */\n+\t/** Bit mask of RSS offloads, the bit offset also means flow type */\n+\tuint64_t flow_type_rss_offloads;\n \tstruct rte_eth_rxconf default_rxconf; /**< Default RX configuration */\n \tstruct rte_eth_txconf default_txconf; /**< Default TX configuration */\n \tuint16_t vmdq_queue_base; /**< First queue ID for VMDQ pools. */\ndiff --git a/lib/librte_pmd_e1000/e1000_ethdev.h b/lib/librte_pmd_e1000/e1000_ethdev.h\nindex 71eb5fb..e201279 100644\n--- a/lib/librte_pmd_e1000/e1000_ethdev.h\n+++ b/lib/librte_pmd_e1000/e1000_ethdev.h\n@@ -105,6 +105,17 @@\n #define E1000_FTQF_QUEUE_SHIFT           16\n #define E1000_FTQF_QUEUE_ENABLE          0x00000100\n \n+#define IGB_RSS_OFFLOAD_ALL ( \\\n+\tETH_RSS_IPV4 | \\\n+\tETH_RSS_NONFRAG_IPV4_TCP | \\\n+\tETH_RSS_NONFRAG_IPV4_UDP | \\\n+\tETH_RSS_IPV6 | \\\n+\tETH_RSS_NONFRAG_IPV6_TCP | \\\n+\tETH_RSS_NONFRAG_IPV6_UDP | \\\n+\tETH_RSS_IPV6_EX | \\\n+\tETH_RSS_IPV6_TCP_EX | \\\n+\tETH_RSS_IPV6_UDP_EX)\n+\n /* structure for interrupt relative data */\n struct e1000_interrupt {\n \tuint32_t flags;\ndiff --git a/lib/librte_pmd_e1000/igb_ethdev.c b/lib/librte_pmd_e1000/igb_ethdev.c\nindex 873d65e..49bf866 100644\n--- a/lib/librte_pmd_e1000/igb_ethdev.c\n+++ b/lib/librte_pmd_e1000/igb_ethdev.c\n@@ -1346,6 +1346,7 @@ eth_igb_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n \t\tbreak;\n \t}\n \tdev_info->reta_size = ETH_RSS_RETA_SIZE_128;\n+\tdev_info->flow_type_rss_offloads = IGB_RSS_OFFLOAD_ALL;\n \n \tdev_info->default_rxconf = (struct rte_eth_rxconf) {\n \t\t.rx_thresh = {\ndiff --git a/lib/librte_pmd_e1000/igb_rxtx.c b/lib/librte_pmd_e1000/igb_rxtx.c\nindex 5c394a9..cdf2cac 100644\n--- a/lib/librte_pmd_e1000/igb_rxtx.c\n+++ b/lib/librte_pmd_e1000/igb_rxtx.c\n@@ -73,17 +73,6 @@\n #include \"e1000/e1000_api.h\"\n #include \"e1000_ethdev.h\"\n \n-#define IGB_RSS_OFFLOAD_ALL ( \\\n-\t\tETH_RSS_IPV4 | \\\n-\t\tETH_RSS_IPV4_TCP | \\\n-\t\tETH_RSS_IPV6 | \\\n-\t\tETH_RSS_IPV6_EX | \\\n-\t\tETH_RSS_IPV6_TCP | \\\n-\t\tETH_RSS_IPV6_TCP_EX | \\\n-\t\tETH_RSS_IPV4_UDP | \\\n-\t\tETH_RSS_IPV6_UDP | \\\n-\t\tETH_RSS_IPV6_UDP_EX)\n-\n /* Bit Mask to indicate what bits required for building TX context */\n #define IGB_TX_OFFLOAD_MASK (\t\t\t \\\n \t\tPKT_TX_VLAN_PKT |\t\t \\\n@@ -1582,19 +1571,19 @@ igb_hw_rss_hash_set(struct e1000_hw *hw, struct rte_eth_rss_conf *rss_conf)\n \tmrqc = E1000_MRQC_ENABLE_RSS_4Q; /* RSS enabled. */\n \tif (rss_hf & ETH_RSS_IPV4)\n \t\tmrqc |= E1000_MRQC_RSS_FIELD_IPV4;\n-\tif (rss_hf & ETH_RSS_IPV4_TCP)\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV4_TCP)\n \t\tmrqc |= E1000_MRQC_RSS_FIELD_IPV4_TCP;\n \tif (rss_hf & ETH_RSS_IPV6)\n \t\tmrqc |= E1000_MRQC_RSS_FIELD_IPV6;\n \tif (rss_hf & ETH_RSS_IPV6_EX)\n \t\tmrqc |= E1000_MRQC_RSS_FIELD_IPV6_EX;\n-\tif (rss_hf & ETH_RSS_IPV6_TCP)\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV6_TCP)\n \t\tmrqc |= E1000_MRQC_RSS_FIELD_IPV6_TCP;\n \tif (rss_hf & ETH_RSS_IPV6_TCP_EX)\n \t\tmrqc |= E1000_MRQC_RSS_FIELD_IPV6_TCP_EX;\n-\tif (rss_hf & ETH_RSS_IPV4_UDP)\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV4_UDP)\n \t\tmrqc |= E1000_MRQC_RSS_FIELD_IPV4_UDP;\n-\tif (rss_hf & ETH_RSS_IPV6_UDP)\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV6_UDP)\n \t\tmrqc |= E1000_MRQC_RSS_FIELD_IPV6_UDP;\n \tif (rss_hf & ETH_RSS_IPV6_UDP_EX)\n \t\tmrqc |= E1000_MRQC_RSS_FIELD_IPV6_UDP_EX;\n@@ -1664,19 +1653,19 @@ int eth_igb_rss_hash_conf_get(struct rte_eth_dev *dev,\n \tif (mrqc & E1000_MRQC_RSS_FIELD_IPV4)\n \t\trss_hf |= ETH_RSS_IPV4;\n \tif (mrqc & E1000_MRQC_RSS_FIELD_IPV4_TCP)\n-\t\trss_hf |= ETH_RSS_IPV4_TCP;\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV4_TCP;\n \tif (mrqc & E1000_MRQC_RSS_FIELD_IPV6)\n \t\trss_hf |= ETH_RSS_IPV6;\n \tif (mrqc & E1000_MRQC_RSS_FIELD_IPV6_EX)\n \t\trss_hf |= ETH_RSS_IPV6_EX;\n \tif (mrqc & E1000_MRQC_RSS_FIELD_IPV6_TCP)\n-\t\trss_hf |= ETH_RSS_IPV6_TCP;\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV6_TCP;\n \tif (mrqc & E1000_MRQC_RSS_FIELD_IPV6_TCP_EX)\n \t\trss_hf |= ETH_RSS_IPV6_TCP_EX;\n \tif (mrqc & E1000_MRQC_RSS_FIELD_IPV4_UDP)\n-\t\trss_hf |= ETH_RSS_IPV4_UDP;\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV4_UDP;\n \tif (mrqc & E1000_MRQC_RSS_FIELD_IPV6_UDP)\n-\t\trss_hf |= ETH_RSS_IPV6_UDP;\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV6_UDP;\n \tif (mrqc & E1000_MRQC_RSS_FIELD_IPV6_UDP_EX)\n \t\trss_hf |= ETH_RSS_IPV6_UDP_EX;\n \trss_conf->rss_hf = rss_hf;\ndiff --git a/lib/librte_pmd_i40e/i40e_ethdev.c b/lib/librte_pmd_i40e/i40e_ethdev.c\nindex de1eff4..ed58d08 100644\n--- a/lib/librte_pmd_i40e/i40e_ethdev.c\n+++ b/lib/librte_pmd_i40e/i40e_ethdev.c\n@@ -1518,6 +1518,7 @@ i40e_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n \t\tDEV_TX_OFFLOAD_TCP_CKSUM |\n \t\tDEV_TX_OFFLOAD_SCTP_CKSUM;\n \tdev_info->reta_size = pf->hash_lut_size;\n+\tdev_info->flow_type_rss_offloads = I40E_RSS_OFFLOAD_ALL;\n \n \tdev_info->default_rxconf = (struct rte_eth_rxconf) {\n \t\t.rx_thresh = {\n@@ -4574,26 +4575,26 @@ i40e_config_hena(uint64_t flags)\n \tif (!flags)\n \t\treturn hena;\n \n-\tif (flags & ETH_RSS_NONF_IPV4_UDP)\n-\t\thena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_UDP;\n-\tif (flags & ETH_RSS_NONF_IPV4_TCP)\n+\tif (flags & ETH_RSS_FRAG_IPV4)\n+\t\thena |= 1ULL << I40E_FILTER_PCTYPE_FRAG_IPV4;\n+\tif (flags & ETH_RSS_NONFRAG_IPV4_TCP)\n \t\thena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP;\n-\tif (flags & ETH_RSS_NONF_IPV4_SCTP)\n+\tif (flags & ETH_RSS_NONFRAG_IPV4_UDP)\n+\t\thena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_UDP;\n+\tif (flags & ETH_RSS_NONFRAG_IPV4_SCTP)\n \t\thena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_SCTP;\n-\tif (flags & ETH_RSS_NONF_IPV4_OTHER)\n+\tif (flags & ETH_RSS_NONFRAG_IPV4_OTHER)\n \t\thena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_OTHER;\n-\tif (flags & ETH_RSS_FRAG_IPV4)\n-\t\thena |= 1ULL << I40E_FILTER_PCTYPE_FRAG_IPV4;\n-\tif (flags & ETH_RSS_NONF_IPV6_UDP)\n-\t\thena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_UDP;\n-\tif (flags & ETH_RSS_NONF_IPV6_TCP)\n+\tif (flags & ETH_RSS_FRAG_IPV6)\n+\t\thena |= 1ULL << I40E_FILTER_PCTYPE_FRAG_IPV6;\n+\tif (flags & ETH_RSS_NONFRAG_IPV6_TCP)\n \t\thena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_TCP;\n-\tif (flags & ETH_RSS_NONF_IPV6_SCTP)\n+\tif (flags & ETH_RSS_NONFRAG_IPV6_UDP)\n+\t\thena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_UDP;\n+\tif (flags & ETH_RSS_NONFRAG_IPV6_SCTP)\n \t\thena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_SCTP;\n-\tif (flags & ETH_RSS_NONF_IPV6_OTHER)\n+\tif (flags & ETH_RSS_NONFRAG_IPV6_OTHER)\n \t\thena |= 1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_OTHER;\n-\tif (flags & ETH_RSS_FRAG_IPV6)\n-\t\thena |= 1ULL << I40E_FILTER_PCTYPE_FRAG_IPV6;\n \tif (flags & ETH_RSS_L2_PAYLOAD)\n \t\thena |= 1ULL << I40E_FILTER_PCTYPE_L2_PAYLOAD;\n \n@@ -4608,27 +4609,26 @@ i40e_parse_hena(uint64_t flags)\n \n \tif (!flags)\n \t\treturn rss_hf;\n-\n-\tif (flags & (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_UDP))\n-\t\trss_hf |= ETH_RSS_NONF_IPV4_UDP;\n+\tif (flags & (1ULL << I40E_FILTER_PCTYPE_FRAG_IPV4))\n+\t\trss_hf |= ETH_RSS_FRAG_IPV4;\n \tif (flags & (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP))\n-\t\trss_hf |= ETH_RSS_NONF_IPV4_TCP;\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV4_TCP;\n+\tif (flags & (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_UDP))\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV4_UDP;\n \tif (flags & (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_SCTP))\n-\t\trss_hf |= ETH_RSS_NONF_IPV4_SCTP;\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV4_SCTP;\n \tif (flags & (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_OTHER))\n-\t\trss_hf |= ETH_RSS_NONF_IPV4_OTHER;\n-\tif (flags & (1ULL << I40E_FILTER_PCTYPE_FRAG_IPV4))\n-\t\trss_hf |= ETH_RSS_FRAG_IPV4;\n-\tif (flags & (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_UDP))\n-\t\trss_hf |= ETH_RSS_NONF_IPV6_UDP;\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV4_OTHER;\n+\tif (flags & (1ULL << I40E_FILTER_PCTYPE_FRAG_IPV6))\n+\t\trss_hf |= ETH_RSS_FRAG_IPV6;\n \tif (flags & (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_TCP))\n-\t\trss_hf |= ETH_RSS_NONF_IPV6_TCP;\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV6_TCP;\n+\tif (flags & (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_UDP))\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV6_UDP;\n \tif (flags & (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_SCTP))\n-\t\trss_hf |= ETH_RSS_NONF_IPV6_SCTP;\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV6_SCTP;\n \tif (flags & (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_OTHER))\n-\t\trss_hf |= ETH_RSS_NONF_IPV6_OTHER;\n-\tif (flags & (1ULL << I40E_FILTER_PCTYPE_FRAG_IPV6))\n-\t\trss_hf |= ETH_RSS_FRAG_IPV6;\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV6_OTHER;\n \tif (flags & (1ULL << I40E_FILTER_PCTYPE_L2_PAYLOAD))\n \t\trss_hf |= ETH_RSS_L2_PAYLOAD;\n \ndiff --git a/lib/librte_pmd_i40e/i40e_ethdev.h b/lib/librte_pmd_i40e/i40e_ethdev.h\nindex e2a8db3..b8bf92a 100644\n--- a/lib/librte_pmd_i40e/i40e_ethdev.h\n+++ b/lib/librte_pmd_i40e/i40e_ethdev.h\n@@ -120,16 +120,16 @@ enum i40e_flxpld_layer_idx {\n \t\t       I40E_FLAG_VXLAN)\n \n #define I40E_RSS_OFFLOAD_ALL ( \\\n-\tETH_RSS_NONF_IPV4_UDP | \\\n-\tETH_RSS_NONF_IPV4_TCP | \\\n-\tETH_RSS_NONF_IPV4_SCTP | \\\n-\tETH_RSS_NONF_IPV4_OTHER | \\\n \tETH_RSS_FRAG_IPV4 | \\\n-\tETH_RSS_NONF_IPV6_UDP | \\\n-\tETH_RSS_NONF_IPV6_TCP | \\\n-\tETH_RSS_NONF_IPV6_SCTP | \\\n-\tETH_RSS_NONF_IPV6_OTHER | \\\n+\tETH_RSS_NONFRAG_IPV4_TCP | \\\n+\tETH_RSS_NONFRAG_IPV4_UDP | \\\n+\tETH_RSS_NONFRAG_IPV4_SCTP | \\\n+\tETH_RSS_NONFRAG_IPV4_OTHER | \\\n \tETH_RSS_FRAG_IPV6 | \\\n+\tETH_RSS_NONFRAG_IPV6_TCP | \\\n+\tETH_RSS_NONFRAG_IPV6_UDP | \\\n+\tETH_RSS_NONFRAG_IPV6_SCTP | \\\n+\tETH_RSS_NONFRAG_IPV6_OTHER | \\\n \tETH_RSS_L2_PAYLOAD)\n \n /* All bits of RSS hash enable */\ndiff --git a/lib/librte_pmd_i40e/i40e_ethdev_vf.c b/lib/librte_pmd_i40e/i40e_ethdev_vf.c\nindex fe46cf1..911835f 100644\n--- a/lib/librte_pmd_i40e/i40e_ethdev_vf.c\n+++ b/lib/librte_pmd_i40e/i40e_ethdev_vf.c\n@@ -1646,6 +1646,7 @@ i40evf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n \tdev_info->min_rx_bufsize = I40E_BUF_SIZE_MIN;\n \tdev_info->max_rx_pktlen = I40E_FRAME_SIZE_MAX;\n \tdev_info->reta_size = ETH_RSS_RETA_SIZE_64;\n+\tdev_info->flow_type_rss_offloads = I40E_RSS_OFFLOAD_ALL;\n \n \tdev_info->default_rxconf = (struct rte_eth_rxconf) {\n \t\t.rx_thresh = {\ndiff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c\nindex 3fc3738..db55001 100644\n--- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c\n+++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c\n@@ -2014,6 +2014,7 @@ ixgbe_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n \t\t\t\tETH_TXQ_FLAGS_NOOFFLOADS,\n \t};\n \tdev_info->reta_size = ETH_RSS_RETA_SIZE_128;\n+\tdev_info->flow_type_rss_offloads = IXGBE_RSS_OFFLOAD_ALL;\n }\n \n static void\ndiff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.h b/lib/librte_pmd_ixgbe/ixgbe_ethdev.h\nindex 730098d..f9d1c78 100644\n--- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.h\n+++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.h\n@@ -98,6 +98,17 @@\n #define IXGBE_5TUPLE_MAX_PRI            7\n #define IXGBE_5TUPLE_MIN_PRI            1\n \n+#define IXGBE_RSS_OFFLOAD_ALL ( \\\n+\tETH_RSS_IPV4 | \\\n+\tETH_RSS_NONFRAG_IPV4_TCP | \\\n+\tETH_RSS_NONFRAG_IPV4_UDP | \\\n+\tETH_RSS_IPV6 | \\\n+\tETH_RSS_NONFRAG_IPV6_TCP | \\\n+\tETH_RSS_NONFRAG_IPV6_UDP | \\\n+\tETH_RSS_IPV6_EX | \\\n+\tETH_RSS_IPV6_TCP_EX | \\\n+\tETH_RSS_IPV6_UDP_EX)\n+\n /*\n  * Information about the fdir mode.\n  */\ndiff --git a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c\nindex 840bc07..cb2b9d6 100644\n--- a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c\n+++ b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c\n@@ -80,17 +80,6 @@\n #include \"ixgbe/ixgbe_common.h\"\n #include \"ixgbe_rxtx.h\"\n \n-#define IXGBE_RSS_OFFLOAD_ALL ( \\\n-\t\tETH_RSS_IPV4 | \\\n-\t\tETH_RSS_IPV4_TCP | \\\n-\t\tETH_RSS_IPV6 | \\\n-\t\tETH_RSS_IPV6_EX | \\\n-\t\tETH_RSS_IPV6_TCP | \\\n-\t\tETH_RSS_IPV6_TCP_EX | \\\n-\t\tETH_RSS_IPV4_UDP | \\\n-\t\tETH_RSS_IPV6_UDP | \\\n-\t\tETH_RSS_IPV6_UDP_EX)\n-\n /* Bit Mask to indicate what bits required for building TX context */\n #define IXGBE_TX_OFFLOAD_MASK (\t\t\t \\\n \t\tPKT_TX_VLAN_PKT |\t\t \\\n@@ -2432,19 +2421,19 @@ ixgbe_hw_rss_hash_set(struct ixgbe_hw *hw, struct rte_eth_rss_conf *rss_conf)\n \tmrqc = IXGBE_MRQC_RSSEN; /* Enable RSS */\n \tif (rss_hf & ETH_RSS_IPV4)\n \t\tmrqc |= IXGBE_MRQC_RSS_FIELD_IPV4;\n-\tif (rss_hf & ETH_RSS_IPV4_TCP)\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV4_TCP)\n \t\tmrqc |= IXGBE_MRQC_RSS_FIELD_IPV4_TCP;\n \tif (rss_hf & ETH_RSS_IPV6)\n \t\tmrqc |= IXGBE_MRQC_RSS_FIELD_IPV6;\n \tif (rss_hf & ETH_RSS_IPV6_EX)\n \t\tmrqc |= IXGBE_MRQC_RSS_FIELD_IPV6_EX;\n-\tif (rss_hf & ETH_RSS_IPV6_TCP)\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV6_TCP)\n \t\tmrqc |= IXGBE_MRQC_RSS_FIELD_IPV6_TCP;\n \tif (rss_hf & ETH_RSS_IPV6_TCP_EX)\n \t\tmrqc |= IXGBE_MRQC_RSS_FIELD_IPV6_EX_TCP;\n-\tif (rss_hf & ETH_RSS_IPV4_UDP)\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV4_UDP)\n \t\tmrqc |= IXGBE_MRQC_RSS_FIELD_IPV4_UDP;\n-\tif (rss_hf & ETH_RSS_IPV6_UDP)\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV6_UDP)\n \t\tmrqc |= IXGBE_MRQC_RSS_FIELD_IPV6_UDP;\n \tif (rss_hf & ETH_RSS_IPV6_UDP_EX)\n \t\tmrqc |= IXGBE_MRQC_RSS_FIELD_IPV6_EX_UDP;\n@@ -2518,19 +2507,19 @@ ixgbe_dev_rss_hash_conf_get(struct rte_eth_dev *dev,\n \tif (mrqc & IXGBE_MRQC_RSS_FIELD_IPV4)\n \t\trss_hf |= ETH_RSS_IPV4;\n \tif (mrqc & IXGBE_MRQC_RSS_FIELD_IPV4_TCP)\n-\t\trss_hf |= ETH_RSS_IPV4_TCP;\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV4_TCP;\n \tif (mrqc & IXGBE_MRQC_RSS_FIELD_IPV6)\n \t\trss_hf |= ETH_RSS_IPV6;\n \tif (mrqc & IXGBE_MRQC_RSS_FIELD_IPV6_EX)\n \t\trss_hf |= ETH_RSS_IPV6_EX;\n \tif (mrqc & IXGBE_MRQC_RSS_FIELD_IPV6_TCP)\n-\t\trss_hf |= ETH_RSS_IPV6_TCP;\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV6_TCP;\n \tif (mrqc & IXGBE_MRQC_RSS_FIELD_IPV6_EX_TCP)\n \t\trss_hf |= ETH_RSS_IPV6_TCP_EX;\n \tif (mrqc & IXGBE_MRQC_RSS_FIELD_IPV4_UDP)\n-\t\trss_hf |= ETH_RSS_IPV4_UDP;\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV4_UDP;\n \tif (mrqc & IXGBE_MRQC_RSS_FIELD_IPV6_UDP)\n-\t\trss_hf |= ETH_RSS_IPV6_UDP;\n+\t\trss_hf |= ETH_RSS_NONFRAG_IPV6_UDP;\n \tif (mrqc & IXGBE_MRQC_RSS_FIELD_IPV6_EX_UDP)\n \t\trss_hf |= ETH_RSS_IPV6_UDP_EX;\n \trss_conf->rss_hf = rss_hf;\ndiff --git a/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c b/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c\nindex ef0af16..6068c60 100644\n--- a/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c\n+++ b/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c\n@@ -645,6 +645,7 @@ vmxnet3_dev_info_get(__attribute__((unused))struct rte_eth_dev *dev, struct rte_\n \n \tdev_info->default_txconf.txq_flags = ETH_TXQ_FLAGS_NOMULTSEGS |\n \t\t\t\t\t\tETH_TXQ_FLAGS_NOOFFLOADS;\n+\tdev_info->flow_type_rss_offloads = VMXNET3_RSS_OFFLOAD_ALL;\n }\n \n /* return 0 means link status changed, -1 means not changed */\ndiff --git a/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.h b/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.h\nindex 0941cfc..09993cf 100644\n--- a/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.h\n+++ b/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.h\n@@ -61,6 +61,12 @@\n #define VMXNET3_RSS_MAX_KEY_SIZE        40\n #define VMXNET3_RSS_MAX_IND_TABLE_SIZE  128\n \n+#define VMXNET3_RSS_OFFLOAD_ALL ( \\\n+\tETH_RSS_IPV4 | \\\n+\tETH_RSS_NONFRAG_IPV4_TCP | \\\n+\tETH_RSS_IPV6 | \\\n+\tETH_RSS_NONFRAG_IPV6_TCP)\n+\n /* RSS configuration structure - shared with device through GPA */\n typedef\n struct VMXNET3_RSSConf {\ndiff --git a/lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c b/lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c\nindex 8425f32..4d8a010 100644\n--- a/lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c\n+++ b/lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c\n@@ -998,12 +998,6 @@ static uint8_t rss_intel_key[40] = {\n int\n vmxnet3_rss_configure(struct rte_eth_dev *dev)\n {\n-#define VMXNET3_RSS_OFFLOAD_ALL ( \\\n-\t\tETH_RSS_IPV4 | \\\n-\t\tETH_RSS_IPV4_TCP | \\\n-\t\tETH_RSS_IPV6 | \\\n-\t\tETH_RSS_IPV6_TCP)\n-\n \tstruct vmxnet3_hw *hw = dev->data->dev_private;\n \tstruct VMXNET3_RSSConf *dev_rss_conf;\n \tstruct rte_eth_rss_conf *port_rss_conf;\n@@ -1042,11 +1036,11 @@ vmxnet3_rss_configure(struct rte_eth_dev *dev)\n \trss_hf = port_rss_conf->rss_hf & VMXNET3_RSS_OFFLOAD_ALL;\n \tif (rss_hf & ETH_RSS_IPV4)\n \t\tdev_rss_conf->hashType |= VMXNET3_RSS_HASH_TYPE_IPV4;\n-\tif (rss_hf & ETH_RSS_IPV4_TCP)\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV4_TCP)\n \t\tdev_rss_conf->hashType |= VMXNET3_RSS_HASH_TYPE_TCP_IPV4;\n \tif (rss_hf & ETH_RSS_IPV6)\n \t\tdev_rss_conf->hashType |= VMXNET3_RSS_HASH_TYPE_IPV6;\n-\tif (rss_hf & ETH_RSS_IPV6_TCP)\n+\tif (rss_hf & ETH_RSS_NONFRAG_IPV6_TCP)\n \t\tdev_rss_conf->hashType |= VMXNET3_RSS_HASH_TYPE_TCP_IPV6;\n \n \treturn VMXNET3_SUCCESS;\n",
    "prefixes": [
        "dpdk-dev",
        "6/7"
    ]
}