DOKU zu U-ISDN, ISDN-34 Matthias Urlichs, uurrlliicchhss@@nnoorriiss..ddee 10. Mar 1996 Diese Dokumentation dient der Installation und Konfiguration des U- ISDN-Paketes und basiert auf den Linuxversionen 11..22..1133,, 11..33..2266. Autor: Matthias Urlichs . DDiieessee SSooffttwwaarree iisstt eeiinnee BBeettaavveerrssiioonn.. 11.. EEiinnffüühhrruunngg Urlichs-ISDN ist eine ISDN-Lösung für Linux. Der Autor ist Matthias Urlichs , der Betreiber des Xlink-PoPs in Nürnberg. Matthias Urlichs hat seinem "Kind" nie einen eigenen Namen gegeben. Dirk Steinberg hat in seinem Artikelbeitrag zu "Auf zwei Beinen" (_i_X 7/95, S. 164) das Kürzel UU-- IISSDDNN geprägt, das auch in diesem Dokument zur Verwendung kommt. 22.. CCooppyyrriigghhtt Dieses Programmpaket ist © 1994,1995 Matthias Urlichs . Es darf ohne meine Zustimmung _nicht_ weitergegeben werden. Kommerzielle Verwertung jedweder Art bedarf meiner Zustimmung. Das Anbieten auf FTP-Servern, in Mailboxen, etc.pp. ist ohne meine Zustimmung nicht gestattet. Obige Parameter gelten für diese Betaversion. Die Vollversion wird unter der GPL bzw. ihrem deutschen Äquivalent verfügbar sein. 33.. GGrruunnddssäättzzlliicchheerr HHiinnwweeiiss Bitte IMMER zuerst diese DOKU und die ``FAQ'' lesen. Wenn dann immer noch eine Frage besteht, bitte an die ``Mailingliste'' wenden. AAnnmmeerrkkuunngg:: Es ist immer hilfreich, sich in seinem eigenem Umfeld jemanden zu suchen, der selber schon U-ISDN am laufen hat, um sich von diesem unterstützen zu lassen. 44.. UUnntteerrssttüüttzzuunngg 44..11.. SSuuppppoorrtt Support gibt es bei mir zu kaufen. Nähere Informationen und Preise bei Matthias Urlichs . Einen Treiberupdate gibt's fuer DM 30 plus Medium. Fuer kommerzielle Kunden gibt's dasselbe fuer DM 250, Erstsupport bis zur erfolgreichen Installation inbegriffen. Dieses Angebot gilt nicht für Leute, die mich jeden Tag dreimal nerven; für die kostet der Support DM 400 pro Monat. (Jawohl, ich habe solche Kunden...) Support für Nebenstellenanlagen, die sich nicht an Wortlaut oder Sinn der Normen halten, wird gesondert berechnet. Fuer Privatleute etc. gibts den Support auch kostenlos, via ``'' Die Newsgroups de.comm.isdn und de.comp.os.linux lese ich momentan wegen Zeitmangel nicht, sorry. 44..22.. MMaaiilliinngglliissttee Es existiert eine Mailing-Liste , an der einige U-ISDN-Erfahrene sowie Matthias Urlichs selbst teilnehmen und Hilfestellungen geben. Anmelden kann man sich mit einer Mail an Majordomo@uranus.central.de mit "ssuubbssccrriibbee lliinnuuxx--iissddnn" im Body. Die Mailing-Liste ist archiviert auf ftp.prz.tu-berlin.de und im HTML-Format . 44..33.. PPrreessssee Der Artikel "Auf zwei Beinen" in _i_X 7/95, S. 164 enthält weitere Hinweise. 44..44.. FFAAQQ Es existiert eine U-ISDN-FAQ von Kai Dupke . Die FAQ liegt vor als · WWW-Dokument · SGML-Source · Textdatei · Postscript · Tar-Archive der HTML-Seiten der HTML-Seiten. 55.. FFeehhlleerrbbeesseeiittuunngg 66.. VVoorrrraauusssseettzzuunnggeenn 66..11.. SSooffttwwaarree Linux. GCC 2.5.8, Libraries 2.6.4, oder neuere. AAnnmmeerrkkuunngg:Der Kernel sollte mit CONFIG_MODVERSIONS gebaut werden; das ist zwar nicht unbedingt notwendig, aber sinnvoll. Das modutils-1.2.8-Paket wird in jedem Fall benötigt, um Parameter an die einzelnen Module zu übergeben. 66..22.. HHaarrddwwaarree bbzzww.. IISSDDNN--KKaarrtteenn 66..22..11.. PPaassssiivvee KKaarrtteenn 66..22..11..11.. TTeelleess SS00 88bbiitt Diese Karte wird unterstützt mit dem Eintrag insmod teles.o -o Tel0 isdn/teles.o name=$(cardname Tel0) mem=0xD0000 irq=5 Hierbei ist die Adresse mit einer 'Null' mehr anzugeben, als in der DOS-Doku steht (da LINUX keine Speichersegmentierung hat). 66..22..11..22.. TTeelleess SS00 1166bbiitt Diese Karte wird unterstützt mit dem Eintrag insmod teles.o -o Tel0 name=$(cardname Tel0) mem=0xD6000 irq=5 ipl=1 Hierbei ist die Adresse mit einer 'Null' mehr anzugeben, als in der DOS-Doku steht (da LINUX keine Speichersegmentierung hat). Ipl steht für die Kartennummer (1 bis 3). 66..22..11..33.. TTeelleess SS00 1166..33 Marc Neitzner schrieb hierzu: Moin Bodo, gemaess Matthias gibt es ja zumindest die Moeglichkeit sich das Modul teles3.0 zu erzeugen, nur laesst es sich bei nir meistens nicht laden. ISDN Modules: isdn/teles3.o -o Tel0 name=$(cardname Tel0) irq=5 ipl=1: Initialization of Tel0 failed Die Angabe eines (Dummy)-Mem-Bereichs bringt ebensowenig wie die direkte Angabe des io-Ports. Gibt es fuer teles3.o vielleicht darueberhinaus noch Parameter ?? Gruss Marc _A_n_m_e_r_k_u_n_g _d_e_s _S_e_t_z_e_r_s: Die 16.3 macht auch mit den Orginaltreibern der Firma Teles Probleme bzw. es gibt derzeit noch gar keine Treiber (OS/2). Auch sollte man daran denken, dass Teles den Support über eine 0190er Nummer abwickelt bzw. unter DOS/Windows die Treiber regelmässig über den Server der Fa. Teles lizensieren lassen muss. 66..22..11..44.. CCrreeaattiixx Diese Karte ist baugleich zur Teles S0 16bit. 66..22..11..55.. NNiiccccyy PPCC 11001166 Diese Karte ist baugleich zur Teles S0 16bit. 66..22..22.. AAkkttiivvee KKaarrtteenn Support fuer BSC- und AVM A1-Karten ist in Vorbereitung, Source liegt bei, funktioniert aber noch nicht so ganz (BSC: B-Kanäle; beide: Interrupts?) -- wer kann und will, möge sich dransetzen. 66..22..22..11.. BBiinntteecc _A_n_m_e_r_k_u_n_g _d_e_s _S_e_t_z_e_r_s: Es gibt wohl Support für Bintec-Karten, aber was sich mit denen machen läßt, steht irgendwie nicht so richtig in der bisherigen Doku. 66..33.. PPaattcchheess Die Patches sind im Verzeichnis ppaattcchheess. Die Patches basieren auf dem Kernel 1.2.11. Frühere bzw. spätere Kernels auf eigene Gefahr bzw. Bastelei. Insbesondere sollten die Leute, die meckern, weil sie den Kram nicht unter 1.3.xx zum Laufen bekommen, sich ernsthaft fragen, wieso sie einen Kernel einsetzen, der ausdrücklich für Leute gedacht ist, die selber nach Bugs suchen können. Was die einzelnen Patches machen und ob sie benötigt werden, steht in den einzelnen Dateien am Anfang. Lesen, bevor der Kernel verändert wird! 66..44.. LLäännddeerr bbzzww.. PPrroottookkoollllee · Deutschland · 1TR6 · Euro-ISDN · Österreich · Euro-ISDN · Niederlande · Euro-ISDN mit :b2 wegen nationalen Schweinereien. Siehe auch ``DL-Zeile'' und . 77.. GGrruunnddssttrruukkttuurr 77..11.. UU--IISSDDNN Das Modul "compat" stellt ein paar Funktionen zur Verfügung, wie sie aus anderen Unixkernelumgebungen bekannt sind. "streams" implementiert minimale Streamsunterstützung. Wegen der tty- Verwaltung unter Linux gibt es keinen clone-Treiber (die ist nicht darauf ausgelegt). Der ISDN-Treiber "isdn_2" ist die Low-Level-Schnittstelle zwischen den ISDN-Karten und dem Steuerprogramm (bin/master). Dieses öffnet /dev/isdnmon, liest eine Konfigdatei (siehe unten) etc. Der Treiber meldet dem Steuerprogramm, welche Karten sich bei ihm angemeldet haben. Es gibt _keine_ Devices für einzelne Karten. Der Treiber managt das Q.921 -Protokoll für die Karten. Alles andere ist Sache des Steuerprogramms (D-Kanal) bzw. anderer Streams- Module (B-Kanäle). Ein kommunikationswilliges Programm öffnet einen freien ISDN-Port (/dev/isdn/isdnX, X von 1 bis 99 oder so) und sendet einen Verbindungswunsch an das Steuerprogramm ("atd/subnet/login", öffnen einer Verbindung zum System "subnet" im Protokollmodus "login"). Das Steuerprogramm schiebt diesem Kanal nun automatisch die notwendigen B- Kanal-Module unter (X.75, T.70, V.110, was-auch-immer), baut die Verbindung auf, meldet den Zustand der Verbindung ("RRING", "CONNECT") und verbindet schließlich B-Kanal und Programm. Es erscheint das login:-Prompt des Systems "subnet". Umgekehrt wird das Steuerprogframm bei einem ankommenden Anruf selbst einen freien Port öffnen und das zuständige Programm auf diesem Port starten. Dasselbe passiert bei abgehenden Anrufen, die auf das zuständige Programm beschränkt sind, zB TCP/IP. 77..22.. SSttrreeaammss Nimm an, du willst TCP/IP-Pakete verschicken. Du packst also jedes dieser Pakete in einen Datenblock und schickst sie auf die Reise ... halt, so einfach geht das nicht. Normalerweise wird auf dem B-Kanal sowas wie eine gesicherte Verbindung gefahren. (Man kann sich streiten, ob das bei IP-Paketen, die eigentlich sowieso beliebig verlorengehen dürfen, Sinn macht.) Außerdem können manche ISDN- Implementierungen nur ziemlich kleine Pakete verarbeiten; um zu vermeiden, daß die IP-Pakete fragmentiert werden (Overhead: ca. 20 Bytes pro Fragment) oder von der Gegenseite weggeschmissen werden (Overhead: unendlich ;-) , muß man sie so kennzeichnen, daß die Gegenseite sie direkt wieder zusammensetzen kann (Overhead: 2 Bytes; braucht aber besagte gesicherte Verbindung, um vernünftig zu funktionieren). BTX beispielsweise arbeitet so. Außerdem ist ISDN bytesynchrton, d.h. irgendjemand muß kennzeichnen, wo ein Datenpaket aufhört und wo/wann das nächste anfängt. Dafür gibt es, wie üblich, mehrere Methoden... Streams sind nun eine Möglichkeit, mehrere speziell geschriebene Module auf einem ebenfalls speziell geschriebenen Treiber so zu stapeln, daß jedes Modul eine Einzelaufgabe dieser Arbeit erledigt. Im Idealfall sind die einzelnen Module recht klein und damit debugbar, lassen sich vielseitig zusammenstöpseln, etc.pp. In der Praxis ist die Sache natürlich nicht ganz so einfach; insbesondere ist der Overhead, die Pakete von einem Modul zum nächsten zu schaufeln, nicht zu vernachlässigen. Er ist aber tolerierbar, vor allem wenn man auf die ganzen überflüssigen "Features" (von manchen Menschen als "Bugs" oder "Designfehler" bezeichnet...) verzichtet, die USL und Co. in Sys5 Release 4 dazuerfunden haben. Die einzelnen Module müssen parametrisiert werden. Im Normalfall spricht man sich mit der Gegenseite vorher ab, ob beispielsweise X.75 verwendet wird und in welchem Modus. Alternativ, und wenn man die Normen auswendig weiß, schaltet man ein Monitor-Modul zuunterst auf den Datenstrom, läßt sich von der Gegenseite anrufen, beobachtet genau was da passiert, und richtet die Konfiguration entsprechend ein. (Das klingt nicht nur kompliziert, das ist es auch. Außerdem gibt es ein paar Details, die sich nicht ohne weiteres beobachten lassen.) Zum Glück haben sich ein paar "normale" Betriebsarten herauskristallisiert, an die sich die meisten Systeme halten. 77..22..11.. PPaakkeettffoorrmmaattee Im einfachsten Fall werden IP-Pakete direkt auf die Leitung geschickt. Wer zusätzlich noch Appletalk oder IPX oder so machen will, kann diese entweder in IP einpacken (Overhead, kein Kernelsupport unter Linux) oder ein paar Bytes vor die Daten stellen, die angeben, um was für Daten es sich handelt. Die Bytes können entweder genauso aussehen wie im Ethernet, oder so wie der Pakettyp von PPP. Wer PPP macht, braucht offensichtlich letzteres (PPP selber wird auch bald kommen...); normale Leute nehmen die Ethernet-Codes. 88.. IInnssttaallllaattiioonn 88..11.. SSoouurrcceenn hhoolleenn Aktuell liegt die Software auf ffttpp..nnoorriiss..ddee. Dieser Server ist aber nicht öffentlich zugänglich, daher existiert ein Spiegel auf ftp.xlink.de . 88..22.. SSoouurrcceenn eennttppaacckkeenn cd /usr/src tar xfvz /wo/auch/immer/isdn-xx.tar.gz cd isdn-xx 88..33.. PPaattcchheess iinnssttaalllliieerreenn Im Verzeichniss patches sind verschiedene Patches, die ggf. in den Kernel gepatcht werden müssen/sollen. Im Kopf jedes Patches steht drin, worum es bei dem Patch geht. Die Patches werden mit "patch -p0 -d /usr/src/linux " in den Kernel eingebaut. Nachdem alle Patches eingebaut sind, nachschauen, ob Dateien mit der Endung ".rej" entstanden sind, weil dann das patchen schief gegangen ist. AAcchhttuunngg:: Unbedingt den Kernel neu übersetzten und installieren, bevor mit U-ISDN weitergemacht wird. 88..44.. UU--IISSDDNN üübbeerrsseettzztteenn make.isdn # Wenn er nun über config.new und config.data meckert: # Siehe unten Probleme. # mv config/config.new config/config.data ## nicht "cp" !! # vi config/config.data # # Insbesondere: Zeilen "PROTOCOLS" und "SUBPROTOCOLS" ansehen. # # Siehe unten "DL-Zeile". # Danach: Nochmal make.isdn starten. # # Nun als Superuser: make.isdn # oder einfach "make install". AAnnmmeerrkkuunngg:: DDaass eerrssttee MMaall,, bbeeii ddeemm mmaakkee..iissddnn aauuffggeerruuffeenn wwiirrdd,, mmuußß aallss nniicchhtt--rroooott ggeeaarrbbeeiitteett wweerrddeenn.. 88..55.. UU--IISSDDNN iinnssttaalllliieerreenn ### Editiere /lib/modules/modules.isdn (die automatisch erzeugte Version ### steht in /lib/modules/modules.isdn.all: isdn/teles.o -o Tel0 name=$(cardname Tel0) mem=0xD6000 irq=5 ipl=1 anstatt isdn/teles.o eintragen. Näheres siehe "Treiberparameter" weiter unten. cd /usr/local/isdn/bin-Kernelversion # also zB .../bin-1.3.29 vi /etc/isdn.conf # ISDN-Nummern, Dienste, etc. eintragen /etc/rc.d/rc.isdn # geht automatisch in den Hintergrund # Wenn das alles funktioniert, rc.isdn via rc.local starten. 88..55..11.. TTrreeiibbeerrppaarraammeetteerr Die Treiber für einzelne Karten werden wie folgt geladen: · Zunächst wird ein generischer Treiber installiert (d_XXX.o). · Dann wird pro Interface ein Modul (XXX.o) geladen, das diesem Treiber genau eine Karte nennt, die er erkennen soll. Karte nicht erkannt -> Laden schlägt fehl. · Alle Treiber verstehen · · name=XXXX XXXX ist eine Zahl. Die Zahl wird durch Aufruf des Programms "cardname" aus dem 'eigentlichen' Namen der Karte gewonnen; ich wollte mich nicht darauf verlassen, daß insmod korrekt Strings in den Treiber einbaut. · Treiber mit Adressen im Speicher verstehen · · mem=0xZZZZZ Lage der Karte im Hauptspeicher. · Treiber mit I/O-Adreßbereich verstehen · · io=0xZZZ Lage der Karte im I/O-Adreßbereich. · Treiber für Karten mit Interrupt verstehen · irq=XX Interrupt der Karte. · Treiber für softkonfigurierbare Karten verstehen · ipl=X Verwende die Xte Karte. BBeeiissppiieell:: teles.o · laden insmod teles.o -o Tel0 name=$(cardname Tel0) mem=0xD8000 irq=5 · entladen rmmod Tel0 ; rmmod d_teles.o Alle Kartentreiber können vor oder nach Start des Masterprogramms geladen oder wieder entfernt werden. Aktive Verbindungen werden (unsauber) abgebrochen. 88..66.. TTTTYY--DDeevviicceess aannlleeggeenn Die TTY-Devices werden z.Bs. für Minicom oder diald benötig. · Major-Device-Number feststellen mit dem Befehl "cat /proc/devices" bekommt man eine Übersicht über die Device-Numbers. Hierbei ist die gesuchte Nummer die, die bei der Zeile "tisdn" steht. Diese Nummer wird dynamisch vergeben und kann daher je nach Systemkonfiguration unterschiedlich sein · Device erzeugen mit dem Befehl "mknod /dev/ttyi1 c 62 1" kann ein entsprechendes Device erzeugt werden. 88..77.. UU--IISSDDNN kkoonnffiigguurriieerreenn In dem Verzeichniss 'tools' ist eine Beispielkonfiguration, die bei der Installation nach /etc/isdn.conf kopiert wird. Diese Konfiguration ist an die eigene Umgebung anzupassen. Siehe hierzu die ``Konfigurationsdatei'' Weitere Beispielkonfigurationen sind zu finden auf ftp.gmd.de 88..88.. TTeesstt Mit 'cu -l /dev/isdn/isdn1' und Eingabe von 'AT/L' sollten die konfigurierten TCP-Verbindungen auflisten. Dieses gilt NUR für TCP-Verbindungen. 99.. PPrroobblleemmee bbeeii ddeerr IInnssttaallllaattiioonn Als allererstes: Der obige Hinweis bezüglich Kernel installieren sollte ernst genommen werden. Grund: Jeder modularisierte Treiber _braucht_ Zugriff auf die korrekt konfigurierten Sourcen genau des Kernels, unter dem er später laufen soll. Dies gilt ganz besonders, wenn der Kernel mit CONFIG_MODVERSIONS gebaut wurde (das ist um einiges sicherer!). Wenn sich die Module nicht laden lassen, weil insmod Sachen wie "kfree" nicht findet, dann liegt das daran, daß die Version der Sourcen des Kernels, des laufenden Kernels, und der ISDN-Treiber, nicht übereinstimmt. Also: cd /wo/auch/immer/ist/src/linux; make config; make dep; make; make modules; make modules_install; cp arch/i386/boot/zImage /boot/linux.versionsnummer; vi /etc/lilo.conf; lilo; reboot. DDiissccllaaiimmeerr:: So mache ich das. config.new und config.dist und config.data. Das Problem ist, daß ich an der config.data gelegentlich was ändern muß, aber der Benutzer daran auch rumspielt (dazu ist die Datei da). Was tun? Einfach: Mit den Parametern der alten config.data wird die neue config.dist "geladen", und das Ergebnis liegt nun in config.new. Dasselbe passiert, wenn es noch keine config.data gibt. In beiden Fällen tut man gut daran, sich die Datei config.new näher anzusehen, evtl. mit der alten config.data zu vergleichen, und dann "mv config.new config.data". Sicherheitshalber weigert sich das Makefile in config/, ohne diesen Schritt weiterzuarbeiten. Autoconfig und wieso nicht: Nein, ich weigere mich (momentan), automatisch nach Karten, deren Interrupts, deren Konfigurationsregister etc.pp. zu suchen. Bei einem laufenden Kernel ist das alles andere als einfach! Stattdessen müssen die entsprechenden Daten in /lib/modules/modules.isdn eingetragen werden. Wenn irgendwas nicht stimmt, wird im allgemeinen die Karte nicht erkannt und das Treibermodul nicht geladen. Ausnahme: IRQs, die werden momentan nicht überprüft. Das kann man manuell machen: nach der installation der Treiber beim ISDN-Anschluß der Karte anrufen. Dann "cat /proc/interrupts". Wenn neben dem Wort ISDN eine Zahl kleiner drei steht, stimmt was nicht -- anderen Interrupt probieren, BIOS- Konfiguration überprüfen: auch korrekt eingestellte Interrupts können Probleme machen, wenn zB das BIOS eines PCI-Rechners den Interrupt zu einem PCI- anstatt zu einem ISA-Slot routet. (Evtl müssen da trotz BIOS- Konfiguration noch Jumper auf dem Mainboard umgesetzt werden. Doku des Teils lesen!) 99..11.. tthhee ssyymmbboollss ffrroomm kkeerrnneell xx..yy..zz ddoonn''tt mmaattcchh xx..yy..zz Hier stimmt ziemlich wahrscheinlich die Ladereihenfolge der Module nicht. Man muß sich auf jeden Fall streng an die Reihenfolge in //lliibb//mmoodduulleess//mmoodduulleess..iissddnn..aallll halten und darf diese in der Datei auch nicht verändern, wenn man einzelne Module herausnimmt, die man nicht braucht. 1100.. AAnnwweenndduunngg 1100..11.. TTCCPP//IIPP Die TCP/IP-Nutzung wird komplett über die Konfigurationsdatei abgewickelt, in der die Routen eingetragen werden. Nach dem starten des Masterprogrammes sollten dann mit dem Befehl "route" eine Routingtabelle angezeigt werden, in der Routen für die konfigurierten Systeme angezeigt werden. Der Befehl "ifconfig" sollte dann die interfaces und die Point-To- Point Verbindungen zu den entfernten Rechner anzeigen. _A_n_m_e_r_k_u_n_g _d_e_s _S_e_t_z_t_e_r_s: Hat das interface "str" eigentlich einen besonderen Hintergrund? 1100..11..11.. BBeennuuttzzuunngg der Befehl "ping " sollte dann eine Verbindung aufbauen. Mit dem Befehl ``'' im Terminalbetrieb (siehe ``Terminal'') läßst sich kontrollieren, ob die Verbindung aufgebaut wurde bzw. wird. 1100..11..22.. TTCCPP--IIPP--RRoouuttiinngg So ein TCP/IP-Draht über ISDN mag ja ganz nett sein, aber irgendwie müssen andere wissen, wie sie vom lokalen Netz zum IP-Rechner zur Gegenstelle können. Und umgekehrt. Das ganze Thema ist zu kompliziert, um es hier abzuhandeln. Man lese ein gutes Buch über den Kram, zB Stevens. Wichtige Spezialfälle · Das Große Internet ist auf der anderen Seite der ISDN-Leitung. ``'' mit -d starten und auf den ganzen anderen Rechnern im lokalen Netz eine Defaultroute zum ISDN-Rechner eintragen. ACHTUNG! ALLE LOKALEN RECHNER BRAUCHEN OFFIZIELL ZUGETEILTE IP-NUMMERN. Das Weiterleiten von Nummernbereichen nach RFC 1597 muß unterbunden werden (wenn diese lokal verwendet werden: unbedingt IP-Firewall in den Kernel einbauen und rausfiltern); andere unzulässige Netznummern müssen durch einen zweiten Gatewayrechner mit zwei Ethernetkarten o.ä. abgeschottet werden. · Ein System, das eigentlich Teil des lokalen Netzes wäre, sitzt am anderen Ende der Leitung. Am einfachsten ist hier Proxy-ARP; der benötigte Befehl beim Booten lautet "arp -s IP_der_entfernten_Kiste Ether_des_ISDN_- _Rechners pub". Die Ethernetadresse spuckt "ifconfig eth0" aus. diplogin (für IP über serielle Leitung) kann den arp-Eintrag automatisch setzen. Wenn jemand entsprechende Patches für ``'' macht -> her zu mir. · Ein Netz mit stupidem ISDN-Router, der ein Transfernetz sehen will, ist auf der anderen Seite. Einfachste Methode: Vom lokalen Netzbereich wird ein 4-Adressen-Bereich abgezwackt und als Transfernetz mißbraucht. Sei die lokale Adresse 129.130.131.x, so wird zum Beispiel der Bereich x = 224..227 verwendet (die beiden untersten Bits des unteren Endes des Adressbereichs, hier 224, müssen(!!!) 00 sein). Die nächste Adresse (hier: 225) wird die lokale Adresse (entweder als lokale Adresse im ``'', oder via dummy-Interface: "ifconfig dummy0 129.130.131.225; route add -host 129.130.131.225 dev lo" -- in der Konfigdatei wird in diesem Fall die normale Ethernetadresse des Rechners als lokale Adresse verwendet). Danach (hier; .226) kommt die entfernte Adresse (eintragen via Proxy-ARP). Auf der Gegenstelle wird dann das Transfernetz mit einer Netmask von 255.255.255.252 konfiguriert, die ..225 wird dort die entfernte Adresse und die Defaultroute an der Gegenstelle zeigt darauf. (Außerdem muß manchmal eine Route für das Netz, hier 129.130.131.0, eingetragen werden, die auf die Gegenseite, hier .225, zeigt.) Diese Methode verschwendet 75% des Adressbereichs (die Nummern .224, der Rechner auf der Gegenseite verwendet dummerweise eine Nummer aus dem lokalen Netz, für die ein funktionierender Nameserver-Eintrag gepflegt werden muß, hat aber den Vorteil, daß sie funktioniert. Es fällt außerdem auf, daß die lokale Adresse und Konfiguration des ISDN-Links nichts mit dem zu tun haben muß, was die Gegenseite von uns denkt. Das ist auch total egal -- im Gegensatz zu PPP werden die Adressen nicht mit der Gegenstelle abgeglichen. Das einzige, auf das es ankommt, ist, daß die jeweils lokalen Adressen auch als lokal angesehen werden und _nicht_ irgendwie wieder zur Gegenseite geroutet werden. Pingpongpakete haben auf einer ISDN-Leitung nichts verloren! (Und auch nirgends anders.) Es fällt außerdem auf, daß ich nichts von routed und ähnlichen Programmen gesagt habe. Das ist Absicht. Konfiguriert eure Routen lieber statisch, das ist gesünder... 1100..22.. TTeerrmmiinnaall Mit 'cu -l /dev/isdn/isdn1' kann U-ISDN im Terminalbetrieb benutzt werden. AAnnmmeerrkkuunngg:: Einige Terminalprogramme (z.Bs. Minicom) wollen lieber /dev/ttyi1 haben. 1100..22..11.. BBeennuuttzzbbaarree AATT--BBeeffeehhllee Alle Schlüsselbuchstaben können groß oder klein geschrieben werden. Das "AT" muß entweder vollständig groß oder vollständig klein geschrieben werden. Zeichen vor dem "AT" werden ignoriert. · T/B Schaltet Verbindung von "off" auf "down" um. Siehe ``''. · AT/K Beendet alle laufenden Verbindungen. Kann nur vom Superuser ausgeführt werden. · AT/K Beendet die Verbindung , beendet das betreffende Programm. · AT/L Karte Listet den momentanen Status aller Verbindungen für die angegebene Karte (kann weggelassen werden: alle Karten). <[minor:]id> Nummer der Verbindung, für AT/K o.ä. interne Folgenummer der Statusmeldung; Meldungen, die einen alten Status ersetzen, bekommen dieselbe Nummer. PID des Prozesses, der für die Verbindung gestartet wurde. off Verbindung nicht aktiv, wird bei ankommendem Ruf reaktiviert. down Standby; sobald ein Datenpaket ansteht, wird die Verbindung aufgebaut. up Verbindung steht ->down ->up Verbindung wird gerade ab- bzw. aufgebaut. Zusätzlich kann hinter erscheinen: .N Nter Anwahlversuch -N ... nachdem N Serien fehlgeschlagen sind. Einheiten in der aktuellen Verbindung. Einheiten insgesamt seit Start des Prozesses. interner Zustand der Verbindung, komma remote-Nummer, strichpunkt lokale-Nummer (jeweils wenn bekannt/vorhanden). Interner Zustand: :in Ruf ankommend :ou Ruf abgehend :dP virtuelle Verbindung :dL Festverbindung :dM Dialup, mehrfachaktiv :dD Dialup, nur einmal aktiv :is Verbindung ist unterbrechbar :nc entfernte Nummer ist vollständig :lc lokale Nummer ist vollständig :oc Info für abgehende Verbindung ist vollständig :si Verbindung ist neu gestartet :sl Verbindung wird wieder aufgebaut :nj, :xi, :yi, :bi, :il, :fX, :fr, :ib siehe P-Zeile. Der interne Zustand existiert in permanenter (bleibt mehr doer weniger konstant) und in transienter (wird pro Verbindungsaufbau neu generiert) Form. Der permanente Teil wird zuerst ausgegeben, danach folgt entweder ein / (der transiente Teil fängt bei Null an) oder ein ^ (der zweite Teil übernimmt die vorher angegebenen Flags; nochmals aufgeführte Flags werden wieder gelöscht). Text; Meldung der Vermittlung (Groß/Kleinschreibung) oder interner Zustand (Großschreibung). Ein Ausrufezeichen an erster Stelle bedeutet, daß die Verbindung intern nicht mehr bekannt ist, der Zustand aber noch eine Zeitlang aufgehoben wird. Ein Minuszeichen am Anfang meldet die Löschung dieses internen Zustands; das ist für Monitorprogramme interessant, die den Status anzeigen wollen, ohne sich darum zu kümmern, wie lange sie alte Meldungen aufheben wollen. Jede Minute wird außerdem ein Zeitstempel der Form "#xx: hh:mm" ausgegeben. xx ist die Zahl der Minuten, die der Master aktiv ist; hh und mm sind die aktuelle Uhrzeit. Bis zum nächsten AT-Befehl bleibt der Kanal im Monitormodus und meldet alle Zustandsänderungen automatisch. Außerdem kommt jede Minute eine "Keepalive"-Zeile mit der aktuellen Uhrzeit sowie der Anzahl der Minuten, die der Masterprozeß diesmal durchgelaufen ist. ;-) · AT/I Listet den internen Zustand. In der ersten Zeile stehen die erkannten ISDN-Karten, die zweite Zeile enthält den internen Zustand des ISDN-Systems. Zum Debuggen. · AT/W Karte Beobachtet den Traffic auf den D-Kanälen der Karte (kann ein Pattern sein: AT/W* auf allen Karten). Dazu muß :de in der ``DL- Zeile'' stehen. Bei aktiven Karten sind das die Protokolldaten, zB. CAPI-Nachrichten. Die Daten werden _nicht_ interpretiert. Zusätzlich werden dieselben Daten wie bei AT/L angezeigt. · AT/M foo Sendet den Systembefehl "foo" nach unten. GGeeffäähhrrlliicchh.. Kann zum Online-Rekonfigurieren von Modulen verwendet werden. Beispiel: AT/M pr :mi 2 ::ms :ms timer :tr 30 :tw 30 :ti 10 würde auf Verbindung 2 den automatischen Verbindungsabbau dazu überreden, alle 10 Sekunden nachzusehen, ob in den letzten 30 Sekunden keine Daten übertragen wurden, und die Verbindung gegebenenfalls beenden. · AT/Q Programmende. Kann nur vom Superuser ausgeführt werden. · AT/R Reload der Konfigdatei. Kann nur vom Superuser ausgeführt werden. Alle wegen eines Fehlers deaktivierten Programme werden wieder aufgeweckt. · AT/X Abbruch der Verbindung . Kann nur vom Superuser ausgeführt werden. · ATD/sys/proto Sucht Nummer und Protokoll in der Konfigdatei, wählt, macht Verbindung auf. · ATH trennt die Verbindung. · wechselt vom Online- in den Befehlsmodus, falls erlaubt. Der Interpreter antwortet mit OK. (zum Verbieten: entsprechenden Konfigurationsbefehl für das ``''-Modul verwenden.) "+++" zum Wechseln funktioniert _nicht_. Diverse andere Befehle sind 100% ungetestet. habe ich seit Ewigkeiten nicht mehr ausprobiert. ATA existiert nicht; stattdessen Konfigdatei ändern. 1100..22..22.. BBeennuuttzzuunngg AT OK Der Interpreter im Kontrollprogramm tut so, als wäre er ein Modem mit Hayes-Befehlssatz, und schickt ein OK zurück. Hinweis: Das Ding ist minimal und kann nichtmal ATEx oder ATVx. ATD/subnet/login [ Virtuelles Rappeln einer Wählscheibe ] RRING CONNECT login: Die Verbindung steht. Viel Spaß beim Hacken eines Paßworts. ;-) 1100..22..33.. AAnnmmeerrkkuunngg Statt ATD/name funktioniert auch ATDnummer; /login ist der Default für das Protokoll. 1100..22..44.. BBeeiissppiieellkkoonnffiigguurraattiioonn ``Beispielkonfiguration mit X.75'' 1100..33.. AAnnrruuffbbeeaannttwwoorrtteerr 1100..44.. GGeebbüühhrreennaauusswweerrttuunngg 1100..55.. VVeerrbbiinndduunnggssaauusswweerrttuunngg _A_n_m_e_r_k_u_n_g _d_e_s _S_e_t_z_t_e_r_s: Vielen Dank an Michael Povel für diesen Abschnitt. 1100..66.. BBttxx//CCeepptt _A_n_m_e_r_k_u_n_g _d_e_s _S_e_t_z_t_e_r_s: Vielen Dank an Edmund Mergl für diesen Abschnitt. 1100..66..11.. BBeennööttiiggttee PPrrooggrraammmmee bbzzww.. PPaattcchheess · XCept-3.0 · tcl-7.3 · tk-3.6 · XCept-nsl-uisdn.tar.gz 1100..66..22.. IInnssttaallllaattiioonn · XCept mit XCept-nsl-uisdn patchen · weiter, wie in README.linux vorgehen. · folgende Dateien für XCept-3.0 (genauer: ceptd) anlegen · /usr/local/etc/init.cept set DxJNumber "01910" if {[CeptdOpenISDN /dev/isdn/isdn68 ATD/cept/cept] == -1} { set stat $CeptdStatus } else { CeptdSendStatus ISDNCONNECT return 0 } CeptdSendStatus $stat return -1 · /usr/local/etc/users.cept user@host · /etc/services btx 20005/tcp ceptd · /etc/inetd.conf btx stream tcp nowait uucp /usr/local/bin/ceptd ceptd 1100..66..33.. AAnnmmeerrkkuunngg Nicht vergessen: auch der ceptd braucht die libtcl! Das Frontend xcept laeuft bei mir auf einem anderen Rechner. Das ist aber natuerlich nicht notwendig. Alles auf einem Rechner muesste genau so funktionieren. 1100..66..44.. BBeeiissppiieellkkoonnffiigguurraattiioonn ``Beispielkonfiguration für BTX/XCept '' 1100..77.. SSLLIIPP--//PPPPPP--VVeerrbbiinndduunnggeenn _A_n_m_e_r_k_u_n_g _d_e_s _S_e_t_z_e_r_s: Vielen Dank an Andreas Haumer für diesen Abschnitt. Derzeit kann UISDN noch keine Login-Verbindung aufbauen und diese dann nachträglich in den SLIP-Modus schalten. Eine Möglichkeit das Problem zu umgehen ist die Verwendung von DIP oder Diald mit einem UISDN-tty. Über das DIP- oder CHAT-Script kann die Login-Sequenz konfiguriert und nachdem man sich erfolgreich eingeloggt hat kann in den SLIP-Modus ge- schaltet werden. Im Prinzip wird Diald bzw. DIP genauso konfiguriert, als würden die Daten über analoge Modems ausgetauscht. Diese Programme "wissen" daher nicht, daß sie über eine digitale ISDN-Strecke kommunizieren. In UISDN selbst wird für die hier beschriebene Anwendung eine einfache Login-Verbindung konfiguriert. In der Regel werden dabei X.75 Pakete mit HDLC verwendet. AAnnmmeerrkkuunngg: Wichtig ist, daß für UISDN nur eine normale Login- Verbindung konfiguriert wird; ein ISDN SLIP-Modul wird für die hier beschriebene Anwendung nicht benötigt (Im Linux Kernel muß SLIP allerdings schon konfiguriert sein!) Das "``''"-Modul kann bei Verwendung von Diald auch weggelassen werden, da dieses selbst eine umfangreiche Zeitüberwachung besitzt. 1100..77..11.. NNuuttzzuunngg vvoonn DDIIAALLDD _A_n_m_e_r_k_u_n_g _d_e_s _S_e_t_z_e_r_s: Da ich bisher noch nicht mit diald gearbeitet habe, muss ich mich erst noch selber durch die Anleitung von Andreas ackern, bis ich das richtig setzten kann (und auch die Zeit dazu habe ;-) 1100..77..22.. NNuuttzzuunngg vvoonn DDIIPP Vor dem Einsatz von DIP muß ein entsprechendes DIP-Script erstellt werden. Dieses könnte wie folgt aussehen: [----- Begin Example tu-isdn.dip -----] main: port ttyi1 init AT send AT\r wait OK 2 if $errlvl != 0 goto error send atd/tu/login\r wait CONNECT 10 if $errlvl != 0 goto error login: sleep 1 send \r\n wait name: 10 if $errlvl == 0 goto got_name send \r\n wait name: 10 if $errlvl != 0 goto error got_name: send myusername\n wait word: 10 if $errlvl != 0 goto error send mypassword\n wait TS> 10 if $errlvl != 0 goto error send slip /compressed\n get $locip remote 10 get $rmtip IPB.IPB.IPB.IPB get $mtu 1500 print $locip CONNECTED to $rmtip default mode CSLIP goto exit error: print CONNECT FAILED! exit: exit [----- End Example -----] AAnnmmeerrkkuunngg:Weitere Informationen zu DIP entnehme man bitte der Manual- Page zu DIP. Ich verwende dip-3.3.7n-uri. 1100..77..33.. AAnnmmeerrkkuunngg Leider sind die erzielten Datenraten für ISDN nicht sonderlich hoch, da die Pakete zwischen Kernel und Userprozess kopiert werden müssen. Beispiel: Übertragung einer komprimierten Binärdatei (986431 Bytes) mit FTP. UISDN-System: i386DX-33, 8MB Ram, Teles.S0, UISDN-33, diald-0.11 ISDN Gegenstelle: unbekannt Folgende Werte habe ich gemessen: +-----------+-----------+ | put | get | +--------------------+-----------+-----------+ | Anzahl Meßwerte | 10 | 10 | | Mittelwert | 3.68 | 3.6 | | Standardabweichung | 0.139 | 0.067 | | Variationsbreite | 0.3 | 0.2 | +--------------------+-----------+-----------+ [Alle Durchsatzangaben in kB/s] Der Datendurchsatz ist für ISDN nicht gerade berauschend, was aber auch an meiner langsamen Hardware liegt. In Zukunft kann die Anwahl eines derartigen Systems vielleicht von einem UISDN "chat"-Modul vorgenommen werden (wenn sich jemand findet, der so etwas schreibt). 1100..77..44.. BBeeiissppiieellkkoonnffiigguurraattiioonn ``Beispielkonfiguration für X.75 '' 1100..88.. SSeemmiippeerrmmaanneennttee VVeerrbbiinndduunngg -- _S_P_V _A_n_m_e_r_k_u_n_g _d_e_s _S_e_t_z_e_r_s: Vielen Dank an Dirk Sommerfeld für diesen Abschnitt. Die SPV ist eine besondere Form der ``TCP-Anwendung'' und wird von der Deutschen Telekom AG nur in Verbindung mit einem 1TR6-Anschluß angeboten. Hierbei wird die Nutzung pauschal abgerechnet. AAnnmmeerrkkuunngg:Auch der bei einer SPV benutzte 1TR6-Anschluß ist ein Anschluß mit 2 B-Kanälen, sodaß durchaus der 2. Kanal auch genutzt werden kann. 1100..88..11.. BBeeiissppiieellkkoonnffiigguurraattiioonn ``Beispielkonfiguration für SPV'' 1111.. NNeeuueerruunnggeenn 1111..11.. VVeerrssiioonn 3377 -- _0_7_. _M_a_r _1_9_9_6 AACCHHTTUUNNGG:: Nur für Kernel 1.3.71 ff. Für ältere Kernels gibt es einen Patch 37-old, der _anstatt_ isdn-36-37.gz angewendet werden muß. Weitere Patches (d.h. 37->38 ff) können Konflikte verursachen. Ich empfehle jedem, 1.3.71 zu installieren; das Teil ist um _einiges_ schneller als 1.2.13. 1111..22.. VVeerrssiioonn 3366 -- _2_4_. _F_e_b _1_9_9_6 _A_n_m_e_r_k_u_n_g _d_e_s _S_e_t_z_e_r_s: Hier gibt's keine Info zu. ? 1111..33.. VVeerrssiioonn 3355 -- _8_. _F_e_b _1_9_9_6 Problem mit Euro-ISDN-Nebenstellenanlagen behoben. AAcchhttuunngg: +000=00-0. in die DP-Zeile, der Punkt am Ende ist nicht ganz unwichtig. 1111..44.. VVeerrssiioonn 3344 -- _5_. _J_a_n _1_9_9_6 · Weitere Crashprobleme (hoffentlich) beseitigt. · AAcchhttuunngg: Alle zutreffenden Keys in ``TM-Zeilen'' werden nun geODERt. 1111..55.. VVeerrssiioonn 3333 -- _3_. _J_a_n _1_9_9_6 · Timer wieder umgestellt. Testcode für automatische Anpassung des Timeouts, noch nicht ausreichend getestet. 1111..66.. VVeerrssiioonn 3322 -- _2_. _J_a_n _1_9_9_6 WWiicchhttiigg:UNBEDINGT INSTALLIEREN. Verbindungen werden nicht korrekt abgebaut! · Wenn nicht installiert wird: in der ``ML-Zeile'' des Timers die Parameter für :ti und :to UNBEDINGT auf GERINGERE Werte als der Abstand zwischeen zwei Gebühreninfos einstellen! · Ausserdem: ``Kompatibilitätspatch'' für die Niederlande. 1111..77.. VVeerrssiioonn 3311 -- _1_. _J_a_n _1_9_9_6 Grr, ich solte diese Datei besser pflegen. :-/ _A_n_m_e_r_k_u_n_g _d_e_s _S_e_t_z_e_r_s: Sollte er ;-) - Aber gleichzeitig auch nochmal DANKE fuer U-ISDN. · Ankommende Anrufe funktionieren wieder. (Das taten sie nicht immer...) · Jemand, der gleich wieder auflegt, bringt den master nicht mehr zum Absturz. · Kernelpatch: die BLOCK-Regel des Firewalls wird nur bei lokalen Paketen angewendet und die FORWARD-Regel nur bei weitergereichten Paketen. Vorher: BLOCK wurde auch bei weitergereichten Paketen angewendet. · Neues Flag -x fuer ``'', laesst die lokale Route in Ruhe. Doofer Fehler beim freopen() korrigiert. Funktioniert dip jetzt? Bitte testen. 1111..88.. VVeerrssiioonn 2255 -- _4_. _D_e_z _1_9_9_5 Die Umstellungsprobleme sind nun (hoffentlich) endlich beseitigt. Die Puffergrößen in den Datenströmen wurden drastisch reduziert. Wenn Datenverluste auftreten (zB beim Weiterleiten von IP-Paketen oder beim Empfang von Audiodaten, wenn das lesende Programm zu langsam ist), sollte ein "``''"-Modul zwischengeschaltet und geeignet konfiguriert werden, sinnvollerweise hinter dem "``''"-Modul (IP) bzw. direkt hinter transalaw (Audio). 1111..99.. VVeerrssiioonn 2222 -- _2_8_. _N_o_v _1_9_9_5 Vernünftigeres Beartbeiten des Verbindungsauf/abbaus eingebaut. Unter Kernel 1.3.44: Experimenteller Code, der sk_buff-Blöcke zur Datenspeicherung verwendet, wird aktiviert. Wenn das Probleme macht -> meckern (abschaltbar in streams/stream.h, ganz oben). In obskuren Faellen ist es vorgekommen, dass der Rechner stehenbleibt. Meistens wacht er nach einer Minute oder so wieder auf; ich wuerde ganz gerne wissen wo er stehenbleibt... AltGR-ScrollLock druecken, nach einer Minute oder so sollten drei sehr kryptische Zeilen erscheinen. Die Zahl in <> gibt die Stelle im Kernel an, an der die Interrupts wieder freigegeben wurden; nachsehen (in /usr/src/linux/Symbols.map bzw. /lib/modules/VERSION/ /symbols), mir mailen. Es kann sein, dass "echo at/BLA >/dev/isdn/isdnXX" nicht mehr funktioniert. Timingabhaengigkeit im Kernel, sorry. Abhilfe: cu verwenden. Wenn es einen User "isdnmaster" gibt, darf dieser mit dem ISDN- Programm alles, was root auch darf. "isdnmaster" ist konfigurierbar. WICHTIG: Im D-Kanal-Handling hat sich was geändert. Wenn Anrufe von manchen Leuten funktionieren, Anrufe mit identischen Dienstkennungen von anderen Leuten mit längerer / kürzerer / ohne Nummer (also analog) jedoch nicht, in cards/dumb/shell.c den #if 0...TELL ME (Zeile 1175) in #if 1 ändern; wenn es nach dieser Änderung (und bitte NUR diese Änderung!) wieder funktioniert, bitte bei mir melden. Die CM-Zeilen sind weggefallen; die Treiber erkennen nun "frame" etc direkt. Dies als Vorbereitung auf das Erkennen von "frame x75 t70" und Handling desselben auf der Karte, wenn intelligente Karte. Das Handling der Treibermodule hat sich geändert: Module vor "reconn" werden jetzt erst beim Verbindungsaufbau geladen; sinnvoll, wenn eine Gegenstelle mehr als eine Nummer hat und dort unterschiedliche Protokolle fährt. (Soll es ja geben...) 1111..1100.. VVeerrssiioonn 2211 -- _1_5_. _N_o_v _1_9_9_5 Ditto Bugfixes. Callback funktioniert wieder in beide Richtungen, und nicht nur mit U-ISDN oder mit einer Karte. Das Teil ist bei mir im aktiven Einsatz als IP-Router. Also meckert nicht "es funktioniert überhaupt nix", das ist falsch. ;-) Nein, ich werde nicht dafür bezahlt, dieses ISDN-Tier zu bauen. Folglich habe ich auch keine Zeit, dieses und jenes Feature in jedem neuen Release neu zu testen. Sorry, aber das ist so. Insbesondere habe ich hier nur noch einen Rechner unter 1.2.x laufen, und den fasse ich momentan nicht an; der Rest ist 1.3.40. Wenn das System nicht unter 1.2 zu kompilieren ist, dann ist das zwar scheußlich, aber ich erwarte, daß sich jemand aufrafft und mir einen diff schickt, weil ich es _nicht_ selber mache(n kann). Sorry, aber so ist es nunmal. 1111..1111.. VVeerrssiioonn 2200 -- _1_. _N_o_v _1_9_9_5 Bugfixes et al. Standleitungen werden nun automatisch wieder aufgebaut, wenn sie als pf gekennzeichnet sind und das übliche reconn und :dI haben. Der Kartentreiber meckert, wenn er die Leitung nicht hochkriegt. Abhilfe: an dieser Leitung (manuell) anrufen. Dieser doofe Chip war schonmal einfacher zu programmieren... Kartentreiber weg- und wieder reinlinken ist noch problemaitsch. Das kann aber am GCC liegen, gcc 2.7.0 macht Mist mit -O2 -fomit-frame- pointer -m486. Ich habe alles mit -O -m386 gebaut (funktioniert) und für weitere Experimente im Moment keine Zeit (muß PPP für Binteckarten zum Laufen bekommen. Das ist einfach, die haben PPP bereits im Treiber eingebaut. PPP für passive Karten ist aufwendiger, leider). Neues Flag ,X in der ``P-Zeile'': es wird X-mal gewählt, bevor die Verbindung gekippt wird (Retry-Zähler). Neues Flag ,X in der ``D-Zeile'' macht prioritätsgesteuertes Wählen: alle ``D-Zeilen'' mit kleinem X werden durchprobiert (bis der Retryzähler ereicht ist), dann alle mit nächsthöherem X. Fehlendes X wird wie Null behandelt, negative Werte sind verboten. Mindestens drei Kartenhersteller bekundeten Interesse an einem Modul für meinen Treiber, und ließen dann nie wieder was von sich hören. You know who you are. Es wäre sinnvoll, wenn ein paar von euch die diversen Hersteller mal nerven würden, sie sollen mir eine Karte nebst Doku zur Verfügung stellen, auf daß es bald einen Treiber gebe. Anders wird das nämlich nix. Den Sub-Makefiles wird ein -r verpaßt (ignoriere die eingebauten Regeln), weil es sonst in mindestens einem Fall passiert. daß die expliziten Regeln in make.rules ignoriert werden (weil die eingebaute Regel einen Schritt kürzer ist). Grummel. Das Masterprogramm wird nun mit -static gelinkt, damit Libraries nicht rausgeswappt werden können. Grr. 1111..1122.. VVeerrssiioonn 1199 -- _6_. _N_o_v _1_9_9_5 Kleinere Bugfixes, insbesondere funktioniert das Senden von EAZ unter 1TR6 wieder... Der Backoff-Algorithmus, wennn die Gegenstelle nicht antwortet, wurde von "konstant oder linear" auf "exponentiell" umgestellt. Sorry, aber das muß so sein -- sonst meckert die Telekomik. Der Master spuckt jetzt seine ganzen Debugmeldungen auf stderr aus und protokolliert Statusmeldungen (Gebühreneinheiten) auf stdout. VVOORRHHEERR WWAARR DDAASS UUMMGGEEKKEEHHRRTT, das hat manchen Benutzer durcheinandergebracht. 1111..1133.. VVeerrssiioonn 1177 -- _3_0_. _O_k_t _1_9_9_5 ``TM-Zeile''. Eine angepasste isdn.conf gibt es demnaechst, wenn sie mir nicht jemand macht. ;-) BINTEC-Karten. Getestet mit Einfach-BRI-Version; Vierfach-BRI sollte funktionieren, ist aber ungetestet; S2M demnächst, da muß noch was getan werden. Neuer ``DL-Zeilen-Paramter'' :de. Neuer Befehl AT/W: Loggt den D-Kanal-Datenaustausch als cu-Ausgabe mit. 1111..1144.. VVeerrssiioonn 1155 -- _2_4_. _O_k_t _1_9_9_5 Support fuer intelligente Karten ist _fast_ da, wo er hinsoll... GCC 2.7.0 wird empfohlen. Support fuer intelligente Karten geht nicht ohne (wegen attribute((packed)); ich habe keine Lust, die CAPI- Datenstrukturen von Hand zusammenzuschrauben). Ansonsten siehe unten. Feedback bitte! 1111..1155.. VVeerrssiioonn 1144 -- _2_1_. _O_k_t _1_9_9_5 · Die ``CL-'' und ``DL-Zeilen'' haben sich geändert (erweitert um -Parameter). · In der Version 11 lagen noch ein paar .depend-Dateien und anderer Kram rum, die den Buildprozeß gestört haben. Abhilfe: "make clean". · IInntteelllliiggeennttee KKaarrtteenn ffuunnkkttiioonniieerreenn NNOOCCHH NNIICCHHTT.. 1111..1166.. VVeerrssiioonn 1111 · Das OK am Ende des statischen Teils der AT/L-Ausgabe weggefallen, weil das zu viele Leute irritiert hat. (Schließlich folgt noch was nach.) · Die Installationsprozedur fuer ISDN-Karten hat sich geaendert. Vorher: Config.c editieren, Modul bauen. Jetzt: d_teles.o laden, dann fuer jede Karte "insmod teles.o -o Tel0 name=$(cardname Tel0) mem=0xD6000 irq=5" ausfuehren. Daten anpassen! Unterschiedliche Namen verwenden! Das rc-Skript in tools/ wurde entsprechend angepasst. 16-Bit-Karten: Zusaetzlich "ipl=X" (X=1..3) fuer die erste bis dritte Karte. Damit sollte es problemlos sein, zwischen verschiedenen Systemen (mit einigermaßen identisch konfigurierten Kernels) die Treiber auszutauschen. 1111..1177.. VVeerrssiioonn 11..22..00 Mit der Version für 1.2.0 hat sich die Syntax der cf-Datei leicht geändert: · Der :ea-Parameter in der ``P-Zeile'' wurde durch den :lr-Parameter ersetzt: · verwende ":lr /X" statt ":ea X". · hänge an die ``DL-Zeile'' an die Nummer einen / an und danach ":pr 0 :sp 65 :pr 63" für 1TR6 oder :sp 8 für Euro-ISDN. Generell steht nun "/" für EAZs und so; "." steht für Nebenstellennummern. Bei externen Nummern verwende ich generell ".", aber das ist Geschmackssache. · Einige Konfigzeilen haben als zusätzlichen Parameter das ISDN- Interface verpaßt bekommen. · Die Parameter :pr und :sp stehen nun in der ``DL-Zeile'' und nicht mehr in der ``P-Zeile''. · Die I- und O-Flags werden nun klein geschrieben. · Die Verzögerung beim Auflegen (``ML-Zeile'') wird nun mit einem Komma an die Flags angehängt anstatt als Extraparameter. 1122.. DDiiee KKoonnffiigguurraattiioonnssddaatteeii Die Datei besteht aus verschiedenen Zeilentypen, die frei gemischt werden können. Der erste auf ein Problem passende Eintrag wird verwendet; auf eine passende Zeile folgende solche werden bei manchen Zeilentypen ebenfalls ausgewertet. 1122..11.. VVoorrggeehheennsswweeiissee ddeess MMaasstteerrpprrooggrraammmmss bbeeiimm AAuuffbbaauu eeiinneerr VVeerrbbiinndduunngg · Das Zielsystem wird ausgewählt (``D-'' und ``P-Zeile'': ankommende Verbindung; ``R-Zeile'', bei Programmstart). · Das in der ``R-Zeile'' angegebene Programm wird gestartet. · Die in der ``ML-Zeile'' angegebenen Module werden zwischen den ISDN-Treiber und das Programm geschoben. · Die Module werden mit Parametern (in ``MP-Zeilen'' angegeben) versorgt. · Eine freie Karte (Liste der installierten Karten, ``DL-Zeile'', ``CL-Zeile'') wird gesucht. · Eine Nummer des Zielsystems wird gewählt (``D-'' und ``P-Zeile'': abgehende Verbindung). · Ein freier B-Kanal (welcher, sagt uns die Vermittlung) wird der Verbindung zugeordnet. · Die Module (und optional das Programm, via Signal) werden informiert, daß die Verbindung steht. · DDiiee DDaatteenn kköönnnneenn aauussggeettaauusscchhtt wweerrddeenn Nummern und ISDN-Karten werden im Rotationsverfahren durchprobiert; dadurch werden mehrere lokale und entfernte Nummern gleichberechtigt verwendet. Alle anderen Zeilen werden von oben nach unten durchsucht; die erste passende Zeile wird verwendet. (Beim Scannen der ``P- Zeilen'' werden Daten aus passenden Folgezeilen ebenfalls berücksichtigt -- siehe unten.) Bei Problemen (Gegenstelle besetzt...) wird bei permanenten Verbindungen ein paarmal probiert, dann werden anstehende Daten weggeworfen und die Verbindung eine bestimmte (exponentiell wachsende (ja, das muß sein) Zeit auf Eis gelegt. Ein ankommender Anruf weckt diese Verbindung selbstverständlich wieder auf. 1122..22.. DDiiee ZZeeiilleennttyyppeenn Zueinander passende Zeilen haben jeweils gleiche oder via Shell- Pattern- matching zusammenpassende -, - und , in mindestens einem Zeichen übereinstimmende -Felder, und zur aufzubauenden Verbindung passende Zeichen im -Feld etc.; siehe die unten folgenden Detailbeschreibungen. Strings in spitzen Klammern sind Platzhalter. Ein Doppelpunkt mit zwei folgenden Buchstaben ist ein Parameter, dem eine vom Parameter abhängige Anzahl Werte folgen kann. 1122..22..11.. ZZeeiilleennppaarraammeetteerr · ist jeweils ein beliebiger String. Alle für eine Verbindung verwendeten Zeilen in der Konfigdatei müssen zueinander passende Keys haben, d.h. mindestens ein Zeichen muß in allen Keys übereinstimmen. "*" paßt zu allen anderen Zeichen. Der resultierende String ist also die Schnittmenge aller Zeichen in den -Parametern aller verwendeter Konfigurationszeilen. -Zeilen mit einem Pluszeichen an erster Stelle werden nur auf Vorhandensein eines Zeichens geprüft, aber die Menge wird nicht eingeschränkt. · Beispiel: "ab" "cd" -> leere Menge "ab" "xay" -> "a" "ab" "+x" -> leere Menge "ab" "+bx" -> "ab+bx" (oder "ab+b", aber _nicht_ "ab" oder "b") "ab" "+bx" "a" -> leere Menge "ab" "+bx" "+a" -> "ab+bx+a" (oder so ähnlich) Damit läßt sich sehr flexibel einstellen, wer auf welcher Leitung / Nummer mit welchen Parametern anrufen kann. · ist der vierstellige Name der ISDN-Karte, der dieser beim Laden des Treibers verpaßt wurde; üblich ist eine dreistellike Kennung des Kartentyps und eine fortlaufende Numerierung. Ein angefügtes /# gibt an, daß die Zeile nur auf das Interface Nr. # der Karte angewendet werden kann; mehrere Ziffern sind möglich. · Beispiel: "Bin0/23" · sind einzelne Buchstaben, die der betreffenden Zeile eine Sonderbehandlung verpassen. Welche, ist jeweils beschrieben. Die Unterscheidung "mehrere gleichzeitig" oder "nur eine gleichzeitig" bei Wählverbindungen bezieht sich jeweils auf eine Art/Partner- Kombination; allgemeinere Einschränkungen werden mit einer Extra- CL-Zeile realisiert. · ist eine Folge von einem oder mehr Parameter-Wert-Angaben. (Manche Parameter haben keine Wertangabe.) AAnnmmeerrkkuunngg:: Zeilen ohne Parameter sind nicht besonders sinnvoll. 1122..22..22.. ZZeeiilleennüübbeerrssiicchhtt · ``P-Zeile'' · ``ML-Zeile'' · ``MP-Zeile'' · ``D-Zeile'' · ``TM-Zeile'' · ``DL-Zeile'' · ``DP-Zeile'' · ``R-Zeile'' · ``CL-Zeile'' · ``LF-Zeile'' · ``RP-Zeile'' 1122..22..33.. PP--ZZeeiillee -- _P_r_o_t_o_k_o_l_l · Form P · Beispiel P login * * * R :sv 0700 :nr .2 :lr /2 · allgemeine Parameter · :Ft Bei Festverbindungen angeben. (Erzwingt das Laden des "Verbindungs"handlers.) · :dI Eine Verbinung dieses Typs soll persistent sein, d.h. zwischen zwei Verbindungen wird das handhabende Programm nicht unterbrochen. Ein "``''"-Streamsmodul (_muß_ in der zu dieser ``P-Zeile'' passenden ``ML-Zeile'' auftauchen!) stellt sicher, daß das Programm davon nichts mitbekommt, außer wenn der Wiederaufbau der Verbindung nicht klappt. · :bc Zu verwendender B-Kanal, 1 oder 2 (oder 30, bei S2M). Nur für Festverbindungen interessant; im normalen ISDN managt die Vermittlung die B-Kanäle für uns. · :nj Kann der Ruf nicht angenommen werden, wird BUSY statt CallRejected gesendet. · :xi Wenn ankommende und abgehende Anrufe kollidieren, soll der ankommende abgewiesen werden. (Default: Der abgehende Ruf wird abgebrochen.) · :yi Bei einem ankommeden Ruf wird automatisch ein abgehender gestartet und der ankommende wird abgewiesen (Callback).Das Flag :kl in der ``DL-Zeile'' ist manchmal notwendig, Symptom: der abgehende Ruf wird kurz nach dem Aufbau der Verbindung abgebrochen (beobachten mit AT/W). · :bi Bei einem ankommenden Ruf, der nicht angenommen werden kann (belegt?), wird automatisch auf einer anderen Leitung zurückgerufen. :fr ebenfalls zu setzen ist meist sinnvoll. · :il Die ``CL-Zeile'' wird ignoriert. · :fX Ankommende Anrufe, die (zB wegen besetzt) abgewiesen werden, werden "schnell" abgelehnt. (Andere Geräte am Bus können nicht abheben, da die Vermittlung nicht abwartet, ob sich noch jemand meldet.) Dieses Flag ist bei aktivem Callback meistens notwendig, wenn der andere B-Kanal anderweitig beschäftig ist, weil die Vermittlung den ankommenden Ruf noch hält und den abgehenden wegen Kanalmangel abweist. :-( · :fr Abgehende Anrufe, die nicht durchkommen, werden "sofort" und "oft" wiederholt. · :ib Wenn ankommend kein B-Kanal mitgeliefert wird, wird die Verbindung abgewiesen. (zB wenn man dich den Anschluß mit einem anderen gerät teilt.) Fehlt :ib, hört die Gegenseite in diesem Fall ein normales Rufzeichen ("Anklopfen"); die Verbindung wird nach 40 Sekunden ausgelöst, wenn bis dahin kein B-Kanal frei wird.. Logischerweise darf :xi oder :yi nicht auf beiden Seiten angegeben sein..! · Spezifisch für 1TR6 und CAPI: · :sv Dienstkennung; zwei Bytes in Hex. Telefon ist 0101 und 0102; DFÜ ist 07xx (xx ist üblicherweise 00). · :pv Semipermanente Verbindung bei abgehenden Rufen. Ankommend werden SPVs automatisch unterstützt. · Spezifisch für Euro-ISDN: · :vB Bearer Capability. Hexstring, evtl. mit Maske. · :vL Lower Layer Compatibility. Hexstring, evtl. mit Maske. · :vU Upper Layer Compatibility. Hexstring, evtl. mit Maske. Was diese Dinger bedeuten, steht in der Norm Q.931 . Die wichtigsten Codes für :vB stehen am Ende dieser Anleitung (``Bearer Capability''). · Spezifisch für die Bearbeitung von Telefonnummern: · :nr Entfernte Telefonnummer. Siehe unten unter Telefonnummernverarbeitung. · :lr Lokal angewählte Telefonnummer, bzw. deren variabler Teil. · Metaparameter: · :om Die folgenden Nummernteile sind zum Rauswählen bestimmt, d.h. eindeutig. · :im Die folgenden Nummernteile sind zum Einwählen bestimmt, d.h. Muster. · :bm Die Nummernteile werden sowohl ankommend als auch abgehend verwendet. _D_e_f_a_u_l_t. · :vr Ankommend: bei fehlender externer Nummer wird die Zeile übersprungen. · :vl Dito, fehlende lokale Nummer. · :Vr Ankommend: bei mitgelieferter externer Nummer wird die Zeile übersprungen. · :Vl Dito, mitgelieferte lokale Nummer. Hierbei gilt: Angegeben werden nur die Nummernteile, die nicht in den ``D-'' bzw.``DL-Zeilen'' stehen. Das System destilliert aus den verschiedenen Angaben lokale und entfernte Nummern. · Mod: · R Die Zeile wird primär für einen Verbindungsaufbau verwendet. · M Die Zeile wird nur dann analysiert, wenn eine über ihr gefundene ``P-Zeile'' "paßt". · X Wenn diese Zeile (oder eine darüberliegende) "paßt", wird das Scannen nach weiteren passenden Angaben hier abgebrochen. · i für ankommende Verbindungen · o für abgehende Verbindungen · f für Festverbindungen · d für Wählverbindungen (nur eine gleichzeitig) · m für Wählverbindungen (mehrere gleichzeitig) · p für Verbindungsaufbau nach Bedarf · ,# Ein Verbindungsaufbauversuch wird #-mal wiederholt, bevor ein Fehler gemeldet und Daten weggeworfen werden. · wird sie als Fehler gewertet und erstmal als OFF markiert. Dasselbe passiert, wenn eine Verbindung nicht vollständig aufgebaut werden konnte, aber Kosten verursacht hat. Der Suchalgorithmus findet zunächst eine zur Verbindung passende Zeile mit R-Flag und hängt an deren Parameterliste alle ebenfalls passenden Zeilen mit M-Flag an (dabei werden bereits angegebene Werte beibehalten, die spezifischen Einträge also nach oben!), bis er auf eine Zeile mit X-Flag trifft. 1122..22..44.. MMLL--ZZeeiillee -- _M_o_d_u_l_l_i_s_t_e Hiermit wird angegeben, wie die Karte eingestellt und welche Streams- Module für einen B-Kanal verwendet werden müssen, um zwischen diesem und einer Anwendung zu vermitteln. Die Beschreibung der verfügbaren Module folgt weiter unten; als erstes "Modul" wird der Modus angegeben, in den der B-Kanal beim Verbindungsaufbau geschaltet werden soll. Konzeptuell sind diese Module gestapelt; "unten" ist die Karte, "oben" das Anwendungsprogramm. Zwischen diesem und dem letzten Modul in der obigen Liste wird stets ein Spezialmodul namens "``''" eingeschoben, das die Meldungen zum Verbindungsaufbau etc. so verarbeitet, daß die Anwendung davon nichts mitbekommt. "``''" darf nie in einer ``ML-Zeile'' erscheinen. · Form ML · Beispiel ML login * * * - frame x75 t70 · Mod · i für ankommende Verbindungen · o für abgehende Verbindungen · f für Festverbindungen · d für Wählverbindungen (nur eine gleichzeitig) · m für Wählverbindungen (mehrere gleichzeitig) · p für Verbindungsaufbau nach Bedarf · ,# Verzögerung bei Verbindungsende, in Sekunden, für sauberes Herunterfahren des B-Kanalprotokolls. · Module · trans volltransparente Verbindung. Es wird ständig ein synchroner 64-kBit- Datenstrom übertragen. Wenn nichts gesendet wird, werden 1-Bits übertragen. (Der Zustand "wenn nichts empfangen wird" kann nicht vorkommen!) · transalaw wie oben, aber statt Einsen wird 0xAA gesendet ("Ruhepegel" bei A- Law- Sprachkodierung). Das Senden von Rauschen, wie auf gemultiplexten Satellitenleitungen, habe ich mir erspart... · transv110 wie oben, aber statt Einsen werden leere V.110-Frames (38.4 kBaud) gesendet. · frame Standardmodus für Datenübertragung; die Karte interpretiert den B- Kanal als HDLC-Datenstrom, inkl. 0-Bit-Einschieben nach 5 1-Bits, Prüfsumme, etc. · frame16 16-bit breite Datenübertragung auf entsprechenden Festverbindungen. Funktioniert nur auf dem ersten B-Kanal (der Modus greift sich einfach beide Kanäle) und (unter anderem wegen möglichen Laufzeitunterschieden) nicht bei zwei Wählverbindungen zur gleichen Zielstation. //** ddiiee ffoollggeennddeenn MMooddii ssiinndd nnoocchh nniicchhtt iimmpplleemmeennttiieerrtt,, bbzzww.. nniicchhtt ggeetteesstteett **// · frame0 Wie 'frame', aber zusätzlich wird 1-Bit-Einschieben nach 7 0-Bits aktiviert. Für Leitungen in manche Ecken der USA, die keine Nulloktetts auf der Leitung zulassen (weil sie keinen externen Takt verwenden). · framehi wie 'frame', nur werden nur die oberen 7 Bits verwendet. · framelo eine 56-kBaud-Leitung umsetzt. · ppp PPP. Momentan (leider) nur für aktive Karten, die PPP on-board können. 1122..22..55.. MMPP--ZZeeiillee -- _M_o_d_u_l_p_a_r_a_m_e_t_e_r Mit dieser Zeile können Module parametrisiert werden, um ihre interne Arbeitsweise so einzustellen, daß sie korrekt mit der Gegenseite zusammen- arbeiten. Die möglichen Parameter sind unter den einzelnen Modulen, unten, beschrieben. · Form MP · Beispiel MP login * * * - proto :bk 0 :sg 0 MP login * * * - x75 :cm 3 · Mod: · i für ankommende Verbindungen · o für abgehende Verbindungen · f für Festverbindungen · d für Wählverbindungen (nur eine gleichzeitig) · m für Wählverbindungen (mehrere gleichzeitig) · p für Verbindungsaufbau nach Bedarf · u für Parameter, die nur beim Programmstart gesetzt werden (x75-Kram zB) · a für Parameter, die bei Neueinlesen der Konfigdaten gesetzt werden 1122..22..66.. DD--ZZeeiillee -- _D_i_a_l Angabe der Telefonnummer, unter der eine Gegenstelle erreichbar ist bzw. mit der sie sich bei ankommenden Rufen meldet. Festverbindungen haben natürlich keine Nummer. · Form D · Beispiel D * subnet * * - +49=721-961252. D * Any-D * * I +49=* D * Any * * I +* D tcp xlink * Tel2 L · Mod · i für ankommende Verbindungen · o für abgehende Verbindungen · f für Festverbindungen (der zu verwendende B-Kanal steht in der ``P-Zeile'') · d für Wählverbindungen (nur eine gleichzeitig) · m für Wählverbindungen (mehrere gleichzeitig) · p für Verbindungsaufbau nach Bedarf · ,# Dies ist eine Backup-Nummer der Priorität #. Zuerst werden alle Nummern mit Priorität Null (oder ohne Angabe) probiert, dann die nächsthöhere Priorität, etc. Der Verbindungsversuchszähler wird nach jedem Prioritätswechsel zurückgesetzt. 1122..22..77.. TTMM--ZZeeiillee -- _T_i_m_e Schlüssel für Zeiten. Zu der angegebenen Zeit werden nur Verbindungen zugelassen, deren -Parameter mit dem angegebenen Key kompatibel ist. AAcchhttuunngg:: eess wwiirrdd iimmmmeerr ddeerr eerrssttee ggeeffuunnddeennee TTMM--EEiinnttrraagg vveerrwweennddeett!! · Form TM · Beispiel TM abcde SaSu,AmFr18-08 · Anmerkung Die gefundenen Schlüsselwerte werden geODERt, d.h. TM ab Wk TM cd 08-10 wird, wenn am Montag um neun Uhr aufgerufen, zu "abcd" aufgelöst. 1122..22..88.. DDLL--ZZeeiillee -- _D_i_a_l _L_o_c_a_l Eigene Telefonnummer. Diese Zeile wird verwendet, um die kürzestmögliche Rufnummer für abgehende Verbindungen zu finden und um die verwendeten Protokolle zu spezifizieren. · Form DL · Beispiel DL * Tel? +49=911-995962. :pr 0 :sp 65 :pr 63 Im Beispiel sind alle Karten, auf die "Tel?" paßt, an einer ISDN- Leitung mit dieser Nummer angeschlossen. · allgemeine Parameter DDiiee RReeiihheennffoollggee ddeerr PPaarraammeetteerr iisstt wwiicchhttiigg.. · :pp Punkt-zu-Punkt-Verbindung, feste TEI (0x00). Vorsicht: Anlagenanschluß wird vom 1TR6-Treiber nicht und vom Euro- Treiber nur unvollständig unterstützt. · :mp Verbindung am Bus, variabler TEI-Identifier. Bei manchen 1TR6- Vermittlungen und Nebenstellenanlagen notwendig, in der DSS1-Norm vorgeschrieben. · :mq Verbindung am Bus, fester TEI-Identifier. Default, weil es an vielen Anlagen besser funktioniert als :mp. · :mt Verbindung am Bus, feste TEI(0x12). In Spezialfällen notwendig. · :de Debugging, macht D-Kanal-Datenaustausch beobachtbar (mit AT/W). Vorsicht: Diese Option verlangsamt das gesamte ISDN-System, auch wenn niemand mit AT/W zusieht. Die beobachteten Daten sind bei manchen aktiven Karten entweder verzögert, oder sie können nicht dargestellt werden! · :ud XX Verzögerung zwischen dem Verbindungsaufbau (D-Kanal) und dem eigentlichen Datenaustausch (B-Kanal). Zehntelsekunden; max. 2 Sekunden; Default 1/4 Sekunde. Mit :ud 0 geht der Verbindungsaufbau entweder etwas schneller, oder das erste Paket wird verschluckt, oder die Vermittlung kommt durcheinander und die Verbindung ist tot. :-( · :pr 0 Normaler ISDN-D-Kanal, angeschlossen am Netz oder an einer Telefonanlage. Darf nur zusammen mit TEI-Handler (:pr 63) verwendet werden. · :kl Level-2-Verbindung zur Vermittlung nicht trennen. Bei Punkt-zu- Punkt-Verbindungen und bei entsprechend konfigurierten ISDN- Anschlüssen ("Dauerüberwachung" oder sowas ähnliches) notwendig. · :cl Level-2-Verbindung zur Vermittlung trennen, wenn keine Verbindung besteht. _D_e_f_a_u_l_t. EEnnttwweeddeerr ::sspp 88 ooddeerr ::sspp 6655 mmuußß aannggeeggeebbeenn wweerrddeenn,, NNIICCHHTT bbeeiiddeess!! · :sp 8 DSS1, Euro-ISDN. euro · :b1 an manchen Nebenstellen zur korrekten Nummernerkennung notwendig. Einschalten, wenn die Nebenstellennummer nicht mit . oder / eingeleitet wird. · :b2 anscheinend senden manche Idioten (holländische PTT?) die Gebühreninfo in DISPLAY- Datenblöcken. Grummel hoch drei. · :sp 65 1TR6, deutscher Standard. german · :ai Ankommenden Anruf mit dem ISDN-Äquivalent von "RINGING" beantworten, dann prüfen ob der Anruf angenommen werden kann. Notwendig bei langsamen Rechnern. · :ad Ankommende Anrufe erst prüfen, dann annehmen (oder auch nicht). _D_e_f_a_u_l_t. · :pr 63 TEI-Handler (Transport Endpoint Identifier). · :ti TEI sofort zuordnen lassen. Notwendig bei langsamen / sehr beschäftigten Rechnern und bei manchen Telefonanlagen. · :td TEI beim ersten Verbindungsaufbau zuordnen lassen. Default. · :pr 64 Festverbindung: kein D-Kanal. · :pr 65 Intelligente Karte mit CAPI-1.x-Schnittstelle. In der Konfiguration verhält sich eine CAPI-Karte ansonsten wie der 1TR6-Treiber, und zwar AUCH DANN WENN DAS TEIL AM EURO-ISDN HÄNGT. · :pb Die Karte hängt an einem Anlagenanschluß / S2M und verhält sich wie eine Nebenstellenanlage. · :sp 0 Bintec-Karte. bintec Auf diese Karte muß zunächst boot.68k und dann entweder bri.68k oder pmx.68k geladen werden (``LF- Zeile''). · :sc X Die folgenden Optionen betreffen nur das Xte Interface auf der Karte. X in 1..4. · :lp X X X CAPI-Bitmasken für EAZ, Service, Infos. Hexadezimal. _D_e_f_a_u_l_t_: _0_3_F_F _E_7_B_F _0_0_3_F. · :st XXXXX Protokollstack XXXXX laden. Siehe Handbuch zur Karte. _D_e_f_a_u_l_t _i_s_t _u___1_t_r_6___p_m_p _(_w_e_n_n _"_g_e_r_m_a_n_" _u_n_d _n_i_c_h_t _"_e_u_r_o_" _i_n _c_o_n_f_i_gconfig.data angegeben wurde) oder u_dss1_pmp (sonst)/. · :ea N NNN EAZ N auf lokale Nummer (MSN) NNN mappen. _D_e_f_a_u_l_t _i_s_t _d_i_e _l_e_t_z_t_e _Z_i_f_f_e_r _d_e_r _N_u_m_m_e_r. Nicht bei :pb verwenden. · :lw X Warte bis zu X Sekunden auf nachgewählte Ziffern. Nur bei :pb verwenden. · Anmerkung 1 Zusätzlich werden in der DL-Zeile die Protokolle beschrieben, mit denen der ISDN-Treiber mit der Karte redet. Diese Protokolle müssen natürlich auch in den Treiber eingebaut werden, und zwar in der Datei config/config.data, Eintrag PROTOCOLS (spitze Klammer) und SUBPROTOCOLS (eckige Klammer). Beispiel · 1TR6: german DL * Tel0 +49=911-23456. :pr 0 :sp 65 :pr 63 · Euro-ISDN: euro DL * Tel0 +49=911-34567. :pr 0 :sp 8 :pr 63 · Festverbindung: DL * Tel2 - :pr 64 · intelligente Karte mit CAPI: bintec DL * Bin0 +49=911-45678. :pr 65 :sp 0 · Anmerkung 2 Hat eine Karte mehrere Rufnummern (MSNs), werden die Protokolle nur in der ersten DL-Zeile angegeben. Bedeutung der Spezialzeichen in der Nummer: Siehe unter ``Dial Prefix''. 1122..22..99.. DDPP--ZZeeiillee -- _D_i_a_l _P_r_e_f_i_x Definition von Nummernpräfixen, um Vermittlungsbereiche erreichen zu können. · Form DP · Beispiel DP Tel? +00=0- +00=0- · Anmerkung Das erste Präfix ist für abgehende, das zweite (das weggelassen werden kann) für ankommende Verbindungen; 1TR6-Nebenstellenanlagen wollen beim Wählen typischerweise eine vorgestellte Null o.ä. sehen, die aber bei ankommenden Gesprächen nicht mit angezeigt wird. (Ich habe keine Ahnung, wie Gespräche innerhalb einer Anlage signalisiert werden; zum Glück stirbt 1TR6 langsam aber sicher aus.) Die Zeichen sind _immer_ "+" für internationale Verbindungen, "=" für nationale Verbindungen, "-" für Ortsverbindungen, "." für Nummern an einer Nebenstellenanlage und "/" für EAZs/MSNs etc. Der Unterschied zwischen "." und "/" ist, daß Nummern einer Nebenstellenanlage direkt angerufen werden können, während man für eine Verbindung zu einer anderen MSN am gleichen Basisanschluß die Teilnehmernummer mitwählen muß. In der ``DP-Zeile'' erscheint folglich niemals ein "/". Beispiel: Eine Konfiguration D ... -1234/[456] DL... -23456 DP... - MP... :nr /5 würde die Nummer 12345 wählen. Siehe auch unten unter "``Bugs anderer Leute''". 1122..22..1100.. RR--ZZeeiillee -- _R_u_n Hiermit wird ein Programm (plus Parameter) angegeben, das bei ankommenden oder abgehenden Gesprächen aufgerufen wird. · Form R · Beispiel R login * * * root IDUST /bin/login · Environment Im Environment dieses Programms werden folgende Variablen abgelegt, wenn die Parameter bekannt sind: · SITE · PROTOCOL · CLASS · PHONE Telefonnummer der Gegenstelle, so wie sie ankam bzw. gewählt wurde · LPHONE Lokale Nummer bzw. deren Endteil · DIRECTION "IN" oder "OUT" · DEVICE im Normalfall: /dev/ttyiXX · Mod · Anruf- beantworter nicht sofort abheben zu lassen. · ,n Wenn eine automatische Verbindung nicht hergestellt werden konnte, wird nach n Sekunden der Verbindungsaufbau wieder erlaubt. (Noch nicht implementiert) · $ Die Befehlszeile wird nicht direkt ausgeführt, sondern der Shell übergeben. · E Beim Auftreten eines Fehlers wird dieses Programm deaktiviert. (Reaktivieren: AT/R.) · D /dev/ttyiXX wird angelegt und nach Programmende gelöscht. · F Das Programm wird sofort gestartet, und die Verbindung wird aufgebaut. Interessant insbesondere bei Festverbindungen und SPVs. · L nur der angegebene Benutzer kann die Verbindung aktivieren. · Q strace(1) wird automatisch auf den neuen Prozeß losgelassen. · R kein Dialout via ATD möglich. · S stderr des Programms liegt auf ISDN (sonst: stderr des Treiberprogramms) · T Verbindung im Terminalmodus (ankommend, also zB beim Start von /bin/login). · U ein Eintrag in /etc/utmp wird angelegt (wichtig zB für login). · B Die Verbindung wird beim Hochfahren des Managers automatisch aufgebaut. · i für ankommende Verbindungen · o für abgehende Verbindungen · f für Festverbindungen. "B" wird hier normalerweise ebenfalls angegeben. · d für Wählverbindungen (nur eine gleichzeitig) · m für Wählverbindungen (mehrere gleichzeitig) · p für Verbindungsaufbau nach Bedarf ("reconn"-Modul nicht vergessen!); wird beim Programmstart automatisch mitgestartet. Die eigentliche ISDN-Verbindung wird hierdurch _nicht_ aufgebaut, dafür ist "B" gedacht. · Anmerkung Ein Dialout zu einem System mit ``R-Zeile'' ist also direkt nicht möglich, da der Datenaustausch zum betreffenden Programm geht. Eine ``R-Zeile'' wird ignoriert, sobald das betreffende Programm einen Fehler gemeldet hat (Exitstatus != 0) oder bei der Verbindungssteuerung ein Fehler aufgetreten ist. 1122..22..1111.. CCLL--ZZeeiillee -- _C_o_n_n_e_c_t_i_o_n _L_i_m_i_t Begrenzt die Zahl der für einen gegebenen Verbindungstyp verwendbaren B-Kanäle. Ueber das Limit hinausgehende Anrufe werden mit BUSY abgelehnt, es sei denn in der entsprechenden P-Zeile steht der entsprechende Parameter. · Form CL · Beispiel CL * * * Tel? 2 · Anmerkung In der Regel muß diese Zeile nicht benutzt werden, wenn bei einem Basisanschluß beide Kanäle benutzt werden sollen. 1122..22..1122.. LLFF--ZZeeiillee -- _L_o_a_d _F_i_l_e Lädt die Datei auf die (aktive) Karte. Mehrere LF-Zeilen können angegeben werden (in der richtigen Reihenfolge! Doku beachten!). Die maximal mögliche Segmentgröße ist 4096. Der Delay gibt an, wie lange das Programm nach dem Laden dieser Datei mit dem nächsten Schritt warten soll (Karte macht Speichertest über 8 MB, und ähnliche Feinheiten). · Form LF · Beispiel nicht vorhanden 1122..22..1133.. RRPP--ZZeeiillee -- _R_u_n _P_r_o_g_r_a_m Hiermit wird ein Programm (plus Parameter) angegeben, das bei Eintreten eines bestimmten Zustands einer Verbindung gestartet wird. · Form RP · Beispiel RP login * * * root IDUST$u echo "Login von $PHONE auf $DEVICE" >>/var/log/isdn.use · Parameter Siehe auch ``R-Zeile''. Zusätzliche Flags sind · c Stdin/out des Programms wird auf ein freies ISDN-Device gelegt. (Sonst: /dev/null.) · s schicke keine Signale · REASON (Environmentvariable) · u Start nach erfolgtem Aufbau der Verbindung · d Start bei Abbau einer Verbindung · f Start nach erfolglosem Verbindungsversuch (abgehend) · x Start bei temporärer Deaktivierung eines Interface (zu viele Versuche), anstehende Datenpakete werden weggeworfen · y Start bei Reaktivierung des Interface · i Start bei Aufruf des Verbindungshandlers (zB des "``''"-Programms) · r Start bei abgelehntem Anruf · t Start nach Tod des Verbindungshandlers · k Start bei laufenden Gebühreninformationen (während oder nach der Verbindung) · l Start bei endgültigen Gebühreninformationen (nach Verbindungsende) Die folgenden Flags werden bei Programmen übergeben, die via R- Zeile gestartet wurden: · B Start beim Booten oder bei Reload der Konfigdatei · I Start bei ankommendem Anruf Ein mit "u" gestartetes Programm bekommt SIGHUP gesendet, wenn es bei Verbindungsende noch läuft; dito ein mit "d" gestartetes Programm zu Beginn des mächsten Verbindungsaufbaus. Einem Programm, das kontinuierlich läuft, wird bei jedem Statuswechsel SIGUSR1 gesendet. SIGQUIT wird an alle Programme gesendet, die laufen, wenn die zugeordnete Verbindung beendet wird. · Environment · COST für die laufende Verbindung angefallene Kosten · CCOST insgesamt angefallene Kosten · CAUSE Aktueller Fehlerzustand (bei · Anmerkung VVoorrssiicchhtt:: Mehrere Programme unter demselben Flag laufen zu lassen funktioniert nur dann sicher, wenn sich alle (möglicherweise bis auf eines) ziemlich schnell wieder beenden, sonst gibt es Probleme (mehrfach oder nicht gestartete Programme). 1122..33.. MMoodduullee Für alle Module gilt: :XX Funktion eines Parameters mit Wertangabe :YY Dito, ohne Wertangabe 1122..33..11.. MMoodduullüübbeerrssiicchhtt · ``'' · ``'' · ``'' · ``'' · ``'' · ``'' · ``'' · ``'' · ``'' · ``'' · ``'' · ``'' · ``'' · ``'' · ``'' 1122..33..22.. aallaaww -- _A_-_L_a_w_-_C_o_d_e_r Wandelt einen A-Law-Datenstrom in einen 8-Bit-Datenstrom. Dabei werden nur die Bytes umkodiert, die Daten aber nicht auf 12 Bit aufgeblasen. Gibt nach oben Bytes _mit_ Vorzeichen weiter. Zusätzlich können für beide Richtungen Schwellwerte definiert werden, unterhalb derer keine Uebertragung zugelassen wird, um Gesprächspausen herauszufiltern. Hierzu muß man wissen, daß dieses Modul nicht "alaw" (vom ISDN) in linear codiertes PCM um, wie man vielleicht annehmen möchte. Es erzeugt signed 8-bit, logarithmisch codierte Werte. Zur Wandlung von/zu normalem, linearem PCM sind in jedem Fall ttoossnndd und ttooaallaaww zu verwenden. · Beispiel nicht verfügbar · Parameter · :ro 0-127 Ansprechschwelle beim Empfang. Null schaltet permanent auf "Durchgang". · :rx 0-127 Abschaltschwelle. Töne werden blockiert, wenn mehr als ..: · :rc 1-32767 aufeinanderfolgende Samples unterhalb der :rx-Schwelle liegen. :xo :xx :xc wie :ro :rx :rc, aber für den Sendeteil. 1122..33..33.. pprroottoo -- _B_e_f_e_h_l_s_i_n_t_e_r_p_r_e_t_e_r Sitzt immer automatisch zuoberst auf dem durch den ISDN-Treiber definierten Stream. Interpretiert im Befehlsmodus die eingetippten Zeichen und schickt sie zeilenweise an das Managementprogramm. · Beispiel nicht verfügbar · Parameter · :cr 0-255 0x13 ASCII Carriage return · :lf 0-255 0x10 ASCII line feed · :bs 0-255 0x08 ASCII Backspace · :cc 0-255 0x03 Zeile löschen (Abbruch, CTRL-C) · :ca 0-2 2 · 0: kein Hangup · 1: Hangup bei NO CARRIER · 2: Hangup bei CONNECT...NO CARRIER · :bk 0-1 1 BREAK bewirkt Rückkehr in den Befehlsmodus. · :sg 0-1 0 wenn 1, sende SIGUSR1 beim Aufbau der Verbindung und SIGUSR2 beim Abbau der Verbindung Die folgenden Codes werden normalerweise vom L4-Treiberprogramm gesendet: · :on schaltet auf Datenübertragung · :of schaltet auf Befehlsmodus · Anmerkung Im Online-Modus wird keine Spezialzeichenfolge wie etwa "+++" gesondert interpretiert; stattdessen wird ein _BREAK_ zum Zurückschalten verwendet. · Systemmeldungen Diese werden zwischen dem "proto"-Modul und dem ISDN-Treiber ausgetauscht und informieren diese und die dazwischenliegenden Module vom Zustand einer Verbindung. "->L2" und "->Cmd" deuten an, dass die Meldung in Richtung ISDN-Treiber oder "proto"-Modul gesendet werden. · in die Verbindung wird ankommend sein (->Cmd) · ou die Verbindung wird abgehend sein (->Cmd) · os X Reserviert zusätzlichen Pufferplatz am Anfang von Datenblöcken. (Separat für beide Richtungen, wird automatisch initiiert.) Module inkrementieren X, um die Zahl der Bytes, die sie selbst maximal als Header vor die Daten stellen, und reservieren eine entsprechende Anzahl beim Anfordern eines neuen Datenblocks. "os" signalisiert außerdem, daß der Aufbau des Modulstacks abgeschlossen ist. Module können sich also nach der Weitergabe dieser Meldung untereinander unterhalten, wenn nötig. · li B-Kanal ankommend geschaltet, zB Wählton beim Telefon (->Cmd) · hl B-Kanal-Durchschaltung akzeptiert (->L2) · co B-Kanal bidirektional geschaltet (->Cmd) · hc Verbindung hergestellt (->L2) · wi Befehl zur Herstellung einer Unterbrechung (->Cmd) · is Verbindung unterbrechen (->L2) · is Verbindung ist unterbrochen (->Cmd) · hi Rückmeldung: Verbindung unterbrochen(->L2) · wd Befehl zum "sauberen" Abbau der Verbindung(->Cmd) · di Verbindung abbauen (->L2) · di Verbindung ist abgebaut (->Cmd) · hd Rückmeldung: Verbindung ist getrennt, evtl wird NO CARRIER gemeldet. Wer beobachten will, wie genau diese Meldungen transpoortiert werden, verwende ein ``xstrlog-Modul''. 1122..33..44.. ssttrr__iiff -- _S_t_r_e_a_m_s_-_>_I_P_-_W_a_n_d_l_e_r Implementiert ein TCP/IP-Modul. Daten werden nicht in Richtung Anwenderprogramm, sondern in das TCP/IP-Networking des Kernels umgeleitet. · Beispiel nicht verfügbar · Parameter · :mt 120-4096 512 MTU des Treibers. (Die MRU hängt vom ISDN- Kartentreiber ab.) Paketformat: · :.N TCP/IP (Default). · :.E Ethernet-Paketheader. · :.P PPP-Paketheader. · :eT xxxx xxxx: hexadezimal. Angabe des übertragenen Pakettyps (:.N). TCP/IP ist 0800 _D_e_f_a_u_l_t. Damit können zB statt "nackter" IP-Pakete ebensolche Appletalk-Pakete übertragen werden. · Anmerkung ioctl(x,SIOCGETU,int) ioctl-Aufruf zur Uebertragung der Unit-Nummer ("strX", 0 <= X <= 15) an ein Anwenderprogramm. Das Programm kann damit die IP-Adressen auf beiden Seiten des Links konfigurieren. Ein einfaches Treiberprogramm, "``''", dem lokale und entfernte IP- Adresse übergeben werden, ist im Verzeichnis ``''. 1122..33..55.. ffaakkeehh -- _C_i_s_c_o_-_H_D_L_C_-_M_o_d_u_l Verwendet das Cisco-eigene "HDLC"-Protokoll. Auf der Gegenseite muß (noch... hat jemand Doku zu den Tieren?) "no keepalives" konfiguriert werden. Die Option für das Paketformat muß genauso wie bei ``str_if'' eingestellt sein! · Beispiel nicht verfügbar · Parameter · :.N TCP/IP (Default). · :.E Ethernet-Paketheader. 1122..33..66.. iippmmoonn -- _I_P_-_M_o_n_i_t_o_r Loggt IP-Pakete mit. Das Programm "monitor" liest dieses Protokoll aus dem Kernel. Die Option für das Paketformat muß genauso wie bei ``str_if'' eingestellt sein! · Beispiel nicht verfügbar · Parameter · :.N TCP/IP (Default). · :.E Ethernet-Paketheader. · :.P PPP-Paketheader. 1122..33..77.. rreeccoonnnn -- _V_e_r_b_i_n_d_u_n_g_s_h_a_l_t_e_r Verhindert (in Zusammenarbeit mit korrekten ``P''- und ``R''-Zeilen, siehe oben), daß eine Verbindungstrennung sich auf eine Anwendung auswirkt; die Verbindung wird automatisch neu aufgebaut, sobald wieder Daten anstehen. · Beispiel nicht verfügbar · Parameter · :pf Das jeweils erste Datenpaket (das, das zum Verbindungsneuaufbau geführt hat), wird in den Syslog mitgeschrieben. · :nf Es wird nicht mitgeschrieben. (Default.) · Anmerkung Sollte logischerweise nicht unterhalb von X.75 oder ähnlichen Modulen zur Übertragungssicherung eingesetzt werden, weil die ständig Daten austauschen, um zu prüfen, ob die Gegenstelle noch da ist. 1122..33..88.. ttiimmeerr -- _Z_e_i_t_b_e_g_r_e_n_z_e_r Bricht die Verbindung ab, wenn eine bestimmte Zeit lang keine Daten übertragen wurden. · Beispiel nicht verfügbar · Parameter · :ti 60 Abstand zwischen den möglichen Abbruchpunkten (zB Gebührenzeittakt) · :to 55 Zeit zwischen Verbindungsaufbau und erster Messung · :tw 0 wenn zum Meßzeitpunkt soviele Sekunden nichts gesendet wurde, wird die Verbindung abgebrochen · :tr 0 dto., gelesen; eine der beiden Bedingungen reicht aus. · :li unterbrochen wird nur bei ankommenden Verbindungen. · :lo dto, bei abgehenden Verbindungen · :lb dto, beide Verbindungsarten (Default). · Anmerkung Alle Zeitangaben sind in Sekunden. Vorsicht: Es macht absolut keinen Sinn, den Timer unterhalb von übertragungssichernden Modulen wie x.75 oder gar Datenstrom-Modulen wie v110 anzuordnen. Der Timeout sollte mindestens dreimal so groß sein wie die Zeit, die typischerweise zum Verbindungsaufbau benötigt wird, weil es sonst scheußliche Interaktionen mit den TCP-Retryalgorithmen geben kann. _A_n_m_e_r_k_u_n_g _d_e_s _S_e_t_z_t_e_r_s: Ist mir persönlich passiert, weil ich der Telekom nichts schenken wollte. Ich habe dadurch aber innerhalb von 20 Minuten ca. 330 einheiten weggeworfen - ISDn macht's möglich. 1122..33..99.. tt7700 -- _T_._7_0 Implementiert das T-70-Minimalprotokoll -- spaltet abgehende Dateneinheiten auf, wenn sie zu groß sind, und faßt ankommende zusammen, wenn das entsprechende Bit im T70-Header gesetzt ist. · Beispiel nicht verfügbar · Parameter · :mt 0,4-4096 256 Maximale Datenblockgröße (exklusive T70-Header (2 Bytes)). ":mt 0": Maximum "unendlich". 1122..33..1100.. ffaakkeecceepptt -- _C_E_P_T Erzeugt das von T-Online erwartete, vom T70-Standard abweichende Protokoll. Abgehende Dateneinheiten werden wie bei T.70 aufgespalten, bei ankommenden Dateneinheiten wird nur der Protokollheader entfernt. · Beispiel nicht verfügbar · Parameter · :mt 1-4096 128 Maximale Datenblockgröße. Darf fuer T-Online auf keinen Fall 128 ueberschreiten. · Anmerkung TTOODDOO:: Momentan wird die Aufspaltung _nicht_ markiert -- soll/darf das passieren, wenn ja wie? 1122..33..1111.. vv111100 -- _V_._1_1_0 Implementiert V.110 im 38400-Baud-Modus. Mehr oder weniger ungetestete Experimentierversion. Warnung: Exzessive Kernelbelastung durch Bitschieberei etc. Für ernsthafte Anwendungen braucht es einen entsprechenden Wandler in Firmware / Hardware auf der Karte. · Beispiel nicht verfügbar · Parameter nicht nötig 1122..33..1122.. bbuuffffeerr -- _D_a_t_e_n_p_u_f_f_e_r Die meisten Module haben einen ziemlich kleinen Datenpuffer (ca. 200 Bytes). Wenn das zuwenig ist, zB beim Empfangen von Audiodaten oder beim Weiterleiten von IP-Paketen, kann ein Puffer zwischengeschaltet werden. · Beispiel nicht verfügbar · Parameter · :br XXX Puffergröße beim Lesen / Empfangen · :bw XXX Puffergröße beim Schreiben / Senden · :bb XXX Puffergröße beim Lesen und Schreiben Wertebereich für die Puffergröße: 10 bis 16*1024 Bytes. _D_e_f_a_u_l_t: 4 kBytes. Der Puffer füllt sich bis zur angegebenen Größe und leert sich bis auf 1/4 dieses Werts. 1122..33..1133.. rraattee -- _D_a_t_e_n_r_a_t_e Begrenzt die mögliche Übertragungsrate. · Beispiel nicht verfügbar · Parameter · :ri XXX Begrenzung der ankommenden Daten auf XXX bytes pro Sekunden. · :ro XXX dito, gesendete Daten. · :rb XXX dito, beide Richtungen. · Anmerkung "Überschüssige" Daten werden zunächst gepuffert, dann weggeworfen; daher ist es sinnvoll, "rate" vor "x75" zu verwenden. Bei TCP/IP, das sowieso keinen gesicherten Kanal voraussetzt, geht es natürlich auch ohne X75. 1122..33..1144.. vvaannjj -- _V_a_n_-_J_a_c_o_b_s_e_n_-_K_o_m_p_r_e_s_s_i_o_n Komprimiert TCP-IP-Header. Option für das Paketformat muß genauso wie bei ``str_if'' eingestellt sein! · Beispiel nicht verfügbar · Parameter · :sz tx rx 16 16 Zahl der gleichzeitig gecachten Verbindungen. Zwischen 16 und 128; jeweils Sende- und Empfangsrichtung. (noch nicht implementiert) · :ac Aktiv komprimieren. _D_e_f_a_u_l_t _b_e_i _a_b_g_e_h_e_n_d_e_n _V_e_r_b_i_n_d_u_n_g_e_n. · :pa Komprimieren nur, nachdem ein komprimiertes Paket ankam. _D_e_f_a_u_l_t _b_e_i _a_n_k_o_m_m_e_n_d_e_n _V_e_r_b_i_n_d_u_n_g_e_n. · :.N TCP/IP (Default). · :.P PPP-Paketheader. · Anmerkung Sollte nur auf einer gesicherten Verbindung verwendet werden. 1122..33..1155.. xx7755 -- _X_._7_5 Implementiert Ebene 2 des X75-Protokolls. Das Framing (Prüfsumme, 1-Stopfen, Interframezeichen etc.) wird von der Hardware auf der Karte erledigt. · Beispiel nicht verfügbar · Parameter · :nk 1-7 (127) 1 Parameter "k" -- Anzahl der maximal ausstehenden Datenblöcke. (Die Länge dieser Blöcke wird nicht begrenzt -- siehe T70-Modul) · :wd 2-Byte-Befehlswörter: SABME, max(k) 127. · :nw 1-Byte-Befehlswörter: SABM, max(k) 7. · :n1 1-100 3 Parameter "N1" -- Anzahl der Wiederholungen von Poll-Frames, bis ein Fehler angenommen wird. · :t1 1-100 10 Parameter "t1" -- Timeout für unbestätigte Daten- und Poll-Frames in Zehntelsekunden. · :t3 1-1000 100 Parameter "t3" -- Timer für Test, ob die Verbindung noch aktiv ist. In Zehntelsekunden, muß > 2*t1 sein. · :ad 0-255 0-255 (dieser Parameter braucht zwei Wertangaben!) 1 3 Adreßbytes für Befehls- und Meldungsframes. Sollten das niederwertige Bit gesetzt haben und verschieden sein. Wegen Abwärtskompatibilität mit dummen Implementierungen werden "falsche" Einstellungen akzeptiert. · :po Pollmodus -- löst beim Empfang einer RNR-Meldung sofort einen RR/RNR-Befehl aus. Für Kompatibilität mit dummen Gegenstellen, die vergessen, sich mit RR bereit zu melden, nachdem sie RNR gesendet hatten. · :np schaltet den Pollmodus ab (Default). · :cm 012348 1 wann die X75-"Verbindung" aufgebaut wird · 0 gar nicht -- es wird angenommen, die Verbindung existiert. Zur Kompatibilität mit dummen Gegenstellen, die sich auf die Steuerung im D-Kanal verlassen. · 1 Baldmöglichst (abgehend) · 2 Baldmöglichst (ankommend) · 3 Baldmöglichst (an- und abgehend) · 4 wenn der erste Datenblock zur Übertragung ansteht. · 8 gar nicht -- es werden UI-Frames verwendet. 1122..33..1166.. pprr__oonn Spezialmodul, um die "Verbindung hergestellt"-Kennung auf einem Stream abzusenden, der nicht über ISDN arbeitet. Wird zB vom ``''-Programm verwendet. · Beispiel nicht verfügbar · Parameter nicht verfügbar 1122..44.. BBeeiissppiieellkkoonnffiigguurraattiioonneenn Diese Beispielkonfigurationen dienen in erster Linie dem Verständniss von einzelnen speziellen Konfigurationsfällen. In den Konfigurationen sind lediglich die für diesen speziellen Fall notwendigen Zeilen vorhanden. 1122..44..11.. SSttaannddaarrddkkoonnffiigguurraattiioonn Die Standardkonfiguration ist bei den Sourcen dabei und befindet sich in dem Verzeichnis "tools" als Datei "isdn.conf". 1122..44..22.. XX..7755 Die Nutzung der folgenden Konfiguration ist in ``Terminal'' beschrieben. #Beispielkonfiguration fuer einen X.75-Eintrag in der Konfigurationsdatei #Protokoll: DSS1/Euro-ISDN #erstellt von: Kai Dupke, dupke@koma.han.de #am Tue Jan 30 19:24:58 MET 1996 # #R R login * * * root TSUDi /bin/login #P P login * * * RXio :vB 8890 #ML ML login * * * -,3 frame buffer x75 #MP MP login * * * - x75 :nk 6 MP login * * * - proto :sg 0 :ca 2 :bk 1 # Remote phone numbers. # The "unknown" entry is used when no number is transmitted. #D D login hbb * * - +49=511-9630173 D login unknown * * - +* # Local numbers. #DL DL * Tel0 +49=511-499770 :pr 0 :sp 8 :pr 63 1122..44..33.. BBTTXX//XXCCeepptt Die Nutzung der folgenden Konfiguration ist in ``BTX/XCept'' beschrieben. 1122..44..33..11.. BBeeiissppiieell #Beispielkonfiguration fuer einen BTX/XCept #Protokoll: DSS1/Euro-ISDN #erstellt von: Edmund Mergl, mergl@sls.s.bawue.de # #P P cept cept * Tel0 RFX :vB 8890 :vL 8090A9D1E7 :vH 91D2 #ML ML cept * * Tel0 -,0 frame x75 fakecept #MP MP cept * * Tel0 - x75 :nk 1 #D D cept cept * * o -01910 # Local numbers. #DL DL * Tel0 +49=511-499770 :pr 0 :sp 8 :pr 63 1122..44..44.. NNiieeddeerrllaannddee In den Niederlanden wird ein spezieller Eintrag in der Konfigurationdatei gebraucht, da die 'Dutch telecom compagny KPN/PTT- Telecom' die Gebühreninformation in einer speziellen Form überträgt. Hierbei ist in der ``DL-Zeile'' der Parameter :b2 einzutragen. 1122..44..44..11.. BBeeiissppiieell # Local numbers and dialout prefixes. # # Use :de for debugging and :b2 for PTT-NL "features" # #DL DL * Tel0 +31=53-43415 :pr 0 :sp 8 :b2 :pr 63 :de _A_n_m_e_r_k_u_n_g _d_e_s _S_e_t_z_e_r_s: Vielen Dank an Renee Teunissen für diesen Abschnitt. 1122..44..55.. SSeemmiippeerrmmaanneennttee VVeerrbbiinndduunngg -- _S_P_V siehe auch ``SPV-Anwendung''. Die Konfigurationen sind jeweils als Ergänzung der normalen TCP- Konfiguration gedacht, wie sie in der ``Standard-Konfiguration'' enthalten ist. AAnnmmeerrkkuunngg:Wenn hier noch ein ``''-Modul eingesetzt wird, kann der 2. Kanal des 1TR6 auch genutzt werden. VVoorrssiicchh: In diesem Fall kann es sein, daß die SPV nicht aufgebaut werden kann, weil gerade beide Kanäle belegt sind. 1122..44..55..11.. KKoonnffiigguurraattiioonn ffüürr rraauussggeehheenndd # Konfiguration von U-ISDN zum betreiben einer # rausrufenden Semi Permanenten Verbindung (SPV) zum Provider # Dirk Sommerfeld Prima e.V. # E-Mail dirk@prima.ruhr.de oder dirk@nwu.de #R R tcp ins * Tel0 root RUB slipto -d 194.XXX.XXX.2 192.XXX.X #P P tcp ins * Tel0 RFX :sv 0700 :pv 1122..44..55..22.. KKoonnffiigguurraattiioonn ffüürr rreeiinnkkoommmmeenndd # Konfiguration fuer eine Rufreinkommende Semi Permanente Verbindung (SPV) zum # Provider mit U-ISDN und Teles 16Bit Karte (Creatix) ISDN Anschluss 1TR6 # Dirk Sommerfeld Prima e.V. # E-Mail dirk@prima.ruhr.de oder dirk@nwu.de #R R tcp ins * Tel0 root RUp slipto -d 193.141.111.1 192.129.5 1133.. PPrroottookkoollllssppeezziiffiisscchheess 1133..11.. BBeeaarreerr CCaappaabbiilliittyy ((EEuurroo--IISSDDNN)) uunndd aannddeerree FFeeiinnhheeiitteenn Die Informationselemente sind in mehrere Blöcke aufgeteilt. Jeder Block wird dadurch begrenzt, daß das höchstwertige Bit auf 1 steht. Die weggelassenen Bytes haben Defaultwerte. Ich führe hier die wichtigsten Codierungen auf; der Rest steht in der Q.931 . 1 1AABBBBB AA Codierungsstandard 00 CCITT BBBBB Datenformat 00000 Sprache 01000 digitale Daten 10000 Audio, 3.1 kHz 2 1AABBBBB AA Modus 00 Standard BBBBB Übertragungsgeschwindigkeit 10000 64 kBit 3 x01AAAAA AAAAA Schicht-1-Protokoll 00001 V.110 00011 A-law Audio 01000 V.120 01001 X.31 mit HDLC-Flags. Hinter einem Hexstring kann ein weiterer String angegeben werden, der als Maske dient, welche Bits bei ankommenden Rufen beachtet werden. Die höchst- wertigen Bits haben dieselbe Bedeutung wie oben und können zum Abkürzen verwendet werden. Siehe support/vectcmp.c. Beispiel: :vB 9090A3 EFFFFF -- Sprache oder 3.1kHz Audio, für den Anrufbeantworter :vB 8890 -- (alle Bits signifikant) entspricht :sv 0700, für Datenverbindungen aus dem 1TR6-Raum Falls jemand anders den Rest der relevanten Teile der Q.931 abtippen will, nur zu... Ansonsten: Sich von der Gegenstelle anrufen zu lassen und die betreffenden Daten einfach einzutragen ist wohl die einfachste Methode. 1133..22.. KKaarrtteenn mmiitt CCAAPPII:: DDiiee CCAAPPII iisstt ddooooff...... Im Internet heißt es in so gut wie jedem RFC, daß reservierte Bits beim Senden auf Null zu setzen und beim Empfangen zu ignorieren sind. Nicht so in der CAPI 1.1, dort sind gesetzte reservierte Bits ein Grund für eine Fehlermeldung. Da aber nirgends definiert oder abfragbar ist, welche Bits eigentlich erlaubt sind, ist es so gut wie unmöglich, ohne Ratespiel neue Features zu unterstützen... Wie dem auch sei, die Infobits haben folgende Bedeutung: · 00000001 Gebühreneinheiten · 00000002 Datum · 00000004 Display · 00000008 User-User Info · 00000010 Cause · 00000020 Status des gerufenen Teilnehmers · 00000040 Rufnummernübergabe (Anlagenanschluß) · 00000080... · 20000000 reserviert · 40000000 SPVs · 80000000 Festverbindungen Die EAZ-Bits: · 0001 Null ("Global Call", wird aber nicht besonders behandelt) · 0002 Eins ... · 0200 Neun · 0400... · 8000 reserviert Die Dienstkennungen, entsprechend :sv 00xx ... 0Fxx: · 0001 Bildtelefon · 0002 Telefonie · 0004 a/b-Dienste · 0008 X.21-Dienste · 0010 Telefax Gruppe 4 · 0020 BTX, 64 KBit/sec · 0040 ? · 0080 DFÜ · 0100 X.25 · 0200 Teletext · 0400 Mixed Mode · 0800 ? · 1000 ? · 2000 Fernwirken · 4000 Grafiktelefon · 8000 BTX (CEPT-Standard) Ankommende Rufe, die zu diesen EAZs und Diensten passen, werden durchgereicht (und die angeforderten Informationen werden gemeldet, wenn die Vermittlung sie sendet(!)); andere Rufe werden ignoriert. 1144.. SSoonnssttiiggeess 1144..11.. VVeerrzzeeiicchhnniissssttrruukkttuurr ddeerr SSoouurrcceenn · alaw Streamsmodul für ``alaw-Coder''. · bin fertige Programme (Symlinks) · cards Treiber für Karten. · capi · dumb · config Konfigurationsteil. · fakeh "``Cisco-HDLC''"-Modul. · final Installationsteil; final/Makefile wird als letztes aufgerufen · include Includedateien (was sonst...) · ip_mon ``TCP/IP-Monitorprogramm'' nebst Streamstreiber/Modul. · isdn_2 Schicht-2-Treiber für ISDN (D-Kanalsteuerung, B-Kanal-Routing). · isdn_3 Schicht-3-Treiber (1TR6 etc.). · isdn_4 Steuerprogramm (besagter wilder Hack). · ksupport Supportkram für den Kernel, diverse Streamsmodule, Supportcode für die ISDN-Protokollhandler. · reconnect Streamsmodul zum ``dynamischen Wiederaufbau''einer Verbindung. · strslip Streamsmodul für SLIP-Framing. · str_if Streamsmodul für ``Anbindung an TCP/IP''. · support Supportkram für Anwendungsprogramme. · t70 Streamsmodul für ``T.70''. · timer Streamsmodul zum Trennen einer Verbindung (Timeout). · v110 Streamsmodul für ``V.110''. Momentan ungetestet. · van_j Streamsmodul für ``VanJ-TCP/IP-Headerkompression''. Funktioniert momentan nur auf gesicherten Verbindungen 100%ig. · x75 Streamsmodul für ``X.75-Handling''. 1144..22.. DDeebbuuggiinngg // HHaacckkeerrss--CCoorrnneerr Das Masterprogramm schickt Debugkram nach stderr und manches andere nach stdout. Umleiten nach /dev/null wenn's stört; die Debugsachen werden sukzessive abgestellt, wenn ich mal wieder ein wenig Zeit habe. :-/ Das Debuggingverhalten des Haupttreibers im Kernel läßt sich durch die isdn2_debug- und isdn2_log-Flags steuern; siehe isdn_2/isdn_2.c. Hinweis: Wenn alles funktioniert, kann man die Debuggerei getrost abschalten. Allerdings ist dann die Fehlersuche so gut wie unmöglich... 1144..22..11.. PPrrooggrraammmmmmoodduullee zzuumm DDeebbuuggggiinngg · strlog protokolliert absolut alles mit, was über dieses Modul an Daten läuft. · xstrlog "xstrlog" macht dasselbe wie "``strlog''", nur werden DATA-Pakete (also die eigentlichen übertragenen Informationen) nicht mitgeschrieben. · qinfo Gibt alle N Sekunden eine Meldung über den aktuellen Zustand des Datenstroms vom ISDN-Modul zum Anwendungsprogramm aus. Nützlich, wenn man sehen will, wo die Daten hängenbleiben. · :tm Zeit zwischen Meldungen, in Sekunden. · count Zählt mit, wieviele Datenpakete durchlaufen und wie lang diese sind. 1144..33.. PPrrooggrraammmmee uunndd --OOppttiioonneenn · isdn_4/master alias bin/isdn Steuerprogramm für den gesamten ISDN-Kram. · -d Debugging; verhindert daß das Programm sich selber in den Hintergrund setzt. · -f dev Steuerdevice anstelle von /dev/isdnmon. · -I Debugbefehle werden von stdin gelesen. · -l setzt ein ``''-Modul auf die Steuerverbindung. Debugging. · -w setzt ein logh-Modul auf die programminterne Verbindung zwischen dem Treiber im Kernel und dem Masterprozeß. Debugging. · -L, -W wie -l / -w, jedoch im Kernel-Log anstatt auf stderr. · -m schreibt die programminterne Verbindung zwischen Ebene 3 und 4 auf stderr mit. Sehr wichtig beim Debuggen. · -M schreibt diverse andere Debugginginfo nach stderr. · -x file Datei mit (internen) Steuerbefehlen, die nach dem vollständigen Start des ISDN-Krams ausgeführt wird. Ungetestet. · file... Konfigurationsdateien. · monitor Protokolliert die vom ip_mon-Modul gemeldeten IP-Daten. · -a numerische Angabe der lokalen IP-Adressen. · -b numerische Angabe der entfernten IP-Adressen. · -c numerische Angabe der IP-Protokolle. · -l Debugging; setzt ``''-Modul ein. · -n Die network/services-Dateien werden nicht permanent offengehalten. · -h Die hosts-Dateien werden nicht permanent offengehalten. Das gilt auch für die Verbindung zum Nameserver. Monitor kann auch zum Blockieren von IP-Paketen verwendet werden. Das ist allerdings ungetestet; besser ist es, Firewall-Support in den Kernel einzubauen. · slipto Kontrollprogramm für den TCP/IP-Kram. Macht bei Verwendung mit ISDN _kein_ "slip"; wenn jemand (zB ein Amiga mit KA9Q) auf SLIP besteht, muß das "slip"-Modul via ML-Zeile explizit eingesetzt werden. · -D Debugging-Output nach stderr. · -d eine "Default"-Route zur Gegenseite wird eingerichtet. · -R ip die IP-Nummer "ip" wird zur Gegenseite geroutet. (route -host) · -r ip Das IP-Netz "ip" wird zur Gegenseite geroutet. (route -net) · -r ip:nm Das IP-Netz "ip" wird mit der Netmask "nm" zur Gegenseite geroutet. · -x auf die eigene Adresse wird keine "Route" gesetzt. Dieses Flag wird immer dann verwendet, wenn die ISDN-Interfaceadresse dieselbe ist wie zB am lokalen Ethernet. · -A arpaddr setzt Proxy-ARP-Adresse für alle Routen zur Gegenstelle. Die korrekte "arpaddr" wird von "ifconfig eth0" ausgegeben. (Vorsicht beim Wechsel der Ethernetkarte!) Die folgenden Optionen werden _nicht_ im ISDN-Betrieb verwendet, sondern im Standalonebetrieb mit anderen Streams-Treibern. Im ISDN- Betrieb werden diese Optionen nicht verwendet; stattdessen werden die entsprechenden Module auf der ML-Konfigurationszeile eingetragen bzw. als MP-Optionen eingestellt. · -L protokolliert den Dialog zum Modem. · -l Debugging: setzt ``''-Modul ein. · -ll zusätzlich ``''-Modul. · -lll zusätzlich ``''-Modul. · -M setzt IP-Monitor-Modul ein. · -S Betrieb auf synchroner Leitung: verwende kein "slip"-Modul. · -E Autoenable; wenn ``'' auf einer bestehenden Verbindung gestartet wird. · -o schickt ATA zur Leitung und wartet auf CONNECT. · -p dev öffnet Device "dev". (Man verwende "/dev/tty" für stdin/out.) · -v verwende Van-Jacobsen-Headerkompression. · -f verwende Cisco-HDLC-Header. · -m mtu setzt die MTU auf den angegebenen Wert. (Die MRU ist auf 4000 Bytes begrenzt.) Die folgenden Parameter müssen immer angegeben werden: · ip_loc lokale IP-Nummer. Kann auch auf anderen Interfaces (Ethernet) verwendet werden! · ip_rem IP-Nummer der Gegenstelle. Die beiden Nummern muessen nicht im gleichen Netz sein! 1144..44.. BBuuggss aannddeerreerr LLeeuuttee · An manchen Nebenstellenanlagen werden ankommende Rufe teilweise mit, teilweise ohne der zum Rauswählen notwendigen Null ausgeliefert. Das liegt an der Quelle der Anrufe; die Telekom signalisiert 1TR6-Anrufe etwas anders als Euro-ISDN (ist aber beides legal), die Telefonanlage setzt aber nur eine Version korrekt um. Workaround: Keiner. Bugfix: Hersteller kräftig treten. · Manche Anlagen treiben es noch schlimmer und übergeben ankommende Anrufe mit "unbekannter Nummerntyp" aber _ohne_ führende Null. Sorry, leider daneben -- evtl. hilft :b1 in der ``DL-Zeile''. Noch schlimmer treibt es zB die Ackerman Euracom 181, Firmware 1.05, die ankommend die Nebenstellennummer als "örtliche Nummer" kennzeichnet. Workaround: Auch :b1. Abgesehen davon: Hersteller _kräftig_ treten, sowas ist einfach Unsinn. · Die Niederländer übergeben die Einheiten nicht im dafür vorgesehenen Format, sondern als DISPLAY-String. Siehe ``Kompatibilitätspatch'' 1155.. WWaass iicchh bbiisshheerr nnoocchh nniicchhtt iinn ddiiee DDookkuu ssoo rriicchhttiigg aauuffnneehhmmeenn kkoonn­­ nnttee........ Wenn ich Fehler suchen soll: --------------------------- - Support kaufen. (Kann man natürlich auch ohne Probleme machen :-) - DOKU LESEN. Wenn nicht verstanden, nochmal lesen. Wenn immer noch nicht verstanden, Verständnisfrage stellen anstatt rumzubasteln und mich mit dem Resultat der Bastelei zu beglücken. :-/ - Wenn beim Verbindungsaufbau was nicht funktioniert: Master mit -wdmM starten, cu und AT/L starten, zugucken was passiert, Konfigdatei + Master-stderr + AT/L-Output mir schicken. Geldmangel ========== Die Entwicklung so eines Treibers kostet Zeit. Zeit ist Geld. :-( Wer sich an den Entwicklungskosten des Treibers beteiligen will: Konto 2040206135, Hypo-Bank Nürnberg (BLZ 760 202 14). Für den überwiesenen Betrag kann ich eine Rechnung schreiben, wenn nötig inkl. Märchen...äh, Mehrwertsteuer. Bekannte Fehler =============== Die Konfigurationsdatei ist manchmal etwas undurchsichtig. _Ich_ werde das nicht ändern, keine Zeit; wenn jemand ein Frontend schreiben will -- nur zu! Die Doku liegt nur auf deutsch vor. Bei manchen Leuten hängt sich der Treiber bzw. der ganze Rechner bei ankommenden (Voice-)anrufen kommentarlos auf. Ich konnte das leider bisher nicht nachvollziehen... Fragen? Probleme? (Gleich am Anfang, damit es keiner übersieht...) ================= Bitte per Mail, und zwar an . Wenn ohne Internetanschluß: Bitte per Fax, an 0911/5980150. Telefonanrufe von Nichtkunden sehe ich ziemlich ungern, weil sehr zeitaufwendig. Vollständige Konfigdatei und genaues Protokoll dessen, was man gemacht hat, was im Syslog oder auf der Konsole ausgegeben wurde, etc.pp., mitschicken. Probleme mit der Doku? DIES IST noch KEINE ENDVERSION. Also bitte selber nachdenken, in den Sourcen wühlen, rausfinden wo es hakt, und mir entweder genauere Fragen stellen oder einen Lösungsvorschlag, zB ergänzte Doku, schicken. Oder mich daür bezahlen, daß ich den Kram supporte -- das ist nämlich der eigentliche Grund, weshalb der Treiber nicht schon vor einem halben Jahr fertig wurde... Näheres zu meinem Supportangebot für Linux via Mail ->