From: Qingshuang Fu <[email protected]>

The broadcast_pmtu.sh test verifies that broadcast route MTU is respected,
but it uses an incorrect criteria for test success: it relies solely on
the ping command's exit code, which leads to false failures.

When the kernel correctly blocks oversized broadcast packets due to the
configured MTU limit (1500), ping fails to transmit any packets and returns
exit code 1. The original script interprets this as a test failure, even
though the kernel is properly enforcing the MTU (the core goal of the test).

Fix this by checking ping's output for "0 packets transmitted" or
"message too long" instead of relying on exit code.

Signed-off-by: Qingshuang Fu <[email protected]>
---
 tools/testing/selftests/net/broadcast_pmtu.sh | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/tools/testing/selftests/net/broadcast_pmtu.sh 
b/tools/testing/selftests/net/broadcast_pmtu.sh
index 726eb5d25839..68b4c5e539e7 100755
--- a/tools/testing/selftests/net/broadcast_pmtu.sh
+++ b/tools/testing/selftests/net/broadcast_pmtu.sh
@@ -40,8 +40,15 @@ cleanup() {
 trap cleanup EXIT
 
 setup &&
-       echo "Testing for broadcast route MTU" &&
-       ip net exec "${CLIENT_NS}" ping -f -M want -q -c 1 -s 8000 -w 1 -b 
"${CLIENT_BROADCAST_ADDRESS}" > /dev/null 2>&1
-
-exit $?
+       echo "Testing for broadcast route MTU" && {
+               ping_output=$(ip net exec "${CLIENT_NS}" ping -f -M want -c 1 
-s 8000 -w 1 -b \
+                       "${CLIENT_BROADCAST_ADDRESS}" 2>&1)
+               if echo "${ping_output}" | grep -q -E "0 packets 
transmitted|message too long"; then
+                       exit_code=0
+               else
+                       exit_code=1
+               fi
+       }
+
+exit ${exit_code}
 

base-commit: bbeb83d3182abe0d245318e274e8531e5dd7a948
-- 
2.25.1


Reply via email to