diff --git a/usr/bin/connection-recoverd b/usr/bin/connection-recoverd index 51e38f5..3c7c98d 100755 --- a/usr/bin/connection-recoverd +++ b/usr/bin/connection-recoverd @@ -11,6 +11,7 @@ SYMLINK_CONF_FILE=/etc/ModemManager/symlink.conf NMCLI_UP_TIMEOUT_SEC=150 RESTART_SIM_NOT_FOUND_COUNT=2 REGEX_GSM_TTY="^gsm-tty" +CONNECTING_COUNT_FOR_RECONNECT=3 active_connection_exist() { nmcli -f NAME connection | sed -e 's/ *$//' | grep -x -q ${CONNECTION} @@ -163,6 +164,7 @@ load_config PING_NG_COUNT=0 SIM_NOT_FOUND_COUNT=0 WWAN_RESTART_COUNT=0 +CONNECTING_COUNT=0 if [ -z "$WWAN_FORCE_RESTART_COUNT" ]; then WWAN_FORCE_RESTART_COUNT=1 @@ -199,12 +201,14 @@ while true; do case ${STATUS} in *disconnected*|*failed*|*unknown*|"*connection failed*") SIM_NOT_FOUND_COUNT=0 + CONNECTING_COUNT=0 reconnect if [ $? -eq 0 ]; then continue fi ;; *connected*) SIM_NOT_FOUND_COUNT=0 + CONNECTING_COUNT=0 is_connect PING_STATUS=$? if [ $PING_STATUS -ne 0 ]; then @@ -220,10 +224,21 @@ while true; do else WWAN_RESTART_COUNT=0 fi ;; - *deactivating*|*unmanaged*|*connecting*) + *connecting*) SIM_NOT_FOUND_COUNT=0 + CONNECTING_COUNT=$((CONNECTING_COUNT + 1)) + if [ $CONNECTING_COUNT -ge $CONNECTING_COUNT_FOR_RECONNECT ]; then + logger -t connection-recover "reconnect because connecting status occurred twice" + CONNECTING_COUNT=0 + reconnect + fi + continue ;; + *deactivating*|*unmanaged*) + SIM_NOT_FOUND_COUNT=0 + CONNECTING_COUNT=0 continue ;; *unavailable*|*) + CONNECTING_COUNT=0 if [ "$REBOOT_IF_SIM_NOT_FOUND" != "TRUE" ] ; then continue fi