[dpdk-dev] [PATCH v2 04/12] net: add function to calculate a checksum in a mbuf
Maxime Coquelin
maxime.coquelin at redhat.com
Tue Oct 11 15:25:34 CEST 2016
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 <olivier.matz at 6wind.com>
> ---
> 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
More information about the dev
mailing list