Ancient early ISDN support for Linux 1.2.x by Matthias Urlichs (hence "u-isdn"), not related to the later isdn4linux (i4l) or mISDN. Raw tarballs used to create this are at https://people.osmocom.org/laforge/retronetworking/u-isdn/u-isdn/ftp.noris.de/
Go to file
Matthias Urlichs 5459a62819 Doku-Update, Relicensing 2022-02-18 08:56:14 +01:00
alaw isdn-44 2022-02-18 08:45:10 +01:00
buffer isdn-44 2022-02-18 08:45:10 +01:00
cards latin1 > UTF-8 2022-02-18 08:52:19 +01:00
compat isdn-44 2022-02-18 08:45:10 +01:00
config isdn-45 2022-02-18 08:45:10 +01:00
fakecept isdn-44 2022-02-18 08:45:10 +01:00
fakeh isdn-44 2022-02-18 08:45:10 +01:00
include isdn-45 2022-02-18 08:45:10 +01:00
ip_mon isdn-45 2022-02-18 08:45:10 +01:00
isdn_2 isdn-44 2022-02-18 08:45:10 +01:00
isdn_3 isdn-44 2022-02-18 08:45:10 +01:00
isdn_4 latin1 > UTF-8 2022-02-18 08:52:19 +01:00
ksupport isdn-44 2022-02-18 08:45:10 +01:00
patches latin1 > UTF-8 2022-02-18 08:52:19 +01:00
pr_on isdn-44 2022-02-18 08:45:10 +01:00
rate isdn-44 2022-02-18 08:45:10 +01:00
reconnect isdn-44 2022-02-18 08:45:10 +01:00
str_if isdn-45 2022-02-18 08:45:10 +01:00
streams isdn-45 2022-02-18 08:45:10 +01:00
strslip isdn-44 2022-02-18 08:45:10 +01:00
support isdn-45 2022-02-18 08:45:10 +01:00
t70 isdn-44 2022-02-18 08:45:10 +01:00
timer isdn-44 2022-02-18 08:45:10 +01:00
tools latin1 > UTF-8 2022-02-18 08:52:19 +01:00
v110 isdn-44 2022-02-18 08:45:10 +01:00
van_j isdn-45 2022-02-18 08:45:10 +01:00
x75 isdn-44 2022-02-18 08:45:10 +01:00
DOKU Doku-Update, Relicensing 2022-02-18 08:56:14 +01:00
LICENSE Doku-Update, Relicensing 2022-02-18 08:56:14 +01:00
Make.config isdn-45 2022-02-18 08:45:10 +01:00
Make.rules isdn-44 2022-02-18 08:45:10 +01:00
Makefile isdn-35 2022-02-18 08:45:10 +01:00
README Doku-Update, Relicensing 2022-02-18 08:56:14 +01:00
TODO isdn-11 2022-02-18 08:41:16 +01:00
U-ISDN-FAQ.ps.gz Doku-Update, Relicensing 2022-02-18 08:56:14 +01:00
make.isdn latin1 > UTF-8 2022-02-18 08:52:19 +01:00

README

U-ISDN
======

Once upon a time, I hacked an ISDN interface into Linux.

It supported networking, multiple "passive" ISDN cards (i.e. those without
a CPU of their own), some active cards, TTYs, private virtual circuits,
both German and European signalling standards, and some other bits and
pieces.

We ran an actual ISP business with that code.

That's the good part.

The bad part is that this code is an unholy mess. At the time, Linux
networking was "mostly" working; see the numerous kernel patches that are
in this archive. In fact, for the first versions of this code (now happily
resting in the digital nirvana), Linux networking was so abysmally bad that
I hacked the BSD networking code into it and used that instead.

Yes, seriously. No, I don't have that code any more. Or rather, it is on a
bunch of slowly-disintegrating Streamer cartridges in my basement, and if
you have working hardware that can actually read these things we might come
to an agreement. (I don't, as the capstan of the tape drives was made of
synthetic rubber … which has disintegrated by now.)

Also, when I started to cobble all of this together I was a student and
didn't actually care all that much about copyright and whatnot. As a
result, this archive contains some pieces that strictly speaking should not
be redistributed.

On the other hand, the company (which I'll not name here) that held said
copyrights doesn't exist any more, more or less, and even if somebody did
care about stone-age C code that doesn't even compile any more (unless your
compiler is 20+ years old … and so are your kernel headers …) most likely
they'd have a hard time proving that they really do hold the rights to that
code.

Thus, I'll leave the decision of whether to read any of the code contained
herein, try to use it, and/or delete it in abject horror, to the esteemed
reader.

Matthias Urlichs
<matthias@urlichs.de>
2022-02-16

-----------------------------------------------------------------------

[ This is a German version. An English version is in the works. ]

Die Anleitung und der ganze Kram findet sich in der Datei DOKU, oder
README.isdn in den Kernelsourcen.


*** 1996-07-25

Update 42. Grummel...

Neue Feature: Wenn eine Verbindung länger als 10 Sekunden im >down-Zustand
bleibt, wird der Master umgebracht. (Das ist meistens ein Symptom für ein
verknotetes D-Kanal-Handling oder eine verklemmte aktive Karte.)

Syslog "CONN" loggt die Verbindungszeit in Sekunden. ("COST" loggt die
Verbindungskosten, wie vorher.)

Die Zahl der Verbindungen wird beim Minuten-Timestamp mitgeschrieben;
daraus läßt sich sehr schön eine Grafik generieren...


*** 1996-04-??

Update 39. Support für "altes" /sbin/route ist gestrichen!

/sbin/route --help _muß_ bei "route del" die Angabe einer Netmask und eines
Interfaces zulassen. Test mit "route --help".


*** 1996-04-11

Update 38. Support für "alte" Kernels (< 1.3.78 oder so) ist gestrichen!

PPP tut mit Bintec-S0- und S2M-Karten.
Update zum Verbindungshandling bei Callback, sollte jetzt besser
  funktionieren.
Freigabe von Devices hatte ich teilweise vergessen...
Das reconn-Modul hat manchmal Pakete zu voreilig weggeworfen.
str_if loggt mit, wenn Pakete weggeworfen werden mußten.
Wiedermal ein htons() vergessen...
slipto kann jetzt auch "-r ipadresse/bits", zusätzlich zu
  "-r ipadresse:netmask".


*** 1996-02-07

Update 37. ACHTUNG: 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.


*** 1996-02-08

Update 35. Problem mit Euro-ISDN-Nebenstellenanlagen behoben.
Achtung: +000=00-0. in die DP-Zeile, der Punkt am Ende ist nicht ganz
unwichtig.


*** 1996-01-05

Update 34. Weitere Crashprobleme (hoffentlich) beseitigt.
Achtung: Alle zutreffenden Keys in TM-Zeilen werden nun geODERt.


*** 1996-01-03

Update 33. Timer wieder umgestellt. Testcode für automatische Anpassung des
Timeouts, noch nicht ausreichend getestet.


*** 1996-01-02

Update 32. WICHTIG 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.


*** 1996-01-01

Update 31. Grr, ich solte diese Datei besser pflegen. :-/

- 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 slipto, laesst die lokale Route in Ruhe.
  Doofer Fehler beim freopen() korrigiert.

Funktioniert dip jetzt? Bitte testen.


*** 1995-12-04

Release 25. 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 "buffer"-Modul zwischengeschaltet und geeignet konfiguriert werden,
sinnvollerweise hinter dem reconn-Modul (IP) bzw. direkt hinter transalaw
(Audio).


*** 1995-11-28

Release 22. 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...)


*** 1995-11-15

Release 21. 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. 


*** 1995-11-1

Release 20. 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.


*** 1995-11-06

Release 19. 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.
VORHER WAR DAS UMGEKEHRT, das hat manchen Benutzer durcheinandergebracht.


*** 1995-10-30

Release 17.

TM-Zeile. Siehe DOKU. 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-Parameter :de, neuer Befehl AT/W: Loggt den
D-Kanal-Datenaustausch als cu-Ausgabe mit.


*** 1995-10-24

Release 15.

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!


*** 1995-10-21

Release 14.

Mit dem RP-Zeilen gibt es anscheinend Probleme. Wäre nett, wenn das jemand
anders debuggen könnte, sonst dauert das nämlich bis Version 16 oder so.

Wer kennt sich mit tcl/tk oder tclperl oder wish oder was-auch-immer aus?
Gebraucht wird ein vernünftiges Frontend für die Konfigdatei...

Login und Kermit, nächster Versuch...

Aktive Karten (momentan: Bintec) tun NOCH NICHT, aber ich arbeite dran.

Mehr Kommentare im Source. (Immer noch zuwenige, ich weiß. Working.)

Fehler bereinigt. Insbesondere sollte der Treiber nun ca. eine Sekunde
schneller sein beim Verbindungsaufbau, wenn gerade keine andere Verbindung
offen ist. Grr...

Debugmeldungen schreiben nun das Intervall (in Jiffies, also normalerweise
Hundertstelsekunden) seit der letzten Debugmeldung mit.

ACHTUNG, leichte Änderungen im Format der Konfigdatei (DL- und CL-Zeile:
<Key>-Parameter ist dazugekommen); siehe Doku.

Kann jemand aus Taylor-UUCP (oder sonstwoher) den Code "ist die aktuelle
Zeit in dem durch diesen String angegebenen Zeitfenster" klauen und um die
Angabe der Anzahl Sekunden bis zum Verlassen des Zeitfensters erweitern?
Beispiel: wenn es jetzt Sonntag 23:00:01 Uhr ist:
- isintime("Mon") => 0
- isintime("Sun") => 3599
Sonst muß ich das machen und dafür habe ich keine Zeit. Das Ganze wird
benötigt, um zB Logins nur abends zu erlauben oder den Zeittakt
umzustellen. Momentan braucht es dazu ein per cron aufgerufenes externes
Programm, das /etc/isdn.conf.times von isdn.conf.times.day nach
isdn.conf.times.night umlinkt und AT/R anstößt; geht, aber ist nicht
besonders schön.


*** 1995-09-31

Release 13.

Wenn es immer noch Probleme beim ISDN-Login gibt: am Anfang von
streams/streams_io das #undef in ein #define ändern, isdn_2.o mit
"mod2=0x05" installieren, nochmal testen, mir den Syslog-Output schicken
(*.debug, NICHT *.=debug !!!). Vorsicht, Paßwörter etc. stehen in diesem
Log mit drin!

Wegen eines Fehlers im GNU-Make kann es passieren, daß "make" oder "make -w"
nicht funktioniert. In diesem Fall "make --warn" verwenden.


Die folgenden neuen Features sind noch mehr oder weniger ungetestet:
SIGIO-Support.
TTY-Code repariert.
Starten beliebiger Programme bei Zustandsänderungen (RP-Zeile in der Konfig).
Ethertype-Support (noch nicht vollständig).
Callback wenn möglich auf derselben Leitung.
Callback auf Leitung B, wenn ein Ruf auf A ankommt, dort aber besetzt ist.

Einigermaßen getestet:
Callback. (War das ein Nerv. Manche ISDN-Vermittlungen sind _doof_.)

Fehlermeldungen reorganisiert.


*** 1995-07-22

isdn_4/master.c aufgesplittet, Verzeichnisstruktur leicht umgebaut,
deshalb leider keine Diffs.


*** 1995-06-12

Wieder ein paar Bugs weniger.

Der "arnet"-Treiber ist fuer die synchronen Karten dieser Firma gedacht und
noch nicht 100% ausgetestet.

Wenn jemand Uebermittlung von Gebuehreninformationen waehrend der
Verbindung im Euro-ISDN aktiviert hat -> Mail an mich.

Support fuer Standleitungen: Restart klemmt manchmal.

Die Patches basieren auf aelteren Kernelversionen und sind nicht besonders
sauber... 

Support fuer Kernel 1.3 ist in Arbeit.


*** 1995-02-04

Euro-ISDN! Relativ rudimentär, sollte aber erstmal tun.
(In der Doku steht was von FINGER WEG. Vorsicht -- ich garantiere nicht,
daß sich der Kram nicht total danebenbenimmt. Ich wage es aber zu
bezweifeln, daß mein Treiber dazu führt, daß der Anschluß gesperrt wird...)

Support für 128kBit-Standleitungen.

rm -rf streams/isdn isdn/cards/leonardo (für Leute, die den Patch
verwenden).


*** 1995-01-18

Na endlich... modularisierte Version, basierend auf 1.1.83.
_Ohne_ Spezialkram (OK, ein kleines bißchen ;-) nachdem das Linux-TCP/IP
endlich einen brauchbaren Status erreicht zu haben scheint.


*** 1994-10-27

Interimsrelease, basierend auf 1.1.57.
In libc.tar.gz beginden sich die letzten 4.5.26-Libraries und Include-
dateien, angepaßt auf meinen Kernel. (Die nächste Version, basierend auf
4.6.xx, ist weit weniger schlimm.)

In kernel.tar.gz sind die Quellen fuer den angepassten Kernel, komplett.

Konfiguration:
CONFIG_SCHEDULER_BSD	Y
CONFIG_INET_BSD		N
CONFIG_MALLOC_TRACE	Y
CONFIG_DEBUG_LATENCY	N

Alles andere (fast) wie gewohnt. Ohne MALLOC-TRACE gibt es Probleme mit
der Speicherverwaltung; wenn jemand den Fehler findet, immer nur her mit
einem Patch.

INET_BSD braucht BSD-Utilities für die Konfiguration, die ich momentan
nicht im Source habe (Plattenfehler).

Die Übersetzung des Streams-Teils liefert haufenweise Warnings; ignorieren.


*** 1994-08-07

Die Datei /usr/include/sys/conf.h muss die folgende Zeile enthalten:

#include <linux/config.h>

Sorry; dieser Fehler wird mit dem naechsten Update behoben.


*** 1994-08-03

Patch 38 passt sauber in den Kern.
Festverbindungen tun; Patch (inkl. Update auf -38) folgt demnaechst.


*** 1994-08-01

CONFIG_MALLOC_TRACE funktioniert nicht korrekt (Speicherverluste). Ich
arbeite dran.


*** 1994-07-31

Festverbindungen werden unterstützt.
Diffs auf PL37 generiert.
Networking-Code generiert.
include- und libc-Diffs generiert.


*** 1994-07-29

In der Datei streams/isdn/config/config.data muss die Variable STR_IN von
"in2" auf "linux" geaendert werden, wenn mit Linux-Networking gearbeitet
werden soll.


*** 1994-07-27

Patch 36 läßt sich problemlos einspielen.


*** 1994-07-26

Die Datei "kernel-1.1.35.diff.gz" enthält die Diffs zu meinem Kernel.
"streams-1.1.35.tar.gz" enthält den Streams-Teil (notwendig!).

Warnung: Da ich selber leicht modifizierte Includedateien unter
/usr/include einsetze, kann es sein, daß die Kompilation nicht
durchläuft... in diesem Fall bitte Mail an mich.