Heimserver im Eigenbau

Dieser Teil unserer Artikelreihe nimmt sich der Grundlagen von ISDN mit Linux an. Da er sich auch mit den im Kernel 2.6 anstehenden Neuerungen befasst, betrifft er nicht nur Einsteiger, sondern jeden, der heute ISDN und Linux benutzt.

In Pocket speichern vorlesen Druckansicht 5 Kommentare lesen
Lesezeit: 19 Min.
Von
  • Gernot Hillier
  • Karsten Keil
Inhaltsverzeichnis

Mit ISDN4Linux [1|#literatur] existieren seit vielen Jahren ausgereifte ISDN-Dienste und -Anwendungen unter dem Open-Source-Betriebssystem. Der anstehende 2.6er-Kernel stellt seine ISDN-Schnittstellen jedoch auf das Common ISDN Application Programming Interface (CAPI) um, das aus anderen Betriebssystemen längst bekannt ist. Es verspricht ein systemunabhängiges Programmiermodell für ISDN-basierte Anwendungen.

Bevor sich diese Artikelreihe auf die Möglichkeiten stürzt, die ISDN unter Linux bietet, etwa um Faxe zu versenden oder den Heimserver als Anrufbeantworter arbeiten zu lassen, liefert sie Antworten auf die nahe liegenden Fragen: Welche Hardware Sie überhaupt brauchen, ob die alte ISDN(4Linux)-Funktionalität trotz neuer CAPI erhalten bleibt und wie Sie eine ISDN-Karte oder einen USB-Adapter letztlich in Betrieb bekommen.

Wichtig ist die Unterscheidung zwischen passiven und aktiven ISDN-Adaptern: Letztere enthalten einen Mikrocontroller und eine Firmware, die die benötigten Protokollstacks für den Signalisierungskanal (D-Kanal) und die Datenkanäle (B-Kanäle) des ISDN direkt unterstützen. Damit besteht die Aufgabe des Treibers für einen aktiven Adapter nur noch darin, die Nutzdaten an den Controller zu leiten und die allgemeine Steuerung zu übernehmen (Verbindung auf-/abbauen, Behandlung eingehender Rufe etc.).

Passive Adapter hingegen bieten nur eine relativ „dumme“ Kopplung an den S0-Bus. Der Treiber muss die Hauptarbeit übernehmen und alle nötigen Protokolle mit Hilfe des Hauptprozessors umsetzen. War früher ein Argument für aktive Adapter, dass sie den PC entlasten, ist das bei der Performance heutiger CPUs nachrangig - zumindest für Privatanwender mit einem ISDN-Anschluss.

Den Privatnutzer dürfte eher interessieren, dass für komplexe und zeitkritische Protokolle wie das Senden und Empfangen von Faxen leider nach wie vor, soweit wir wissen, keine stabile, freie Implementierung verfügbar ist. Somit bleibt, wer unter Linux per ISDN Faxe verschicken und empfangen will, bislang entweder auf aktive Adapter oder auf (nicht im Quellcode verfügbare) Treiber der Hersteller angewiesen [1|#literatur]. Ein Vorreiter hier ist der Hersteller AVM, der faxfähige Treiber für alle seine ISDN-Adapter anbietet.

Weiterhin lassen sich ISDN-Adapter je nach Verbindung zum PC in vier Gruppen einteilen: Am gebräuchlichsten, billigsten und narrensichersten sind PCI-Karten, dicht gefolgt von den handlichen - meist passiven - USB-Adaptern. Die lange wegen Kinderkrankheiten gescholtene USB-Unterstützung unter Linux ist erwachsen geworden und funktioniert unter den verbreiteten Distributionen heute komfortabel und problemlos. Deshalb sind ISDN-USB-Adapter - insbesondere bei Knappheit an PCI-Steckplätzen oder beim wechselnden Einsatz an verschiedenen Rechnern - heute durchaus empfehlenswert.

Wegen des vergleichsweise hohen Preises verliert die dritte Gruppe - PCMCIA-ISDN-Karten für Laptops - an Bedeutung und wird nach und nach von USB-Adaptern abgelöst. Die letzte Gruppe schließlich bilden externe ISDN-Modems, die per serieller Schnittstelle oder als serielles USB-Gerät an den PC anzuschließen sind. Sie funktionieren wie herkömmliche Modems und haben mit den übrigen Adaptern nichts gemein; deswegen ist hier auch nicht weiter die Rede davon.

Für spezielle Anwendungsfälle existieren auch diverse Kombi-Produkte, die beispielsweise eine kleine Telefonanlage oder einen DSL-Adapter mit der ISDN-Hardware vereinen. Wie bei allen anderen Adaptern auch, sollte man vor dem Kauf besonders darauf achten, ob passende Treiber unter Linux verfügbar sind. Wer mit preiswerten, passiven ISDN-Adaptern unter Linux Faxe empfangen oder verschicken will, scheint derzeit am besten mit AVM-Produkten zu fahren. Für teurere, aktive Karten gibt es auch bei anderen Herstellern inzwischen CAPI-Treiber, etwa von Eicon.

Um nun die ISDN-Hardware auch unter Linux zum „Reden“ zu bringen, benötigt man entsprechende Treiber und Betriebssystemunterstützung. Diesem Thema widmet sich seit Jahren das ISDN4Linux-Projekt, kurz I4L. Es implementiert alle für ISDN nötigen Bestandteile. Das sind ein generelles Kernelmodul für die ISDN-Unterstützung (isdn), Hardware-abhängige Treibermodule (meist HiSax), eine eigene Applikationsschnittstelle und einige grundlegende Werkzeuge.

Die Schnittstelle zur Anwendungswelt beruht auf einer Emulation der ISDN-Karte als analoge Modems auf den so genannten „ttyI“-Gerätedateien. Das stellt eine weitestmögliche Kompatibilität mit herkömmlichen Anwendungen her. So kann ein Terminalprogramm wie minicom nach dem Einrichten von ISDN4Linux über das „Modem“ /dev/ttyI0 auf den ISDN-Adapter zugreifen und ihn über die üblichen AT-Befehle nutzen.

Recht komplex: Eine Vielzahl von Modulen stellen die ISDN-Anwendungsschnittstellen bereit. Schon seit einiger Zeit können das auch CAPI-Module sein, ohne dass das jedoch mit einem Verzicht auf die alten ISDN4Linux-Schnittstellen einherginge.

Über den Funktionsumfang analoger Modems hinausgehende Dienste sind über spezielle Mechanismen verfügbar. Außerdem bietet I4L Funktionen an, um ISDN-Netzwerkschnittstellen zu definieren (isdnctrl), die sich wie herkömmliche Adapter ins System einfügen, etwa als isdn0, und mit den Bordmitteln wie ifconfig konfiguriert werden. Auf diese Weise lassen sich einfach mehrere Rechner oder Netze über ISDN koppeln; IP-Pakete werden dabei direkt über ISDN übertragen (raw-IP). Die Schnittstellen bauen auf Wunsch Verbindungen via Callback auf und wählen erst dann, wenn Pakete zu übertragen sind.

Viele Distributionen bringen grafische Werkzeuge mit, um via ISDN eine Internet-Verbindung zu konfigurieren. Dort kommen nicht etwa die isdn-Interfaces zum Einsatz, sondern meist eine Spezialform namens „ippp“. Es existiert dann das Netzwerk-Interface ippp0 und zusätzlich gibt es den ipppd-Daemon, der für die eigentliche Verbindung zum Internet sorgt.

Von all dem merkt man normalerweise nichts, weil die Distribution das automatisiert. SuSE als deutscher Distributor bietet wohl den einfachsten Einstieg in das hauptsächlich in Deutschland weit verbreitete digitale Netz. Wer mehr über die einzelnen Befehle rund um ISDN4Linux wissen will, findet in den man-Pages zu ttyI, isdninfo, isdnctrl und isdnlog reichlich.

Prinzipieller Nachteil der auf den ISDN-ttys aufbauenden Lösungen: Die Signalisierung eines eingehenden Anrufes erfolgt bei ISDN im Normalfall genau einmal, während es bei einem analogen Anschluss über längere Zeit periodisch klingelt. Eine normale Modemanwendung setzt ein Modem regelmäßig (z. B. nach jedem Auflegen) mit Hilfe des Kommandos ATZ zurück, um anschließend die gewünschte Konfiguration zu aktivieren. Das Beantworten eingehender Anrufe mit der in ISDN4Linux integrierten Modememulation klappt daher nicht perfekt: Da die Standardkonfiguration nach dem Reset (ATZ) eingehende Rufe ignoriert, gibt es immer ein kurzes Zeitfenster (je nach steuernder Applikation schon im Sekundenbereich) zwischen Initialisierung und Neukonfiguration, in dem eingehende Anrufe verloren gehen.

Als einfacher Test für die Funktionstüchtigkeit von ISDN4Linux kann das Kommando cat /dev/isdninfo dienen. Wichtig ist die erste Zeile, die nach dem Titel „idmap:“ die aktiven ISDN-Low-Level-Treiber anzeigt. Erscheinen hier lediglich Bindestriche oder gar eine Fehlermeldung, so muss die ISDN-Installation nochmals überprüft und korrigiert werden.

Im Fall einer passiven Karte muss in der Regel das HiSax-Modul geladen sein. Es deckt die wesentlichen marktgängigen Karten ab. Beim Laden des Moduls ist der Typ der vorhandenen ISDN-Karte sowie die Art des Anschlusses (meist Euro-ISDN oder in seltenen Fällen das alte nationale 1TR6) anzugeben. Bei ISA-Karten erwartet der Treiber außerdem die IO-Adresse und den IRQ. Ob das Laden des Treibers wirklich klappt - gegebenenfalls erledigt man das per Hand -, verraten die log-Files (/var/log/syslog oder /var/log/messages) oder die letzten Zeilen, die ein dmesg-Aufruf ausgibt, wenn der Treiber gerade geladen worden ist.

Nur in Ausnahmefällen dürfte es nötig sein, den Kernel und die Module neu zu übersetzen. Eigentlich alle Distributionen bringen heute HiSax-Treiber mit, die mit geeigneten Optionen übersetzt sind, um möglichst alle Karten zu unterstützen. Beim Einsatz von aktiven Karten, von denen HiSax ebenfalls einige unterstützt, kann es nötig sein, zusätzliche Firmware-Loader zu starten, damit die Treiber den Betrieb aufnehmen. Hilfen dazu liefert [1|#literatur].

Während das ISDN4Linux-Projekt mit seiner Emulation von analogen Modems und den Netzwerkschnittstellen eigene Wege ging, hat sich in anderen Betriebssystemen heute das sogenannte Common ISDN Application Programming Interface (kurz CAPI) durchgesetzt. Da es speziell für ISDN entwickelt wurde, kennt es die bereits erwähnte Einschränkung der I4L-Modememulation bei der Annahme von Rufen nicht. Zudem sind alle ISDN-Dienste (fast) ohne Klimmzüge nutzbar.

Die unter [2|#literatur] erhältliche Spezifikation beschreibt die Nachrichten, die Anwendungen mit CAPI-konformen Treibern austauschen können. Sie deckt alle Belange von Verbindungsauf- und -abbau, Datenübertragung bis hin zu ISDN-Zusatzdiensten (Supplementary Services) wie Anrufumleitung ab. CAPI beschreibt dabei keine Implementierungsdetails, sondern praktisch nur die Schnittstelle aus Anwendungssicht. Daher schließen sich CAPI und ISDN4Linux keineswegs aus.

Im aktuellen Linux-Kernel 2.4 existieren zwar zum einen reine CAPI-Treiber, die ohne ISDN4Linux auskommen (für einige aktive Karten), und zum anderen reine ISDN4Linux-Treiber, die ihrerseits keine CAPI-Ambitionen hegen. Für den 2.6er-Kernel wird es in Kürze jedoch auch eine CAPI-Schnittstelle für die Karten geben, die bisher nur vom HiSax-Treiber mit I4L-Schnittstellen versorgt wurden. Diese zweite Generation von HiSax heißt mISDN (modulares ISDN).

Wie finden ISDN4Linux und CAPI nun zusammen? Für die CAPI-Implementierung unter Linux gibt es schon für den Kernel 2.4 eine „Emulation“ der I4L-Schnittstelle (capidrv heißt das Modul); es ersetzt quasi die alten HiSax-Treiber gegenüber den altbekannten I4L-Modulen und spricht seinerseits mit einem CAPI-Treiber. Es lässt also die alte für I4L geschriebene Software trotz CAPI-Treibers weiter funktionieren. Egal also, ob CAPI-Treiber in Zukunft verwendet werden oder nicht - es stehen dem Anwender nach guter Linux-Tradition stets beide Welten offen, CAPI und I4L.

Zum Einrichten der CAPI-Treiber bieten sich je nach Distribution diverse Wege an. Bei SuSE sind sie für die häufig verwendeten AVM-Karten in aktuellen Versionen bereits integriert und über das Konfigurationstool YaST2 leicht einzubinden. Aber auch für alle anderen Linux-Geschmacksrichtungen finden sich Anleitungen und sogar schon fertig übersetzte Software.

Grundsätzlich ist nicht mal Selbstübersetzen schwer: AVM stellt seine CAPI-Treiber in Form von Paketen mit Quelltext und einer vorkompilierten Bibliothek (deren Quellen nicht offen gelegt sind) zur Verfügung. Daraus kann man leicht einen Treiber für den eigenen Kernel bauen. Voraussetzung hierfür ist, dass die Kernel-Quellen installiert und konfiguriert sind.

Verwendet man den fertigen Kernel des Distributors, so sollte dazu ein passendes Quelltext-Paket und die beim Bauen verwendete Konfiguration verfügbar sein. Man installiert das Quelltext-Paket (meist „kernel-source“) und kopiert die aktive Konfiguration (.config-Datei) als .config in das Verzeichnis mit den Kernel-Quellen (/usr/src/linux). Nun ruft man dort „make oldconfig; make dep“ auf.

Die für den eigenen Adapter passenden AVM-Treiber findet man leicht über die Website (siehe Soft-Link). Dort lädt man das Treiberpaket mit suse.82 im Namen herunter (trotz des Namens passt es für alle Distributionen). Nach dem Entpacken ruft man wie üblich make und make install auf. Im letzten Schritt notiert man sich den Namen des soeben gebauten Moduls (z. B. fcusb2.o). Ein depmod -a sorgt nun noch für die Aktualisierung der Modul-Abhängigkeiten. Dabei darf das erzeugte Modul keine Fehler anzeigen.

Mittels capiinit lässt sich nun der Treiber laden und aktivieren. Dieses Kommando ist Teil der capi4k-utils, die sich beispielsweise bei Debian im Paket isdnactivecards finden. Damit capiinit weiß, welchen Treiber es laden soll, legt man /etc/isdn/capi.conf mit folgender Zeile an:

  DSS1 - - - -  

Die Angabe für die Firmware ist nur für die aktiven und modernere USB-Controller (ab Version 2) nötig. Sie ist im jeweiligen AVM-Treiberpaket enthalten (z. B. fus2base.frm für den USB-Adapter). Damit capiinit sie findet, ist sie noch nach /usr/lib/isdn/ zu kopieren. Für die passiven PCI-Karten reicht ein „-“ statt der Firmware. DSS1 steht für die Konfiguration des eigenen ISDN-Anschlusses (Euro-ISDN). Nur für sehr alte ISDN-Anschlüsse ist hier eine andere Angabe (1TR6) nötig. Die weiteren Parameter bestimmen Details wie IO-Adresse und zu verwendenden IRQ, die aber nur in Ausnahmefällen (alte ISA-Karten) anzugeben sind.

Eine einfache Testmöglichkeit für den Einrichtungserfolg ist das Programm capiinfo (als „root“ aufzurufen). Im Erfolgsfall liefert es eine Reihe von Details über die Controller und deren Fähigkeiten. Erscheint aber eine Fehlermeldung, so sollte man die verfügbaren Dokumentationen nochmals nachvollziehen.

Weitere teils detailreiche Hilfen bieten diverse Anleitungen im Web, zum Beispiel die AVM-Service-Seite [3|#literatur] in den FAQs (Betriebssystem Linux, Fragen zu CAPI4Linux) oder diverse Websites wie [4-7|#literatur]. Kommt man damit nicht weiter, so kann man in einer der Mailinglisten, Foren oder Newsgroups wie [8-10|#literatur], die sich mit diesem Thema befassen, Hilfe suchen.

Wenn auf dem System weiterhin über I4L erreichbare Anwendungen laufen sollen, die womöglich schon vorher konfiguriert waren, stellt das kein Problem dar: Nach dem Laden der CAPI-Treiber ist das Modul capidrv nachzuladen. Im Anschluss daran kann man - wie bisher auch - etwa unter Debian mit /etc/init.d/isdnutils die I4L-Netzwerkschnittstellen einrichten lassen und im Anschluss auch weitere I4L-Dienste laufen lassen, wie sie die folgende Übersicht nennt.

Wie gesagt, der Einsatz der CAPI-Treiber bedeutet dank des capidrv-Moduls nicht den Verzicht auf die I4L-Anwendungen. Nur in umgekehrter Richtung heißt es verzichten: Wer noch den alten HiSax-Treiber einsetzt, kann die modernen CAPI-Anwendungen nicht nutzen. Der folgende Überblick über die verfügbare Software nennt zunächst die wichtigsten traditionellen I4L-Programme, gefolgt von gebräuchlichen CAPI-Applikationen. Einen Anspruch auf Vollständigkeit erhebt die Übersicht nicht.

Bereits zum Lieferumfang von ISDN4Linux gehören die schon erwähnten Programme, isdnctrl zur Steuerung der Netzwerkschnittstellen, etwa für das zur Interneteinwahl verwendete ippp-Netzwerk-Interface und der zugehörige ipppd.

Ob externe Verbindungen bestehen oder nicht, zeigen imon (textbasiert) und isdnmon (grafisch) an. isdnload (textbasiert, nicht im Lieferumfang von I4L) und xisdnload (grafisch) visualisieren die Ausnutzung der Bandbreite.

isdnlog protokolliert nicht nur Verbindungen, sondern errechnet auch deren Kosten - inklusive einer Empfehlung für günstigere Anbieter. Außerdem kann es Aktionen beim Eintreten bestimmter Ereignisse auslösen, zum Beispiel externe Programme bei einem eingehenden Anruf starten [11|#literatur], vor Beginn der nächsten Einheit auflegen (bei Netzwerkbetrieb), die Uhrzeit mit dem ISDN-Netz synchronisieren und vieles mehr. vbox stellt schließlich einen umfangreichen Anrufbeantworter dar.

Dank der Terminalemulation von I4L können zahlreiche eigentlich für analoge Modems geschriebene Programmpakete wie das Terminalprogramm minicom, das Anrufbeantworter-und Faxpaket vgetty/mgetty, die Profi-Faxlösung HylaFAX und vieles mehr verwendet werden. Faxfunktionen erfordern hier jedoch eine aktive Karte.

Auf CAPI-Seite finden sich im capi4linux-Paket selbst auch einige rudimentäre Werkzeuge. Das bereits erwähnte capiinfo zeigt ausführliche Informationen zu den Controllern und ihren Fähigkeiten an. avmcapictrl lädt für AVM-Treiber die Firmware in den Adapter und kann die D-Kanal-Überwachung aktivieren. capifax und capifaxrcvd stellen simple Faxdienste - wohl eher zu Demonstrationszwecken - bereit.

Ebenfalls enthalten ist das pppd-capiplugin. Es erweitert den Standard PPP-Dämon (pppd), sodass er direkt über CAPI-Treiber eine Verbindung ins Internet aufbauen kann; das Plug-in ersetzt die bei einem analogen Modem zur Anwahl nötigen chat-Skripte.

Das von AVM gepflegte Plug-in Capi4HylaFAX bringt der Profi-Faxlösung HylaFAX den direkten Umgang mit CAPI bei. Ferner existiert kisdnwatch, das unter KDE für alle ISDN-Kanäle in einem kleinen Statusleisten-Icon den aktuellen Verbindungsstatus anzeigt und ein- und ausgehende Verbindungen über ein Pop-up-Fenster ankündigt.

Die Auswahl an freien CAPI-Projekten unter Linux ist zum gegenwärtigen Zeitpunkt begrenzt. Das leider im Moment nur noch sehr rudimentär gepflegte capircvd von stellt eine Kombilösung für Anrufbeantworter und den Faxempfang dar, die ziemlich flexibel konfigurierbar ist. Caiviar ist eher für Programmierer interessant: es bietet eine einfache Schnittstelle zur Programmierung von CAPI-Applikationen in Java, C++ und Perl an.

Der Vollständigkeit halber seien hier noch weitere Projekte genannt, die nicht direkt den ISDN-Einsatz zum Ziel haben, sondern sich der Telefonie verschreiben: asterisk stellt eine komplette Telefonanlage mit allen Features (Rufweiterleitung, VoiceOverIP, Voicemail etc.) in Software zur Verfügung. Dabei werden neben diversen anderen Karten auch die ISDN4Linux-Schnittstelle als mögliches Backend unterstützt.

Bayonne ist der Telefonie-Server des GNU-Projekts und stellt eine Umgebung zur Realisierung entsprechender Applikationen zur Verfügung. In aktuellen Versionen unterstützt Bayonne auch das CAPI-Interface. Beide Lösungen sind jedoch eher für den professionellen Einsatz zu empfehlen - für den Heimeinsatz ist die Einrichtung unserer Ansicht nach bei weitem zu aufwendig.

Doch auch für diejenigen, die ihren Heimserver als Vermittler zwischen IP-Telefonie und ISDN einsetzen wollen, gibt es Lösungen: isdn2h323 vermittelt zwischen H.323 (Netmeeting oder Gnomemeeting etwa) und ISDN; isdn2h323 benötigt I4L als Basis. pbx4linux kann noch mehr: Es kann mit Hilfe ausgewählter ISDN-Karten und eines daran geeignet angeschlossenen NTBA sogar eine ISDN-Telefonanlage abgeben; das Projekt setzt dafür allerdings die mISDN-Treiber voraus, die derzeit nur aus dem CVS des ISDN4Linux-Projekts zu bekommen sind.

Der unmittelbar folgende Artikel stellt ein CAPI-basiertes Projekt näher vor. CapiSuite verwandelt im Nu einen Heimserver sowohl in einen Anrufbeantworter als auch in eine Faxzentrale (sofern die ISDN-Karte Faxfunktionen bietet). Das Besondere an dieser Lösung ist, dass sie einen Python-Interpreter einbettet. Die eigentlichen Funktionen, etwa Fernabfrage des Anrufbeantworters oder Behandlung eingehender Faxe, sind in Python realisiert, lassen sich also mit wenigen weiteren Code-Zeilen persönlichen Wünschen anpassen. (ps)

Gernot Hillier entwickelte in 2003 CapiSuite als Diplomarbeit an der Fachhochschule Landshut, betreut von der SuSE Linux AG. Heute beschäftigt er sich bei der Siemens AG, CT SE 2, mit dem Einsatz von Linux in Embedded-Geräten.

Karsten Keil entwickelte die HiSax-Treiber für Linux und ist auch maßgeblich am Umstieg auf CAPI in Linux 2.6 beteiligt. Er arbeitet jetzt bei der SuSE Linux AG an freien CAPI-Treibern.

[1] FAQ zu ISDN4Linux

[2] Homepage der CAPI Association

[3] AVM Service

[4] AVM CAPI 2.0 und Debian GNU/Linux

[5] Diverse Informationen zu CAPI unter Red Hat: (Links: Red Hat, Kommunikation)

[6] Faxen mit AVM-ISDN-Karten unter Linux Mandrake

[7] CAPI 2.0 Howto für die AVM Fritz!Card USB unter Linux

[8] linux-avmb1 Mailingliste

[9] suse-isdn Mailingliste

[10] Newsgroup comp.dcom.isdn.capi, zum Beispiel auf http://groups.google.de zu finden

[11] Johannes Endres, Bei Anruf Internet, Handy-Anruf löst Internet-Einwahl aus, c't 18/02, S. 204

(ps)