* [PATCH net v3] vmxnet3: correctly report gso type for UDP tunnels
@ 2025-05-30 0:46 Ronak Doshi
2025-05-30 6:48 ` Paolo Abeni
0 siblings, 1 reply; 2+ messages in thread
From: Ronak Doshi @ 2025-05-30 0:46 UTC (permalink / raw)
To: netdev
Cc: Ronak Doshi, Guolin Yang, Broadcom internal kernel review list,
Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, open list
Commit 3d010c8031e3 ("udp: do not accept non-tunnel GSO skbs landing
in a tunnel") added checks in linux stack to not accept non-tunnel
GRO packets landing in a tunnel. This exposed an issue in vmxnet3
which was not correctly reporting GRO packets for tunnel packets.
This patch fixes this issue by setting correct GSO type for the
tunnel packets.
Currently, vmxnet3 does not support reporting inner fields for LRO
tunnel packets. This is fine for now as workaround is to enable
tnl-segmentation offload on the relevant interfaces. This problem
pre-exists this patch fix and can be addressed as a separate future
patch.
Fixes: dacce2be3312 ("vmxnet3: add geneve and vxlan tunnel offload support")
Signed-off-by: Ronak Doshi <ronak.doshi@broadcom.com>
Acked-by: Guolin Yang <guolin.yang@broadcom.com>
Changes v1-->v2:
Do not set encapsulation bit as inner fields are not updated
Changes v2-->v3:
Update the commit message explaining the next steps to address
segmentation issues that pre-exists this patch fix.
---
drivers/net/vmxnet3/vmxnet3_drv.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index c676979c7ab9..287b7c20c0d6 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -1568,6 +1568,30 @@ vmxnet3_get_hdr_len(struct vmxnet3_adapter *adapter, struct sk_buff *skb,
return (hlen + (hdr.tcp->doff << 2));
}
+static void
+vmxnet3_lro_tunnel(struct sk_buff *skb, __be16 ip_proto)
+{
+ struct udphdr *uh = NULL;
+
+ if (ip_proto == htons(ETH_P_IP)) {
+ struct iphdr *iph = (struct iphdr *)skb->data;
+
+ if (iph->protocol == IPPROTO_UDP)
+ uh = (struct udphdr *)(iph + 1);
+ } else {
+ struct ipv6hdr *iph = (struct ipv6hdr *)skb->data;
+
+ if (iph->nexthdr == IPPROTO_UDP)
+ uh = (struct udphdr *)(iph + 1);
+ }
+ if (uh) {
+ if (uh->check)
+ skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL_CSUM;
+ else
+ skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL;
+ }
+}
+
static int
vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
struct vmxnet3_adapter *adapter, int quota)
@@ -1881,6 +1905,8 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
if (segCnt != 0 && mss != 0) {
skb_shinfo(skb)->gso_type = rcd->v4 ?
SKB_GSO_TCPV4 : SKB_GSO_TCPV6;
+ if (encap_lro)
+ vmxnet3_lro_tunnel(skb, skb->protocol);
skb_shinfo(skb)->gso_size = mss;
skb_shinfo(skb)->gso_segs = segCnt;
} else if ((segCnt != 0 || skb->len > mtu) && !encap_lro) {
--
2.45.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH net v3] vmxnet3: correctly report gso type for UDP tunnels
2025-05-30 0:46 [PATCH net v3] vmxnet3: correctly report gso type for UDP tunnels Ronak Doshi
@ 2025-05-30 6:48 ` Paolo Abeni
0 siblings, 0 replies; 2+ messages in thread
From: Paolo Abeni @ 2025-05-30 6:48 UTC (permalink / raw)
To: Ronak Doshi, netdev
Cc: Guolin Yang, Broadcom internal kernel review list, Andrew Lunn,
David S. Miller, Eric Dumazet, Jakub Kicinski, open list
On 5/30/25 2:46 AM, Ronak Doshi wrote:
> Commit 3d010c8031e3 ("udp: do not accept non-tunnel GSO skbs landing
> in a tunnel") added checks in linux stack to not accept non-tunnel
> GRO packets landing in a tunnel. This exposed an issue in vmxnet3
> which was not correctly reporting GRO packets for tunnel packets.
>
> This patch fixes this issue by setting correct GSO type for the
> tunnel packets.
>
> Currently, vmxnet3 does not support reporting inner fields for LRO
> tunnel packets. This is fine for now as workaround is to enable
> tnl-segmentation offload on the relevant interfaces. This problem
> pre-exists this patch fix and can be addressed as a separate future
> patch.
I think it would be better if you rephrase the above paragraph, as is a
bit misleading. The workaround is available only in some scenarios: when
the egress device supports tunnel TSO and only if the relevant egress
driver does not use the skb inner fields (many NICs actually use/need them).
Note that there is no guarantee that the egress device will be vmxnet, too.
/P
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-05-30 6:48 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-30 0:46 [PATCH net v3] vmxnet3: correctly report gso type for UDP tunnels Ronak Doshi
2025-05-30 6:48 ` Paolo Abeni
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).