get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 28573,
    "url": "https://patches.dpdk.org/api/patches/28573/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/725cf2c5c2f8c163081958320bc1dbeeeeb1d1ad.1505044395.git.shahafs@mellanox.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": "<725cf2c5c2f8c163081958320bc1dbeeeeb1d1ad.1505044395.git.shahafs@mellanox.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/725cf2c5c2f8c163081958320bc1dbeeeeb1d1ad.1505044395.git.shahafs@mellanox.com",
    "date": "2017-09-10T12:07:48",
    "name": "[dpdk-dev,v2,1/2] ethdev: introduce Rx queue offloads API",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "999bf5008d1de53925c1d9df198ae193f9df4998",
    "submitter": {
        "id": 634,
        "url": "https://patches.dpdk.org/api/people/634/?format=api",
        "name": "Shahaf Shuler",
        "email": "shahafs@mellanox.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/725cf2c5c2f8c163081958320bc1dbeeeeb1d1ad.1505044395.git.shahafs@mellanox.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/28573/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/28573/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 [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id E61D71AF03;\n\tSun, 10 Sep 2017 14:08:03 +0200 (CEST)",
            "from EUR01-DB5-obe.outbound.protection.outlook.com\n\t(mail-db5eur01on0082.outbound.protection.outlook.com [104.47.2.82])\n\tby dpdk.org (Postfix) with ESMTP id C6AA55398\n\tfor <dev@dpdk.org>; Sun, 10 Sep 2017 14:08:00 +0200 (CEST)",
            "from mellanox.com (82.166.227.17) by\n\tAM4PR05MB3140.eurprd05.prod.outlook.com (2603:10a6:205:3::17) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.35.12;\n\tSun, 10 Sep 2017 12:07:59 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com;\n\ts=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=mBCItwksIEAtAxTxEVPQR0j7Iu+DjOUGv+RFUez8kfY=;\n\tb=q0rp5K1HEHwbEFDzKPQLaW27psOVqpZKuQ2PHGuUXwd17EmDDtgmlh9NwwSux3w0mPtqLVACdHHO2DNVYhfO3aKnVMBQVveSWsIBLhMhN7I8iAfNSqTOuCVLiR6lemgyTlGB7tSM1WKNfwpgs0zao5E7H45UMqRY5VzIfPKTg0U=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=shahafs@mellanox.com; ",
        "From": "Shahaf Shuler <shahafs@mellanox.com>",
        "To": "thomas@monjalon.net",
        "Cc": "dev@dpdk.org",
        "Date": "Sun, 10 Sep 2017 15:07:48 +0300",
        "Message-Id": "<725cf2c5c2f8c163081958320bc1dbeeeeb1d1ad.1505044395.git.shahafs@mellanox.com>",
        "X-Mailer": "git-send-email 2.12.0",
        "In-Reply-To": "<cover.1505044395.git.shahafs@mellanox.com>",
        "References": "<cover.1504508374.git.shahafs@mellanox.com>\n\t<cover.1505044395.git.shahafs@mellanox.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[82.166.227.17]",
        "X-ClientProxiedBy": "VI1PR0502CA0025.eurprd05.prod.outlook.com\n\t(2603:10a6:803:1::38) To AM4PR05MB3140.eurprd05.prod.outlook.com\n\t(2603:10a6:205:3::17)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "5eaf448f-7d7e-4e0c-b055-08d4f8449451",
        "X-MS-Office365-Filtering-HT": "Tenant",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(48565401081)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:AM4PR05MB3140; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; AM4PR05MB3140;\n\t3:3jzkXJrbOGLekxUkNSk29Ef+jppo/DB/02qBCQy0X/OPGVp6dgR3OzqmvW3fuCOpD1fvfjVty6UMSAIoY1LpyTQYHi0KPpvJLPhkJgcerH8fKm2ks4iEAZVspUwWUiq0Yq/atoXkOWtnqX6NzpZe51mV3Y79YrAjXs+Oixx2AVxZEJx4xdhekx35DfpikmaA9HOFtHpBYNuz8DaoEE0n9IT5p/TJv/tiJALGe5sKgR90+dOuZ7uinxVA64pnJfjL;\n\t25:sSs0FQS66CqxMdy5BbK/5ylCeuFkxXQmqivSIDTN5pptvqYEwwgWyHkAVxe4XwDgVnRd73ejgw2Mi+ryK1qGHruF0Xjoz4Ah+9ZT64rmhMIBodWwK8F2Dtw47QYdx6W7xPNQWC+0WRwb+eq3cdcFU6IYSffAxjieXO2wfHtdBYFY7bSkScMOR8dSqJOKj+6LUjCtiQMofFb0G+Ol3daKWIcR+AetcUinyYOfG2eUUKpqEjd6wsljvggKG1mZXzCqgX/KBiWboJfXFqcKwy/661CuAM22yfzp5g9tx0RfuuYXOLcPbTkme15Eo7oqg63HfJFA2gIYmjk35C6aDXjHUg==;\n\t31:OpaB6xokzsk4G5le5ahrB7huyUW4xEF/hbRwXtZVpx+fb2dF4KYJXamlFwbsKQi/Fcs+IatCuUS7P07ORsoAtQUYXCk7nCsV/65C22q4rvRQjQFr4hvSeRv8IMXtVhB1U/oPB0hV8g0iHWIsnvSxSdHnEcZLP4mh9P17be3tycNt+5C0V8gYJj0De+SxO913sziP3SE2abmVf4CuyTUd0kotwCVDKd2do/asGqk1+rk=",
            "1; AM4PR05MB3140;\n\t20:7qOcfnBsRZ/uBzRCvVwvNMFQdj/hGU8f3KcbgjM87gJwwhg2r1+njtuHGNzhbCEaZYdDf9ts9e/fuq/8sYHjU6cbX5I9xKJcpXAsamJAVkGwPE/84EbUO0dEzrYGe5rHq1y7Iaqx7ixg+E00rhVCAXgQmEee0eKbhkmBgFyAq5wACPA80mpJsdczZRuxM7A4rQTk3v8U6Yo05/gOdpSLzuDXOg4qPDy+xUV1t4vKeYiEnoPnOafD3vIGP3oYZX5+Ep2DAYfkWilMRjTmelUrkKbi8BUVnLOmyPsjCBP0mBsg9BVpf9/6DapC2qKB3uQFcCpRc//MTp4h4qaRvgc7X+/STVswZnwwTbs8X0Tuyi9q0reRTZFRi8dI+e7WGjJ2jo5YJg0UDdZtRf6oeMETMDnx+4vIOEuQd5xLcTKKRLUKjK7BF71rnAZ8mJfhcHL8dWaI2XNd7oh/ZqQnkVBjTd7tc2AyRqaJHklDO/W0CPMBp8snJHbccSB7YNNZxXph;\n\t4:+Bz9aZQ4HDdQ/X+Y93T7smMdFjvhQ7GYRqWT/ALLYYKGDGQ7cLXr5qxJ+Rl/OFPeyMzypOAk/jGBP9rfVdquGgc+3V+byzdASyUZZmceZpm34i1D0RbbpuhdZQAsCMA/LeSJAByeASMjOomhGbrmVzwIxElSD0kI6VookXw56oi9C9a7Csu6phT/KBqviWohilWrrfsESHuM2QAusymeKpl25NFKOywPTzHbpb5Mqu7Fp7M0IwlwvpoiQf2AhWNoaL/1nkvCamgngLa+3N0bBwPw7pUu88lX3mCG6vTVM3dRZh/bLIG+rzKaXnGyv8VOAL3uU9eWbTk2faPruXxUSA==",
            "=?us-ascii?Q?1; AM4PR05MB3140;\n\t23:z/ZjdtzOL8fK1IPH8UYdS3HCX1VZZybp8r4MR65to?=\n\tudk3JT3Xub1LT2DQmWYvqUr2L6NpCpAMbBzYJk3jMi1prWD3e1TKKMvNVdZa5EiHVADHayIQ9Asp8HvXNR4SJd5qaPgaipmNBYaX6ofds08r6ZFrql/fGuXe0JT0kVsWsh5r0378B+uNufhXr9nFwJasX47oUyxD3HMGTtFj8H2Snc9xM+tsXw/k5w3XZ0cku8W5CoeXk/jZ1duPWpskx4ooYKGT7cAbcwNcs5OvO5OpCdT9v1D/PsZWP+Ju7DFmB6Pdqp9Fzewz9oOhZr/TbQykvQmIhkwWu6f38vIZm2FSBfxZyc28vdVPdGklOtDAk5TVZrgUbWwB+KBWS7NyBX6nQ079hGfrXGEgQo8WPUraJI7TbVZPsI6Rsk/Dry659QPMod55ZpC5S4/jg3XduI2jBeTBKIwmxVhQUJOx5Wh/I6HXD9fH8q/o7f0KDL7ZcLjsKcyLnTfP9A0ntkQTuK6QaN4okZ4DFheXjR4Jo+HW7QLQfsFQFPHtipNASuqZpBKf9ptmizkDGYbbdWcaqp1k4s9SUolSYhMx/Q6bW7txq+KSwgwqPdDRvpIYj5l7aE9o+W7uqEixuC+rAPo2Px0UqGguXyI4mvex03OYjS9pEyH7xZejMfiBYwIDFlrTvI2dcf4V0NGCn7Su6YPhldv07eOKgJ75YSN1NxvmWkWjL/IDc+FUS+jORoAADUQKQ84rotOpsJsIGtpon0Jg8moHCQecHKiuBZQG/N5HJ+giuUCvdT4hMFAUrTGTYC+gNsTBKGEvdXcyJl1cEcKMV1w/wkR3Ak/eUau+2Dls7uDRj4Hh5vN/u8kX1XQ3NoF6xkiYlqMwlQx5+zgJqFZRG1WnXpfoPgnJ0NrAasx5vBloYOBJBnbdeOyR1eZ0GCIkDqoPi6dl1PkvVBSQn4feomvihGUgAJEUFjfzkqERnQiRAym42G4G/ahaMB/MWwUZleOEXphSF5tSKE5JWOxGsFiuT51b3JCQVKopkaIH6eMw4n9Es4jkEWrsZUhUsKabKeFBA2UtM29Jm9k19s3wBt3OXDCaWAXx+u/x+/HXILm0isyzo7+eX1PE7tTiq2TQWeOa0qapAjUvPAOPzobV2ntVBqv6g5PHZubxQ7btwlnDpAf39YIr+G1bHRCArC/L+c1jnLWsrhfIJdsyNHfWfxD",
            "1; AM4PR05MB3140;\n\t6:tksTe/yTkxkc97VPmpTDILjpc60dxwcU1sIPVHcAHdlME1Mg4S6DenUcyO/EPJl4jQvlgOqJhUk9StsWI5c6DycIwIrJyRxCHgS61wIvIyFhFY9MbZZBpnlmwU82H5pGijjt2eq/Mbv+FbuVDe6oXqROee0v+aQprfZBFP+sD32DYhoFp2UrBdM7ObJoHMQcFgnOKc2YlgQ/RXrynWHNwxhvXPKqFZhQ3/HovGv3rYy+fd3kDbEEHmmyMPAPNTFA0YD0OuEHH5LSjZU0skikAfWfgyWjYkUZLxUy0D7FHUJBw4ky+LmDlc7jgUcua7FQaTyfLzpojYqFrd7sJ/Ch7w==;\n\t5:fvQdxERoNErzu2JwazwbswZOYdhwZXpPfK4SZ8Fo7eZazoEyoxyBvA7SQMm7lR9ttxs4MzlKgVHbXwXRSWffpYHDM3sVsknQlP5HD5Gc98nBCuzr9n6Gsyfey3t11UHYnrozlOxPYOcOhvwhzTEe1A==;\n\t24:0z+h1PgQ615k7zQbKuAgOiYgvaVQEShSqkEdFNJFFOi/JOBRRkW52hrRGp4zC8cVLMRaZCvpflYZ0ifL7hrJDtxsXEkuyjMeXjx2v08O1uY=;\n\t7:O5bqE6Y4ZZFETNZQPDZjKRdaWjcm0U79GsfmhBOvRG6mYpVjN7Nj1UAtj0olx7IukgGzfHPrSfNm+tc6epx6QmE4tMPbJdub3rNNJGp0qj98TEb02BngKE+olYciGD49x7cQoz8o3DD+OGgVbXdyTMIucTtY7O+UmX8vGGGY8DPiBbS42DsIWMvvwko5NfsIOhoPob8HbfVigdg43PmBU4s+f5DHGZ3LPJiyf8Y5V00="
        ],
        "X-MS-TrafficTypeDiagnostic": "AM4PR05MB3140:",
        "X-LD-Processed": "a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr",
        "X-Exchange-Antispam-Report-Test": "UriScan:(20558992708506)(278428928389397);",
        "X-Microsoft-Antispam-PRVS": "<AM4PR05MB31409BE0E5361DA1E356E6F6C36B0@AM4PR05MB3140.eurprd05.prod.outlook.com>",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(100000703101)(100105400095)(6055026)(6041248)(20161123560025)(20161123555025)(20161123564025)(20161123558100)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:AM4PR05MB3140; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:AM4PR05MB3140; ",
        "X-Forefront-PRVS": "04267075BD",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(4630300001)(7370300001)(6009001)(39860400002)(189002)(199003)(305945005)(50466002)(48376002)(50226002)(189998001)(2906002)(8676002)(21086003)(5660300001)(25786009)(66066001)(3846002)(69596002)(42186005)(47776003)(6116002)(7736002)(478600001)(7350300001)(81156014)(81166006)(4326008)(50986999)(55016002)(101416001)(53936002)(6666003)(86362001)(68736007)(6916009)(2950100002)(76176999)(105586002)(2351001)(2361001)(118296001)(106356001)(36756003)(110136004)(5003940100001)(97736004)(33646002)(33026002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB3140; H:mellanox.com; FPR:;\n\tSPF:None; \n\tPTR:InfoNoRecords; MX:1; A:1; LANG:en; ",
        "Received-SPF": "None (protection.outlook.com: mellanox.com does not designate\n\tpermitted sender hosts)",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "Mellanox.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "10 Sep 2017 12:07:59.1397\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "AM4PR05MB3140",
        "Subject": "[dpdk-dev] [PATCH v2 1/2] ethdev: introduce Rx queue offloads API",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <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": "Introduce a new API to configure Rx offloads.\n\nIn the new API, offloads are divided into per-port and per-queue\noffloads. The PMD reports capability for each of them.\nOffloads are enabled using the existing DEV_RX_OFFLOAD_* flags.\nTo enable per-port offload, the offload should be set on both device\nconfiguration and queue configuration. To enable per-queue offload, the\noffloads can be set only on queue configuration.\n\nApplications should set the ignore_offload_bitfield bit on rxmode\nstructure in order to move to the new API.\n\nThe old Rx offloads API is kept for the meanwhile, in order to enable a\nsmooth transition for PMDs and application to the new API.\n\nSigned-off-by: Shahaf Shuler <shahafs@mellanox.com>\n---\n doc/guides/nics/features.rst  |  19 +++--\n lib/librte_ether/rte_ethdev.c | 156 +++++++++++++++++++++++++++++++++----\n lib/librte_ether/rte_ethdev.h |  52 ++++++++++++-\n 3 files changed, 204 insertions(+), 23 deletions(-)",
    "diff": "diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst\nindex 37ffbc68c..f2c8497c2 100644\n--- a/doc/guides/nics/features.rst\n+++ b/doc/guides/nics/features.rst\n@@ -179,7 +179,7 @@ Jumbo frame\n \n Supports Rx jumbo frames.\n \n-* **[uses]    user config**: ``dev_conf.rxmode.jumbo_frame``,\n+* **[uses]    rte_eth_rxq_conf**: ``offloads:DEV_RX_OFFLOAD_JUMBO_FRAME``.\n   ``dev_conf.rxmode.max_rx_pkt_len``.\n * **[related] rte_eth_dev_info**: ``max_rx_pktlen``.\n * **[related] API**: ``rte_eth_dev_set_mtu()``.\n@@ -192,7 +192,7 @@ Scattered Rx\n \n Supports receiving segmented mbufs.\n \n-* **[uses]       user config**: ``dev_conf.rxmode.enable_scatter``.\n+* **[uses]       rte_eth_rxq_conf**: ``offloads:DEV_RX_OFFLOAD_SCATTER``.\n * **[implements] datapath**: ``Scattered Rx function``.\n * **[implements] rte_eth_dev_data**: ``scattered_rx``.\n * **[provides]   eth_dev_ops**: ``rxq_info_get:scattered_rx``.\n@@ -206,7 +206,7 @@ LRO\n \n Supports Large Receive Offload.\n \n-* **[uses]       user config**: ``dev_conf.rxmode.enable_lro``.\n+* **[uses]       rte_eth_rxq_conf**: ``offloads:DEV_RX_OFFLOAD_TCP_LRO``.\n * **[implements] datapath**: ``LRO functionality``.\n * **[implements] rte_eth_dev_data**: ``lro``.\n * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_LRO``, ``mbuf.tso_segsz``.\n@@ -363,7 +363,7 @@ VLAN filter\n \n Supports filtering of a VLAN Tag identifier.\n \n-* **[uses]       user config**: ``dev_conf.rxmode.hw_vlan_filter``.\n+* **[uses]       rte_eth_rxq_conf**: ``offloads:DEV_RX_OFFLOAD_VLAN_FILTER``.\n * **[implements] eth_dev_ops**: ``vlan_filter_set``.\n * **[related]    API**: ``rte_eth_dev_vlan_filter()``.\n \n@@ -499,7 +499,7 @@ CRC offload\n \n Supports CRC stripping by hardware.\n \n-* **[uses] user config**: ``dev_conf.rxmode.hw_strip_crc``.\n+* **[uses] rte_eth_rxq_conf**: ``offloads:DEV_RX_OFFLOAD_CRC_STRIP``.\n \n \n .. _nic_features_vlan_offload:\n@@ -509,8 +509,7 @@ VLAN offload\n \n Supports VLAN offload to hardware.\n \n-* **[uses]       user config**: ``dev_conf.rxmode.hw_vlan_strip``,\n-  ``dev_conf.rxmode.hw_vlan_filter``, ``dev_conf.rxmode.hw_vlan_extend``.\n+* **[uses]       rte_eth_rxq_conf**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.\n * **[implements] eth_dev_ops**: ``vlan_offload_set``.\n * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.vlan_tci``.\n * **[provides]   rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,\n@@ -526,6 +525,7 @@ QinQ offload\n \n Supports QinQ (queue in queue) offload.\n \n+* **[uses]     rte_eth_rxq_conf**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.\n * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ_PKT``.\n * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.vlan_tci``,\n    ``mbuf.vlan_tci_outer``.\n@@ -540,7 +540,7 @@ L3 checksum offload\n \n Supports L3 checksum offload.\n \n-* **[uses]     user config**: ``dev_conf.rxmode.hw_ip_checksum``.\n+* **[uses]     rte_eth_rxq_conf**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.\n * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,\n   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.\n * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |\n@@ -557,6 +557,7 @@ L4 checksum offload\n \n Supports L4 checksum offload.\n \n+* **[uses]     rte_eth_rxq_conf**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``.\n * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,\n   ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |\n   ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.\n@@ -574,6 +575,7 @@ MACsec offload\n \n Supports MACsec.\n \n+* **[uses]     rte_eth_rxq_conf**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.\n * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.\n * **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,\n   ``tx_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.\n@@ -586,6 +588,7 @@ Inner L3 checksum\n \n Supports inner packet L3 checksum.\n \n+* **[uses]     rte_eth_rxq_conf**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.\n * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,\n   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,\n   ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,\ndiff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c\nindex 0597641ee..b3c10701e 100644\n--- a/lib/librte_ether/rte_ethdev.c\n+++ b/lib/librte_ether/rte_ethdev.c\n@@ -687,12 +687,90 @@ rte_eth_speed_bitflag(uint32_t speed, int duplex)\n \t}\n }\n \n+/**\n+ * A conversion function from rxmode bitfield API.\n+ */\n+static void\n+rte_eth_convert_rx_offload_bitfield(const struct rte_eth_rxmode *rxmode,\n+\t\t\t\t    uint64_t *rx_offloads)\n+{\n+\tuint64_t offloads = 0;\n+\n+\tif (rxmode->header_split == 1)\n+\t\toffloads |= DEV_RX_OFFLOAD_HEADER_SPLIT;\n+\tif (rxmode->hw_ip_checksum == 1)\n+\t\toffloads |= DEV_RX_OFFLOAD_CHECKSUM;\n+\tif (rxmode->hw_vlan_filter == 1)\n+\t\toffloads |= DEV_RX_OFFLOAD_VLAN_FILTER;\n+\tif (rxmode->hw_vlan_strip == 1)\n+\t\toffloads |= DEV_RX_OFFLOAD_VLAN_STRIP;\n+\tif (rxmode->hw_vlan_extend == 1)\n+\t\toffloads |= DEV_RX_OFFLOAD_VLAN_EXTEND;\n+\tif (rxmode->jumbo_frame == 1)\n+\t\toffloads |= DEV_RX_OFFLOAD_JUMBO_FRAME;\n+\tif (rxmode->hw_strip_crc == 1)\n+\t\toffloads |= DEV_RX_OFFLOAD_CRC_STRIP;\n+\tif (rxmode->enable_scatter == 1)\n+\t\toffloads |= DEV_RX_OFFLOAD_SCATTER;\n+\tif (rxmode->enable_lro == 1)\n+\t\toffloads |= DEV_RX_OFFLOAD_TCP_LRO;\n+\n+\t*rx_offloads = offloads;\n+}\n+\n+/**\n+ * A conversion function from rxmode offloads API.\n+ */\n+static void\n+rte_eth_convert_rx_offloads(const uint64_t rx_offloads,\n+\t\t\t    struct rte_eth_rxmode *rxmode)\n+{\n+\n+\tif (rx_offloads & DEV_RX_OFFLOAD_HEADER_SPLIT)\n+\t\trxmode->header_split = 1;\n+\telse\n+\t\trxmode->header_split = 0;\n+\tif (rx_offloads & DEV_RX_OFFLOAD_CHECKSUM)\n+\t\trxmode->hw_ip_checksum = 1;\n+\telse\n+\t\trxmode->hw_ip_checksum = 0;\n+\tif (rx_offloads & DEV_RX_OFFLOAD_VLAN_FILTER)\n+\t\trxmode->hw_vlan_filter = 1;\n+\telse\n+\t\trxmode->hw_vlan_filter = 0;\n+\tif (rx_offloads & DEV_RX_OFFLOAD_VLAN_STRIP)\n+\t\trxmode->hw_vlan_strip = 1;\n+\telse\n+\t\trxmode->hw_vlan_strip = 0;\n+\tif (rx_offloads & DEV_RX_OFFLOAD_VLAN_EXTEND)\n+\t\trxmode->hw_vlan_extend = 1;\n+\telse\n+\t\trxmode->hw_vlan_extend = 0;\n+\tif (rx_offloads & DEV_RX_OFFLOAD_JUMBO_FRAME)\n+\t\trxmode->jumbo_frame = 1;\n+\telse\n+\t\trxmode->jumbo_frame = 0;\n+\tif (rx_offloads & DEV_RX_OFFLOAD_CRC_STRIP)\n+\t\trxmode->hw_strip_crc = 1;\n+\telse\n+\t\trxmode->hw_strip_crc = 0;\n+\tif (rx_offloads & DEV_RX_OFFLOAD_SCATTER)\n+\t\trxmode->enable_scatter = 1;\n+\telse\n+\t\trxmode->enable_scatter = 0;\n+\tif (rx_offloads & DEV_RX_OFFLOAD_TCP_LRO)\n+\t\trxmode->enable_lro = 1;\n+\telse\n+\t\trxmode->enable_lro = 0;\n+}\n+\n int\n rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,\n \t\t      const struct rte_eth_conf *dev_conf)\n {\n \tstruct rte_eth_dev *dev;\n \tstruct rte_eth_dev_info dev_info;\n+\tstruct rte_eth_conf local_conf = *dev_conf;\n \tint diag;\n \n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL);\n@@ -722,8 +800,20 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,\n \t\treturn -EBUSY;\n \t}\n \n+\t/*\n+\t * Convert between the offloads API to enable PMDs to support\n+\t * only one of them.\n+\t */\n+\tif ((dev_conf->rxmode.ignore_offload_bitfield == 0)) {\n+\t\trte_eth_convert_rx_offload_bitfield(\n+\t\t\t\t&dev_conf->rxmode, &local_conf.rxmode.offloads);\n+\t} else {\n+\t\trte_eth_convert_rx_offloads(dev_conf->rxmode.offloads,\n+\t\t\t\t\t    &local_conf.rxmode);\n+\t}\n+\n \t/* Copy the dev_conf parameter into the dev structure */\n-\tmemcpy(&dev->data->dev_conf, dev_conf, sizeof(dev->data->dev_conf));\n+\tmemcpy(&dev->data->dev_conf, &local_conf, sizeof(dev->data->dev_conf));\n \n \t/*\n \t * Check that the numbers of RX and TX queues are not greater\n@@ -767,7 +857,7 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,\n \t * If jumbo frames are enabled, check that the maximum RX packet\n \t * length is supported by the configured device.\n \t */\n-\tif (dev_conf->rxmode.jumbo_frame == 1) {\n+\tif (local_conf.rxmode.offloads & DEV_RX_OFFLOAD_JUMBO_FRAME) {\n \t\tif (dev_conf->rxmode.max_rx_pkt_len >\n \t\t    dev_info.max_rx_pktlen) {\n \t\t\tRTE_PMD_DEBUG_TRACE(\"ethdev port_id=%d max_rx_pkt_len %u\"\n@@ -1004,6 +1094,7 @@ rte_eth_rx_queue_setup(uint8_t port_id, uint16_t rx_queue_id,\n \tuint32_t mbp_buf_size;\n \tstruct rte_eth_dev *dev;\n \tstruct rte_eth_dev_info dev_info;\n+\tstruct rte_eth_rxconf local_conf;\n \tvoid **rxq;\n \n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL);\n@@ -1074,8 +1165,18 @@ rte_eth_rx_queue_setup(uint8_t port_id, uint16_t rx_queue_id,\n \tif (rx_conf == NULL)\n \t\trx_conf = &dev_info.default_rxconf;\n \n+\tlocal_conf = *rx_conf;\n+\tif (dev->data->dev_conf.rxmode.ignore_offload_bitfield == 0) {\n+\t\t/**\n+\t\t * Reflect port offloads to queue offloads in order for\n+\t\t * offloads to not be discarded.\n+\t\t */\n+\t\trte_eth_convert_rx_offload_bitfield(&dev->data->dev_conf.rxmode,\n+\t\t\t\t\t\t    &local_conf.offloads);\n+\t}\n+\n \tret = (*dev->dev_ops->rx_queue_setup)(dev, rx_queue_id, nb_rx_desc,\n-\t\t\t\t\t      socket_id, rx_conf, mp);\n+\t\t\t\t\t      socket_id, &local_conf, mp);\n \tif (!ret) {\n \t\tif (!dev->data->min_rx_buf_size ||\n \t\t    dev->data->min_rx_buf_size > mbp_buf_size)\n@@ -1979,7 +2080,8 @@ rte_eth_dev_vlan_filter(uint8_t port_id, uint16_t vlan_id, int on)\n \n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n-\tif (!(dev->data->dev_conf.rxmode.hw_vlan_filter)) {\n+\tif (!(dev->data->dev_conf.rxmode.offloads &\n+\t      DEV_RX_OFFLOAD_VLAN_FILTER)) {\n \t\tRTE_PMD_DEBUG_TRACE(\"port %d: vlan-filtering disabled\\n\", port_id);\n \t\treturn -ENOSYS;\n \t}\n@@ -2055,23 +2157,41 @@ rte_eth_dev_set_vlan_offload(uint8_t port_id, int offload_mask)\n \n \t/*check which option changed by application*/\n \tcur = !!(offload_mask & ETH_VLAN_STRIP_OFFLOAD);\n-\torg = !!(dev->data->dev_conf.rxmode.hw_vlan_strip);\n+\torg = !!(dev->data->dev_conf.rxmode.offloads &\n+\t\t DEV_RX_OFFLOAD_VLAN_STRIP);\n \tif (cur != org) {\n-\t\tdev->data->dev_conf.rxmode.hw_vlan_strip = (uint8_t)cur;\n+\t\tif (cur)\n+\t\t\tdev->data->dev_conf.rxmode.offloads |=\n+\t\t\t\tDEV_RX_OFFLOAD_VLAN_STRIP;\n+\t\telse\n+\t\t\tdev->data->dev_conf.rxmode.offloads &=\n+\t\t\t\t~DEV_RX_OFFLOAD_VLAN_STRIP;\n \t\tmask |= ETH_VLAN_STRIP_MASK;\n \t}\n \n \tcur = !!(offload_mask & ETH_VLAN_FILTER_OFFLOAD);\n-\torg = !!(dev->data->dev_conf.rxmode.hw_vlan_filter);\n+\torg = !!(dev->data->dev_conf.rxmode.offloads &\n+\t\t DEV_RX_OFFLOAD_VLAN_FILTER);\n \tif (cur != org) {\n-\t\tdev->data->dev_conf.rxmode.hw_vlan_filter = (uint8_t)cur;\n+\t\tif (cur)\n+\t\t\tdev->data->dev_conf.rxmode.offloads |=\n+\t\t\t\tDEV_RX_OFFLOAD_VLAN_FILTER;\n+\t\telse\n+\t\t\tdev->data->dev_conf.rxmode.offloads &=\n+\t\t\t\t~DEV_RX_OFFLOAD_VLAN_FILTER;\n \t\tmask |= ETH_VLAN_FILTER_MASK;\n \t}\n \n \tcur = !!(offload_mask & ETH_VLAN_EXTEND_OFFLOAD);\n-\torg = !!(dev->data->dev_conf.rxmode.hw_vlan_extend);\n+\torg = !!(dev->data->dev_conf.rxmode.offloads &\n+\t\t DEV_RX_OFFLOAD_VLAN_EXTEND);\n \tif (cur != org) {\n-\t\tdev->data->dev_conf.rxmode.hw_vlan_extend = (uint8_t)cur;\n+\t\tif (cur)\n+\t\t\tdev->data->dev_conf.rxmode.offloads |=\n+\t\t\t\tDEV_RX_OFFLOAD_VLAN_EXTEND;\n+\t\telse\n+\t\t\tdev->data->dev_conf.rxmode.offloads &=\n+\t\t\t\t~DEV_RX_OFFLOAD_VLAN_EXTEND;\n \t\tmask |= ETH_VLAN_EXTEND_MASK;\n \t}\n \n@@ -2080,6 +2200,13 @@ rte_eth_dev_set_vlan_offload(uint8_t port_id, int offload_mask)\n \t\treturn ret;\n \n \tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vlan_offload_set, -ENOTSUP);\n+\n+\t/*\n+\t * Convert to the offload bitfield API just in case the underlying PMD\n+\t * still supporting it.\n+\t */\n+\trte_eth_convert_rx_offloads(dev->data->dev_conf.rxmode.offloads,\n+\t\t\t\t    &dev->data->dev_conf.rxmode);\n \t(*dev->dev_ops->vlan_offload_set)(dev, mask);\n \n \treturn ret;\n@@ -2094,13 +2221,16 @@ rte_eth_dev_get_vlan_offload(uint8_t port_id)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tif (dev->data->dev_conf.rxmode.hw_vlan_strip)\n+\tif (dev->data->dev_conf.rxmode.offloads &\n+\t    DEV_RX_OFFLOAD_VLAN_STRIP)\n \t\tret |= ETH_VLAN_STRIP_OFFLOAD;\n \n-\tif (dev->data->dev_conf.rxmode.hw_vlan_filter)\n+\tif (dev->data->dev_conf.rxmode.offloads &\n+\t    DEV_RX_OFFLOAD_VLAN_FILTER)\n \t\tret |= ETH_VLAN_FILTER_OFFLOAD;\n \n-\tif (dev->data->dev_conf.rxmode.hw_vlan_extend)\n+\tif (dev->data->dev_conf.rxmode.offloads &\n+\t    DEV_RX_OFFLOAD_VLAN_EXTEND)\n \t\tret |= ETH_VLAN_EXTEND_OFFLOAD;\n \n \treturn ret;\ndiff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h\nindex 0adf3274a..f424cba04 100644\n--- a/lib/librte_ether/rte_ethdev.h\n+++ b/lib/librte_ether/rte_ethdev.h\n@@ -348,7 +348,18 @@ struct rte_eth_rxmode {\n \tenum rte_eth_rx_mq_mode mq_mode;\n \tuint32_t max_rx_pkt_len;  /**< Only used if jumbo_frame enabled. */\n \tuint16_t split_hdr_size;  /**< hdr buf size (header_split enabled).*/\n+\tuint64_t offloads;\n+\t/**\n+\t * Per-port Rx offloads to be set using DEV_RX_OFFLOAD_* flags.\n+\t * Only offloads set on rx_offload_capa field on rte_eth_dev_info\n+\t * structure are allowed to be set.\n+\t */\n \t__extension__\n+\t/**\n+\t * Below bitfield API is obsolete. Application should\n+\t * enable per-port offloads using the offload field\n+\t * above.\n+\t */\n \tuint16_t header_split : 1, /**< Header Split enable. */\n \t\thw_ip_checksum   : 1, /**< IP/UDP/TCP checksum offload enable. */\n \t\thw_vlan_filter   : 1, /**< VLAN filter enable. */\n@@ -357,7 +368,17 @@ struct rte_eth_rxmode {\n \t\tjumbo_frame      : 1, /**< Jumbo Frame Receipt enable. */\n \t\thw_strip_crc     : 1, /**< Enable CRC stripping by hardware. */\n \t\tenable_scatter   : 1, /**< Enable scatter packets rx handler */\n-\t\tenable_lro       : 1; /**< Enable LRO */\n+\t\tenable_lro       : 1, /**< Enable LRO */\n+\t\tignore_offload_bitfield : 1;\n+\t\t/**\n+\t\t * When set the offload bitfield should be ignored.\n+\t\t * Instead per-port Rx offloads should be set on offloads\n+\t\t * field above.\n+\t\t * Per-queue offloads shuold be set on rte_eth_rxq_conf\n+\t\t * structure.\n+\t\t * This bit is temporary till rxmode bitfield offloads API will\n+\t\t * be deprecated.\n+\t\t */\n };\n \n /**\n@@ -691,6 +712,12 @@ struct rte_eth_rxconf {\n \tuint16_t rx_free_thresh; /**< Drives the freeing of RX descriptors. */\n \tuint8_t rx_drop_en; /**< Drop packets if no descriptors are available. */\n \tuint8_t rx_deferred_start; /**< Do not start queue with rte_eth_dev_start(). */\n+\tuint64_t offloads;\n+\t/**\n+\t * Per-queue Rx offloads to be set using DEV_RX_OFFLOAD_* flags.\n+\t * Only offloads set on rx_queue_offload_capa field on rte_eth_dev_info\n+\t * structure are allowed to be set.\n+\t */\n };\n \n #define ETH_TXQ_FLAGS_NOMULTSEGS 0x0001 /**< nb_segs=1 for all mbufs */\n@@ -706,6 +733,7 @@ struct rte_eth_rxconf {\n #define ETH_TXQ_FLAGS_NOXSUMS \\\n \t\t(ETH_TXQ_FLAGS_NOXSUMSCTP | ETH_TXQ_FLAGS_NOXSUMUDP | \\\n \t\t ETH_TXQ_FLAGS_NOXSUMTCP)\n+\n /**\n  * A structure used to configure a TX ring of an Ethernet port.\n  */\n@@ -907,6 +935,18 @@ struct rte_eth_conf {\n #define DEV_RX_OFFLOAD_QINQ_STRIP  0x00000020\n #define DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM 0x00000040\n #define DEV_RX_OFFLOAD_MACSEC_STRIP     0x00000080\n+#define DEV_RX_OFFLOAD_HEADER_SPLIT\t0x00000100\n+#define DEV_RX_OFFLOAD_VLAN_FILTER\t0x00000200\n+#define DEV_RX_OFFLOAD_VLAN_EXTEND\t0x00000400\n+#define DEV_RX_OFFLOAD_JUMBO_FRAME\t0x00000800\n+#define DEV_RX_OFFLOAD_CRC_STRIP\t0x00001000\n+#define DEV_RX_OFFLOAD_SCATTER\t\t0x00002000\n+#define DEV_RX_OFFLOAD_CHECKSUM (DEV_RX_OFFLOAD_IPV4_CKSUM | \\\n+\t\t\t\t DEV_RX_OFFLOAD_UDP_CKSUM | \\\n+\t\t\t\t DEV_RX_OFFLOAD_TCP_CKSUM)\n+#define DEV_RX_OFFLOAD_VLAN (DEV_RX_OFFLOAD_VLAN_STRIP | \\\n+\t\t\t     DEV_RX_OFFLOAD_VLAN_FILTER | \\\n+\t\t\t     DEV_RX_OFFLOAD_VLAN_EXTEND)\n \n /**\n  * TX offload capabilities of a device.\n@@ -949,8 +989,11 @@ struct rte_eth_dev_info {\n \t/** Maximum number of hash MAC addresses for MTA and UTA. */\n \tuint16_t max_vfs; /**< Maximum number of VFs. */\n \tuint16_t max_vmdq_pools; /**< Maximum number of VMDq pools. */\n-\tuint32_t rx_offload_capa; /**< Device RX offload capabilities. */\n+\tuint64_t rx_offload_capa;\n+\t/**< Device per port RX offload capabilities. */\n \tuint32_t tx_offload_capa; /**< Device TX offload capabilities. */\n+\tuint64_t rx_queue_offload_capa;\n+\t/**< Device per queue RX offload capabilities. */\n \tuint16_t reta_size;\n \t/**< Device redirection table size, the total number of entries. */\n \tuint8_t hash_key_size; /**< Hash key size in bytes */\n@@ -1870,6 +1913,9 @@ uint32_t rte_eth_speed_bitflag(uint32_t speed, int duplex);\n  *        each statically configurable offload hardware feature provided by\n  *        Ethernet devices, such as IP checksum or VLAN tag stripping for\n  *        example.\n+ *        The Rx offload bitfield API is obsolete and will be deprecated.\n+ *        Applications should set the ignore_bitfield_offloads bit on *rxmode*\n+ *        structure and use offloads field to set per-port offloads instead.\n  *     - the Receive Side Scaling (RSS) configuration when using multiple RX\n  *         queues per port.\n  *\n@@ -1923,6 +1969,8 @@ void _rte_eth_dev_reset(struct rte_eth_dev *dev);\n  *   The *rx_conf* structure contains an *rx_thresh* structure with the values\n  *   of the Prefetch, Host, and Write-Back threshold registers of the receive\n  *   ring.\n+ *   In addition it contains the hardware offloads features to activate using\n+ *   the DEV_RX_OFFLOAD_* flags.\n  * @param mb_pool\n  *   The pointer to the memory pool from which to allocate *rte_mbuf* network\n  *   memory buffers to populate each descriptor of the receive ring.\n",
    "prefixes": [
        "dpdk-dev",
        "v2",
        "1/2"
    ]
}