From 6721587e8b491f1a539cdcc507b0f4811ff2b448 Mon Sep 17 00:00:00 2001 From: "Brian J. Murrell" Date: Fri, 13 Mar 2020 09:58:10 -0400 Subject: [PATCH] mwan3: Ping IPv6 hosts using address not interface Pinging IPv6 hosts using an interface as a source specifier seems troublesome. See https://bugs.openwrt.org/index.php?do=details&task_id=2897 for more detail. Use the desired source interface's IP address instead. Signed-off-by: Brian J. Murrell --- net/mwan3/Makefile | 2 +- net/mwan3/files/usr/sbin/mwan3track | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/net/mwan3/Makefile b/net/mwan3/Makefile index 9815663fc..c5d870cba 100644 --- a/net/mwan3/Makefile +++ b/net/mwan3/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mwan3 -PKG_VERSION:=2.8.2 +PKG_VERSION:=2.8.3 PKG_RELEASE:=2 PKG_MAINTAINER:=Florian Eckert PKG_LICENSE:=GPL-2.0 diff --git a/net/mwan3/files/usr/sbin/mwan3track b/net/mwan3/files/usr/sbin/mwan3track index a88708f06..2485d9c73 100755 --- a/net/mwan3/files/usr/sbin/mwan3track +++ b/net/mwan3/files/usr/sbin/mwan3track @@ -132,11 +132,17 @@ main() { if [ $host_up_count -lt $reliability ]; then case "$track_method" in ping) + # pinging IPv6 hosts with an interface is troublesome + # https://bugs.openwrt.org/index.php?do=details&task_id=2897 + # so get the IP address of the interface and use that instead + if echo $track_ip | grep -q ':'; then + ADDR=$(ip -6 addr ls dev "$DEVICE" | sed -ne 's/ *inet6 \([^ \/]*\).* scope global.*/\1/p') + fi if [ $check_quality -eq 0 ]; then - ping -I $DEVICE -c $count -W $timeout -s $size -t $max_ttl -q $track_ip &> /dev/null + ping -I ${ADDR:-$DEVICE} -c $count -W $timeout -s $size -t $max_ttl -q $track_ip &> /dev/null result=$? else - ping_result="$(ping -I $DEVICE -c $count -W $timeout -s $size -t $max_ttl -q $track_ip | tail -2)" + ping_result="$(ping -I ${ADDR:-$DEVICE} -c $count -W $timeout -s $size -t $max_ttl -q $track_ip | tail -2)" loss="$(echo "$ping_result" | grep "packet loss" | cut -d "," -f3 | awk '{print $1}' | sed -e 's/%//')" if [ "$loss" -eq 100 ]; then latency=999999