#!/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