On 6/14/23 21:03, Mike Pattrick wrote:
> The netdev receiving packets is supposed to provide the flags
> indicating if the L4 checksum was verified and it is OK or BAD,
> otherwise the stack will check when appropriate by software.
> 
> If the packet comes with good checksum, then postpone the
> checksum calculation to the egress device if needed.
> 
> When encapsulate a packet with that flag, set the checksum
> of the inner L4 header since that is not yet supported.
> 
> Calculate the L4 checksum when the packet is going to be sent
> over a device that doesn't support the feature.
> 
> Linux tap devices allows enabling L3 and L4 offload, so this
> patch enables the feature. However, Linux socket interface
> remains disabled because the API doesn't allow enabling
> those two features without enabling TSO too.
> 
> Signed-off-by: Flavio Leitner <f...@sysclose.org>
> Co-authored-by: Flavio Leitner <f...@sysclose.org>
> Signed-off-by: Mike Pattrick <m...@redhat.com>
> ---
>  Since v9:
>   - Extended miniflow_extract changes into avx512 code
>   - Formatting changes
>   - Note that we cannot currently enable checksum offloading in
>     CONFIGURE_VETH_OFFLOADS for check-system-userspace as
>     netdev-linux.c currently only parses the vnet header if TSO
>     is enabled.
>  Since v10:
>   - No change
>  Since v11:
>   - Added AVX512 IPv6 checksum offload support.
>   - Improved error messages and logging.
>  Since v12:
>   - Added missing mutex annotations
>  Since v13:
>   - Added TUNGETFEATURES check in netdev-linux
>  Since v14:
>   - Only check TUNGETFEATURES once
>   - Respect FLOW_TNL_F_CSUM flag
> ---
>  lib/conntrack.c                  |  15 +-
>  lib/dp-packet.c                  |  25 +++
>  lib/dp-packet.h                  |  78 +++++++++-
>  lib/dpif-netdev-extract-avx512.c |  62 +++++++-
>  lib/flow.c                       |  23 +++
>  lib/netdev-dpdk.c                | 172 +++++++++++++++------
>  lib/netdev-linux.c               | 258 ++++++++++++++++++++++---------
>  lib/netdev-native-tnl.c          |  32 +---
>  lib/netdev.c                     |  46 ++----
>  lib/odp-execute-avx512.c         |  88 +++++++----
>  lib/packets.c                    | 175 ++++++++++++++++-----
>  lib/packets.h                    |   3 +
>  12 files changed, 710 insertions(+), 267 deletions(-)

<snip>

> @@ -5443,22 +5513,22 @@ netdev_dpdk_vhost_client_reconfigure(struct netdev 
> *netdev)
>          }
>  
>          if (userspace_tso_enabled()) {
> -            netdev->ol_flags |= NETDEV_TX_OFFLOAD_TCP_TSO;
> -            netdev->ol_flags |= NETDEV_TX_OFFLOAD_TCP_CKSUM;
> -            netdev->ol_flags |= NETDEV_TX_OFFLOAD_UDP_CKSUM;
> -            netdev->ol_flags |= NETDEV_TX_OFFLOAD_SCTP_CKSUM;
> -            netdev->ol_flags |= NETDEV_TX_OFFLOAD_IPV4_CKSUM;
> -            vhost_unsup_flags = 1ULL << VIRTIO_NET_F_HOST_ECN
> -                                | 1ULL << VIRTIO_NET_F_HOST_UFO;
> +            virtio_unsup_features = 1ULL << VIRTIO_NET_F_HOST_ECN
> +                                    | 1ULL << VIRTIO_NET_F_HOST_UFO;
> +            VLOG_DBG("%s: TSO enabled on vhost port",
> +                     netdev_get_name(&dev->up));
>          } else {
> -            /* This disables checksum offloading and all the features
> -             * that depends on it (TSO, UFO, ECN) according to virtio
> -             * specification. */
> -            vhost_unsup_flags = 1ULL << VIRTIO_NET_F_CSUM;
> +            /* Advertise checksum offloading to the guest, but explicitly
> +             * disable TSO and friends.
> +             * NOTE: we can't disable HOST_ECN which may have been wrongly
> +             * negotiated by a running guest. */
> +            virtio_unsup_features = 1ULL << VIRTIO_NET_F_HOST_TSO4
> +                                    | 1ULL << VIRTIO_NET_F_HOST_TSO6
> +                                    | 1ULL << VIRTIO_NET_F_HOST_UFO;

Hold on a second... Why exactly we can disable UFO, but can't disable ECN ?

Previously, this branch of code was disabling VIRTIO_NET_F_CSUM, so neither
ECN or UFO should be negotiated, right?

Or is it possible to have ECN negotiated without VIRTIO_NET_F_HOST_CSUM enabled?
In that case, why the same is not true for UFO as well?

What do I miss here?

I see that this was suggested by David in review of v6, but I can't find
discussion about this particular part.

Best regards, Ilya Maximets.
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to