Der Linux-Kernel unterstützt von Haus aus die gängigen ISDN-Chipsätze und digitalen B-Kanal-Protokolle zur Datenübertragung, etwa zum Aufbau von Dialup-Verbindungen ins Internet. Doch fehlen dem Linux-Kernel ganz essenzielle Funktionen zum Betreiben von G3-Faxprogrammen wie Capifax und Capifaxrcvd. Gründe sind das nicht triviale Modulationsverfahren - besonders in Empfangsrichtung - und durch Patente bedingte Nutzungseinschränkungen.
Besitzer einer Fritzcard von AVM kennen das Problem nicht. Für ihre Karte bietet der Hersteller einen eigenen Linux-Treiber an, der im Funktionsumfang den Windows-Varianten in nichts nachsteht. Der Quellcode des Treibers liegt aber nicht komplett vor, sodass ihn die Community nicht für ISDN-Karten anderer Hersteller modifizieren kann.
Die eigentliche Funktionalität samt Hardware-Abhängigkeit kapselt AVM in der unfreien Objektdatei »fcclassic-lib.o«. Der unter der LGPL-Lizenz veröffentlichte und Kernel-abhängige Teil des Treibers legt aber wenigstens die Schnittstelle zwischen dem Kernel-CAPI und der Objektdatei offen. Die ISDN-Chips auf der Fritzcard Classic sind ebenfalls bekannt (ISAC/HSCX). Mit dieser Information und seinen Kenntnissen im Umgang mit dem CAPI 2.0 [1] war der Autor dieses Artikels in der Lage, eine Userspace-Bibliothek zu programmieren, die sich der Faxfunktionalität des Fritzcard-Treibers bedient.
Transplantationszentrum
Die Fritzhook-Bibliothek benötigt lediglich ein funktionsfähiges CAPI; Distribution und Typ der passiven Karte spielen dabei kaum eine Rolle. Der Artikel beschreibt die Transplantation des Fritzcard-Treiber-Herzens - der Objektdatei »fcclassic-lib.o« - in den Userspace. Abbildung 1 zeigt die originale und die neue Struktur. Gegen Ende des Artikels wird praktisch beschrieben, wie man an die Fritzhook-Bibliothek rankommt und sie installiert und testet.
Von hinten durch die Brust
Normalerweise führt der Linux-Kernel mit Hilfe des CAPI-Subsystems das Fritzcard-Treibermodul aus. Das Subsystem besitzt eine allgemeine Schnittstelle zur Kommunikation mit ISDN-Geräten und bildet die Brücke zum Userspace. Über die Schnittstelle erfolgen das An- und Abmelden, der Datenaustausch und die Statusüberwachung der Geräte.
Um die Objektdatei »fcclassic-lib.o« in den Userspace umzusiedeln, klinkt sich die Bibliothek »libfritzhook.so« des Autors zwischen die »libcapi20.so«-Bibliothek und die Faxapplikation ein. Sie lädt die Objektdatei, überlädt deren IO-Funktionen und simuliert eine Fritzcard Classic, die mit der Vermittlungsstelle verbunden ist. Der integrierte CAPI-Automat baut den virtuellen D-Kanal selbstständig auf und ab.
Statt des von der Applikation gewählten B-Kanal-Protokolls T.30 for Group 3 fax baut »libfritzhook.so« einen transparenten B-Kanal auf, der den virtuellen B-Kanal-Controller (HSCX) der Fritzcard-Simulation mit Daten versorgt. Damit jede CAPI-Message zum richtigen Empfänger findet, enthält die Bibliothek eine Filterkomponente. Sie manipuliert die Inhalte der Messages und stellt die richtigen Weichen (Abbildung 2).
Bewegt wird das Ganze mit den periodischen Aufrufen von »capi20_get_message()« durch die Applikation. Die Grundlage hierfür bildet das Fritzcard-Treiberarchiv »fcclassic-suse8.2-03.11.02.tar.gz«, es steht auf [2] zur Verfügung.
Abbildung 1: Mit Hilfe des im Artikel beschriebenen Kunstgriffs arbeitet die Fritzcard-Objektdatei »fcclassic-lib.o« nicht mehr im Kernelspace (links), sondern im Userspace (rechts).
« Zurück
1
2
3
4
5
Weiter »