[dpdk-dev] librte_net/rte_ip.h checksum functions question

Olivier Matz olivier.matz at 6wind.com
Thu Jul 20 11:09:17 CEST 2017


Hi Ido,

On Tue, 18 Jul 2017 12:18:20 +0000, "Ido Barnea (ibarnea)" <ibarnea at cisco.com> wrote:
> Hi,
> Is it intentional that rte_ipv4_phdr_cksum and others in this file assume that ipv4 header is sizeof(struct ipv4_hdr), actually assuming that there are no IPv4 options?
> If not, I would like to submit a patch changing that.
> Something in the line of:
> sizeof(struct ipv4_hdr) changes to ipv4_hdr->version_ihl & IPV4_HDR_IHL_MASK) * IPV4_IHL_MULTIPLIER)
> 

I agree we should have other functions that take the real ip header
len in account. What about the following:

static inline uint16_t
rte_ipv4ext_cksum(const struct ipv4_hdr *ipv4_hdr, size_t hdrlen)

static inline uint16_t
rte_ipv4ext_phdr_cksum(const struct ipv4_hdr *ipv4_hdr, size_t hdrlen,
	uint64_t ol_flags)
...

The current function rte_ipv4_cksum() can call rte_ipv4ext_cksum(.., 5)
without additional cost, since 5 will be a constant, resolved at
compilation time.

I also noticed that some functions are not properly documented (it should
be announced that options are not supported). Also, the api comment
of rte_ipv6_udptcp_cksum() talks about ipv4...


Thanks,
Olivier


More information about the dev mailing list