From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id F0B836CBC for ; Tue, 11 Oct 2016 15:25:40 +0200 (CEST) Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3B624BAEC; Tue, 11 Oct 2016 13:25:40 +0000 (UTC) Received: from [10.36.6.57] (vpn1-6-57.ams2.redhat.com [10.36.6.57]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u9BDPYT6018964 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 11 Oct 2016 09:25:36 -0400 To: Olivier Matz , dev@dpdk.org, yuanhan.liu@linux.intel.com References: <1469088510-7552-1-git-send-email-olivier.matz@6wind.com> <1475485223-30566-1-git-send-email-olivier.matz@6wind.com> <1475485223-30566-5-git-send-email-olivier.matz@6wind.com> Cc: konstantin.ananyev@intel.com, sugesh.chandran@intel.com, bruce.richardson@intel.com, jianfeng.tan@intel.com, helin.zhang@intel.com, adrien.mazarguil@6wind.com, stephen@networkplumber.org, dprovan@bivio.net, xiao.w.wang@intel.com From: Maxime Coquelin Message-ID: Date: Tue, 11 Oct 2016 15:25:34 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <1475485223-30566-5-git-send-email-olivier.matz@6wind.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Tue, 11 Oct 2016 13:25:40 +0000 (UTC) Subject: Re: [dpdk-dev] [PATCH v2 04/12] net: add function to calculate a checksum in a mbuf X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Oct 2016 13:25:41 -0000 On 10/03/2016 11:00 AM, Olivier Matz wrote: > This function can be used to calculate the checksum of data embedded in > mbuf, that can be composed of several segments. > > This function will be used by the virtio pmd in next commits to calculate > the checksum in software in case the protocol is not recognized. > > Signed-off-by: Olivier Matz > --- > doc/guides/rel_notes/release_16_11.rst | 5 +++ > lib/librte_net/rte_ip.h | 60 ++++++++++++++++++++++++++++++++++ > 2 files changed, 65 insertions(+) > > diff --git a/doc/guides/rel_notes/release_16_11.rst b/doc/guides/rel_notes/release_16_11.rst > index 3d3c417..f29b44c 100644 > --- a/doc/guides/rel_notes/release_16_11.rst > +++ b/doc/guides/rel_notes/release_16_11.rst > @@ -55,6 +55,11 @@ New Features > Added two new functions ``rte_get_rx_ol_flag_list()`` and > ``rte_get_tx_ol_flag_list()`` to dump offload flags as a string. > > +* **Added a functions to calculate the checksum of data in a mbuf.** > + > + Added a new function ``rte_raw_cksum_mbuf()`` to process the checksum of > + data embedded in an mbuf chain. > + > Resolved Issues > --------------- > > diff --git a/lib/librte_net/rte_ip.h b/lib/librte_net/rte_ip.h > index 5b7554a..8499356 100644 > --- a/lib/librte_net/rte_ip.h > +++ b/lib/librte_net/rte_ip.h > @@ -230,6 +230,66 @@ rte_raw_cksum(const void *buf, size_t len) > } > > /** > + * Compute the raw (non complemented) checksum of a packet. > + * > + * @param m > + * The pointer to the mbuf. > + * @param off > + * The offset in bytes to start the checksum. > + * @param len > + * The length in bytes of the data to ckecksum. > + */ > +static inline uint16_t > +rte_raw_cksum_mbuf(const struct rte_mbuf *m, uint32_t off, uint32_t len) > +{ > + const struct rte_mbuf *seg; > + const char *buf; > + uint32_t sum, tmp; > + uint32_t seglen, done; > + > + /* easy case: all data in the first segment */ > + if (off + len <= rte_pktmbuf_data_len(m)) > + return rte_raw_cksum(rte_pktmbuf_mtod_offset(m, > + const char *, off), len); > + > + if (off + len > rte_pktmbuf_pkt_len(m)) unlikely? > + return 0; /* invalid params, return a dummy value */ Couldn't be better to return an error, so that the caller has a chance to see it is passing wrong arguments? The csum would be passed as an arg. Thanks, Maxime