cxacru загрузочный скрипт

Наконец у меня дошли руки до той версии драйвера, которую скинул мне LagunaGuardian, за что ему большое спасибо. Оказалось что та сборка отличается от моей не сильно. Основаны они на одной и той же версии драйвера, но моя уже работает, а та не захотела находить оборудование провайдера. Я решил, что разбираться в чем дело не стоит (может быть я просто неправильно ядро собрал). Просто в моей сборкеоказывается тоже есть загрузочный скрипт, но он очень простой и мне не подходит. По этому поводу решил написать свой. Вот он:
В /etc/cxacru добавляем пару параметров

# STRIM (My internet provider) sometimes after disconects thinks that I'm still online, but I'm not. In this case I
# have to try reconecting untill special script on server side fixes this situation. PS I got 'wrong password'  message
# How many times try to execute 'adsl-start'
TRY_AUTH=5

# But sometimes it doesn't want to authorize me until I reconect
# How many times reinitialize adsl line if adsl-start fails
TRY_RECONECT=2

А в /etc/init.d/

#!/sbin/runscript
# Copyright 2005 Guseiniv Alexey (aka KiberGus)
# Distributed under the terms of the GNU General Public License v2

opts="${opts} flash check"

depend() {
        provide net
}

checkdrv(){
if lsmod | cut -d' ' -f1 | grep -q -E "^cxacru|cxacrudbg$"; then
    return 0
else
    return 1
fi
}

checklink(){
if adsl-status | cat | grep -q -m 1 -E "Link is up"; then
    return 0
else
    return 1
fi
}

start() {
# Get settings
. /etc/cxacru

for ((rec=0; rec < TRY_RECONECT ; rec++))
do
    ebegin "Staring cxacru"
    if  checkdrv; then
        einfo "Driver already loaded."
    else
        /usr/sbin/cxstart.sh service
    fi

    if checkdrv; then
        if ! checklink; then  
           for ((auth=1; auth < TRY_AUTH; auth++))
            do
                if checklink; then
                    break
                fi
 
                ewarn "Link is still down. Trying to bring it up."
	        adsl-start
            done
        fi
    fi                           

    if checkdrv and checklink; then
        einfo "Driver is loaded and link is up!"
	eend 0
	return
    fi

    # Unloading driver.
    stop
done

if checkdrv; then
    stop
    eerror "I was unable to bring link up."
    eend 1
else
    eerror "I was unable to launch driver."
    eend 1
fi
}

stop() {
	ebegin "Stopping cxacru"
        /usr/sbin/cxstop.sh service
	eend $?
}

restart() {
stop
start
}

# Just reauthorize
flash() {
adsl-stop
start
}

# Sometimes modem can loose conection. This function will check this aspect and if line is down it will restart 
# driver
check() {
ebegin "Checking"
if checkdrv and checklink; then
    einfo "Driver is loaded and link is up!"
else
    ewarn "Conection was lost! Restarting."
    start
fi
}

status() {
if lsmod | cut -d' ' -f1 | grep -q -E "^cxacru|cxacrudbg$"; then
	if adsl-status | cat | grep -q -m 1 -E "Link is up"; then
        	einfo $"Driver is loaded and link is up."
    		RETVAL=0
	fi

	if adsl-status | cat | grep -q -m 1 -E "Link is down"; then
		ewarn $"Driver is loaded but link is down."
		RETVAL=1
	fi
else
    eerror $"Driver not loaded."
	RETVAL=1
fi

eend $RETVAL
}

От изначального он отличается следующим:
1) Если не удалось подключиться с первого раза, он делает несколько попыток. Это нужно если произошел дисконект. В таком случает стримовское оборудование думает, что я еще подключен и не пущает, говорит логин и пароль неправильные. Приходится ждать когда у них специальный скрипт меня вычислит и разблокирует.
2) Добавлена опция flash. Переподключается не перезапуская драйвер. Дело в том, что в стиме перерасчет происходит после того, как абонент отключается. Чтобы никто в долг не сидел они отключают пользователя через 24 часа после того, как он подключился. ИМХО у кого-то там руки неправильно растут. Так вот, ставим запуск /etc/init.d/cxacru flash на 5 часов утра и инет работает круглосуточно.
3) Добавлена функция check. Она проверяет, подключен ли компьютер к интернету, и если не подключен, подключается. Можно повесить ее на выполнение раз в n минут, чтобы соединение востанавливалось, если вылетает. А такое бывает и не так уж и редко. Причем случается как правило тогда, когда меня нет дома. Соответственно я прихожу домой и получаю нагоняй за то, что интернета не было весь день.
4) status возвращает не только состояние драйвера (запущен/незапущен) но и состояние соединения (установлено/неустановлено).

Start и stop стандартны. Restart перезапускает все целиком.

ЗЫ Я его еще не успел как следует оттестить, но вроде работает. Жду критики.

Изменил в цикле

Изменил в цикле условия выхода. Было <=, замнил на <.
Просто чтобы выполнялось указанное число раз, но это не принципиально.
ЗЫ После небольших изменений подойдет и для LAN модемов. Надо убрать подгрузку cxacru.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".