From patchwork Thu Nov 2 12:00:07 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: 117809 Delivered-To: patch@linaro.org Received: by 10.140.22.164 with SMTP id 33csp2077175qgn; Thu, 2 Nov 2017 05:05:52 -0700 (PDT) X-Google-Smtp-Source: ABhQp+S6S05sIryo4U3xu76LmkeDlsxhg7mldZHs4gZuupvdzpIFSjH0LupFVZa3Wp9f/mh9uGcz X-Received: by 10.157.63.165 with SMTP id r34mr2052109otc.266.1509624352444; Thu, 02 Nov 2017 05:05:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1509624352; cv=none; d=google.com; s=arc-20160816; b=IWgsO0ofcMkG8uMHsT8etkDxfXyE9HCKlek0g3CzKyYhNTMbT0yByIQcJekYxq/egZ 0Ux5bZpejcWweYsqE120WKeodnIuaT1T57eWYgDtOL2ieM4crA79CAlBo9VY35FXVRRZ KkHzoNjmw1vNVkFu1qWrjWRecdogQqNkF/4aLdgND+wefnrjlyb3LWywa5KUMVzO40Rn aPREOiJSwnFYqPkVR1Q/LRUhBpt83m+wQhRYCPSP8awO6LXzCfzGa+4Q4Y2W1pPZ0aOQ uBT0aQKJvcd52SLwh17w9YWIAzS7ebvPMv/X5pUzS9wt7WShLIjJAEZ8sEdNEQ4vEkJC 2AWw== 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=uTF0n+KfEq4fZbzF8BRqNlay71xHW3pY0pQraJB6KIk=; b=M2i6kpgd6arMoYXa+cP1JVeR7mh9ggjChtOfju63vuF59nUxdZNZa1qqMAg3GF2yF+ i8376AZH7SfqpWBkgAZTP3QBEw+l54up/qeO0ypMaV3nAa7Nxn0RaLi/a5VRZqm55EZw Vpp/Fp6ttKfalrkFzGHO4HMfzBCO2yYdYAitlpfaGgAYVb48kMTA6G9pOPkl2LvBYExl AYTjlQpgJSUmvxh9P/n58D6zdfGFoZzMtOy7fgRmD1s1VuuVXQiq3z3jF8o2t0A1pcRS qttODWv8IeKANBAWEUohZH6f+56zZaXenrvcTlgeA4Upa5fLK5WSrnuqKkjQvpYgO3Tr eesQ== 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 38si1652882otb.534.2017.11.02.05.05.52; Thu, 02 Nov 2017 05:05:52 -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 C330161006; Thu, 2 Nov 2017 12:05:51 +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 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 2EDCC60D6F; Thu, 2 Nov 2017 12:02:45 +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 2C79460973; Thu, 2 Nov 2017 12:02:26 +0000 (UTC) Received: from forward100o.mail.yandex.net (forward100o.mail.yandex.net [37.140.190.180]) by lists.linaro.org (Postfix) with ESMTPS id 709D761006 for ; Thu, 2 Nov 2017 12:00:12 +0000 (UTC) Received: from mxback1o.mail.yandex.net (mxback1o.mail.yandex.net [IPv6:2a02:6b8:0:1a2d::1b]) by forward100o.mail.yandex.net (Yandex) with ESMTP id 615252A24076 for ; Thu, 2 Nov 2017 15:00:11 +0300 (MSK) Received: from smtp2p.mail.yandex.net (smtp2p.mail.yandex.net [2a02:6b8:0:1472:2741:0:8b6:7]) by mxback1o.mail.yandex.net (nwsmtp/Yandex) with ESMTP id XvWlBXYTr9-0BmeBOTu; Thu, 02 Nov 2017 15:00:11 +0300 Received: by smtp2p.mail.yandex.net (nwsmtp/Yandex) with ESMTPSA id 0qgpfauOww-0A3OfBsN; Thu, 02 Nov 2017 15:00:10 +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: Thu, 2 Nov 2017 15:00:07 +0300 Message-Id: <1509624008-24783-4-git-send-email-odpbot@yandex.ru> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1509624008-24783-1-git-send-email-odpbot@yandex.ru> References: <1509624008-24783-1-git-send-email-odpbot@yandex.ru> Github-pr-num: 269 Subject: [lng-odp] [PATCH API-NEXT v1 3/4] linux-gen: pktio: dpdk: set L3/L4 checksum validation flags 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: Bogdan Pricope L3/L4 checksum validation flags are used to report L3/L4 checksum check status for the incoming packets. Signed-off-by: Bogdan Pricope --- /** Email created from pull request 269 (bogdanPricope:api_next_csum_status_pr) ** https://github.com/Linaro/odp/pull/269 ** Patch: https://github.com/Linaro/odp/pull/269.patch ** Base sha: d22c949cc466bf28de559855a1cb525740578137 ** Merge commit sha: 7076ea1cebe42326de76e8bb07709715222f2958 **/ platform/linux-generic/pktio/dpdk.c | 57 ++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c index 9782d60c4..1611a211a 100644 --- a/platform/linux-generic/pktio/dpdk.c +++ b/platform/linux-generic/pktio/dpdk.c @@ -337,9 +337,9 @@ static struct rte_mempool_ops ops_stack = { MEMPOOL_REGISTER_OPS(ops_stack); -#define HAS_IP4_CSUM_FLAG(m, f) ((m->ol_flags & PKT_RX_IP_CKSUM_MASK) == f) +#define IP4_CSUM_RESULT(m) (m->ol_flags & PKT_RX_IP_CKSUM_MASK) +#define L4_CSUM_RESULT(m) (m->ol_flags & PKT_RX_L4_CKSUM_MASK) #define HAS_L4_PROTO(m, proto) ((m->packet_type & RTE_PTYPE_L4_MASK) == proto) -#define HAS_L4_CSUM_FLAG(m, f) ((m->ol_flags & PKT_RX_L4_CKSUM_MASK) == f) #define PKTIN_CSUM_BITS 0x1C @@ -347,29 +347,52 @@ static inline int pkt_set_ol_rx(odp_pktin_config_opt_t *pktin_cfg, odp_packet_hdr_t *pkt_hdr, struct rte_mbuf *mbuf) { + uint32_t packet_csum_result; + if (pktin_cfg->bit.ipv4_chksum && - RTE_ETH_IS_IPV4_HDR(mbuf->packet_type) && - HAS_IP4_CSUM_FLAG(mbuf, PKT_RX_IP_CKSUM_BAD)) { - if (pktin_cfg->bit.drop_ipv4_err) - return -1; + RTE_ETH_IS_IPV4_HDR(mbuf->packet_type)) { + packet_csum_result = IP4_CSUM_RESULT(mbuf); + + if (packet_csum_result == PKT_RX_IP_CKSUM_GOOD) { + pkt_hdr->p.input_flags.l3_chksum_done = 1; + } else if (packet_csum_result != PKT_RX_IP_CKSUM_UNKNOWN) { + if (pktin_cfg->bit.drop_ipv4_err) + return -1; - pkt_hdr->p.error_flags.ip_err = 1; + pkt_hdr->p.input_flags.l3_chksum_done = 1; + pkt_hdr->p.error_flags.ip_err = 1; + pkt_hdr->p.error_flags.l3_chksum = 1; + } } if (pktin_cfg->bit.udp_chksum && - HAS_L4_PROTO(mbuf, RTE_PTYPE_L4_UDP) && - HAS_L4_CSUM_FLAG(mbuf, PKT_RX_L4_CKSUM_BAD)) { - if (pktin_cfg->bit.drop_udp_err) - return -1; + HAS_L4_PROTO(mbuf, RTE_PTYPE_L4_UDP)) { + packet_csum_result = L4_CSUM_RESULT(mbuf); - pkt_hdr->p.error_flags.udp_err = 1; + if (packet_csum_result == PKT_RX_L4_CKSUM_GOOD) { + pkt_hdr->p.input_flags.l4_chksum_done = 1; + } else if (packet_csum_result != PKT_RX_L4_CKSUM_UNKNOWN) { + if (pktin_cfg->bit.drop_udp_err) + return -1; + + pkt_hdr->p.input_flags.l4_chksum_done = 1; + pkt_hdr->p.error_flags.udp_err = 1; + pkt_hdr->p.error_flags.l4_chksum = 1; + } } else if (pktin_cfg->bit.tcp_chksum && - HAS_L4_PROTO(mbuf, RTE_PTYPE_L4_TCP) && - HAS_L4_CSUM_FLAG(mbuf, PKT_RX_L4_CKSUM_BAD)) { - if (pktin_cfg->bit.drop_tcp_err) - return -1; + HAS_L4_PROTO(mbuf, RTE_PTYPE_L4_TCP)) { + packet_csum_result = L4_CSUM_RESULT(mbuf); - pkt_hdr->p.error_flags.tcp_err = 1; + if (packet_csum_result == PKT_RX_L4_CKSUM_GOOD) { + pkt_hdr->p.input_flags.l4_chksum_done = 1; + } else if (packet_csum_result != PKT_RX_L4_CKSUM_UNKNOWN) { + if (pktin_cfg->bit.drop_tcp_err) + return -1; + + pkt_hdr->p.input_flags.l4_chksum_done = 1; + pkt_hdr->p.error_flags.tcp_err = 1; + pkt_hdr->p.error_flags.l4_chksum = 1; + } } return 0;