* [PATCH] net: change maximum number of UDP segments to 128
@ 2024-04-06 8:25 Yuri Benditovich
2024-04-06 15:03 ` Willem de Bruijn
2024-04-06 20:56 ` Muhammad Usama Anjum
0 siblings, 2 replies; 3+ messages in thread
From: Yuri Benditovich @ 2024-04-06 8:25 UTC (permalink / raw)
To: willemdebruijn.kernel, davem, edumazet, kuba, pabeni, shuah,
linux-kernel, netdev, linux-kselftest
Cc: yan, andrew
Earlier commit fc8b2a619469378 ("net: more strict VIRTIO_NET_HDR_GSO_UDP_L4 validation")
added check of potential number of UDP segment vs UDP_MAX_SEGMENTS
in linux/virtio_net.h.
After this change certification test of USO guest-to-guest
transmit on Windows driver for virtio-net device fails,
for example with packet size of ~64K and mss of 536 bytes.
In general the USO should not be more restrictive than TSO.
Indeed, in case of unreasonably small mss a lot of segments
can cause queue overflow and packet loss on the destination.
Limit of 128 segments is good for any practical purpose,
with minimal meaningful mss of 536 the maximal UDP packet will
be divided to ~120 segments.
Signed-off-by: Yuri Benditovich <yuri.benditovich@daynix.com>
---
include/linux/udp.h | 2 +-
tools/testing/selftests/net/udpgso.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/linux/udp.h b/include/linux/udp.h
index 3748e82b627b..7e75ccdf25fe 100644
--- a/include/linux/udp.h
+++ b/include/linux/udp.h
@@ -108,7 +108,7 @@ struct udp_sock {
#define udp_assign_bit(nr, sk, val) \
assign_bit(UDP_FLAGS_##nr, &udp_sk(sk)->udp_flags, val)
-#define UDP_MAX_SEGMENTS (1 << 6UL)
+#define UDP_MAX_SEGMENTS (1 << 7UL)
#define udp_sk(ptr) container_of_const(ptr, struct udp_sock, inet.sk)
diff --git a/tools/testing/selftests/net/udpgso.c b/tools/testing/selftests/net/udpgso.c
index 1d975bf52af3..85b3baa3f7f3 100644
--- a/tools/testing/selftests/net/udpgso.c
+++ b/tools/testing/selftests/net/udpgso.c
@@ -34,7 +34,7 @@
#endif
#ifndef UDP_MAX_SEGMENTS
-#define UDP_MAX_SEGMENTS (1 << 6UL)
+#define UDP_MAX_SEGMENTS (1 << 7UL)
#endif
#define CONST_MTU_TEST 1500
--
2.34.3
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] net: change maximum number of UDP segments to 128
2024-04-06 8:25 [PATCH] net: change maximum number of UDP segments to 128 Yuri Benditovich
@ 2024-04-06 15:03 ` Willem de Bruijn
2024-04-06 20:56 ` Muhammad Usama Anjum
1 sibling, 0 replies; 3+ messages in thread
From: Willem de Bruijn @ 2024-04-06 15:03 UTC (permalink / raw)
To: Yuri Benditovich, willemdebruijn.kernel, davem, edumazet, kuba,
pabeni, shuah, linux-kernel, netdev, linux-kselftest
Cc: yan, andrew
Yuri Benditovich wrote:
> Earlier commit fc8b2a619469378 ("net: more strict VIRTIO_NET_HDR_GSO_UDP_L4 validation")
> added check of potential number of UDP segment vs UDP_MAX_SEGMENTS
> in linux/virtio_net.h.
> After this change certification test of USO guest-to-guest
> transmit on Windows driver for virtio-net device fails,
> for example with packet size of ~64K and mss of 536 bytes.
> In general the USO should not be more restrictive than TSO.
Ack
> Indeed, in case of unreasonably small mss a lot of segments
> can cause queue overflow and packet loss on the destination.
> Limit of 128 segments is good for any practical purpose,
> with minimal meaningful mss of 536 the maximal UDP packet will
> be divided to ~120 segments.
>
> Signed-off-by: Yuri Benditovich <yuri.benditovich@daynix.com>
Please mark fixes as [PATCH net] and include a fixes tag:
Fixes: fc8b2a619469 ("net: more strict VIRTIO_NET_HDR_GSO_UDP_L4 validation")
Otherwise this looks fine to me. UDP_MAX_SEGMENTS exists to block
egregious examples, such as 64K 1B segments. Doubling to 128 to handle
536B MSS is well within the reasonable range.
> ---
> include/linux/udp.h | 2 +-
> tools/testing/selftests/net/udpgso.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/udp.h b/include/linux/udp.h
> index 3748e82b627b..7e75ccdf25fe 100644
> --- a/include/linux/udp.h
> +++ b/include/linux/udp.h
> @@ -108,7 +108,7 @@ struct udp_sock {
> #define udp_assign_bit(nr, sk, val) \
> assign_bit(UDP_FLAGS_##nr, &udp_sk(sk)->udp_flags, val)
>
> -#define UDP_MAX_SEGMENTS (1 << 6UL)
> +#define UDP_MAX_SEGMENTS (1 << 7UL)
>
> #define udp_sk(ptr) container_of_const(ptr, struct udp_sock, inet.sk)
>
> diff --git a/tools/testing/selftests/net/udpgso.c b/tools/testing/selftests/net/udpgso.c
> index 1d975bf52af3..85b3baa3f7f3 100644
> --- a/tools/testing/selftests/net/udpgso.c
> +++ b/tools/testing/selftests/net/udpgso.c
> @@ -34,7 +34,7 @@
> #endif
>
> #ifndef UDP_MAX_SEGMENTS
> -#define UDP_MAX_SEGMENTS (1 << 6UL)
> +#define UDP_MAX_SEGMENTS (1 << 7UL)
> #endif
>
> #define CONST_MTU_TEST 1500
> --
> 2.34.3
>
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] net: change maximum number of UDP segments to 128
2024-04-06 8:25 [PATCH] net: change maximum number of UDP segments to 128 Yuri Benditovich
2024-04-06 15:03 ` Willem de Bruijn
@ 2024-04-06 20:56 ` Muhammad Usama Anjum
1 sibling, 0 replies; 3+ messages in thread
From: Muhammad Usama Anjum @ 2024-04-06 20:56 UTC (permalink / raw)
To: Yuri Benditovich, willemdebruijn.kernel, davem, edumazet, kuba,
pabeni, shuah, linux-kernel, netdev, linux-kselftest
Cc: Muhammad Usama Anjum, yan, andrew
On 4/6/24 1:25 PM, Yuri Benditovich wrote:
> Earlier commit fc8b2a619469378 ("net: more strict VIRTIO_NET_HDR_GSO_UDP_L4 validation")
> added check of potential number of UDP segment vs UDP_MAX_SEGMENTS
> in linux/virtio_net.h.
> After this change certification test of USO guest-to-guest
> transmit on Windows driver for virtio-net device fails,
> for example with packet size of ~64K and mss of 536 bytes.
> In general the USO should not be more restrictive than TSO.
> Indeed, in case of unreasonably small mss a lot of segments
> can cause queue overflow and packet loss on the destination.
> Limit of 128 segments is good for any practical purpose,
> with minimal meaningful mss of 536 the maximal UDP packet will
> be divided to ~120 segments.
>
> Signed-off-by: Yuri Benditovich <yuri.benditovich@daynix.com>
Reviewed-by: Muhammad Usama Anjum <usama.anjum@collabora.com
> ---
> include/linux/udp.h | 2 +-
> tools/testing/selftests/net/udpgso.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/udp.h b/include/linux/udp.h
> index 3748e82b627b..7e75ccdf25fe 100644
> --- a/include/linux/udp.h
> +++ b/include/linux/udp.h
> @@ -108,7 +108,7 @@ struct udp_sock {
> #define udp_assign_bit(nr, sk, val) \
> assign_bit(UDP_FLAGS_##nr, &udp_sk(sk)->udp_flags, val)
>
> -#define UDP_MAX_SEGMENTS (1 << 6UL)
> +#define UDP_MAX_SEGMENTS (1 << 7UL)
>
> #define udp_sk(ptr) container_of_const(ptr, struct udp_sock, inet.sk)
>
> diff --git a/tools/testing/selftests/net/udpgso.c b/tools/testing/selftests/net/udpgso.c
> index 1d975bf52af3..85b3baa3f7f3 100644
> --- a/tools/testing/selftests/net/udpgso.c
> +++ b/tools/testing/selftests/net/udpgso.c
> @@ -34,7 +34,7 @@
> #endif
>
> #ifndef UDP_MAX_SEGMENTS
> -#define UDP_MAX_SEGMENTS (1 << 6UL)
> +#define UDP_MAX_SEGMENTS (1 << 7UL)
> #endif
>
> #define CONST_MTU_TEST 1500
--
BR,
Muhammad Usama Anjum
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-04-06 20:56 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-06 8:25 [PATCH] net: change maximum number of UDP segments to 128 Yuri Benditovich
2024-04-06 15:03 ` Willem de Bruijn
2024-04-06 20:56 ` Muhammad Usama Anjum
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®