selftests/net: check auto-selected port with reuse options

Use IP_LOCAL_PORT_RANGE to limit a socket to 8 ports, bind 8 sockets
to port 0 and check they get 8 distinct ports and the 9th bind fails
with EADDRINUSE. Run it for the four combinations of reuse options on
the sockets:

  none                         (existing test)
  SO_REUSEPORT
  SO_REUSEADDR
  SO_REUSEADDR + SO_REUSEPORT

TCP passes all four. Before the udp fix UDP only passes the first
one: the scan hands out a port already taken by a socket with the
same reuse options, so fewer than 8 distinct ports come back and the
9th bind succeeds.

  # ./ip_local_port_range.sh

Before:

  ok 13 ip_local_port_range.ip4_udp.exhaust_8_port_range
  not ok 14 ip_local_port_range.ip4_udp.exhaust_8_port_range_reuseport
  not ok 15 ip_local_port_range.ip4_udp.exhaust_8_port_range_reuseaddr
  not ok 16 ip_local_port_range.ip4_udp.exhaust_8_port_range_reuseaddr_reuseport
  ok 49 ip_local_port_range.ip6_udp.exhaust_8_port_range
  not ok 50 ip_local_port_range.ip6_udp.exhaust_8_port_range_reuseport
  not ok 51 ip_local_port_range.ip6_udp.exhaust_8_port_range_reuseaddr
  not ok 52 ip_local_port_range.ip6_udp.exhaust_8_port_range_reuseaddr_reuseport

After:

  ok 13 ip_local_port_range.ip4_udp.exhaust_8_port_range
  ok 14 ip_local_port_range.ip4_udp.exhaust_8_port_range_reuseport
  ok 15 ip_local_port_range.ip4_udp.exhaust_8_port_range_reuseaddr
  ok 16 ip_local_port_range.ip4_udp.exhaust_8_port_range_reuseaddr_reuseport
  ok 49 ip_local_port_range.ip6_udp.exhaust_8_port_range
  ok 50 ip_local_port_range.ip6_udp.exhaust_8_port_range_reuseport
  ok 51 ip_local_port_range.ip6_udp.exhaust_8_port_range_reuseaddr
  ok 52 ip_local_port_range.ip6_udp.exhaust_8_port_range_reuseaddr_reuseport

Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
Link: https://patch.msgid.link/20260928023145.301855-2-jiayuan.chen@linux.dev
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Jiayuan Chen 2026-09-28 10:31:42 +08:00 • committed by Jakub Kicinski
commit 883c308be4