net: fix Intel prepare function for IP checksum offload
Current Intel tx prepare function does not properly handle the case where only IP checksum is requested, without requesting any L4 checksum or TSO: IP checksum is not properly reset to 0 and output packet may contain invalid IP checksum. Fixes: 4fb7e803eb1a ("ethdev: add Tx preparation") Cc: stable@dpdk.org Signed-off-by: Didier Pallard <didier.pallard@6wind.com> Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
This commit is contained in:
parent
dcbbbd0692
commit
ae0207d4b5
@ -122,14 +122,16 @@ rte_net_intel_cksum_flags_prepare(struct rte_mbuf *m, uint64_t ol_flags)
|
||||
(ol_flags & PKT_TX_OUTER_IPV6))
|
||||
inner_l3_offset += m->outer_l2_len + m->outer_l3_len;
|
||||
|
||||
if ((ol_flags & PKT_TX_UDP_CKSUM) == PKT_TX_UDP_CKSUM) {
|
||||
if (ol_flags & PKT_TX_IPV4) {
|
||||
ipv4_hdr = rte_pktmbuf_mtod_offset(m, struct ipv4_hdr *,
|
||||
inner_l3_offset);
|
||||
|
||||
if (ol_flags & PKT_TX_IP_CKSUM)
|
||||
ipv4_hdr->hdr_checksum = 0;
|
||||
}
|
||||
|
||||
if ((ol_flags & PKT_TX_UDP_CKSUM) == PKT_TX_UDP_CKSUM) {
|
||||
if (ol_flags & PKT_TX_IPV4) {
|
||||
udp_hdr = (struct udp_hdr *)((char *)ipv4_hdr +
|
||||
m->l3_len);
|
||||
udp_hdr->dgram_cksum = rte_ipv4_phdr_cksum(ipv4_hdr,
|
||||
@ -146,12 +148,6 @@ rte_net_intel_cksum_flags_prepare(struct rte_mbuf *m, uint64_t ol_flags)
|
||||
} else if ((ol_flags & PKT_TX_TCP_CKSUM) ||
|
||||
(ol_flags & PKT_TX_TCP_SEG)) {
|
||||
if (ol_flags & PKT_TX_IPV4) {
|
||||
ipv4_hdr = rte_pktmbuf_mtod_offset(m, struct ipv4_hdr *,
|
||||
inner_l3_offset);
|
||||
|
||||
if (ol_flags & PKT_TX_IP_CKSUM)
|
||||
ipv4_hdr->hdr_checksum = 0;
|
||||
|
||||
/* non-TSO tcp or TSO */
|
||||
tcp_hdr = (struct tcp_hdr *)((char *)ipv4_hdr +
|
||||
m->l3_len);
|
||||
|
Loading…
x
Reference in New Issue
Block a user