On Wed, Mar 27, 2024 at 5:51 PM David Marchand
<[email protected]> wrote:
> /* If packet is vxlan or geneve tunnel packet, calculate outer
> * l2 len and outer l3 len. Inner l2/l3/l4 len are calculated
> * before. */
> - const uint64_t tunnel_type = mbuf->ol_flags & RTE_MBUF_F_TX_TUNNEL_MASK;
> - if (tunnel_type == RTE_MBUF_F_TX_TUNNEL_GENEVE ||
> - tunnel_type == RTE_MBUF_F_TX_TUNNEL_VXLAN) {
> + if ((tunnel_type == RTE_MBUF_F_TX_TUNNEL_GENEVE ||
> + tunnel_type == RTE_MBUF_F_TX_TUNNEL_VXLAN) &&
> + mbuf->ol_flags & all_inner_requests) {
> +
> mbuf->outer_l2_len = (char *) dp_packet_l3(pkt) -
> (char *) dp_packet_eth(pkt);
> mbuf->outer_l3_len = (char *) dp_packet_l4(pkt) -
> (char *) dp_packet_l3(pkt);
> + } else {
> + if (OVS_UNLIKELY(!(mbuf->ol_flags & all_inner_requests))) {
> + /* If no inner offloading is requesting, fallback to non
> tunneling
> + * checksum offloads. */
Inner marks must be reset before converting outer marks.
Otherwise, this results (with IPv4 traffic encapsulated in IPv6 geneve
tunnel) in such a ol_flags combination:
RTE_MBUF_F_RX_RSS_HASH
RTE_MBUF_F_TX_UDP_CKSUM
RTE_MBUF_F_TX_IP_CKSUM
RTE_MBUF_F_TX_IPV4
RTE_MBUF_F_TX_IPV6
v2 in preparation.
>
> - /* If neither inner checksums nor TSO is requested, inner marks
> - * should not be set. */
> - if (!(mbuf->ol_flags & (RTE_MBUF_F_TX_IP_CKSUM |
> - RTE_MBUF_F_TX_L4_MASK |
> - RTE_MBUF_F_TX_TCP_SEG))) {
> - mbuf->ol_flags &= ~(RTE_MBUF_F_TX_IPV4 |
> - RTE_MBUF_F_TX_IPV6);
> + if (mbuf->ol_flags & RTE_MBUF_F_TX_OUTER_IP_CKSUM) {
> + mbuf->ol_flags |= RTE_MBUF_F_TX_IP_CKSUM;
> + mbuf->ol_flags |= RTE_MBUF_F_TX_IPV4;
> + }
> + if (mbuf->ol_flags & RTE_MBUF_F_TX_OUTER_UDP_CKSUM) {
> + mbuf->ol_flags |= RTE_MBUF_F_TX_UDP_CKSUM;
> + mbuf->ol_flags |= (mbuf->ol_flags &
> RTE_MBUF_F_TX_OUTER_IPV4) ?
> + RTE_MBUF_F_TX_IPV4 : RTE_MBUF_F_TX_IPV6;
> + }
> + mbuf->ol_flags &= ~(all_outer_requests | all_outer_marks);
--
David Marchand
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev