From patchwork Fri Oct 20 10:00:25 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Github ODP bot X-Patchwork-Id: 116475 Delivered-To: patch@linaro.org Received: by 10.140.22.164 with SMTP id 33csp1506113qgn; Fri, 20 Oct 2017 03:12:22 -0700 (PDT) X-Google-Smtp-Source: ABhQp+Sm+nbk2DJio3aPXchmWrEpATjV9vlz3d/GfsUGFknuzy7pTiRh6/f3pkyjlFESra/CfSth X-Received: by 10.107.192.132 with SMTP id q126mr5344154iof.181.1508494342643; Fri, 20 Oct 2017 03:12:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508494342; cv=none; d=google.com; s=arc-20160816; b=DERz5rc4HKlvAkWx8A7yUURGAACkrW/DFuUKuqdSHaeduRtkiQiJFLrVodJ8UqUhyS jM7IbOavVbXatCKQKhtVBgnVO7O4kgseETxca4Mz0I4Eb5aWxgzClFzI3PJl98fU6zBJ 2nnRwQn0mXkFMnE3EhFtfproLeAQhuoxlGXTzVzo/k+87ci2SdU8DLM0hKnHWtTJ7hVc UxCXV8dZjM7stoHoRzCR3wPrRcsQ1kbD+7I3YyusFEvuxopnI+pPFVE+xlwzdMi+RaMP c6DVIYJUpRTizdMgWmp2ek3ITsw75zbv1f6TBnUZST9wm5ALnGGrV6sPNlibupyEIBXW xstw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:github-pr-num :references:in-reply-to:message-id:date:to:from:delivered-to :arc-authentication-results; bh=jIbh4CzzFt2TJC26rKmzarFVavRh24yfRqOKz8av1ok=; b=FZNz/tHQ56OYgCP/souvD2iXO4LgMBZ3EeF4yFhw8Je5sZZ2AdOPIZZjVEshQN+TfY uW8etzhit22sL+2FL4dKf+IXwiQBo85Iwtoc/lskr89t+0N1EXmNil2uPkLYasQHG80Y uQZz1PXOrVclZFYP76EgAa2Vsu3K2NZZS32ndS7DoOmws8Critl9bf38nfyhld2QcagS dj1OwHm14WC9/7hb+eUC8WRRanS14rvTXwV0Vt1NMNMANEZSKnSaDUnw111jOilQqpdH OOFj+0EokMn4DGiwrGZ3p4Ybypx9Rq/95O2AfxFbbPjrUQsooEK9YvDJkoYI5BesMftK 10JA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.197.127.237 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=yandex.ru Return-Path: Received: from lists.linaro.org (ec2-54-197-127-237.compute-1.amazonaws.com. [54.197.127.237]) by mx.google.com with ESMTP id d123si766995itc.89.2017.10.20.03.12.22; Fri, 20 Oct 2017 03:12:22 -0700 (PDT) Received-SPF: pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.197.127.237 as permitted sender) client-ip=54.197.127.237; Authentication-Results: mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.197.127.237 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=yandex.ru Received: by lists.linaro.org (Postfix, from userid 109) id 2FD8D60C03; Fri, 20 Oct 2017 10:12:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on ip-10-142-244-252 X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,URIBL_BLOCKED autolearn=disabled version=3.4.0 Received: from [127.0.0.1] (localhost [127.0.0.1]) by lists.linaro.org (Postfix) with ESMTP id 7E32260C24; Fri, 20 Oct 2017 10:02:41 +0000 (UTC) X-Original-To: lng-odp@lists.linaro.org Delivered-To: lng-odp@lists.linaro.org Received: by lists.linaro.org (Postfix, from userid 109) id C888C60B65; Fri, 20 Oct 2017 10:02:16 +0000 (UTC) Received: from forward105o.mail.yandex.net (forward105o.mail.yandex.net [37.140.190.183]) by lists.linaro.org (Postfix) with ESMTPS id 52B7460A81 for ; Fri, 20 Oct 2017 10:00:33 +0000 (UTC) Received: from mxback9o.mail.yandex.net (mxback9o.mail.yandex.net [IPv6:2a02:6b8:0:1a2d::23]) by forward105o.mail.yandex.net (Yandex) with ESMTP id 3A85B4444F9E for ; Fri, 20 Oct 2017 13:00:32 +0300 (MSK) Received: from smtp4j.mail.yandex.net (smtp4j.mail.yandex.net [2a02:6b8:0:1619::15:6]) by mxback9o.mail.yandex.net (nwsmtp/Yandex) with ESMTP id O5PTsUQhDL-0WgGpvxD; Fri, 20 Oct 2017 13:00:32 +0300 Received: by smtp4j.mail.yandex.net (nwsmtp/Yandex) with ESMTPSA id mSOqmJENzI-0VmitakU; Fri, 20 Oct 2017 13:00:31 +0300 (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (Client certificate not present) From: Github ODP bot To: lng-odp@lists.linaro.org Date: Fri, 20 Oct 2017 13:00:25 +0300 Message-Id: <1508493628-25083-2-git-send-email-odpbot@yandex.ru> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1508493628-25083-1-git-send-email-odpbot@yandex.ru> References: <1508493628-25083-1-git-send-email-odpbot@yandex.ru> Github-pr-num: 242 Subject: [lng-odp] [PATCH API-NEXT v1 1/3] api: packet: ones complement sum X-BeenThere: lng-odp@lists.linaro.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: "The OpenDataPlane \(ODP\) List" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: lng-odp-bounces@lists.linaro.org Sender: "lng-odp" From: Petri Savolainen Added packet metadata for ones complement sum over IP payload in a packet. Some NICs calculate the sum during packet input (at least for IP fragments) and store the value into the packet descriptor. This offloads L4 checksum calculation for IP fragments as SW does not need sum all payload data, but just combine pre-calculated sums from packet descriptors and remove extra header fields from the sum. Signed-off-by: Petri Savolainen --- /** Email created from pull request 242 (psavol:next-checksum-metadata) ** https://github.com/Linaro/odp/pull/242 ** Patch: https://github.com/Linaro/odp/pull/242.patch ** Base sha: e3108af2f0b58c2ceca422b418439bba5de04b11 ** Merge commit sha: c389b738fd956b2cd0077d9e5425be938179fdb2 **/ include/odp/api/spec/packet.h | 17 +++++++++++++++++ include/odp/api/spec/packet_flags.h | 9 +++++++++ 2 files changed, 26 insertions(+) diff --git a/include/odp/api/spec/packet.h b/include/odp/api/spec/packet.h index 62ecf70e1..55793ff20 100644 --- a/include/odp/api/spec/packet.h +++ b/include/odp/api/spec/packet.h @@ -1437,6 +1437,23 @@ void odp_packet_l3_chksum_insert(odp_packet_t pkt, int l3); void odp_packet_l4_chksum_insert(odp_packet_t pkt, int l4); /** + * Ones' complement sum of IP payload data + * + * Returns 16-bit ones' complement sum calculated over IP payload data in the + * packet (includes L4 headers, excludes Ethernet CRC). In case of odd number of + * bytes, calculation uses a zero byte as padding at the end. The sum may be + * used as part of e.g. UDP/TCP checksum checking, especially with IP + * fragments. + * + * Use odp_packet_has_ones_comp() to check if the sum has been set. + * + * @param pkt Packet handle + * + * @return Ones' complement sum of IP payload data + */ +uint16_t odp_packet_ones_comp(odp_packet_t pkt); + +/** * Packet flow hash value * * Returns the hash generated from the packet header. Use diff --git a/include/odp/api/spec/packet_flags.h b/include/odp/api/spec/packet_flags.h index 377b75ba0..31979ac4b 100644 --- a/include/odp/api/spec/packet_flags.h +++ b/include/odp/api/spec/packet_flags.h @@ -277,6 +277,15 @@ int odp_packet_has_sctp(odp_packet_t pkt); int odp_packet_has_icmp(odp_packet_t pkt); /** + * Check for ones' complement sum + * + * @param pkt Packet handle + * @retval non-zero if packet contains ones' complement sum + * @retval 0 if packet does not contain ones' complement sum + */ +int odp_packet_has_ones_comp(odp_packet_t pkt); + +/** * Check for packet flow hash * * @param pkt Packet handle