In case no inner checksum is requested, we can consider the inner data as opaque since there is nothing to do and rely on simple HW UDP checksum without considering support for HW outer UDP checksum.
Cleanup the DPDK helper accordingly. Acked-by: Mike Pattrick <[email protected]> Signed-off-by: David Marchand <[email protected]> --- Changes since v2: - added check for TSO packets, --- lib/dp-packet.c | 16 +++++++++++----- lib/netdev-dpdk.c | 5 +---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/dp-packet.c b/lib/dp-packet.c index b34bcf26f3..b893fbd396 100644 --- a/lib/dp-packet.c +++ b/lib/dp-packet.c @@ -553,12 +553,18 @@ dp_packet_compare_offsets(struct dp_packet *b1, struct dp_packet *b2, void dp_packet_ol_send_prepare(struct dp_packet *p, uint64_t flags) { - if (!dp_packet_ip_checksum_partial(p) - && !dp_packet_l4_checksum_partial(p) - && !dp_packet_inner_ip_checksum_partial(p) + if (!dp_packet_inner_ip_checksum_partial(p) && !dp_packet_inner_l4_checksum_partial(p)) { - /* Only checksumming needs actions. */ - return; + + if (!dp_packet_ip_checksum_partial(p) + && !dp_packet_l4_checksum_partial(p)) { + /* Only checksumming needs actions. */ + return; + } + + if (OVS_UNLIKELY(dp_packet_tunnel(p) && !dp_packet_get_tso_segsz(p))) { + p->offloads &= ~DP_PACKET_OL_TUNNEL_MASK; + } } if (!dp_packet_tunnel(p)) { diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index f6ae235af3..29b1b21d64 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -2647,10 +2647,7 @@ netdev_dpdk_prep_hwol_packet(struct netdev_dpdk *dev, struct rte_mbuf *mbuf) return true; } - if (dp_packet_tunnel(pkt) - && (dp_packet_inner_ip_checksum_partial(pkt) - || dp_packet_inner_l4_checksum_partial(pkt) - || mbuf->tso_segsz)) { + if (dp_packet_tunnel(pkt)) { if (dp_packet_ip_checksum_partial(pkt) || dp_packet_l4_checksum_partial(pkt)) { mbuf->outer_l2_len = (char *) dp_packet_l3(pkt) - -- 2.51.1 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
