In Kalifornien gibt es derzeit zwei große Konkurrenten für Internetanschlüsse in Privathaushalten: die Telefongesellschaft AT&T mit ihrem DSL und die Kabelfirma Comcast, die durch das Fernsehkabel ebenfalls Breitband-Internet anbietet. Ein DSL- oder Kabelmodem zapft die Daten aus der Leitung, ein vorgeschalteter Router verbindet sämtliche Rechner des Haushalts im Handumdrehen mit dem Internet (Abbildung 1).
Abbildung 1: Ein Blick auf das Haushaltsnetzwerk der Perlmeister-Studios.
Billig oder schnell
Beide Anbieter haben Vor- und Nachteile. So leidet die Kabelverbindung, wenn zu viele Kinder in der Nachbarschaft "World of Warcraft" spielen, weil die Bandbreite mit der Zahl der Nutzer abnimmt. Der legendäre Werbespot "Web Hog!" [2] des DSL-Anbieters Southern Bell illustriert humorvoll, wie sich friedfertige Nachbarn einer Kleinstadt über Nacht in Berserker verwandeln, weil sie sich angeblich gegenseitig das Internet lahmlegen. Das DSL der Telefongesellschaft ist zumindest in der langsamen Billigversion preisgünstiger und jeder bekommt die gleiche Bandbreite. Allerdings hängen Verfügbarkeit und tatsächlicher Durchsatz von der Entfernung zum nächsten Knotenpunkt ab.
Keines der beiden Verfahren ist jedoch absolut zuverlässig, immer wieder gibt\'s Probleme: ein Stromausfall oder ein Bauarbeiter, der ein Kabel anbohrt, - schon fällt das Internet aus. Ärgerlich für den, der es gerade dringend braucht. Da aber sowohl DSL als auch Kabel-Internet im Sonderangebot monatlich nur etwa 20 Dollar kosten, habe ich mir beide bestellt. Wenn ein Anbieter ausfällt, schalte ich einfach auf den anderen um.
Schalter-Skript
Das Skript »isp-switch« (Listing 1) nimmt als Parameter entweder »cable« oder »dsl« auf der Kommandozeile entgegen und führt die zum Umschalten nötigen Schritte aus. In dem Skript bestimmt Zeile 21 die möglichen Werte dieser Parameter. Bei unbekannten Providernamen bricht es mit »pod2usage()« ab und gibt eine Fehlermeldung sowie die verkürzte Bedienungsanleitung aus.
Die weiche Referenz »$switch_to->()« in Zeile 31 ruft dann die weiter unten definierten Funktionen »cable()« oder »dsl()« auf. Damit der Perl-Interpreter im Strict-Modus bei diesem schmutzigen Trick nicht ausflippt, muss das Skript die Strenge mit »no strict \'refs\'« etwas abmildern. Das umschließende »eval«-Konstrukt fängt etwaige Fehler ab und lässt es weiterrattern, auch wenn nicht alle Schritte erfolgreich ablaufen.
Das Skript nutzt Log::Log4perl für die Status- und Fehlermeldungen. Das in Zeile 48 verwendete Makro »ALWAYS« kam allerdings erst mit Version 1.13 hinzu, deshalb fordert Zeile 9 mindestens diese Version an.