#!/bin/bash ############################################################################### # # # IPFire.org - A linux based firewall # # Copyright (C) 2007-2022 IPFire Team # # # # This program is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # # the Free Software Foundation, either version 3 of the License, or # # (at your option) any later version. # # # # This program is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # # GNU General Public License for more details. # # # # You should have received a copy of the GNU General Public License # # along with this program. If not, see . # # # ############################################################################### . /etc/sysconfig/rc . ${rc_functions} # Stop if nothing is configured if [ ! -s "/var/ipfire/ppp/settings" ];then exit 0 fi eval $(/usr/local/bin/readhash /var/ipfire/ppp/settings) MAX=160 ATTEMPTS=0 COUNT=0 if [ ! $HOLDOFF ]; then HOLDOFF=30 fi if [ "$RECONNECTION" = "dialondemand" ]; then exit 0 fi msg_log () { logger -t $(basename $0)[$$] $* } msg_log "Connectd ($1) started with PID $$" if [ -s "/var/ipfire/red/keepconnected" ]; then ATTEMPTS=$(cat /var/ipfire/red/keepconnected) else echo "0" > /var/ipfire/red/keepconnected fi case "$1" in start) boot_mesg "Starting connection daemon..." echo_ok while [ "$COUNT" -lt "$MAX" ]; do if [ ! -e "/var/ipfire/red/keepconnected" ]; then # User pressed disconnect in gui msg_log "Stopping by user request. Exiting." /etc/rc.d/init.d/network stop red exit 0 fi if [ -e "/var/ipfire/red/active" ]; then # Successfully connected in time echo "0" > /var/ipfire/red/keepconnected msg_log "System is online. Exiting."; exit 0 fi if ( ! ps ax | grep -q [p]ppd ); then msg_log "No pppd is running. Trying reconnect." break # because pppd died fi sleep 5 (( COUNT+=1 )) done /etc/rc.d/init.d/network stop red (( ATTEMPTS+=1 )) msg_log "Reconnecting: Attempt ${ATTEMPTS} of ${MAXRETRIES}" if [ "${ATTEMPTS}" -ge "${MAXRETRIES}" ]; then echo "0" > /var/ipfire/red/keepconnected if [ "$BACKUPPROFILE" != '' ]; then rm -f /var/ipfire/ppp/settings cp "/var/ipfire/ppp/settings-${BACKUPPROFILE}" /var/ipfire/ppp/settings msg_log "Switched to backup profile ${BACKUPPROFILE}" # to be shure the right secrets are used eval $(/usr/local/bin/readhash /var/ipfire/ppp/settings-${BACKUPPROFILE}) echo "'$USERNAME' * '$PASSWORD'" > /var/ipfire/ppp/secrets else msg_log "No backup profile given. Exiting." exit 0 fi else echo $ATTEMPTS > /var/ipfire/red/keepconnected sleep ${HOLDOFF} fi /etc/rc.d/init.d/network start red >/dev/tty12 2>&1