diff options
Diffstat (limited to 'tools/testing/selftests/net')
| -rw-r--r-- | tools/testing/selftests/net/.gitignore | 1 | ||||
| -rw-r--r-- | tools/testing/selftests/net/Makefile | 7 | ||||
| -rw-r--r-- | tools/testing/selftests/net/msg_zerocopy.c | 2 | ||||
| -rwxr-xr-x | tools/testing/selftests/net/netdevice.sh | 3 | ||||
| -rw-r--r-- | tools/testing/selftests/net/reuseaddr_conflict.c | 114 | ||||
| -rw-r--r-- | tools/testing/selftests/net/reuseport_bpf_cpu.c | 1 | ||||
| -rw-r--r-- | tools/testing/selftests/net/reuseport_bpf_numa.c | 1 | ||||
| -rw-r--r-- | tools/testing/selftests/net/reuseport_dualstack.c | 1 | ||||
| -rwxr-xr-x | tools/testing/selftests/net/run_afpackettests | 1 | ||||
| -rwxr-xr-x | tools/testing/selftests/net/run_netsocktests | 1 | ||||
| -rw-r--r-- | tools/testing/selftests/net/socket.c | 1 | ||||
| -rwxr-xr-x | tools/testing/selftests/net/test_bpf.sh | 1 | 
12 files changed, 129 insertions, 5 deletions
| diff --git a/tools/testing/selftests/net/.gitignore b/tools/testing/selftests/net/.gitignore index 9801253e4802..c612d6e38c62 100644 --- a/tools/testing/selftests/net/.gitignore +++ b/tools/testing/selftests/net/.gitignore @@ -6,3 +6,4 @@ reuseport_bpf  reuseport_bpf_cpu  reuseport_bpf_numa  reuseport_dualstack +reuseaddr_conflict diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile index de1f5772b878..500c74db746c 100644 --- a/tools/testing/selftests/net/Makefile +++ b/tools/testing/selftests/net/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  # Makefile for net selftests  CFLAGS =  -Wall -Wl,--no-as-needed -O2 -g @@ -5,9 +6,9 @@ CFLAGS += -I../../../../usr/include/  TEST_PROGS := run_netsocktests run_afpackettests test_bpf.sh netdevice.sh rtnetlink.sh  TEST_GEN_FILES =  socket -TEST_GEN_FILES += psock_fanout psock_tpacket -TEST_GEN_FILES += reuseport_bpf reuseport_bpf_cpu reuseport_bpf_numa -TEST_GEN_FILES += reuseport_dualstack msg_zerocopy +TEST_GEN_FILES += psock_fanout psock_tpacket msg_zerocopy +TEST_GEN_PROGS = reuseport_bpf reuseport_bpf_cpu reuseport_bpf_numa +TEST_GEN_PROGS += reuseport_dualstack reuseaddr_conflict  include ../lib.mk diff --git a/tools/testing/selftests/net/msg_zerocopy.c b/tools/testing/selftests/net/msg_zerocopy.c index 40232af5b023..3ab6ec403905 100644 --- a/tools/testing/selftests/net/msg_zerocopy.c +++ b/tools/testing/selftests/net/msg_zerocopy.c @@ -55,7 +55,7 @@  #include <unistd.h>  #ifndef SO_EE_ORIGIN_ZEROCOPY -#define SO_EE_ORIGIN_ZEROCOPY		SO_EE_ORIGIN_UPAGE +#define SO_EE_ORIGIN_ZEROCOPY		5  #endif  #ifndef SO_ZEROCOPY diff --git a/tools/testing/selftests/net/netdevice.sh b/tools/testing/selftests/net/netdevice.sh index 4e00568d70c2..903679e0ff31 100755 --- a/tools/testing/selftests/net/netdevice.sh +++ b/tools/testing/selftests/net/netdevice.sh @@ -1,4 +1,5 @@  #!/bin/sh +# SPDX-License-Identifier: GPL-2.0  #  # This test is for checking network interface  # For the moment it tests only ethernet interface (but wifi could be easily added) @@ -178,7 +179,7 @@ if [ "$(id -u)" -ne 0 ];then  	exit 0  fi -ip -Version 2>/dev/null >/dev/null +ip link show 2>/dev/null >/dev/null  if [ $? -ne 0 ];then  	echo "SKIP: Could not run test without the ip tool"  	exit 0 diff --git a/tools/testing/selftests/net/reuseaddr_conflict.c b/tools/testing/selftests/net/reuseaddr_conflict.c new file mode 100644 index 000000000000..7c5b12664b03 --- /dev/null +++ b/tools/testing/selftests/net/reuseaddr_conflict.c @@ -0,0 +1,114 @@ +/* + * Test for the regression introduced by + * + * b9470c27607b ("inet: kill smallest_size and smallest_port") + * + * If we open an ipv4 socket on a port with reuseaddr we shouldn't reset the tb + * when we open the ipv6 conterpart, which is what was happening previously. + */ +#include <errno.h> +#include <error.h> +#include <arpa/inet.h> +#include <netinet/in.h> +#include <stdbool.h> +#include <stdio.h> +#include <sys/socket.h> +#include <sys/types.h> +#include <unistd.h> + +#define PORT 9999 + +int open_port(int ipv6, int any) +{ +	int fd = -1; +	int reuseaddr = 1; +	int v6only = 1; +	int addrlen; +	int ret = -1; +	struct sockaddr *addr; +	int family = ipv6 ? AF_INET6 : AF_INET; + +	struct sockaddr_in6 addr6 = { +		.sin6_family = AF_INET6, +		.sin6_port = htons(PORT), +		.sin6_addr = in6addr_any +	}; +	struct sockaddr_in addr4 = { +		.sin_family = AF_INET, +		.sin_port = htons(PORT), +		.sin_addr.s_addr = any ? htonl(INADDR_ANY) : inet_addr("127.0.0.1"), +	}; + + +	if (ipv6) { +		addr = (struct sockaddr*)&addr6; +		addrlen = sizeof(addr6); +	} else { +		addr = (struct sockaddr*)&addr4; +		addrlen = sizeof(addr4); +	} + +	if ((fd = socket(family, SOCK_STREAM, IPPROTO_TCP)) < 0) { +		perror("socket"); +		goto out; +	} + +	if (ipv6 && setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (void*)&v6only, +			       sizeof(v6only)) < 0) { +		perror("setsockopt IPV6_V6ONLY"); +		goto out; +	} + +	if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, +		       sizeof(reuseaddr)) < 0) { +		perror("setsockopt SO_REUSEADDR"); +		goto out; +	} + +	if (bind(fd, addr, addrlen) < 0) { +		perror("bind"); +		goto out; +	} + +	if (any) +		return fd; + +	if (listen(fd, 1) < 0) { +		perror("listen"); +		goto out; +	} +	return fd; +out: +	close(fd); +	return ret; +} + +int main(void) +{ +	int listenfd; +	int fd1, fd2; + +	fprintf(stderr, "Opening 127.0.0.1:%d\n", PORT); +	listenfd = open_port(0, 0); +	if (listenfd < 0) +		error(1, errno, "Couldn't open listen socket"); +	fprintf(stderr, "Opening INADDR_ANY:%d\n", PORT); +	fd1 = open_port(0, 1); +	if (fd1 >= 0) +		error(1, 0, "Was allowed to create an ipv4 reuseport on a already bound non-reuseport socket"); +	fprintf(stderr, "Opening in6addr_any:%d\n", PORT); +	fd1 = open_port(1, 1); +	if (fd1 < 0) +		error(1, errno, "Couldn't open ipv6 reuseport"); +	fprintf(stderr, "Opening INADDR_ANY:%d\n", PORT); +	fd2 = open_port(0, 1); +	if (fd2 >= 0) +		error(1, 0, "Was allowed to create an ipv4 reuseport on a already bound non-reuseport socket"); +	close(fd1); +	fprintf(stderr, "Opening INADDR_ANY:%d after closing ipv6 socket\n", PORT); +	fd1 = open_port(0, 1); +	if (fd1 >= 0) +		error(1, 0, "Was allowed to create an ipv4 reuseport on an already bound non-reuseport socket with no ipv6"); +	fprintf(stderr, "Success"); +	return 0; +} diff --git a/tools/testing/selftests/net/reuseport_bpf_cpu.c b/tools/testing/selftests/net/reuseport_bpf_cpu.c index b23d6f54de7b..2d646174729f 100644 --- a/tools/testing/selftests/net/reuseport_bpf_cpu.c +++ b/tools/testing/selftests/net/reuseport_bpf_cpu.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * Test functionality of BPF filters with SO_REUSEPORT.  This program creates   * an SO_REUSEPORT receiver group containing one socket per CPU core. It then diff --git a/tools/testing/selftests/net/reuseport_bpf_numa.c b/tools/testing/selftests/net/reuseport_bpf_numa.c index 6f20bc9ff627..365c32e84189 100644 --- a/tools/testing/selftests/net/reuseport_bpf_numa.c +++ b/tools/testing/selftests/net/reuseport_bpf_numa.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * Test functionality of BPF filters with SO_REUSEPORT. Same test as   * in reuseport_bpf_cpu, only as one socket per NUMA node. diff --git a/tools/testing/selftests/net/reuseport_dualstack.c b/tools/testing/selftests/net/reuseport_dualstack.c index 90958aaaafb9..fe3230c55986 100644 --- a/tools/testing/selftests/net/reuseport_dualstack.c +++ b/tools/testing/selftests/net/reuseport_dualstack.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * It is possible to use SO_REUSEPORT to open multiple sockets bound to   * equivalent local addresses using AF_INET and AF_INET6 at the same time.  If diff --git a/tools/testing/selftests/net/run_afpackettests b/tools/testing/selftests/net/run_afpackettests index 5246e782d6e8..21fe149e3de1 100755 --- a/tools/testing/selftests/net/run_afpackettests +++ b/tools/testing/selftests/net/run_afpackettests @@ -1,4 +1,5 @@  #!/bin/sh +# SPDX-License-Identifier: GPL-2.0  if [ $(id -u) != 0 ]; then  	echo $msg must be run as root >&2 diff --git a/tools/testing/selftests/net/run_netsocktests b/tools/testing/selftests/net/run_netsocktests index 16058bbea7a8..b093f39c298c 100755 --- a/tools/testing/selftests/net/run_netsocktests +++ b/tools/testing/selftests/net/run_netsocktests @@ -1,4 +1,5 @@  #!/bin/sh +# SPDX-License-Identifier: GPL-2.0  echo "--------------------"  echo "running socket test" diff --git a/tools/testing/selftests/net/socket.c b/tools/testing/selftests/net/socket.c index 0f227f2f9be9..afca1ead677f 100644 --- a/tools/testing/selftests/net/socket.c +++ b/tools/testing/selftests/net/socket.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <stdio.h>  #include <errno.h>  #include <unistd.h> diff --git a/tools/testing/selftests/net/test_bpf.sh b/tools/testing/selftests/net/test_bpf.sh index 8b29796d46aa..65677909c574 100755 --- a/tools/testing/selftests/net/test_bpf.sh +++ b/tools/testing/selftests/net/test_bpf.sh @@ -1,4 +1,5 @@  #!/bin/sh +# SPDX-License-Identifier: GPL-2.0  # Runs bpf test using test_bpf kernel module  if /sbin/modprobe -q test_bpf ; then |