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