[dpdk-dev] examples/ipsec-secgw: fix incorrect IPv4 checksum at TX
Checks
Commit Message
For ESP transport and BYPASS mode the app might generate output
packets with invalid IPv4 header checksum.
At least such behavior was observed on few Intel NICs.
The reason is that the app didn't set ipv4 header checksum to zero
before passing it to the HW.
Fixes: 906257e965b7 ("examples/ipsec-secgw: support IPv6")
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
---
examples/ipsec-secgw/ipsec-secgw.c | 1 +
1 file changed, 1 insertion(+)
Comments
On 6/6/2018 1:04 PM, Konstantin Ananyev wrote:
> For ESP transport and BYPASS mode the app might generate output
> packets with invalid IPv4 header checksum.
> At least such behavior was observed on few Intel NICs.
> The reason is that the app didn't set ipv4 header checksum to zero
> before passing it to the HW.
>
> Fixes: 906257e965b7 ("examples/ipsec-secgw: support IPv6")
>
> Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
> ---
>
Acked-by: Radu Nicolau <radu.nicolau@intel.com>
<mailto:radu.nicolau@intel.com>
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Radu Nicolau
> Sent: Wednesday, June 6, 2018 2:33 PM
> To: Ananyev, Konstantin <konstantin.ananyev@intel.com>; dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH] examples/ipsec-secgw: fix incorrect IPv4
> checksum at TX
>
>
> On 6/6/2018 1:04 PM, Konstantin Ananyev wrote:
> > For ESP transport and BYPASS mode the app might generate output
> > packets with invalid IPv4 header checksum.
> > At least such behavior was observed on few Intel NICs.
> > The reason is that the app didn't set ipv4 header checksum to zero
> > before passing it to the HW.
> >
> > Fixes: 906257e965b7 ("examples/ipsec-secgw: support IPv6")
> >
> > Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
> > ---
> >
> Acked-by: Radu Nicolau <radu.nicolau@intel.com>
> <mailto:radu.nicolau@intel.com>
Added Cc: stable@dpdk.org
Applied to dpdk-next-crypto.
Thanks,
Pablo
@@ -331,6 +331,7 @@ prepare_tx_pkt(struct rte_mbuf *pkt, uint16_t port)
pkt->l3_len = sizeof(struct ip);
pkt->l2_len = ETHER_HDR_LEN;
+ ip->ip_sum = 0;
ethhdr->ether_type = rte_cpu_to_be_16(ETHER_TYPE_IPv4);
} else {
pkt->ol_flags |= PKT_TX_IPV6;