diff options
| author | Marcelo Mendes Spessoto Junior <marcelomspessoto@gmail.com> | 2026-08-07 19:09:40 -0300 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2026-08-11 18:24:55 -0700 |
| commit | 03df0d155ba11ec37e0b48bb93fede143ffef556 (patch) | |
| tree | 692f2b7077beedfb494c189d36dac243811dacc9 /tools/testing | |
| parent | 39dd045c15143b9a40473e4b79263b3f94d5f3a0 (diff) | |
| download | linux-03df0d155ba11ec37e0b48bb93fede143ffef556.tar.gz linux-03df0d155ba11ec37e0b48bb93fede143ffef556.zip | |
selftests: net: create own netns in ipv6_flowlabel_mgr
Have ipv6_flowlabel_mgr create and configure its own network
namespace (unshare(CLONE_NEWNET) + bring up lo), the same way
ipv6_fragmentation.c and icmp_rfc4884.c already do, instead of
relying on the in_netns.sh wrapper script.
The setup can then be reused across tests through fixtures and
provide isolated network environments for each test in the case
of a future adoption of kselftest_harness.
It also avoids the leak of modifications to the netns in case the
user runs the test file directly, outside the wrapper and without
the in_netns.sh file.
Signed-off-by: Marcelo Mendes Spessoto Junior <marcelomspessoto@gmail.com>
Link: https://patch.msgid.link/20260807220942.421382-4-marcelomspessoto@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'tools/testing')
| -rwxr-xr-x | tools/testing/selftests/net/ipv6_flowlabel.sh | 2 | ||||
| -rw-r--r-- | tools/testing/selftests/net/ipv6_flowlabel_mgr.c | 28 |
2 files changed, 29 insertions, 1 deletions
diff --git a/tools/testing/selftests/net/ipv6_flowlabel.sh b/tools/testing/selftests/net/ipv6_flowlabel.sh index cee95e252bee..2eeda39bf64c 100755 --- a/tools/testing/selftests/net/ipv6_flowlabel.sh +++ b/tools/testing/selftests/net/ipv6_flowlabel.sh @@ -8,7 +8,7 @@ set -e echo "TEST management" -./in_netns.sh ./ipv6_flowlabel_mgr +./ipv6_flowlabel_mgr echo "TEST datapath" ./in_netns.sh \ diff --git a/tools/testing/selftests/net/ipv6_flowlabel_mgr.c b/tools/testing/selftests/net/ipv6_flowlabel_mgr.c index 51541e792257..f8d8b09b9d86 100644 --- a/tools/testing/selftests/net/ipv6_flowlabel_mgr.c +++ b/tools/testing/selftests/net/ipv6_flowlabel_mgr.c @@ -8,11 +8,14 @@ #include <errno.h> #include <limits.h> #include <linux/in6.h> +#include <net/if.h> +#include <sched.h> #include <stdbool.h> #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <string.h> +#include <sys/ioctl.h> #include <sys/socket.h> #include <sys/stat.h> #include <sys/time.h> @@ -306,6 +309,30 @@ static void run_tests(int fd) } } +static void setup(void) +{ + struct ifreq ifr = { + .ifr_name = "lo" + }; + int ctl; + + if (unshare(CLONE_NEWNET)) + error(1, errno, "unshare"); + + ctl = socket(AF_LOCAL, SOCK_STREAM, 0); + if (ctl == -1) + error(1, errno, "socket"); + + if (ioctl(ctl, SIOCGIFFLAGS, &ifr)) + error(1, errno, "ioctl SIOCGIFFLAGS"); + ifr.ifr_flags |= IFF_UP; + if (ioctl(ctl, SIOCSIFFLAGS, &ifr)) + error(1, errno, "ioctl: bring lo up"); + + if (close(ctl)) + error(1, errno, "close"); +} + static void parse_opts(int argc, char **argv) { int c; @@ -329,6 +356,7 @@ int main(int argc, char **argv) int fd; parse_opts(argc, argv); + setup(); fd = socket(PF_INET6, SOCK_DGRAM, 0); if (fd == -1) |
