diff --git a/package/kit-busrouter/files/usr/lib/busrouter/telemetry-synology.sh b/package/kit-busrouter/files/usr/lib/busrouter/telemetry-synology.sh index 5aec31b..f87848e 100755 --- a/package/kit-busrouter/files/usr/lib/busrouter/telemetry-synology.sh +++ b/package/kit-busrouter/files/usr/lib/busrouter/telemetry-synology.sh @@ -239,16 +239,19 @@ _ping_iface() { # Extract loss _loss=$(echo "$_out" | sed -n 's/.* \([0-9]*\)% packet loss.*/\1/p') [ -z "$_loss" ] && _loss="null" - # If ICMP reports 100% loss, try HTTP probe — Eyeride NAT blocks ICMP but passes HTTP. + # If ICMP to internet gives 100% loss, ping the local gateway — + # Eyeride NAT drops internet ICMP but the gateway (192.168.10.1) is reachable locally. if [ "$_loss" = "100" ]; then - _t0=$(date +%s%3N 2>/dev/null || date +%s) - _hcode=$(curl -s --interface "$_iface" --connect-timeout 5 --max-time 8 \ - -o /dev/null -w "%{http_code}" http://1.1.1.1 2>/dev/null) - _t1=$(date +%s%3N 2>/dev/null || date +%s) - if [ -n "$_hcode" ] && [ "$_hcode" != "000" ]; then - _loss="0" - [ -z "$_avg" ] || [ "$_avg" = "null" ] && \ - _avg=$(awk "BEGIN { printf \"%.0f\", ${_t1} - ${_t0} }" 2>/dev/null) + _gw=$(ip route show 2>/dev/null | grep "dev $_iface" | grep -v "^default" | awk '/via/{print $3; exit} /kernel/{print ""}' | head -1) + [ -z "$_gw" ] && _gw=$(ip route show default 2>/dev/null | grep "dev $_iface" | awk '{print $3}' | head -1) + if [ -n "$_gw" ]; then + _gw_out=$(ping -c 3 -W 2 "$_gw" 2>/dev/null) + _gw_loss=$(echo "$_gw_out" | sed -n 's/.* \([0-9]*\)% packet loss.*/\1/p') + if [ -n "$_gw_loss" ] && [ "$_gw_loss" != "100" ]; then + _loss="$_gw_loss" + _avg=$(echo "$_gw_out" | tail -1 | sed -n 's/.*=\ [0-9.]*\/\([0-9.]*\)\/.*/\1/p') + [ -z "$_avg" ] && _avg="null" + fi fi fi printf '%s %s %s\n' "${_avg}" "${_jitter}" "${_loss}" | tr -d '\n\r'