The IPv4 FOU/GRETAP multicast test requires the fou module to register
tunnel encapsulation operations and the FOU generic netlink family.
Since there is no genetlink module alias, the module cannot be auto-loaded.
The test previously assumed CONFIG_NET_FOU=y. On kernels built with
CONFIG_NET_FOU=m, setup_ipv4() fails silently without terminating the
script, causing a false positive test failure with 0/100 received packets.
Fix this by trying to load the fou module before the IPv4 test. Skip the
subtest cleanly if the module is unavailable, mirroring the existing
IPv6 fou6 module handling and following pmtu.sh conventions.
Only module load failures result in a skip. Any other setup errors still
report a test failure, preserving test coverage.
The official selftest config enables CONFIG_NET_FOU=y, but many
distribution kernels build it as a module. modprobe is a no-op for
built-in configurations, so existing CI behavior remains unchanged.
Fixes: e5382133c51c ("selftests: net: add FOU multicast encapsulation resubmit
test")
Signed-off-by: Qingshuang Fu <[email protected]>
---
tools/testing/selftests/net/fou_mcast_encap.sh | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/tools/testing/selftests/net/fou_mcast_encap.sh
b/tools/testing/selftests/net/fou_mcast_encap.sh
index 70210d39fba3..d94c19237daf 100755
--- a/tools/testing/selftests/net/fou_mcast_encap.sh
+++ b/tools/testing/selftests/net/fou_mcast_encap.sh
@@ -51,8 +51,6 @@ setup_common() {
}
setup_ipv4() {
- # IPv4 FOU (CONFIG_NET_FOU) is built in on kernels configured for
- # these tests, so no module load is needed here.
ip -n "$NSENDER" addr add 10.0.0.1/24 dev veth_s
ip -n "$NRECV" addr add 10.0.0.2/24 dev veth_r
@@ -160,8 +158,17 @@ run_ping_test() {
}
setup_common
-setup_ipv4
-run_ping_test -4 eoudp4 "$TUN4_R" "FOU/GRETAP IPv4 multicast encap resubmit"
+
+# The fou module registers both the tunnel encap ops used by "encap fou"
+# and the FOU genetlink family used by "ip fou add", and neither of them
+# is auto-loaded. modprobe succeeds as a no-op when CONFIG_NET_FOU=y.
+# Keep any other setup error as a test failure rather than a skip.
+if modprobe -q fou; then
+ setup_ipv4
+ run_ping_test -4 eoudp4 "$TUN4_R" "FOU/GRETAP IPv4 multicast encap
resubmit"
+else
+ log_test_skip "FOU/GRETAP IPv4 multicast encap resubmit"
+fi
if setup_ipv6; then
run_ping_test -6 eoudp6 "$TUN6_R" "FOU/ip6gretap IPv6 multicast encap
resubmit"
base-commit: 08df884136f1c1197bab2a27814404fd329d9aac
--
2.25.1