mwan3: support latest iputils ping
authorAaron Goodman <redacted>
Sun, 15 Nov 2020 16:35:28 +0000 (11:35 -0500)
committerAaron Goodman <redacted>
Mon, 16 Nov 2020 16:23:10 +0000 (11:23 -0500)
iputils upstream changed build params with version s20200821
Latest OpenWRT iputils ping now appears to report the openwrt
version tag, rather than iputils date tag

This commit sends a test ping to localhost to evaluate the
capabilities of iputils ping.

Signed-off-by: Aaron Goodman <redacted>
net/mwan3/files/usr/sbin/mwan3track

index d4a5f44abbc02bf60864d35d2e4580cc7a9489aa..bd8954c073be5ba32c405ad3e48c9f5a1def2cce 100755 (executable)
@@ -40,19 +40,35 @@ if_up() {
        stop_subprocs
 }
 
+ping_test_host() {
+       if [ "$FAMILY" = "ipv6" ]; then
+               echo "::1"
+       else
+               echo "127.0.0.1"
+       fi
+}
+
+get_ping_command() {
+       if [ -x "/usr/bin/ping" ] && /usr/bin/ping -${FAMILY#ipv} -c1 -q $(ping_test_host) &>/dev/null; then
+               # -4 option added in iputils c3e68ac6 so need to check if we can use it
+               # or if we must use ping and ping6
+               echo "/usr/bin/ping -${FAMILY#ipv}"
+       elif [ "$FAMILY" = "ipv6" ] && [ -x "/usr/bin/ping6" ]; then
+               echo "/usr/bin/ping6"
+       elif [ "$FAMILY" = "ipv4" ] && [ -x "/usr/bin/ping" ]; then
+               echo "/usr/bin/ping"
+       elif [ -x "/bin/ping" ]; then
+               echo "/bin/ping -${FAMILY#ipv}"
+       else
+               return 1
+       fi
+}
+
 validate_track_method() {
        case "$1" in
                ping)
-                       if [ -x "/usr/bin/ping" ] && [ "$(/usr/bin/ping -V | grep -o '[0-9]*$')" -gt 20150519 ]; then
-                               # -4 option added in iputils c3e68ac6
-                               PING="/usr/bin/ping -${FAMILY#ipv}"
-                       elif [ "$FAMILY" = "ipv6" ] && [ -x "/usr/bin/ping6" ]; then
-                               PING="/usr/bin/ping6"
-                       elif [ "$FAMILY" = "ipv4" ] && [ -x "/usr/bin/ping" ]; then
-                               PING="/usr/bin/ping"
-                       elif [ -x "/bin/ping" ]; then
-                               PING="/bin/ping -${FAMILY#ipv}"
-                       else
+                       PING=$(get_ping_command)
+                       if [ $? -ne 0 ]; then
                                LOG warn "Missing ping. Please enable BUSYBOX_DEFAULT_PING and recompile busybox or install iputils-ping package."
                                return 1
                        fi
git clone https://git.99rst.org/PROJECT