2023-04-11 21:15:01 +08:00

123 lines
2.5 KiB
Bash

#!/bin/sh
. /lib/functions.sh
ROOTER=/usr/lib/rooter
ROOTER_LINK="/tmp/links"
log() {
logger -t "Custom Ping Test " "$@"
}
tping() {
hp=$(httping $2 -c 3 -s $1)
pingg=$(echo $hp" " | grep -o "round-trip .\+ ms ")
if [ -z "$pingg" ]; then
tmp=0
else
tmp=200
fi
}
doping() {
TYPE=$(uci get ping.ping.type)
if [ $TYPE = "1" ]; then
log "Curl"
RETURN_CODE_1=$(curl -s -m 10 -s -o /dev/null -w "%{http_code}" $ipv41)
RETURN_CODE_2=$(curl -s --ipv6 -m 10 -s -o /dev/null -w "%{http_code}" $ipv6)
RETURN_CODE_3=$(curl -s -m 10 -s -o /dev/null -w "%{http_code}" $ipv42)
else
log "Ping"
tping "$ipv41"; RETURN_CODE_1=$tmp
tping "$ipv6" "-6"; RETURN_CODE_2=$tmp
tping "$ipv42"; RETURN_CODE_3=$tmp
fi
}
ptest() {
tries=0
status=0
while [ $tries -lt $1 ]
do
CONN=$(uci -q get modem.modem$CURRMODEM.connected)
if [ $CONN = "1" ]; then
uci set ping.ping.conn="4"
uci commit ping
doping
if [[ "$RETURN_CODE_1" != "200" && "$RETURN_CODE_2" != "200" && "$RETURN_CODE_3" != "200" ]]; then
uci set ping.ping.conn="1"
uci commit ping
status=1
return
fi
log "Second Ping Test Good"
uci set ping.ping.conn="2"
uci commit ping
status=0
return
else
sleep 20
tries=$((tries+1))
fi
done
status=1
}
ipv41=$(uci -q get ping.ping.ipv41)
if [ -z "$ipv41" ]; then
ipv41="http://www.google.com/"
fi
ipv42=$(uci -q get ping.ping.ipv42)
if [ -z "$ipv42" ]; then
ipv42="https://github.com"
fi
ipv6=$(uci -q get ping.ping.ipv6)
if [ -z "$ipv6" ]; then
ipv6="http://ipv6.google.com"
fi
uci set ping.ping.conn="4"
uci commit ping
CURRMODEM=1
CPORT=$(uci -q get modem.modem$CURRMODEM.commport)
DELAY=$(uci get ping.ping.delay)
doping
if [[ "$RETURN_CODE_1" != "200" && "$RETURN_CODE_2" != "200" && "$RETURN_CODE_3" != "200" ]]; then
log "Bad Ping Test"
doping
if [[ "$RETURN_CODE_1" != "200" && "$RETURN_CODE_2" != "200" && "$RETURN_CODE_3" != "200" ]]; then
log "Second Bad Ping Test"
uci set ping.ping.conn="3"
uci commit ping
log "Restart Network"
/usr/lib/rooter/luci/restart.sh $CURRMODEM 10
sleep $DELAY
ptest 3
if [ $status -eq 0 ]; then
log "Good Ping after Network Restart"
uci set ping.ping.conn="2"
uci commit ping
exit 0
else
log "Hard Restart"
/usr/lib/rooter/luci/restart.sh $CURRMODEM 11
ptest 9
if [ $status -eq 0 ]; then
log "Good Ping after Hard Restart"
uci set ping.ping.conn="2"
uci commit ping
exit 0
else
reboot -f
fi
fi
fi
else
log "Good Ping"
uci set ping.ping.conn="2"
uci commit ping
fi
exit 0