openwrt でpppoe を再接続
再接続して、IPアドレスが変わるまで、PPPoEガチャをする。
IPアドレス判定がおかしいとき。
IPアドレスによる地域判定や、IPアドレスで「ブロック」されたときに、再接続する。
今どき、ipv4 をブロックリストに追加したり、地域判定でごちゃごちゃするのはありえないと思うんだけどさ。
ネットワーク関連のコマンド。
/lib/functions/network.sh にネットワーク関連のコマンドが用意されているのでそれを読み込む。
source /lib/functions/network.sh
現在のIPアドレス
ネットワークコマンドから、現在のIPアドレスを取得できる。
source /lib/functions/network.sh
network_flush_cache
network_find_wan WAN_IF
network_get_ipaddr IP_ADDR "${WAN_IF}"
再接続
PPPoEの再接続は ifup/ifdown でできる。
引数は、pppoe の接続名になる。
ifdown ocn_pppoe; ifup ocn_pppoe;
IPアドレスを変えるまで無限ループにする。
#!/usr/bin/env bash
function get_current_ip(){
. /lib/functions/network.sh
network_flush_cache
network_find_wan WAN_IF
network_get_ipaddr IP_ADDR "${WAN_IF}"
echo $IP_ADDR
}
function reconnet_pppoe(){
# >&2 echo ${FUNCNAME[0]}
ifdown ocn_pppoe;
ifup ocn_pppoe;
wait_reconnect
# >&2 echo reconnect_end
}
function wait_reconnect() {
IP_ADDR=` get_current_ip `
while [[ -z $IP_ADDR ]]; do
IP_ADDR=` get_current_ip `
# >&2 echo IP_ADDR=$IP_ADDR
if (( i++ > 60 )); then
# >&2 echo wait give up
break
fi
sleep 1
done
}
function main(){
PREV_IP=` get_current_ip `
while (( cnt++ < 100 )); do
# echo $cnt
reconnet_pppoe;
# >&2 ip addr show pppoe-ybb
CURR_IP=`get_current_ip`
echo old_ip=${PREV_IP} ,new_ip=$CURR_IP
## ip 変わるまで再接続
if [[ ! -z $CURR_IP ]] && [[ $PREV_IP != $CURR_IP ]] ;then
break
fi
done
echo done
}
main