#!/bin/sh
#PPPoE拨号在线接口数检测及重拨脚本
. /lib/functions.sh
[ -f /etc/config/syncdial ] || {
	return 1
}
#操作配置
#参数 $1 配置项
ifs_opt_down() {
	local ifn=$1
	local ifprefix=${ifn:0:4}

	[ "$ifprefix" = "vwan" ] || return
	ifdown $ifn
}

ifs_opt_up() {
	local ifn=$1
	local ifprefix=${ifn:0:4}

	[ "$ifprefix" = "vwan" ] || return
	ifup $ifn
}

config_load "syncdial"
config_get_bool dialchk config dialchk 0
config_get dial config dialnum
config_get dialwait config dialwait 20
config_get enabled config enabled 0
[ "$enabled" = "0" ] && {
	echo "syncdial disabled."
	return 0
}
[ "$dialchk" = "0" ] && {
	echo "dial check disabled."
	return 0
}
[ $(ps | grep -c "pppconnectcheck") -gt 3 ] && logger -t PPPoE-IFChecker "Another checker is running.exit." && return 1

PPPUPNUM=$(ifconfig | grep -c vwan)
logger -t PPPoE-IFChecker "$PPPUPNUM interfaces are online."
if [ ! "$PPPUPNUM" -lt $dial ]; then
	interval="$(uci get mwan3.wan.failure_interval)"
	cheng="$(uci get mwan3.wan.up)"
	[ -z "$interval" ] && interval=5
	[ -z "$cheng" ] && cheng=1
	sleep $((interval*cheng+1))
	PPPUPNUM=$(mwan3 interfaces | grep -c "is online")
	[ "$PPPUPNUM" == "0" ] && (pgrep mwan3track || (logger -t PPPoE-IFChecker "mwan3track not running" ; return 1))
	[ ! "$PPPUPNUM" -lt $dial ] && logger -t PPPoE-IFChecker "Nothing to do.Exit." && return 0
fi
logger -t PPPoE-IFChecker "Stop interfaces."
ifdown wan
config_load "network"
config_foreach ifs_opt_down "interface"
sleep $dialwait
logger -t PPPoE-IFChecker "Start interfaces."
config_foreach ifs_opt_up "interface"
ifup wan
logger -t PPPoE-IFChecker "Interfaces restarted."
logger -t PPPoE-IFChecker "Another checker will be started 15s later."
sleep 15 && pppconnectcheck &
return 0
