get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 4077,
    "url": "https://patches.dpdk.org/api/patches/4077/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1426782998-11280-3-git-send-email-olivier.matz@6wind.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": "<1426782998-11280-3-git-send-email-olivier.matz@6wind.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1426782998-11280-3-git-send-email-olivier.matz@6wind.com",
    "date": "2015-03-19T16:36:38",
    "name": "[dpdk-dev,2/2] doc: add a description of the offload API",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "9b81eacc0825edfda7515ac14db6fbfa9852489f",
    "submitter": {
        "id": 8,
        "url": "https://patches.dpdk.org/api/people/8/?format=api",
        "name": "Olivier Matz",
        "email": "olivier.matz@6wind.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1426782998-11280-3-git-send-email-olivier.matz@6wind.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/4077/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/4077/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 6E4389A8B;\n\tThu, 19 Mar 2015 17:36:57 +0100 (CET)",
            "from mail-wi0-f177.google.com (mail-wi0-f177.google.com\n\t[209.85.212.177]) by dpdk.org (Postfix) with ESMTP id 97E715683\n\tfor <dev@dpdk.org>; Thu, 19 Mar 2015 17:36:54 +0100 (CET)",
            "by wixw10 with SMTP id w10so74471790wix.0\n\tfor <dev@dpdk.org>; Thu, 19 Mar 2015 09:36:54 -0700 (PDT)",
            "from glumotte.dev.6wind.com (6wind.net2.nerim.net.\n\t[213.41.180.237]) by mx.google.com with ESMTPSA id\n\tfo9sm8146449wib.16.2015.03.19.09.36.53\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tThu, 19 Mar 2015 09:36:54 -0700 (PDT)"
        ],
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20130820;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references:mime-version:content-type:content-transfer-encoding;\n\tbh=0bkhU3xXR8Gr2me3yvLX9GkPJqa/oxZAQOJky5unECI=;\n\tb=hiftqe2Juag3KuooA+nf9L1h3P09Oonza/ThUjdexrLYVDFL0CbgrtPiCSswmZqVyT\n\tEA/EJuCXfs6mC8ossLrtXBs/UwIr94K4KNyDGQLrI0zLVUROJnc67yUdTwXOv+I3Czsp\n\tGSthJqA3a5FOd1/GEajsEeg22APBkFf+07eq8C6f198utyhlu0bEGKTyJgMZBVsvtk8A\n\tp1xy4hqjQOAjYwCvdJijVz5TBQEPM8XIn8ypwGGl76AhCANAn2FZqtI92ndOAmx4isFn\n\tkeT2/RTAeYMCDD41t2E4jrXYhGAMgW3I1fh/faaSkcIBv09tZtdwnt3rcMkLGPYvxc3g\n\tH6ZA==",
        "X-Gm-Message-State": "ALoCoQnTq/9kVzMac2XnOjTa+rTsPmjx7xTJoOb7L6n9t+zOR+AY7D5UIuR1Owl5SJZJZ5oSK3RD",
        "X-Received": "by 10.194.23.39 with SMTP id j7mr156886048wjf.9.1426783014485;\n\tThu, 19 Mar 2015 09:36:54 -0700 (PDT)",
        "From": "Olivier Matz <olivier.matz@6wind.com>",
        "To": "dev@dpdk.org",
        "Date": "Thu, 19 Mar 2015 17:36:38 +0100",
        "Message-Id": "<1426782998-11280-3-git-send-email-olivier.matz@6wind.com>",
        "X-Mailer": "git-send-email 2.1.4",
        "In-Reply-To": "<1426782998-11280-1-git-send-email-olivier.matz@6wind.com>",
        "References": "<1426782998-11280-1-git-send-email-olivier.matz@6wind.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH 2/2] doc: add a description of the offload API",
        "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": "Signed-off-by: Olivier Matz <olivier.matz@6wind.com>\n---\n doc/guides/prog_guide/mbuf_lib.rst      | 89 +++++++++++++++++++++++++++++++++\n doc/guides/prog_guide/poll_mode_drv.rst | 24 +++++----\n 2 files changed, 104 insertions(+), 9 deletions(-)",
    "diff": "diff --git a/doc/guides/prog_guide/mbuf_lib.rst b/doc/guides/prog_guide/mbuf_lib.rst\nindex 3d59e96..6e3b209 100644\n--- a/doc/guides/prog_guide/mbuf_lib.rst\n+++ b/doc/guides/prog_guide/mbuf_lib.rst\n@@ -148,6 +148,95 @@ An mbuf also contains the input port (where it comes from), and the number of se\n \n For chained buffers, only the first mbuf of the chain stores this meta information.\n \n+For instance, this is the case on RX side for the IEEE1588 packet\n+timestamp mechanism, the VLAN tagging and the IP checksum computation.\n+\n+On TX side, it is also possible for an application to delegate some\n+processing to the hardware if it supports it. For instance, the\n+PKT_TX_IP_CKSUM flag allows to offload the computation of the IPv4\n+checksum.\n+\n+The following examples explain how to configure different TX offloads on\n+a vxlan-encapsulated tcp packet:\n+``out_eth/out_ip/out_udp/vxlan/in_eth/in_ip/in_tcp/payload``\n+\n+- calculate checksum of out_ip::\n+\n+    mb->l2_len = len(out_eth)\n+    mb->l3_len = len(out_ip)\n+    mb->ol_flags |= PKT_TX_IPV4 | PKT_TX_IP_CSUM\n+    set out_ip checksum to 0 in the packet\n+\n+  This is supported on hardwares advertising DEV_TX_OFFLOAD_IPV4_CKSUM.\n+\n+- calculate checksum of out_ip and out_udp::\n+\n+    mb->l2_len = len(out_eth)\n+    mb->l3_len = len(out_ip)\n+    mb->ol_flags |= PKT_TX_IPV4 | PKT_TX_IP_CSUM | PKT_TX_UDP_CKSUM\n+    set out_ip checksum to 0 in the packet\n+    set out_udp checksum to pseudo header using rte_ipv4_phdr_cksum()\n+\n+   This is supported on hardwares advertising DEV_TX_OFFLOAD_IPV4_CKSUM\n+   and DEV_TX_OFFLOAD_UDP_CKSUM.\n+\n+- calculate checksum of in_ip::\n+\n+    mb->l2_len = len(out_eth + out_ip + out_udp + vxlan + in_eth)\n+    mb->l3_len = len(in_ip)\n+    mb->ol_flags |= PKT_TX_IPV4 | PKT_TX_IP_CSUM\n+    set in_ip checksum to 0 in the packet\n+\n+  This is similar to case 1), but l2_len is different. It is supported\n+  on hardwares advertising DEV_TX_OFFLOAD_IPV4_CKSUM.\n+  Note that it can only work if outer L4 checksum is 0.\n+\n+- calculate checksum of in_ip and in_tcp::\n+\n+    mb->l2_len = len(out_eth + out_ip + out_udp + vxlan + in_eth)\n+    mb->l3_len = len(in_ip)\n+    mb->ol_flags |= PKT_TX_IPV4 | PKT_TX_IP_CSUM | PKT_TX_TCP_CKSUM\n+    set in_ip checksum to 0 in the packet\n+    set in_tcp checksum to pseudo header using rte_ipv4_phdr_cksum()\n+\n+  This is similar to case 2), but l2_len is different. It is supported\n+  on hardware advertising DEV_TX_OFFLOAD_IPV4_CKSUM and\n+  DEV_TX_OFFLOAD_TCP_CKSUM.\n+  Note that it can only work if outer L4 checksum is 0.\n+\n+- segment inner TCP::\n+\n+    mb->l2_len = len(out_eth + out_ip + out_udp + vxlan + in_eth)\n+    mb->l3_len = len(in_ip)\n+    mb->l4_len = len(in_tcp)\n+    mb->ol_flags |= PKT_TX_IPV4 | PKT_TX_IP_CKSUM | PKT_TX_TCP_CKSUM |\n+      PKT_TX_TCP_SEG;\n+    set in_ip checksum to 0 in the packet\n+    set in_tcp checksum to pseudo header without including the IP\n+      payload length using rte_ipv4_phdr_cksum()\n+\n+  This is supported on hardware advertising DEV_TX_OFFLOAD_TCP_TSO.\n+  Note that it can only work if outer L4 checksum is 0.\n+\n+- calculate checksum of out_ip, in_ip, in_tcp::\n+\n+    mb->outer_l2_len = len(out_eth)\n+    mb->outer_l3_len = len(out_ip)\n+    mb->l2_len = len(out_udp + vxlan + in_eth)\n+    mb->l3_len = len(in_ip)\n+    mb->ol_flags |= PKT_TX_OUTER_IPV4 | PKT_TX_OUTER_IP_CKSUM  | \\\n+      PKT_TX_IP_CKSUM |  PKT_TX_TCP_CKSUM;\n+    set out_ip checksum to 0 in the packet\n+    set in_ip checksum to 0 in the packet\n+    set in_tcp checksum to pseudo header using rte_ipv4_phdr_cksum()\n+\n+   This is supported on hardware advertising DEV_TX_OFFLOAD_IPV4_CKSUM,\n+   DEV_TX_OFFLOAD_UDP_CKSUM and DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM.\n+\n+The list of flags and their precise meaning is described in the mbuf API\n+documentation (rte_mbuf.h). Also refer to the testpmd source code\n+(specifically the csumonly.c file) for details.\n+\n Direct and Indirect Buffers\n ---------------------------\n \ndiff --git a/doc/guides/prog_guide/poll_mode_drv.rst b/doc/guides/prog_guide/poll_mode_drv.rst\nindex e9e1132..7b9e7ca 100755\n--- a/doc/guides/prog_guide/poll_mode_drv.rst\n+++ b/doc/guides/prog_guide/poll_mode_drv.rst\n@@ -198,15 +198,7 @@ the Intel® 82599 10 Gigabit Ethernet Controller controllers in the testpmd appl\n Other features such as the L3/L4 5-Tuple packet filtering feature of a port can be configured in the same way.\n Ethernet* flow control (pause frame) can be configured on the individual port.\n Refer to the testpmd source code for details.\n-Also, L4 (UDP/TCP/ SCTP) checksum offload by the NIC can be enabled for an individual packet as long as the packet mbuf is set up correctly.\n-In terms of UDP tunneling packet, the PKT_TX_UDP_TUNNEL_PKT flag must be set to enable tunneling packet TX checksum offload for both outer layer and inner layer.\n-Refer to the testpmd source code (specifically the csumonly.c file) for details.\n-\n-That being said, the support of some offload features implies the addition of dedicated status bit(s) and value field(s) into the rte_mbuf\n-data structure, along with their appropriate handling by the receive/transmit functions exported by each PMD.\n-\n-For instance, this is the case for the IEEE1588 packet timestamp mechanism, the VLAN tagging and the IP checksum computation, as described in\n-the Section 7.6 \"Meta Information\".\n+Also, L4 (UDP/TCP/ SCTP) checksum offload by the NIC can be enabled for an individual packet as long as the packet mbuf is set up correctly. See `Hardware Offload`_ for details.\n \n Configuration of Transmit and Receive Queues\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n@@ -257,6 +249,20 @@ One descriptor in the TX ring is used as a sentinel to avoid a hardware race con\n \n     When configuring for DCB operation, at port initialization, both the number of transmit queues and the number of receive queues must be set to 128.\n \n+Hardware Offload\n+~~~~~~~~~~~~~~~~\n+\n+Depending on driver capabilities advertised by\n+``rte_eth_dev_info_get()``, the PMD may support hardware offloading\n+feature like checksumming, TCP segmentation or VLAN insertion.\n+\n+The support of these offload features implies the addition of dedicated\n+status bit(s) and value field(s) into the rte_mbuf data structure, along\n+with their appropriate handling by the receive/transmit functions\n+exported by each PMD. The list of flags and their precise meaning is\n+described in the mbuf API documentation and in the in :ref:`Mbuf Library\n+<Mbuf_Library>`, section \"Meta Information\".\n+\n Poll Mode Driver API\n --------------------\n \n",
    "prefixes": [
        "dpdk-dev",
        "2/2"
    ]
}