@@ -3484,6 +3484,7 @@ static struct socket *vxlan_create_sock(struct net *net, bool ipv6,
if (err < 0)
return ERR_PTR(err);
+ udp_allow_gso(sock->sk);
return sock;
}
@@ -137,6 +137,11 @@ static inline bool udp_unexpected_gso(struct sock *sk, struct sk_buff *skb)
return skb_is_gso(skb) && skb_shinfo(skb)->gso_type & udp_sk(sk)->unexpected_gso;
}
+static inline void udp_allow_gso(struct sock *sk)
+{
+ udp_sk(sk)->unexpected_gso = 0;
+}
+
#define udp_portaddr_for_each_entry(__sk, list) \
hlist_for_each_entry(__sk, list, __sk_common.skc_portaddr_node)
When passing up an UDP GSO packet with L4 aggregation, there is no need to segment it at the vxlan level. We can propagate the packet untouched and let it be segmented later, if needed. Introduce an helper to allow let the UDP socket accepting any L4 aggregation and use it in the vxlan driver. Signed-off-by: Paolo Abeni <pabeni@redhat.com> --- drivers/net/vxlan.c | 1 + include/linux/udp.h | 5 +++++ 2 files changed, 6 insertions(+)