Messages in this thread | | | Subject | Re: [PATCH net-next 0/2] net: two updates related to UDP GSO | From | tanhuazhong <> | Date | Mon, 7 Sep 2020 21:32:22 +0800 |
| |
On 2020/9/7 17:22, Willem de Bruijn wrote: > On Sun, Sep 6, 2020 at 8:42 PM Jakub Kicinski <kuba@kernel.org> wrote: >> >> On Sat, 5 Sep 2020 14:11:11 +0800 Huazhong Tan wrote: >>> There are two updates relates to UDP GSO. >>> #1 adds a new GSO type for UDPv6 >>> #2 adds check for UDP GSO when csum is disable in netdev_fix_features(). >>> >>> Changes since RFC V2: >>> - modifies the timing of setting UDP GSO type when doing UDP GRO in #1. >>> >>> Changes since RFC V1: >>> - updates NETIF_F_GSO_LAST suggested by Willem de Bruijn. >>> and add NETIF_F_GSO_UDPV6_L4 feature for each driver who support UDP GSO in #1. >>> - add #2 who needs #1. >> >> Please CC people who gave you feedback (Willem). >> >> I don't feel good about this series. IPv6 is not optional any more. >> AFAIU you have some issues with csum support in your device? Can you >> use .ndo_features_check() to handle this? >> >> The change in semantics of NETIF_F_GSO_UDP_L4 from "v4 and v6" to >> "just v4" can trip people over; this is not a new feature people >> may be depending on the current semantics. >> >> Willem, what are your thoughts on this? > > If that is the only reason, +1 on fixing it up in the driver's > ndo_features_check. >
Hi, Willem & Jakub.
This series mainly fixes the feature dependency between hardware checksum and UDP GSO. When turn off hardware checksum offload, run 'ethtool -k [devname]' we can see TSO is off as well, but udp gso still is on.
[root@localhost ~]# ethtool -K eth0 tx off Actual changes: tx-checksumming: off tx-checksum-ipv4: off tx-checksum-ipv6: off tx-checksum-sctp: off tcp-segmentation-offload: off tx-tcp-segmentation: off [requested on] tx-tcp-ecn-segmentation: off [requested on] tx-tcp6-segmentation: off [requested on] [root@localhost ~]# ethtool -k eth0 Features for eth0: rx-checksumming: on tx-checksumming: off tx-checksum-ipv4: off tx-checksum-ip-generic: off [fixed] tx-checksum-ipv6: off tx-checksum-fcoe-crc: off [fixed] tx-checksum-sctp: off ... tcp-segmentation-offload: off tx-tcp-segmentation: off [requested on] tx-tcp-ecn-segmentation: off [requested on] tx-tcp-mangleid-segmentation: off tx-tcp6-segmentation: off [requested on] udp-fragmentation-offload: off generic-segmentation-offload: on generic-receive-offload: on ... tx-udp-segmentation: on ...
.ndo_feature_check seems unnecessary. Because the stack has already do this check. in __ip_append_data() below if branch will not run if hardware checksum offload is off. if (transhdrlen && length + fragheaderlen <= mtu && rt->dst.dev->features & (NETIF_F_HW_CSUM | NETIF_F_IP_CSUM) && (!(flags & MSG_MORE) || cork->gso_size) && (!exthdrlen || (rt->dst.dev->features & NETIF_F_HW_ESP_TX_CSUM))) csummode = CHECKSUM_PARTIAL; ... so skb->ip_summed set as CHECKSUM_NONE, then in udp_send_skb() if (cork->gso_size) { ... if (skb->ip_summed != CHECKSUM_PARTIAL || is_udplite || dst_xfrm(skb_dst(skb))) { kfree_skb(skb);
return -EIO; } the packet who needs udp gso will return ERROR.
For this kind of problem how could we fix it?
Thanks. Huazhong.
> . >
| |