#!/bin/bash # . /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