[HOWTO] Zmusić net.ppp0 do czekania na synchronizację

Mój Sagem F@st 800 to bardzo fajny modem ADSL i działa bez problemów (sterownik w kernelu), ale czasem bywa trochę ospały, jeśli chodzi o synchronizację. Przełączenie na bliższą centralę znacznie pomogło w tym względzie, ale nadal zdarza się czasem, że net.ppp0 startuje zanim modem się zsynchronizuje. Pod OpenRC z GIT problem przybrał na sile ze względu na szybszy start systemu. Zakasałem więc rękawy i postanowiłem usunąć problem. W ten sposób powstał skrypt eagle-waitforsync. W rzeczywistości to znacznie okrojony i troszkę zmodyfikowany skrypt eagle-stats, który kiedyś zdobyłem na forum Gentoo (nie pomnę dokładnie gdzie). Jak to działa? Skrypt sprawdza czy stan modemu to "operational". Jeśli nie, odczekuje 2 sekundy i próbuje dalej. I tak aż do skutku. Gdy znajdzie to, czego szukał, kończy działanie. Niestety, rozwiązanie to opóźnia też start systemu. Na razie nie udało mi się tego zwalczyć w sensowny sposób.

Opis instalacji:
1) Wrzucamy skrypt do dowolnego katalogu w $PATH (najlepiej /usr/local/bin)
2) Do /etc/conf.d/net dopisujemy:

function preup() {
    if [ "${IFACE}" = "ppp0" ] ; then
        eagle-waitforsync
        return 0
    fi
}

Uwagi:
Skrypt działa tylko z modemami obsługiwanymi przez ueagle-atm. Nie sprawdzałem żadnych dziwnych konfiguracji (np. kilka modemów). U mnie działa.

EDIT: Jednak parę usterek wyszło w praniu, więc poprawiłem opis. Zaktualizowałem też skrypt. Poprzedni od razu kończył pracę, jeśli ueagle-atm nie zdążył jeszcze utworzyć swojego katalogu w /sys. My bad.

4 komentarze

  1. Ogólnie problem polega na tym, że za wcześnie odpalone pppd od razu pada z błędem, zamiast próbować jeszcze raz. Może więc właściwym rozwiązaniem byłby jakiś patch na pppd właśnie? Znając życie, jeszcze przy tym pogrzebię 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *