From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxime Coquelin Subject: Re: [PATCH v2 04/12] net: add function to calculate a checksum in a mbuf Date: Tue, 11 Oct 2016 15:25:34 +0200 Message-ID: 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> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit 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 To: Olivier Matz , dev@dpdk.org, yuanhan.liu@linux.intel.com 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) In-Reply-To: <1475485223-30566-5-git-send-email-olivier.matz@6wind.com> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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