ATTENTION! The following header is not fully valid yet!
From: dl4mhk@lrz.uni-muenchen.de (Bernhard Hailer)
Newsgroups: de.alt.comm.isdn4linux,de.answers,news.answers
Subject: ISDN4linux-FAQ
Followup-To: de.alt.comm.isdn4linux
Summary: This posting describes what every reader of de.alt.comm.isdn4linux
         ought to know about ISDN under Linux using isdn4linux.  
         It's in German, like the Newsgroup. An English version exists, see
         i4l-faq.
Archive-name: de-i4l-faq
Posting-frequency: monthly
Last-modified: 18-Mar-97
URL: http://www.lrz-muenchen.de/~ui161ab/www/isdn/
        +49 931   781464   Zyxel U-1496E     V.32(bis), V.42(bis), Zyxel 19200 
        +49 931   781465   Atrie 1914A       V.32(bis), V.42(bis), V32terbo
        +49 931   781467   Atrie 1914A       V.32(bis), V.42(bis), V32terbo
        +49 931   781468   Atrie 1914A       V.32(bis), V.42(bis), V32terbo
        +49 931 79002055   Motorola 3400     V.32(bis), V.42(bis), V.34
        +49 931  7840724   ICN               X.75    2 B-Kanäle
        +49 931  7841020   ICN               X.75    2 B-Kanäle
        +49 931  7841060   ICN               X.75    2 B-Kanäle  
        +49 931  7841070   ICN               X.75    2 B-Kanäle  
        +49 931  7841080   ICN               X.75    2 B-Kanäle  
ftp://freja.frontier.dk/linux/isdn4linux/ ftp://ftp.cs.tu-berlin.de/pub/net/isdn/isdn4linux/ ftp://ftp.fokus.gmd.de/.mount2/pub/Linux/isdn/isdn4linux/ ftp://ftp.franken.de/pub/isdn4linux/ ftp://ftp.germany.eu.net/pub/os/Linux/Local.EUnet/ISDN/isdn4linux/ ftp://ftp.kiss.de/pub/linux/isdn4linux/ ftp://ftp.leo.org/pub/comp/os/linux/isdn/isdn4linux/ ftp://ftp.lame.org/mirrors/isdn/ ftp://ftp.mathematik.th-darmstadt.de/pub/linux/mirrors/misc/isdn4linux/ ftp://ftp.nvg.unit.no/pub/linux/isdn/ ftp://ftp.pop.de/pub/local/linux/isdn/ ftp://ftp.rz.fh-hannover.de/pub/linux/local/isdn4linux/ ftp://ftp.rz.hu-berlin.de:/pub/linux/isdn4linux/ ftp://ftp.tu-dresden.de/pub/soft/isdn/isdn4linux/ ftp://ftp.uni-mainz.de/pub/internet/starter-kit/isdn/isdn4linux/ ftp://ftp.uni-wuppertal.de/pub/linux/isdn4linux/ ftp://ftp.xlink.net/pub/mirror.ftp.franken.de/isdn4linux/ ftp://fvkma.tu-graz.ac.at/pub/isdn4linux/ ftp://wildsau.idv.uni-linz.ac.at/pub/isdn4linux/
        ISDN-Kernelsubsystem: /usr/src/linux/Documentation/isdn/README
        ISDN-Steckkarte:      /usr/src/linux/Documentation/isdn/README.<Karte>
        Synchrones PPP:       /usr/src/linux/Documentation/isdn/README.syncppp
                          /usr/src/linux/Documentation/isdn/README.syncPPP.FAQ
        Voice capability:     /usr/src/linux/Documentation/isdn/README.audio
        ISDN Utilities:       /usr/src/isdn4k-utils-<version>/README(.*)
        Des weiteren existieren zu vielen Hilfsprogrammen Man-Pages!
        In einer Suse-Distribution könnten u.U. noch folgende Informationen
        hilfreich sein:
        Synchrones PPP:       /usr/doc/faq/faq/PPP-FAQ
        Konfiguration Email:  /usr/doc/howto/mini/Mail-Queue.gz
        index isdn4linux            - zeigt, welche Archive vorhanden sind
        get isdn4linux <archivname> - holt das File <archivname>
        Deutschland
        Finnland
        Frankreich
        Italien
        Niederlande
        Norwegen
        Österreich
        Peru
        Portugal
        Schweden
        Schweiz
        Spanien
        USA
       * ITK ix1 micro V2.0 und V2.1
       * Cisco 200
       * ITK Columbus
        * Teles S0-8
        * Teles S0-16 und S0-16.2
          (baugleich: Dr. Neuhaus Niccy 1016, Creatix 16/S0)
        * Teles S0-16.3
        * Teles S0-16.3 PNP
        * Teles PCMCIA
        * Creatix S0 PNP
        * AVM A1 (Fritz!)
        * ELSA Microlink PCC-16
        * ELSA Microlink PCF
        * ELSA Microlink PCF/pro (nur ISDN-Teil, nicht der V34 Modem Chip)
        * ELSA Quickstep 1000
        * ITK ix1-micro Rev.2
        Erstes Ziel des HiSax Treibers war es mehr ISDN Karten unter i4l
        verfügbar zu machen, dieses Ziel bleibt auch bestehen.
        Zweitens soll er möglichst einfach konfiguriert werden können und dem
        User keine funktionierende Karte vorgaukeln wenn es Hardware Probleme
        gibt (IRQ, Reset Problem Teles). An den Hardwareproblemen selbst (PCI
        IRQ, Int 12/15 usw.) kann ich auch nichts ändern, aber der Treiber
        wird nicht geladen wenn sowas auftritt.
        Drittens und dieser Teil ist erst angefangen, vollstendige
        Überarbeitung der Statemaschinen um einen komplett DSS1 bzw. 1TR6
        konformen Treiber zu bekommen, der eine Zulassung bestehen würde (das
        heißt nicht, das ich ihn zulassen will oder kann).
        Desweitern möchte ich,wenn möglich auch die US ISDN Protokolle
        unterstützen, damit i4l mal aus Europa rauskommt.
        Auch weitere l2/l3 Protokolle sollen rein (V110 ...), Standleitungs-
        Unterstützung ..., eine Menge Arbeit, die ich nicht unbedingt allein
        machen möchte.
        Deshalb an alle die ein wenig von Programmierung und ISDN verstehen
        (ich selbst hab im Januar das erste mal was von ISDN gehört und
        beruflich auch nichts damit zu tun, d.h alles nebenbei gelernt), wer
        Lust hat (was dabei glaube ich immer noch das wichtigste ist) melde
        sich für die weitere Entwicklung.
        1. Wahl ELSA
           ELSA stellt im Gegensatz zu AVM die Spezifikation zur Verfügung.
        2. Wahl Creatix PNP
           Auch Creatix Mitarbeiter stehen Linux nicht vollkommen negativ
           gegenueber ;-). Ist uebrigens eine Creatix Eigenentwicklung und
           nicht mit der Teles 16.3 PNP identisch.
         56k asynchron : nein
         64k synchron  : ja
        128k synchron  : ja (channel bundling - siehe nächste Frage)
        * Welcome to Linux at eberhard.moenkeberg.de (LAN, 192.168.99.1).
          Under ++49-551-7704103, ISDN NetCalls (HDLC-trans-rawip)
          for 192.168.99.1 get accepted. You should come as 192.168.*.*
          because sometimes my "default" route is not your way.
          /ftp is exported for NFS; try "showmount -e".
          You can login as "guest" without password.
          FTP as "gast" with password "gast" avoids the restricted shell.
        * Under ++49-551-7704102, a 28800 bps modem and a Creatix ISDN 
          card (HDLC only, not X.75) are listening for Logins.
        There's a "gast" at +49 30 67 19 81 01 (X.75, mgetty). There's the 
        stones-html-page with pics in postscript to test downloading. Who
        needs a target to call could use it.
        Es gibt den Gast auf der +49 30 67198101 mit X.75, sofern nicht einer
        der Tester mein ttyI erhängt hat, und auf der ...103 ein getty mit
        HDLC.
          Ich bekomme oft Patches - gegen die aktuell offizielle Release des
        Quellcodes - bei denen ich Probleme bekomme, sie einzubinden.
        Mein lokaler Quellcode hier ist manchmal zwei oder drei Versionen
        weiter, wobei ich sie allerdings nicht releasen kann, weil er
        unvollständig oder völlig ungeprüft ist etc.
          Deshalb habe ich jetzt beschlossen, das CVS-Repository von
        isdn4linux öffentlich zugänglich zu machen. Jetzt können Programmierer,
        die einen Blick auf den Fortgang der Entwicklung werfen wollen, oder
        Leute, die immer den allerneuesten Stand haben wollen, folgendermaßen
        auf das CVS-Repository zugreifen:
        1.) Man installiere GNU CVS (irgendeine Version >= 1.6 tut's).
        2.) Man schreibe ein kleines Shellscript .cvsrsh im Homedir:
              #!/bin/sh
              exec rsh -l guest $*
        3.) Man setze CVS_RSH auf dieses Script (z.B. CVS_RSH=~/.cvsrsh)
        4.) Man setze CVS_ROOT auf oldhades.think.de:/i4ldev
            (z.B. export CVS_ROOT=oldhades.think.de:/i4ldev)
        5.) Man führe aus: "cvs -z9 checkout isdn"
            -> Dies läßt einen Verzeichnisbaum im aktuellen Verzeichnis
               entstehen. Unterhalb von isdn/ findet man die gleiche 
               Hierarchie wie im Linux-Source nebst einigen Scripten, um
               den Inhalt in den Linux-Quellcodezweig zu kopieren/diffen.
        Ähnlicher Zugang ist auch auf das Utility-Paket möglich, mit dem
        Kommando:
              cvs -z9 checkout isdn4k-utils
        ABER VORSICHT! DAS NEUESTE MATERIAL IST MANCHMAL ZIEMLICH INSTABIL ODER
        WENIGSTENS NICHT OHNE GUTE PROGRAMMIERKENNTNISSE COMPILIERBAR -
        bitte keine Newbie-Fragen zu diesem Thema! Use the source, Luke!
        Hinweis:
          Natürlich ist der Zugriff Read-Only. Der Zugriff ist auf die 
          folgenden Kommandos beschränkt:
            checkout
            diff
            export
            status
            update
        Zur Benutzung dieser Befehle sehe sich die Dokumentation zu CVS an.
        Leute, die das Entwicklerteam _ständig_ unterstützen wollen
        (z.B. neue Treiber schreiben [oder FAQ-Mitarbeit! Die Red.]),
        können einen echten Account zum vollständigen Zugriff erhalten. 
        Man schreibe mir in diesem Falle eine Mail.
        In der dosemu.conf genügt z.B. der folgende Eintrag für einen
        virtuellen com2-Port, der z.B. unter Telix oder Terminate läuft:
        serial { com 2  device /dev/ttyI3 }
        Auch der Zugriff über Fossil ist möglich, wenn fossil.com (beim dosemu
        dabei) gestartet wird.
        Getestet in den folgenden Konfigurationen:
        - Kernel 2.0.21, Telestreiber inkl. Karstens patches
        - Kernel 2.0.21, HiSax
        Es läuft parallel. Und es läuft unter 2.0.X.
        Beide ISDN-Pakete laden jedoch das Modul isdn.o, ansonsten ist der
        Namensraum verschieden. Abhilfe: Urlichs isdn.o in uisdn.o umbenennen,
        entsprechend /lib/modules/modules.isdn (oder wie immer das Ding heißt,
        wo die Module drinstehen, und das das Skript ausliest) anpassen.
        Freundlicherweise sind auch die Default-Namen der ISDN-devices
        verschieden.
        AOC-D ist die "Gebühreninformation während der Verbindung".
        AOC-D ist die "Gebühreninformation nach der Verbindung". Dieses 
        Dienstemerkmal ist in Deutschland im "Komfort-Anschluß" enthalten.
        CLIR ist ein Angebot des ISDN-Anbieters: man kann fallweise
        die Übermittlung der eigenen Rufnummer an den Gesprächspartner 
        unterdrücken lassen. CLIR muß man beantragen, es ist (in Deutschland) 
        jedoch kostenlos. Hingegen kostet die fallweise Übermittlung
        der Rufnummer Geld.
        Auch COLP ist ein Angebot des ISDN-Anbieters. Man muß es beantragen,
        aber es kostet (in Deutschland) 10.-- DM pro Monat extra. Wer COLP
        beantragt hat, bekommt ein erweitertes Wählprotokoll über die
        Leitung, welches man dann z.B. in der Tk-Anlage auswerten kann.
        Derzeit wird an einer Möglichkeit gebastelt, das mit Hilfe einer 
        "verkehrtherum" angeschlossenen zweiten Teleskarte zu umgehen. Man
        bekommt dann ganz ohne Gebühren mehr Informationen als mit laufendem
        COLP. Das rechnet sich bald...
        Die i4l-Entwickler haben sich zu einem Team zusammengeschlossen. Das
        Tool "cvs" erlaubt es den Mitgliedern, relativ problemlos Patches
        einfließen zu lassen. Der Werdegang des Projektes wird damit
        ausgezeichnet dokumentiert, und es ist auch nicht schwierig, eine
        ältere Version wieder herzustellen.
        Ein sehr verbreitetes Low-Level-Protokoll.
        Ein Siemens-Chip, der ähnlich ->ISAC auf vielen passiven ISDN-Karten
        sitzt. Er übernimmt den seriellen Bus vom ISAC und demultiplext beim
        Empfangen bzw. multiplext (d.h. fügt die Bits an der richtigen Stelle
        ein) die B-Kanäle.
        Ein Siemens-Chip, der ähnlich ->HSCX auf vielen passiven ISDN-Karten 
        sitzt. Er ist für "Level 1" zustaendig, sitzt also (beinahe) direkt an
        der Leitung. Er kann das D-Kanalprotokoll handhaben und setzt die
        S0-Daten auf einen speziellen seriellen Bus (IOM) um. Beim Senden
        geht es umgekehrt.
        Die lokale Vermittlungsstelle oder bei internen S0 die Anlage weist
        jedem Endgerät automatisch oder fest eine TEI zu. Diese dient ganz
        einfach zur Addressierung des D-Kanals. TEIs haben folgende Werte:
         0- 63   feste TEIs (z.B wird 0 bei Anlagenanschlüssen verwendet)
        64-126   automatisch zugewiesen
           127   Rundruf an alle (z.B. bei hereinkommendem Anruf)
        Eine TK-Anlage dient dazu, verschiedene interne Geräte an das
        ISDN-Netz anzuschließen. Meist handelt es sich dabei um analoge
        Geräte, die nicht direkt ans ISDN-Netz angeschlossen werden können.
        Die TK-Anlage kann jedoch auch einen internen digitalen S0-Bus zur
        Verfügung stellen, an dem dann ISDN-Geräte angeschlossen werden können.
        Probiere doch mal Port 0x080h, DIP-SW in die nicht dokumentierte
        Position!
        1. HiSax muß in den Kernel gepatcht werden
           (Achtung: den "-pn" Parameter verwenden!)
        2. Mit "make menuconfig" (oder "make config") werden folgende Kernel-
           Optionen eingestellt:
             * ISDN = "M" (als Modul - PNP funktioniert sonst nicht!)
             * HiSax = "M" (als Modul - PNP funktioniert sonst nicht!)
             * 16.3/PNP support
             * EURO support
        3. Kernel und Module kompilieren & installieren, depmod. (Reboot!)
        4. Die Konfiguration der PNP-Karte auslesen mit:
           "pnpdump > /etc/isapnp.conf".
        5. Die Konfigurationsdatei "/etc/isapnp.conf" muß von Hand angepaßt
           werden. Folgende Werte sind zu setzen:
             INT0 - der von der Karte verwendete Interrupt
                  (Default bei Teles 16.3 PNP: 10)
             IO0, IO1 - die von der Karte verwendeten IO-Ports
                  (Default bei Teles 16.3 PNP: 0x580 bzw. 0x180)
                  (Achtung: diese Werte müssen 64bit aligned sein! Frühe
                  Versionen der PNP-Karten schlagen evtl. falsche Werte vor!)
        6. Aktivieren der Konfiguration per:
           "isapnp /etc/isapnp.conf"
           (muß bei jedem Booten gestartet werden)
        7. Nun kann das HiSax-Modul gestartet werden mit:
           "modprobe hisax io=4,<P>,<INT>,<IO0>,<IO1>"
             4     - PNP-Karte
             <P>   - Protokoll:
                       2 - für Euro-ISDN (normalerweise)
                       1 - für 1TR6-ISDN (deutscher Vorgänger von Euro-ISDN)
             <INT> - der in /etc/isapnp.conf bei INT0 eingetragene Wert
             <IO0> - der in /etc/isapnp.conf bei IO0 eingetragene Wert
             <IO1> - der in /etc/isapnp.conf bei IO1 eingetragene Wert
        Ich habe bei meinem Rechner 2 Runlevel definiert (3 und 4), 3 läuft 
        ohne isdn, 4 mit. Wenn ich ISDN mitsamt den dazugehörigen Prozessen
        wie ipppd, isdnlog und mgetty stoppen will, gebe ich als root "init 3"
        ein, zum Starten dann "init 4". Init sorgt dann dafür, daß über 
        "/sbin/init.d/i4l start" bzw. "... stop" die notwendigen Dinge 
        angestoßen werden.
        Das ist kein Problem - machen wir schon lange.
        - Einfach ein isdn-Interface anlegen
        - wichtig dabei: encap isdnX ethernet
        Den Rest macht "mars_nwe" (incl. Routing), ein vollständiger
        Novell-Netware-Emulator. Den gibt es z.B. auf:
        ftp://ftp.gwdg.de/pub/linux/misc/ncpfs/mars_nwe-0.98.pl7.tgz
        Das Entladen der Module, wenn sie eine Minute lang nicht mehr
        gebraucht wurden, macht der kerneld defaultmäßig. Das ist bei Modulen
        wie Gerätetreibern ala Floppy etc. kein Problem; bei Treibern aber,
        die irgendwelche Einstellungen über einen längeren Zeitraum behalten 
        müssen, aber doch. Z.Bsp. sind die Einstellung des Mixers bei einer 
        Soundkarte oder die Konfiguration von Dialin- und Dialout-Parametern
        beim ISDN-Treiber solche. 
        Das Entladen des ISDN-Treibers zerstört z.B. auch das IP-Interface
        ippp0 oder isdn0. Die Einträge in der IP-Layer des Kernels gehen dann
        ins Leere. Wenn man mal in die Start-Up-Skripten von i4l reinschaut,
        wird man eine ganze Menge Dinge finden, die mit isdnctrl etc.
        eingestellt werden; die müßte der kerneld bei jedem erneuten Laden
        wieder einstellen lassen. Auch der Status des D-Kanals auf ISDN könnte
        zu den Dingen gehören, die durch das Entladen verloren gehen.
        Also mein Tip ist, nicht vom kerneld laden und entladen lassen,
        sondern beim Systemstart laden und nur entladen, wenn es aus
        technischen Gründen nötig ist.
        Genau für diesen Zweck gibt es seit geraumer Zeit in dem Modules
        Paket eine Erweiterung, die es erlaubt, eine Datenbank mit
        Zustandsinformationen über die Treiber zu installieren. Leider wird
        dieses Feature bisher kaum oder gar nicht von den Modulen
        unterstützt.
        Als Alternative bieten sich auch solche Optionen wie der
        "post-install" Hook in der "/etc/conf.modules" an. Es ist dann zwar
        erforderlich, daß man von Hand die passenden Skripts schreibt, aber
        im Prinzip funktioniert das dann genauso gut wie, wenn das Modul eine
        automatische Initialisierung über eine Datenbank durchführen würde.
        Nachdem auch der Patch vom Eberhard Moenkeberg auf ftp.gwdg.de kein
        cisco-hdlc ausdumpen kann, habe ich hier mal einen isdn-patch fuer
        tcpdump-3.0.4 gemacht, der das Interface fragt, was fuer eine
        Encapsulation es benutzt und sich entsprechend einstellt. Das Teil ist
        gegen eine tcpdump-3.0.4-1.tar.gz Distribution, wie sie z.B. auf
          ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/tools liegt,
        gemacht. Dieser Patch erkennt RAW-IP, ISDN-IP und CISCO-HDLC und kann
        die Pakete entspr. dumpen.
        Es gibt doch isdn4k-utils-2.0/tcpdump-3.0.3-isdn.diff ! Damit klappts,
        sofern man noch selbst Hand anlegt:
        In der Datei tcpdump-3.0.3-isdn/libpcap-0.0/pcap-linux.c steht nach
        dem Patch irgendwo folgendes:
            else if (strncmp("ppp", device, 3) == 0)
        Entweder man nennt seine ppp-devices irgendwie pppX statt ipppX, oder
        ändert die Zeile z.B. in
            else if (strncmp("ippp", device, 4) == 0)
                              ^^^^          ^^
        Dann erkennt tcpdump auch sync-ppp. Jedenfalls bei mir.
       chgrp isdn /dev/ttyI* /dev/cui*
       chmod o-rw /dev/ttyI* /dev/cui*
        * Telefon
        * Analogmodem (als Fax, Anrufbeantworter und Daten-Modem genutzt)
        * Dial-In für X.75 (Modememulation)
        * Dial-In mit SyncPPP
        - Telefon (Sprache)
        - VBOX (Sprache, klar)
        - X.75-Login (mgetty /dev/ttyI?)
        - IP-Interface für IP-Verbindungen zu anderen Rechnern?
        Die erste ist von der Anlage mitgegeben und ungeprüft.
        Die zweite ist die von der Telekom vergebene.
        Ich hatte hier auch schon solche Anrufe, wo ein Siemens-
        Mitabeiter aus München hier anrief und mit einer ellenlangen
        Nummer kam, deren Vorwahl 030 (Berlin) war.
        Ich rief daraufhin die Telekom an, was das denn solle, und
        die wußten auch erst nichts, dann fanden sie wen kompetentes,
        der sagte, daß das ginge.
        "CLIP no screening". Der Anrufer hat das (kostenpflichtige und nur am 
        Komfort-Anlagenanschluss(!) verfügbare) Feature, welches ihm die 
        Übertragung einer beliebigen Caller ID erlaubt.
        Die eigentlich benutzten Adressen sind:
          isac 980
          hscx 180/580
          cfg  d80
        Zur Verwirrung kommt es aufgrund eines Mißverständnisses: Teles
        gibt die HSCX0-Adresse als Referenz an, während der alte Teles-Treiber
        die cfg-Adresse benötigt. Da die Benutzer dadurch verwirrt waren,
        können die beiden Treiber nun beide Adressen handhaben (und die
        Benutzer sind dadurch erneut verwirrt ;-))
        #define NEW_GET_FREE_PAGES
        /* #define NEW_GET_FREE_PAGES */
        /* #define NEW_TIMERS */
        struct IsdnCard cards[]={
          { (byte *)0xd0000,11,0xd00,NULL } ,
            /* 1. Karte */ { (byte *)0xd8000,10,0xe80,NULL } ,
            /* 2. Karte */ ...
            /* u.s.w. */
          };
        # load modules
        /sbin/modprobe isdn.o
        echo "teles0 - Teles S0/16.2"
        /sbin/insmod $MODPATH/misc/teles.o -o teles0 teles_id=teles0
            io=0xd0000,5,0xd80,2
        echo "teles1 - Teles S0/16.2"
        /sbin/insmod $MODPATH/misc/teles.o -o teles1 teles_id=teles1
            io=0xd2000,9,0xe80,2
        echo "teles2 - Teles S0/16.2"
        /sbin/insmod $MODPATH/misc/teles.o -o teles2 teles_id=teles2
            io=0xd4000,12,0xf80,2
        /sbin/lsmod | grep teles > /dev/null
        Wenn Du was über Teles's Geschäftspraktiken lesen willst, schau dir
          http://www.inx.de/~chris/isdn.htm an.
        Bei HiSax wird die Hardware und das IRQ-Verhalten gecheckt, so daß der 
        Treiber nur dann geladen wird, wenn er Zugriff auf die Register hat und
        Interrupts generiert werden. ALSO:
          2*Laden erledigt
          HSCX version 0 oder F erledigt
          BUSY bei minicom u.ä. nur noch :
          * REAL BUSY
          * keine MSN/EAZ
          * Kabel/Leitungs Probleme
        Es kann nie schaden, die orginal Kernel-Sources erst mal zu sichern.
        Dann ins /usr/src/linux (da sollte sich der aktuelle Source befinden)
        gehen. Jetzt der Patch selbst:
          zcat HiSax_1.1.patch.gz |patch -p1 >& /tmp/HiSax.log
        Das -p1 ist sehr wichtig, da sonst alle files aus neuen directories in
        /usr/src/linux landen.
        Dann /tmp/HiSax.log nach errors/warnings/rejects durchsuchen, wenn
        welche auftreten die entsprechenden files anschauen und gegebenfalls
        von Hand korrigieren.
        Wer Gnu Patch besitzt, kann auch "... |patch -s -p1 " verwenden. Dann
        werden nur die Fehler berichtet. Und wer ein log will, kann auch
        "... |patch -s -p1 | tee /tmp/HiSax.log" machen. Damit bekommt man
        zusätzlich zur Bildschirmausgabe ein Logfile.
        Die Patches werde ich bis zur nächsten Version mit Buchstaben
        "numerieren" und auch auf ftp ablegen.
        1. Die o.g. Aussage ist nicht ganz korrekt:
           if ((channel &1)+1 == B-channel )
        2. Ich beschreib den Bug mal anders rum: Wenn gerade B-channel 1 von
           einem anderen ISDN Gerät belegt ist und i4l wählt raus bekommt der
           logische channel 0 von der VST den B-channel 2 zugewiesen.
           ---> geht
           Das andere ISDN Gerät hängt auf.
           Es kommt zusätzlich ein Ruf für i4l rein,natürlich für B-channel 1.
           Da aber channel 0 belegt ist und es eine feste Zuordnung
           B1->chan 0,2,4...
           B2->chan 1,3,5... gibt wird der call nicht angenommen.
          (chan 2,3 gibt es bei 2 Karten usw.)
        Das ist zwar relativ selten kommt aber vor und wird demnächst gefixed
        (wenn mir was Geniales einfällt).
        Leerlauf l1 ist down
          => beide LED blinken ca. 1s an 1s aus.
        l1 ist aktiviert (auch durch Telefon oder ä.)
          => Wechselblinken 0.5 gelb 0.5 grün
        Betrieb
          => 1.5 an 0.5 aus
             grün  HSCX A aktiv
             gelb  HSCX B aktiv
        Daß die ständig blinken hat die Ursache, das ich so bei der
        Entwicklung sofort gesehen habe, daß die Karte hängt.
        Thinking Objects Software GmbH
        Obere Heerbergstr. 17
        97078 Würzburg
        Tel: 0931-2877950
        Fax: 0931-2877951
        email isdn-support@think.de
        WWW http://www.think.de/
        /sbin/insmod -m /lib/modules/1.2.13/misc/isdn.o >/etc/isdn.map
        /sbin/insmod -m /lib/modules/1.2.13/misc/icn.o >/etc/icn.map
        /sbin/insmod -m -o icn2 /lib/modules/1.2.13/misc/icn.o >/etc/icn2.map
        /sbin/insmod -m /lib/modules/`uname -r`/misc/isdn.o > /etc/isdn.map
        #
        # ICN-2B, default port und mem (0x320, 0xd0000)
        #
        /sbin/insmod -m /lib/modules/`uname
            -r`/misc/icn.o icn_id=icn0 > /etc/icn.map
        #
        # ICN-4B hinzufügen auf port 0x328
        #
        /sbin/icnctrl add 0x328 icn1 icn2
        #
        # Noch eine ICN-4B auf port 0x300
        #
        /sbin/icnctrl add 0x300 icn3 icn4
        #
        # Firmware laden
        #     ICN-2B: 1TR6
        #  1. ICN-4B, beide S0 EDSS1
        #  2. ICN-4B, 1. S0: 1TR6, 2. S0: EDSS1
        #
        /sbin/icnctrl -d icn0
             load /etc/loadpg.bin /etc/pc_1t_ca.bin
        /sbin/icnctrl -d icn1
             load /etc/loadpg.bin /etc/pc_eu_ca.bin /etc/pc_eu_ca.bin
        /sbin/icnctrl -d icn3
             load /etc/loadpg.bin /etc/pc_1t_ca.bin /etc/pc_eu_ca.bin
        Ich verwende folgendes Skript um die Karte zu "starten":
          #!/bin/sh
          #
          # load modules
          /sbin/modprobe isdn.o
          /sbin/modprobe icn.o icn_id=icn0 icn_id2=icn2
          #                                ^^^^^^^^^^^^
          #                                Wichtig hierbei ist die Angabe von
          #                                icn_id2. Hieran erkennt der Treiber,
          #                                daß eine 4B verwendet werden soll.
          #
          # download firmload
          cd /usr/src/isdn4k-utils-1.3.97/icn
          icnctrl load download/loadpg.bin download/pc_1t_ca.bin
              download/pc_1t_ca.bin 
          /sbin/isdnctrl verbose 2
        modprobe icn icn_id=line0 icn_id2=line1 icnctrl io 0xd0000 0x340
        icnctrl add 0x340 line0 line1
        icnctrl load /sw/linux-i386/isdn4kutils-2.0.0/lib/loadpg.bin
            /sw/linux-i386/isdn4kutils-2.0.0/lib/pc_1t_ca.bin
            /sw/linux-i386/isdn4kutils-2.0.0/lib/pc_1t_ca.bin
        Für EDSS1:
          DRV1.11EC-Q.931-CAPI-CNS-BETA-15.07.95,BRV2.3
        Für 1TR6:
          DRV1.01TC-1TR6-CAPI-CNS-BETA-03.05.95,BRV2.3
        Auf i4l-Seite                         Auf ISPA-Seite
        ====================================================
        isdnctrl l2_prot isdn0 hdlc           \
        isdnctrl l3_prot isdn0 trans           >   -h0
        isdnctrl encap   isdn0 rawip          /
        ----------------------------------------------------
        isdnctrl l2_prot isdn0 hdlc           \
        isdnctrl l3_prot isdn0 trans           >   -h1
        isdnctrl encap   isdn0 uihdlc         /
        ----------------------------------------------------
        isdnctrl l2_prot isdn0 x75i           \
        isdnctrl l3_prot isdn0 trans           >   -l0
        isdnctrl encap   isdn0 rawip          /
        ----------------------------------------------------
        isdnctrl l2_prot isdn0 x75i           \
        isdnctrl l3_prot isdn0 trans           >   -l1
        isdnctrl encap   isdn0 uihdlc         /
        ---------------------------------------------------- 
        DFÜ-Netzwerk: ja. Es könnte noch eine andere Möglichkeit mit CINDI,
        WISPA u.ä. von Herbert Hahnewinkel (Kosten ca 80 DM pro Lizenz, und
        jeder User braucht dann eine) geben, aber das Geld habe ich nicht
        ausgegeben.
        AVMPort (Capi-Modememulation für Win' 95 verwenden, wichtig: auf der
        Win 0.95 "Anmelden am Netzwerk" einschalten.
        Systemsteuerung/Software/Diskette CD-ROM Admin/Apptools/Dscript
          - Scriptverwaltung für DFÜ-Netzwerke (siehe nach der Installation
            Start/Programme/Zubehör)
        Damit das Script was empfängt, bei ISDN Echo einschalten. Bei AVMPort
        geht das mit E1 im Initstring. 
        Wenn Du den Mac anrufst, stellt er sich auf das Protokoll (X.75 oder
        HDLC) ein. Wenn er Dich anruft, muß er das Protokoll explizit angeben
        (z.B. durch Anfügen eines "X" für X.75) an die Rufnummer - sonst ruft
        der Mac womöglich mit dem Leonardo-Protokoll an.
        isdnctrl l2_prot <interface> hdlc
        isdnctrl l3_prot <interface> trans
        isdnctrl encap <interface> cisco-h
        isdnctrl addif <interface>
        Seit Cisco-IOS 11.0.x (x = 7 ist das einzige, was ich kenne) habe ich
        keine Probleme mehr mit Cisco <-> HDLC <-> Nicht-Cisco. Das gilt
        sowohl für netgw als auch i4l als auch Banzai! an der Gegenstelle,
        wobei allerdings die jeweiligen speziellen Cisco-HDLC-Optionen wichtig
        sind.
        Wir hatten bis gestern hier Probleme mit AVM+W95 und Mini-Port-Treiber
        (PPP m. PAP). Der Ascend hat abgenommen und 3-4 sec später aufgelegt.
        Im Ascend Log stand nur Call refused, was aber nicht stimmte, da der
        Ascend abgehoben hat...
        Durch eine neue Firmware auf dem Ascend (4.6C+) statt der 4.6B+p2 ist
        das Problem wohl weg.
        Da wir davor ein anderes RACK hatten (von ITK) welches dieses Verhalten
        beim Kunden nicht zeigte, gehe ich mal davon aus, daß es der
        Ascend war. Neue Firmware für den Ascend gibts unter
          ftp://ftp.ascend.com/ 
        oder 
          ftp://ftp.ascend.de/
        wobei man hier höllisch aufpassen muß, daß man das richtige Image 
        nimmt :-)
       subscribe [meine mail-alias-adresse] ascend-users-de
       subscribe ascend-users-de
        Es gibt auch eine weitaus besser besuchte Mailingliste zum Ascend. 
        Diese ist allerdings in englisch (dafuer schreiben und lesen dort 
        auch Ascend-Techniker mit).
        Anmelden kann man sich unter  
           majordomo@bungi.com
        Im Body dann:
           subscribe  ascend-users
        Kann sein, dass das mit dem Authentication Type so funktioniert, ich 
        nehme für sowas jedoch als Password "Ascend-CLID".
        Ein Eintrag im users-file muß folgendermaßen aufgebaut sein:
          69123456 Password="Ascend-CLID"
          User-Name = "Username_fuer_Abrechnung"
          User-Service = Framed-User
        Also als Username die Caller-ID, als Password  "Ascend-CLID".
        [...] Ich hab hier mehrmals täglich saubere Verbindungen zu einem
        EL310, ich polle per ifcico FIDO darüber. Hier mal die Config des
        Elink: ati Elink 310 Version 1.36 OK ati4
        Baudrate: 115k2,N
        SIN unbekannt: Ruf annehmen
        Anschaltung: EDSS1
        SIN ungleich &B: Ruf annehmen
        Betriebsart: X.75
        SIN gesendet: neutral
        Mehrfachrufnummer: 980031
        E1 M1 Q0 V1 X2 &B049 &C1 &D2 &R0 &S1
        \A3 \J0 \N3 \Q3 \V1 %A013 %C1 %F1 FCLASS=000
        S00=000 S01=000 S02=043 S03=013
        S04=010 S05=008 S06=002 S07=040
        S08=003 S09=000 S10=007 S11=000
        S12=050 S13=01010000B S14=10011010B S15=00001110B
        S16=10110011B S17=049 S18=013 S19=003
        S20=000 S21=00000100B S22=000 S23=006
        S24=120 S25=128 S26=016 S27=002
        S28=003 S29=128 S30=000 S31=000
        OK
        (dasselbe funktioniert natürlich auch per Modem. Nur sieht da die
        Initialisierungs-Sequenz natürlich anders aus.)
        Ad 1: Man besorge sich diald. Keine Ahnung, wo man das Paket
              findet - Archie fragen (diald ist dazu gedacht, eine
              Defaultroute auf eine noch garnicht physikalisch be-
              stehende SLIP oder CSLIP-Verbindung zu legen; werden
              dann Pakete an dieses Pseudo-Interface geschickt, stellt
              diald die (C)SLIP-Verbindung her; welche Pakete einen
              Verbindungsaufbau auslösen, und wann/wie die Verbindung
              wieder abgebaut wird, ist alles konfigurierbar.) Dann
              installiere man das Binary und die Config-Files (man
              kann die im Paket enthaltenen Muster so übernehmen;
              nur, wenn z.B. ein PING einen Verbindungsaufbau bewirken
              soll, muß man minimal ändern; ggf. kann man auch Timeouts
              anpassen - halt etwas herumprobieren).
        Ad 2: Man nehme einen Kernel mit integriertem SLIP/CSLIP oder
              SLIP/CSLIP als Module (die natürlich geladen sein müssen)
        Ad 3: Isdn4Linux muß natürlich auch installiert sein; wichtig
              ist die Modem-Emulation (ttyIx).
        Ad 4: Man starte den diald, z.B. mit folgendem Script (heißt bei
              mir /etc/rc.d/rc.diald.t-online):
                /usr/sbin/diald /dev/ttyI2 -m aslip local 192.168.90.9
                    remote 192.168.90.1 defaultroute dynamic modem crtscts
                    lock speed 38400 connect "chat -v -f /etc/diald/t-online"
                    mtu 1500 dslip-mode local-remote
                (sinnvollerweise schreibt man das in eine Zeile :-)
        Ad 5: Man erzeuge das Script, das bei mir "etc/diald/t-online"
              heißt. Sieht ungefähr so aus:
                TIMEOUT 30
                ABORT "NO CARRIER"
                ABORT ERROR
                ABORT "NO DIALTONE"
                ABORT BUSY
                ABORT "NO ANSWER"
                ABORT "NO MSN/EAZ"
                "" ATZ
                OK AT&B2000&E<MyMSN>&X1
                OK ATD01910
                CONNECT .
                "[?25h" <ZugangsKennung>\c
                "[?25h" ""
                "[?25h" ""
                "[?25h" <passwort>
                "[?25h" *53#\c
                "[?25h" *190144100#\c
                "[?25h" 19\c
                "STATUS OK" LIN
                "" "OK"
        Darin müssen natürlich einige "Platzhalter" ersetzt werden:
        <MyMSN> ist die MSN, mit der man in die weite Welt hinauswill.
        <Zugangskennung>: Das meist mit "000..." beginnende Zahlenmonster,
                          welches die Telekom einem genannt hat.
        <passwort>:       Das Zugangspasswort eben
        In obigem Musterscript wird davon ausgegangen, daß Anschluß-
        und Mitbenutzernummer dem auf der Login-Seite vorgegebenem
        Default entsprechen. Ist das nicht der Fall, muß man halt
        die beiden Zeilen vor "[?25h" <passwort> entsprechend anpassen
        (gibt man eine Mitbenutzernummer der Art "0003" an, sollte z.B.
        die Zeile vor "[?25h" <passwort> lauten:
        "[?25h" 0003\c
        (denn das Eingabefeld ist nach "0003" voll, es darf kein CR mehr
        folgen))
        Wenn der diald läuft, sollte man urplötzlich über ein Interface
        "sl0" verfügen (ifconfig fragen), und die Defaultroute sollte genau
        darauf zeigen (route -n gibt Aufschluß; ohne "-n" würde "route"
        versuchen, die Phantasie-IP-Adressen, die man anfangs angegeben hat
        (und die später von "echten" überschrieben werden) aufzulösen - muß
        ja nicht sein).
        Oh, wer nicht nur mit IP-Adressen arbeitet, sondern erfolgreich auch
        z.B. "ftp stp.sunsite.edu" probieren will, sollte natürlich in
        /etc/resolv.conf einen Nameserver eingetragen haben (der/einer der
        Telekom hat die IP-Nummer 194.25.2.129).
        So, und nun Ftp, Telnet, Netscape, wasweißich starten. Das war's
        Übrigens: Der Diald schreibt Romane ins Syslog. Man kann den gesamten
        Login-Vorgang da nachlesen, auch wenn's chaotisch aussieht. Klappt ein
        Request nicht, sollte man den diald mit "kill" erwürgen (Routen werden
        automatisch gelöscht) und im Syslog nachschauen. Da können Sachen
        stehen wie "Zur Zeit keine verbindung möglich" - dann ist das Internet-
        Gateway der Telekom down. Oder man stellt fest, daß irgendwas mit dem
        Login nicht klappte - Vorsicht: Nach drei Fehl- Logins muß der Zugang
        von der Telekom "entsperrt" werden; das kann man per Telefon oder
        direkt von BTX aus erbitten (einfach per Terminalprogramm, z.B. seyon
        oder minicom, 01910 wählen, langsam per Hand durch den Login-Screen
        gehen und die Anweisungen befolgen)
        In der geschwätzigen chat-Version gibt es einen kleinen Fehler in 
        logf(): es wird solange in einen 256 Byte Puffer geschrieben, bis ein 
        Zeilenumbruch kommt. t-offline sendet aber deutlich mehr Bytes für die 
        Anmeldeseite ... Also entweder chat ohne -v aufrufen oder den Puffer 
        vergrößern (am besten mit Füllstandsüberprüfung).
        * Kein Handshaking mehr
          => schneller Verbindungsaufbau
        * Authorisierung per Caller Id
          => schnell, sicher, ohne Paßwort
        * Fixe IP-Adresse
          => eine abgebrochene Verbindung kann nach Wiedereinwahl
             fortgesetzt werden
        * Höherer Datendurchsatz
        * Hohe Stabilität (kleiner Treiber => kaum Bugs)
        * Kein Handshaking mehr
          => Konfiguration muß vorher stattfinden (IP-Adressen,...)
          => sinnvoll nur für maximal einen Provider gleichzeitig einsetzbar
        * Authorisierung kann nur per Caller Id erfolgen
          => Einwahl nur vom eigenen Anschluß möglich
        * Fixe IP-Adresse
          => muß vorher bekannt sein, höherer Verbrauch von IP-Adressen,
             keine dynamische Adreßvergabe möglich
         tail -f /var/log/messages |
             awk '/isdn0 connected/ { system ("ip-up") }
             /hangup isdn0/    { system ("ip-down") } '
(Die folgenden Fragen entstammen zumeist der syncPPP-FAQ von Michael Hipp.)
        #
        # inittab       This file describes how the INIT process should set up
        #               the system in a certain run-level.
        [...] 
        # PPPD for asyncPPP over ISDN
        i1:45:respawn:/usr/sbin/pppd -detach silent noipdefault /dev/ttyI0
(Die folgenden Fragen entstammen zumeist der syncPPP-FAQ von Michael Hipp.)
        /sbin/isdnctrl encap ippp0 syncppp
        "isdnctrl pppbind <interface> <Nummer>"
        "isdnctrl pppbind ippp5 2"
        /sbin/ipppd :$REMOTE noipdefault /dev/ippp0
        lcp-restart 1
        1. dein LAN ist ein offizielles Class C Netz mit im Internet gültigen
           IP adressen.
             Der Fall ist am einfachsten zu konfigurieren, du gibst jeder
             Netzwerkkarte in dem Netz eine dieser IP adressen und legst eine
             Default Route auf deine ISDN Karte, die ins Internet zu deinem
             Provider führt.
        2. Du möchtest aus deinem LAN heraus nur http ins Internet machen.
             In dem fall kannst du dir für dein LAN IP adressen ausdenken,
             die einzige offizielle IP Adresse ist die, die der ISDN Karte
             zugewiesen wird. auf deinem linux isdn router mußt du einen
             Proxy Server installieren, der bei deinen Browsern auch
             eingetragen wird. Du brauchst in dem Fall keine Default Routen.
        3. Du möchtest dich immer nur aus dem LAN auf deinem Linux ISDN
           Router einloggen und VON DORT deine Arbeit im Internet verrichten. 
             Das ist noch einfacher, denn dann mußt du nicht einmal einen
             Proxy Server.
        Den drei Möglichkeiten würde ich noch eine vierte hinzufügen. Selber
        hab ich es zwar noch nicht ausprobiert (da ich die erwähnte 1.
        Möglichkeit bevorzuge und ein Class-C-Subnetz habe, hehe ;) aber ich
        weiß von einem Freund, daß er nach einigem Tüfteln am Linux-Kernel
        dann tatsächlich das IP-Masquerading hinbekommen hat.
        Das funzt irgendwie soähnlich wie ein proxy (wenn man den
        ip-versteck-effekt betrachtet). Bietet natürlich kein Caching,
        maskeriert aber nach aussen hin alle internen Klau-IPs ;) mit der
        einen offiziellen des ISDN-Interface. Frag mich nicht, wie da
        irgendein Routing hinhaut, aber es geht...
        Wenn ich mich nicht irre, hat mein Freund sogar mit einer dynamischen
        IP maskeriert ?!
Die nachfolgende Anleitung wurde von Rainer May
<r_may@khavi.desaster.heide.de> zusammengestellt.
        Prompt for development and/or incomplete code/drivers  Y
        Enable loadable module support                         Y
        Networking support                                     Y
        Network firewalls                                      Y
        TCP/IP networking                                      Y
        IP: forwarding/gatewaying                              Y
        IP: firewalling                                        Y
        IP: masquerading                                       Y
        PPP (point-to-point) support (wenn PPP zum Provider)   Y
        SLIP (serial line) support                             Y
        Ethernet (10 or 100Mbit) (oder Arcnet oder ...)        Y
        ISDN support [1]                                       M
        Support synchronous PPP (wenn ipppd benutzt wird)      Y
        HiSax SiemensChipSet driver support                    M
          (dann den HiSax für die ISDN Karte wählen)
        ([1] Wer mag, kann die ISDN-Treiber natürlich auch direkt in den
        Kernel einbauen, anstatt sie als Module zu verwenden.)
        * Das ISDN-Subsystem läuft, d.h., von Linux aus kann eine Verbindung
          zum Provider hergestellt werden.
        * Das lokale Netzwerk (Ethernet usw.) läuft auch, vorzugsweise unter 
          Verwendung "freier" IP-Adressen (z.B. 192.168.xx.xx), und der Linux-
          Host kann von allen anderen Rechnern im LAN erreicht werden (z.B.
          per ping).
        * Zugriffe von einem beliebigen Rechner im LAN auf eine nicht-lokale 
          IP-Adresse sollen den Linux-Router veranlassen, eine Verbindung zum
          Provider aufzubauen; und
        * Der Linux-Router soll zwar die Rechner im LAN mit dem Provider
          verbinden, diesem gegenüber aber verheimlichen, daß nicht der Router
          selbst Empfänger/Absender der entsprechenden IP-Pakete ist.
        /sbin/modprobe ip_masq_ftp
        /sbin/modprobe ip_masq_irc
        /sbin/ipfwadm -F -a m -P all -S 192.168.123.0/24 -D 0.0.0.0/0 -b 
        Hmm. So wie ich das sehe, passiert da gar nichts. Grund: Die Rechner im
        lokalen Netz unterhalten sich ja direkt über die fake-Adressen im
        192.168.123.xxx-Netz. Zum Beweis kannst Du Deine Linux-Kiste einfach
        abschalten (naja OK, shutdown...), und die lokalen Rechner werden sich
        weiter unterhalten können. Also wird da auch nix masqueraded.
        Der Hintergrund: Masquerading ist eine FORWARD Rule im Firewall und
        wird daher auch nur beim FORWARDEN (wörtlich zu nehmen: WEITERleiten) 
        verwendet.
        Netz-intern wird nichts geforwarded und deshalb auch nichts
        masqueraded, solange Du nur eine Netzwerkkarte hast. Bei mehreren
        Karten hast Du jedoch recht: Hier sollte man entsprechende Routing-
        und auch ipfwadm-Einträge vornehmen.
        * Man verwendet synchrones PPP für die Verbindung zum Provider, also
          den "ipppd". Dann ist nichts weiter zu tun als dafür zu sorgen, daß
          immer die Default-Route des Routers auf das entsprechende ipppx-
          Interface weist. Vorsicht: Beim Verbindungsabbau löscht der Kernel
          diese Route!
            Sie muß also z.B. in der Datei /etc/ppp/ip-down neu gesetzt werden.
          Das Risiko bei diesem Verfahren sind Programme auf den LAN-Rechnern,
          die mehr oder weniger regelmäßig Nameserver-Requests, Keepalive-
          Pakete oder ARP-Broadcastings erzeugen - dann stellt nämlich der
          Router jedesmal eine Verbindung zum Provider her. Die Telekom wird's
          danken.
            Übrigens kann es passieren, daß manche aus dem LAN initiierte 
          Verbindungen recht lange auf Antwort warten. Ich weiß nicht, ob
          Kernel oder ipppd das "auslösende" Paket verschlucken, oder die
          Antwort darauf unterschlagen; ich weiß aber, daß es hilft, z.B. bei
          Netscape wenige Sekunden nach Anforderung der ersten Seite auf den
          "roten Knopf" zu drücken und die Seite nochmals anzufordern.
        * Benutzt man asynchrones ppp oder gar SLIP/CSLIP für die Verbindung
          zum Provider, kann man das Programm "diald" [4] verwenden. Es bietet
          zudem den Vorteil, extrem stark konfigurierbar zu sein; so kann man
          z.B. festlegen, daß zwischen 0900 und 1200 grundsätzlich keine
          Verbindung aufgebaut wird, daß Nameserver-Anfragen eine Verbindung
          zwar nicht aufbauen, aber offenhalten können u.v.m. Wer sich mit
          diesen Konfigurationsmöglichkeiten nicht herumschlagen mag, braucht
          das indes auch nicht - die Default-Konfiguration kann man ohne
          Gefahr für Leib und Geldbörse übernehmen :-)
        #!/usr/bin/perl
        select((select(STDOUT), $| = 1)[$[]);
        select((select(STDIN), $| = 1)[$[]);
        exec "cu","-E","''", "-l", "$ARGV[0]";
       die "$0: Cant exec cu: $!\n";
        modem           20006/tcp       modemd  # Modem service via TCP
        isdn            20007/tcp       modemd  # ISDN  service via TCP
       Das ist bei allen Karten mit 1 Siemens ISAC so, der hat (und braucht)
       nur 1 Empfaenger und 1 Sender.
       Theoretisch besteht eine Moeglichkeit, mit nur einem Empfaenger den
       kompletten D-Kanal zu belauschen (das macht der ISAC sogar) und zwar
       werden die auf der RX Leitung empfangenden D-Bits auf sogenannte Echo
       Bits zeitversetzt auf die TX Leitung kopiert, darueber erfolgt die
       Access Kontrolle (Kollisionserkennung) des S0 Busses.
       Leider gibt es im ISAC im TA Mode keine Moeglichkeit die ECHO Bits aus
       einem Register zu lesen.
 B  3 -- RX+ 2a ---------------\
 U  4 -- TX+ 1a -- offen        ------------
 S  5 -- TX- 1b -- offen        ------------  Karte
    6 -- RX- 2b ---------------/ 
        #!/bin/bash
        #ISDNBUTTON: Disconnect ISDN
        /sbin/isdnctrl list isdn0 | grep Outgoing | grep -q 0251XYZ &&
             /sbin/isdnctrl delphone isdn0 out 0251XYZ
        /sbin/isdnctrl hangup isdn0
        exit 0
        #!/bin/bash
        #ISDNBUTTON: Connect ISDN
        /sbin/isdnctrl list isdn0 | grep Outgoing | grep -q 0251925020 ||
             /sbin/isdnctrl addphone isdn0 out 0251925020
        exit 0
        GRÜN - mindestens eine ISDN Verbindung ist zur Zeit aktiv. Leider
                kann ich nicht überprüfen, womit diese Verbindung aktiv
                ist (siehe andere Mail in die Liste). Es muß sich also
                nicht unbedingt um eine Netzwerkverbindung handeln und es
                werden auch eingehende Verbindungen angezeigt (was ich in
                meinem Fall aber auch ganz gut brauchen kann).
        GELB  - keine aktive ISDN Verbindung wurde entdeckt, aber
                mindestens eines der ISDN Interfaces hat eine ausgehende
                Telephonnummer fuer Demand-Dialing. Es besteht also die
                "Gefahr", dass automatisch eine Verbindung aufgebaut
                werden kann.
        ROT   - Keine der oben genannten Punkte trifft zu. In der Regel
                bedeutet das, daß
                a) der Kernel gar kein ISDN kennt, oder das ISDN
                   Subsystem nicht aktiv ist, oder
                b) ISDN Auswahlverbindungen deaktiviert sind.
(Die folgenden Antworten entstammen zumeist der Anleitung zu vbox von 
Matthias Heßler <hessler@wi-inf.uni-essen.de> und
Bernhard Hailer <dl4mhk@lrz.uni-muenchen.de>; man findet sie unter:
http://www.lrz-muenchen.de/~ui161ab/www/isdn/
- dort "Audio!" anklicken!)
        cat xxx>/dev/audio 
       sox <file>.wav -r 8000 <file>.ul rate
       rmdcatheader -u <file.ul> > <file>.msg
       cat <file>.ul >> <file>.msg
        Zuerst wird - gleich beim Booten - diald "scharf gemacht" 
          # /etc/rc.d/rc.diald
          /usr/sbin/diald /dev/ttyI4 -m ppp
            local 192.168.90.9 remote 192.168.90.1
            defaultroute dynamic modem crtscts lock connect "chat -v -f
            /etc/ppp/chat.provider"
        (in einer Zeile!)
        Datei /etc/ppp/chat.provider:
          TIMEOUT 240 "" AT&E1234 OK ATD047110815 ogin: Puser sword: topsecret
        Telefonnummer, Name sowie Paßwort sind natürlich gefälscht :-)
        Ich benutze den chargeint, das klappt hervorragend; Gebühren kommen
        bei mir während der Verbindung, aber ich glaube, man kann das auch per
        Hand justieren. Du mußt mit den beiden in
        isdnlog-2.50/contrib/chargeint zum einen die Kernel-Sourcen, zum
        anderen die isdn4k-utils-2.0 patchen; dann den isdnlog mit dem Flag
        -Dchargeint compilieren (siehe Makefile). Kernel und isdnctrl
        natürlich auch neu kompilieren.
        Dann den isdnlog mit der option -hx starten, wobei x die Anzahl der
        Sekunden ist, die noch zum Gebührenimpuls fehlen. Da legt der chargeint
        dann auf. Im start-script für isdn wie gewohnt einen huptimeout
        definieren, zusätzlich den chargeint scharf machen:
        /sbin/isdnctrl huptimeout ippp0 80  # in sec;
        nach Bedarf /sbin/isdnctrl chargeint ippp0
        Der chargeint legt immer zwei Sekunden vor dem Ende der
        Gebühreneinheit auf. Der isdnlog setzt, wenn er mit -Dchargeint
        compiliert wurde, mit "-h" die Dauer der Einheit (i.e. Charge
        Interval) abhängig von der Tageszeit und des Datums. Ein zusätzlicher
        Parameter für "-h" verkürzt diese Dauer um den angegeben Wert.
        Letzteres darf man bei Verwendung des chargeint aber nicht verwenden,
        da sonst der chargeint die Verbindung zu früh beendet. Der Fehler
        vergrößert sich mit der Anzahl der Gebührentakte. Also: "-h0" angeben,
        um das Problem zu vermeiden.
          > /sbin/isdnctrl huptimeout ippp0 80  # in sec;
        In diesem Anwendungsfall ruhig kürzer, ich habe 5 Sekunden angegeben.
        Dann kann ich die letzte Einheit bis auf 7 Sekunden (huptimeout + 2
        Sekunden "chargeint-reserve") ausnutzen.
          > /sbin/isdnctrl chargeint ippp0
        Nicht nötig, wird von isdnlog mit "-h" erledigt.
        1. Den Kernel mit "isdnlog-2.50/contrib/chargeint/patch-chargeint-2.04"
           patchen, neuen Kernel backen und booten
        2. Die isdn4k-utils-2.0 mit
           "isdnlog-2.50/contrib/chargeint/patch-chargeint-kutils"
           patchen, make clean; make install
        3. In der "/etc/isdnlog/isdnlog.conf" bei den gewuenschten Gegnern
           das jeweilige Interface in Spalte 4 eintragen, und noch mal
           die Korrektheit der Zone-Eintraege pruefen
        4. Im "Makefile" von isdnlog "-DCHARGEINT" bei "COPTS" anfuegen,
           make clean; make install
        5. isdnlog mit der weiteren Option "-h0" starten, fertig!
        #
        # ISDN Lines
        #
        I0:56:respawn:/usr/local/sbin/mgetty ttyI0
        I1:56:respawn:/usr/local/sbin/mgetty ttyI1
        port ttyI0
        modem-type data
        speed 38400
        init-chat "" ATZ OK AT&E0 OK AT&B512 OK
        i0:45:respawn:/sbin/mgetty -D -m '"" ATZ OK AT&E0 OK AT&B512 OK'
            -s 38400 ttyI0
        #/AutoPPP/ - ppp /usr/sbin/pppd auth -chap +pap login kdebug 7 debug
        <login-name> * ""
        * * ""
        MSN     Analog                          Digital
        ===     ======                          =======
        1       Voice + ISDN-Anrufbeantworter   HDLC-PPP
        2       Voice (Mutter)                  Netz-Interface
        3       Modem/Fax                       X.75
        Von Routern mit 1 BRI scheint es jede Menge zu geben, die wenigen mit 
        mehr sind recht teuer (Cisco 4000 mit vier Anschlüssen etwa DM
        15000.--, Ascend Pipeline 400: ?). 
        ISDN-Router mit 4xBRI gibt es auch noch preiswerter von einem
        deutschen Hersteller - siehe http://www.conware.de/
        Ein Banzai! könnte auch helfen. Als Hardware tut's jeder beliebige PC 
        mit (z.B.) teles-Karten, die Software kostet so um die 800-1000 DM.
        Ich persönlich mag Banzai!-Router überhaupt nicht wegen Ihrer 
        schlechten Diagnosemöglichkeiten, insbesondere ist Fernwartung so gut 
        wie nicht möglich (es sei denn, man hat die SNMP-fähige Version, aber 
        die kostet dann gleich einiges mehr). Aber wenn sie laufen, laufen sie 
        stabil und im Unterschied zu Cisco's können sie einen echten Callback.
        Von Cisco gibt es als Alternative noch die Cisco 2503 für etwa 5000
        DM, die zwar nur einen BRI-Port hat, aber dafür zwei serielle 
        Schnittstellen, an die man einen TA (je etwa 800 DM) hängen kann. 
        Schließlich kann man last, not least in den saueren Apfel beißen und 
        sich mehrere Cisco 1003 antun (ca. 2000DM pro Stück). Falls Geld keine 
        gar so dringende Rolle spielt, würde ich persönlich die letztere 
        Variante bevorzugen: Ich mag Cisco's einfach. :-)
        Also du solltest dir eben überlegen, WAS dir am wichtigsten ist:
          (1) Geld sparen
          (2) Zeit sparen
        Für (1) gibt es 2 Lösungen:
        - Banzai! (heißt jetzt übigens Flux oder Concorde..)   
          -> http://www.concorde.de/ (von cls: http://www.cls.de/)
          -> http://www.flux.de/ (von INS: http://www.ins.de/).
          Basiert auf mind. einem 386er und routet eben Ethernet -> ISDN,
          tut mit vielen Karten, die Programmierer arbeiten m.w mit Teles.   
          Nachteil: nicht sauber fern-konfigurierbar, außer du kauft die SNMP 
          Option dazu, was die Sache aber teurer und entsprechend
          unattraktiver macht..
        - ISPA + PCROUTE   
          -> http://www.biochem.mpg.de/~heha/
          benötigt auch einen PC (tut auch schon mit einem 286er). Hat deutlich
          weniger Optionen wie Banzei, Flux, Concorde etc. ist ebenfalls gar 
          nicht fernbedienbar, läuft dafür aber bombenstabil. 
          PCROUTE kostet gar nix, ISPA inzwischen 70.-, ggf. findest du auch
          noch die Version 2.41 die auch ohne key unlimited läuft.
        Beide Lösungen unterstützen so ziemlich alle ISDN Protokolle (u.a 
        diverse HDLC Varianten etc..). Unterstützung für SPVs (bald eh
        obsolet) und D64S ist zumindest f. Teles-Karten da (kommt auch die
        CAPI drauf an, nicht auf die Software). Alte PCs kriegst du ja schon
        für <1.000 DM, die Teleskarte kostet nicht die Welt nur die Flux,
        Concorde Software wird doch recht teuer wenn man da SNMP dazu kauft
        -> du bist dann auch bald bei 2.000.- und dann kann du lieber gleich
        'ne cisco1003 kaufen..
        (2)
        Wenn du nicht basteln willst, nimmst du entweder 4 einnzelne
        Cisco1003 Router, die gibts so ab 2300.- und du bist mehr oder weniger
        alle Sorgen los (mal von diverse IOS-Bugs abgesehen..). Dummerweise
        können CISCO Router kein "richtiges" Callback... Und als Protokoll nur
        PPP (wobei es IOS-Versionen gibt, die daß nicht sauber machen!) und
        CISCO-HDLC.
        Wenn du 4 BRI brauchst -> CISCO 4000, dann solltest du aber gleich
        das 8-fach BRI kaufen, kostet nur knapp 2.000 DM weniger. Dann mußt
        du aber deutlich mehr als 10.000.- investieren..:-(
        Andere Variante: ELSA LANCOM MPR, kostet auch < 2.000 DM, kann
        Callback, diverse Protokolle (HDLC, X.75, PPP) und ist recht nett zu
        konfigurieren. Auf der Interop wurde ein Shiva ISDN Router mit a/b
        Wandler für 1600 DM vorgestellt, damit wärst du bei 4 BRI Ports bei
        etwas über 6000 DM...
        Dann gibts noch etliche Hersteller die einfach BRI-Router im Programm 
        haben (Preistendenz unter 2.000 stark fallend..), z.B ASCEND, MIRO
        usw.. Wenn du unbedingt 4fach BRI haben willst, gibts eigentlich nur
        die Wahl zwischen Cisco und Ascend..
        äh.. und weil du nach Ascend gefragt hast, hier habe ich noch ne 
        Preisliste von ascend gefunden (juli96), der max400  OHNE  BRI Port 
        kostet schon mal 15.750.-, das 4-fach BRI schlägt dann nochmal mit
        11.250 DM zu Buche... ich denke damit erübrigt sich ascend..:-( 
        Falls dir eine PC-Lösung nicht widerstrebt, könntest du noch netGW von 
        netcs verwenden (http://www.netcs.com). Das ist eine Software
        für SCO, AIX, Sun u.a und basiert bei PCs z.B auf den Karten von Diehl
        ISDN. netGW dürfte mit weitem Abstand die meisten Protokolle und
        Optionen bieten, dafür mußt du dich mit einem PC und den damit
        verbundenen Probleme anfreunden. So ein SCO-Lösung mit 4fach ISDN
        Karte + Software kostet aber auch so an die 10.000 DM.
        Wir haben inzwischen fast alle Banzai! und Co rausgerümpelt, weil sie
        auf Dauer schlecht fern-administrierbar sind und eben bei weitem nicht
        die Stabilität von Cisco oder anderen Stand-alone Routern haben..
        Letztendlich ist es eben eine Entscheidung ob die lieber etwas mehr
        Geld ausgeben willst, und dann läuft es auf Anhieb, oder du baust dir
        so einen PC Router zusammen und bastelst eben rum... daß muß jeder für
        sich selber entscheiden... Wobei Teles einen echt an den Rand der
        Verzweiflung treiben kann, da die CAPI Versionen oft massive Probleme
        haben und man als 08/15 User an alte CAPI-Versionen nicht ohne
        Probleme ran kommt. Der Support bei Teles ist nicht gerade berauschend
        (0190-8er Nummer!). Dann kann man ruck-zuck 20-30 DM vertelefonieren
        ohne eine Lösung des Problemes erhalten zu haben...
        Cisco ist sogar billiger als Linux wenns um PRI geht. Oder schon mal
        geguckt was PRI Karten für PC's kosten. ;)  Dann brauchte mann auch
        noch Treiber dafür etc...  Da ist mann schnell deutlich über 20k.
        Eine 4000'er mit PRI bekommt man schon für 12-15kDM.  Und wenn man
        versucht die Sache mit einzelnen S0's zu lösen wird's erst recht
        teuer...
        Für Dialup bis 4 x BRI (was halt in eine kiste geht) ist Linux
        allerdings vom Preis/Leistung her unschlagbar.  Auch eine 2'te Kiste
        macht noch Sinn.
        Dann sollte man sich langsam mal nach einer PRI Lösung umsehen.
        Beides läuft bei uns stabil und problemlos.
        Da werden die Daten einfach rausgeschickt! Wenn du an einer D64S oder
        2MB Leitung das eine Ende abklemmst, sagt dir dein Router, daß die
        Leitung selber "up" ist. Du hast - außer mit Ping o.ä. - KEINE
        Möglichkeit, zu erkennen, ob die Leitung weg ist oder nicht. (Bei ISPA
        z.B drehen sich die out-going "Rädchen"....)
        Das Einzige was du von deiner Seite messen kannst, ist der Loop zur
        nächsten Vermittlungsstelle. Wenn du statt Bchan1 auf Bchan2 gehst und
        Daten rausschickst, müßten die wieder zurückkommen. Das sieht man dann
        an der Statistik. Dies setzt voraus, daß die Telekom in der Vstelle den
        nicht benutzen Bchan auch so geschaltet hat.  Damit haben wir der
        Telekom mal nachgewiesen, daß die Leitung selber einen Kabelbruch
        hatte...
        Was dir allerdings passieren kann, wenn du nicht automatisch davon
        ausgehst, daß die Leitung da ist: wenn die Gegenseite noch nicht "up"
        ist, fließen keine Daten. Bei ISPA ist die z.B der Fall, weil der mit
        der Pseudo-Rufnummer 1tap bzw. 2tap und erst beim ersten Datenpaket
        loswählt und das Protokoll hochfährt. Einkommende Pakete werden
        schlicht ignoriert, u.a auch wegen der fehlenden Signalisierung....
        Nur bei S01 oder S02 Leitungen hat du einen D-Kanal und kannst was zum
        Signalisieren nehmen, die meisten mir bekannten Lösungen nutzen aber
        diese 16kb ebenfalls zur Datenübertragung und fahren dann 144kb statt
        128kb. Also versuch' es einfach mal, indem du die Daten losschickst,
        in der Annahme die Leitung ist vorhanden :-) im schlimmsten Fall laden
        die Daten im Nirvana...
        /sbin/telesctrl HiSax 5 0
       # binde Interface an 1. BChannel (,1 fuer 2.)
       /sbin/isdnctrl bind HiSax,0
       /sbin/isdnctrl eaz isdn0 1
       /sbin/isdnctrl addphone isdn0 out 2
       /sbin/isdnctrl addphone isdn0 in  3
Organization: Marcus Graf Hard- & Software To: usenet@mail.omikron.de (news), isdn4linux@hub-wue.franken.de Date: Sat, 25 Jan 1997 17:31:11 +0100
          Das geht sicher. Haben wir hier so im Einsatz. Funktioniert
        auch stabil (Kernel >2.0.26 ist notwendig, da sonst ggf.
        Routerkomplettstillstand). Nur, wenn Du den Stecker des Kabels
        zum Terminaladapter rausziehst und wieder reinsteckst oder
        Dir die Telekom da einen Aussetzer fabriziert, dann mußt
        Du auf beiden Seiten einmal (oder zweimal) auflegen lassen,
        damit die Leitung wieder steht. Das kann man notfalls mit einem
        "ping" und einem "isdnctrl hangup" per cron machen lassen.
        Weitere Doku außer der zum Sourcecode kenne ich nicht.
        Werde aber gerne bei weiteren Fragen helfen, da man mir
        schliesslich auch geholfen hat.
          Es gibt dabei mehrere Dinge zu beachten: LEASEDx ist die
        innumber auf dem Device; eine outgoing number ist nicht
        notwendig, da der Kernel (oder die Firmware, genau weiss
        ich das nicht) pseudomäßige, eingehende Rufe generiert,
        solange niemand "abgehoben" hat. Bei LEASEDx ist das kleine
        "x" durch die Nummer des S0-Interfaces zu ersetzen.
          Wir haben in den betreffenden Routern jeweils vier
        Interfaces (sie werden mit 0, 1, 2, 3, ... durchgezählt),
        weshalb ich auf dem letzten Interface die LEASED-line
        betreibe. Das macht Sinn. Denn die anderen drei Interfaces
        dienen für 6 B-Kanaele mit dial-up-Leitungen und es wird
        vom Kernel bei rausgehenden Rufen immer das erste freie
        Interface gesucht und dort rausgewählt. Wenn man dann
        die Leased Line auf das Interface 0 legen wuerde, wäre
        der zweite B-Kanal der Standleitung ja scheinbar (und
        nur scheinbar) noch frei. Der Kernel merkt aufgrund der
        aktiven Karte noch nichtmal, daß kein D-Kanal zum Wählen
        an dem Interface dran ist und wählt und wählt und wählt.
          Zur Vorsicht habe ich aus dem Grunde auch ein weiteres
        ISDN-Netzinterface kreiert und exklusiv auf dem scheinbaren
        zweiten B-Kanal der Standleitung gebunden, damit bei 6 belegten
        Dialout-Lines nicht auch noch auf der Standleitung ein
        Waehlversuch gestartet wird.
          Noch ein wichtiger Stolperstrick ist, daß bereits der erste
        reingehende Ruf, der pseudomäßig generiert wird, vom
        ISDN-Netzinterface abgenommen werden muss (sonst klappt
        wieder erst der Dritte und dann erst wieder der Fuenfte;
        genau weiss ich nicht warum, habe nur so eine Vermutung
        daß das an den beiden B-Kanaelen liegt, fuer die abwechselnd
        ein Ruf generiert wird; eine D64s hat aber nur einen B-Kanal).
        Das sofortige Abnehmen erreicht man wie folgt:
        * Modul für die ICN-Karte laden und konfigurieren (firmware
          laden, bus-reject, ...) ABER NOCH KEIN "icnctrl -d XXX leased"
        * Netzinterfaces des Kernel generieren mit innumber LEASEDx
          und allem anderen Schnickschnack (IP-Adresse, ...).
          Die Bindung zum entsprechenden S0-Interface nicht vergessen.
        * JETZT: icnctrl -d XXX leased
        Das Netzinterface muß also schon up sein, wenn "icnctrl -d XXX leased"
        abgesetzt wird. Denn mit diesem Befehl wird sofort der erste Ruf
        generiert und dann kann er gleich angenommen werden - und schwup
        steht die Leitung.
        Ja, das geht (zumindest in der Schweiz geht's). Achtung daß man den
        richtigen Kanal erwischt ;)
        TIMER_BCREAD = Intervall für B-Kanal-Poll (Einheit = jiffies = 20ms)
        TIMER_DCREAD = Intervall für D-Kanal-Poll           dito
        FLAG_RBTIMER (und andere FLAG_...) entsprechende funktion aus dem
        Haupt Timer dispatcher aufrufen.
        Den BCREAD hab ich wegen der Ping-Zeiten runtergesetzt, (war vorher
        auf 3) [Seit 2.0.16 auf 1 - die Red.]
        Die Auflösung des timers in Linux ist nur 20ms, so daß
        ICN_TIMER_BCREAD=0 nichts bringt. Außerdem ist das Problem eher
        kosmetischer Natur. Beide (Sende- und Empfangs-) Routinen leeren
        jeweils die Queue, d.h. wenn richtig Traffic gemacht wird, wird bei
        jedem Zyklus nicht immer nur ein Fragment übertragen, sondern bis zu
        16. Der Karten-Puffer faßt 16 Fragmente. Nur bei ping und Co. wird das
        sichtbar. FTP (oder auch Z-Modem über ttyI) kommen mühelos auf
        nahezu 8k cps. Außerdem werden bei jedem Zyklus beide Richtungen
        bedient, die Rechnung 20ms-receive + 20ms-send stimmt also nicht.
        Abgesehen davon 40ms ist ein wirklich guter Wert. Viele ISDN-Router
        (auch i4l vor der Reduzierung auf BCREAD=1) haben 60ms und mehr.
        Wegen ein paar Klagen vor dem Europäischen Gerichtshof gegen 
        die Telekom wohl bis Ende 1997. Wurde in den ensprechenden 
        Newsgroups gepostet und es könnte vielleicht auch was bei 
        http://www.birch.de zu finden sein (der klagte nämlich).
       isdnctrl addif <master-interface>
       isdnctrl addslave <master-interface> <slave-interface>
        1st: There seems to have been a change in the "BogoCharsPerSecond"
             calculations. This now gives values (for me) from 60 ->101.
             The values used by the isdn-net code for starting the slaves is
             still set to 7000 cps!  Needless to say it doesn't see these
             values anymore. After setting it to 75, I get the channels
             starting again.
        2nd: With 1 B-channel,  I get   8K /sec (full)
             With 2 B-Channels, I get ~14K /sec (~88 % util.)
             With 3 B-Channels, I get ~18K /sec (~75 % util.)
             With 4 B-Channels, I get ~15K /sec (~50 % util.)
        isdnctrl addlink <device>
        isdnctrl removelink <device>
        ...
        rcvd [0][proto=0x3d] c0 00 00 00 80 fd 01 01 00 0a 
        ...
        sent [0][LCP ProtRej id=0x2 00 3d c0 00 00 00 80 fd 01 
        ...
        Ich habe einen Schreibfehler in Kernel 2.0.20 gefunden, der jedoch auch
        in neueren Kernels existiert.
        Wenn man die folgende Zeile in isdn_ppp.c:
        (function isdn_timer_funct())
          #if (defined CONFIG_ISDN_PPP ) && (defined ISDN_CONFIG_MPP)
        in
          #if (defined CONFIG_ISDN_PPP) && (defined CONFIG_ISDN_MPP)
        ändert, wird's mit MPP Verbindung eher klappen.
        Ohne diese Änderung hängt sich MPP schon beim Verlust eines einzigen
        Paketes auf.
        1. Als erstes sollte überprüft werden, ob beim Booten alles
           funktioniert.
           Gibt es ungewöhnliche Fehlermeldungen in /var/log/messages?
           Sind nach dem Booten alle Programme aktiv, die gestartet werden
           sollten (mit ps überprüfen, bzw. fuser /dev/xxx)?
           HiSax wird nicht starten, wenn irgendetwas nicht funktioniert.
           Der alte Teles-Treiber dagegen kann durchaus scheinbar fehlerlos
           gestartet werden, ohne daß er tatsächlich funktioniert.
           Siehe dazu die Fragen unter Troubleshooting|Teles.
        2. Als zweites ruft man sich selbst mit dem Telefon an. Die
           Telefonnummer sollte in /var/log/messages angezeigt werden (in
           einer Message nach dem Muster: "isdn_tty: call from XXX -> YYY
           ignored"). Ansonsten wurden die Treiber vielleicht schon beim
           Booten nicht korrekt gestartet?
        3. Als drittes werden die eigenen Experimente mit der Modememulation
           fortgesetzt. Aufgrund der unterschiedlichen Dienstekennung kann man
           leider weder das eigene Fax noch das eigene Telefon zum Klingeln
           bringen, wir müssen anders vorgehen. Wir öffnen auf zwei
           verschiedenen Konsolen "minicom -s" als Root und setze die erste
           Konsole in "Serial Port Setup|Serial Device" auf /dev/ttyI0, die
           zweite auf /dev/ttyI1. Danach "Exit" anwählen und die
           Modememulation jeweils mit "ATZ" und "AT&Exxxxxxx" (xxxxxxx ist die
           eigene MSN ohne Vorwahl - das, was bei Schritt 2 in
           /var/log/messages als YYY angezeigt wurde) initialisieren.
           Jetzt kann's losgehen: auf der ersten Konsole wählt man seine
           eigene Telefonnummer mit ATDxxxxxxx an. Auf der zweiten Konsole
           sollten nun "CALLER NUMBER: xxxxxxx" und "RING" angezeigt werden.
           Nimmt man nun den Anruf auf der zweiten Konsole mit "ATA" an,
           sollte auf beiden Konsolen "CONNECT 64000/X.75" angezeigt werden,
           danach kann man sich gegenseitig Zeichen auf die jeweils andere
           Konsole schreiben (um auch die eigenen Zeichen zu sehen, muß man
           das lokale Echo einschalten).
        4. Als viertes kann man nun eine bekannte ISDN-Mailbox anwählen. Wer
           keine in der Nähe hat, kann sich auch bei Gernot einwählen, siehe
           Frage "Gibt es Rechner, die einen Gastzugang bieten, wo ich mein
           isdn4linux testen kann?".
           Bei Problemen mit der Modememulation siehe
           Troubleshooting|Modememulation.
        5. Als fünftes kann man sich nun an die Konfiguration der
           Netzinterfaces sowie ipppd wagen. Das bereitet Anfängern (und nicht
           nur denen) erfahrungsgemäß die meisten Probleme. Wer sich die Sache
           etwas erleichtern will, und mit asyncPPP zufrieden ist (zur
           Bedeutung von asyncPPP siehe Frage "pppd, ipppd, asyncPPP, syncPPP
           - was ist das? Was soll ich einsetzen?"), kann den normalen pppd
           über die Modememulation (also /dev/ttyI*) laufen lassen.
        ln -s /usr/include/curses.h /usr/include/ncurses.h
        Ich habe allerdings keine neuere Distribution gesehen (weder Slackware 
        noch Debian), die ein vollständiges ncurses packet besitzt.  
        /usr/include/ncurses.h ist vorhanden - manchmal heist es halt
        curses.h, aber das include File panel.h muß man sich trotzdem aus
        einem Original ncurses Paket holen.
        Bei Debian sollte man halt neben ncurses auch ncurses-dev installiert
        haben, wenn man selbst etwas darauf aufsetzendes compilieren will.
          bash$ dpkg -S panel.h
          ncurses3.0-dev: /usr/include/panel.h
       | | | | 
       | | | |
       1 2 3 4
        Da ich gerade keinen Patch zur Hand habe, erklär ichs mal so: in
        linux/drivers/isdn/teles/callc.c nach CC_ALERTING_REQ suchen und
        diese Zeile auskommentieren. Das sollte dann so aussehen:
          if (((chanp->chan & 1) + 1) & chanp->para.bchannel) { /* \
              chanp->is.l4.l4l3(&chanp->is, CC_ALERTING_REQ, NULL); */
              FsmChangeState(fi, ST_IN);
              if (chanp->debug & 1)
        Das ist die saubere Lösung. Für Datenverbindungen wird kein ALERT
        benötigt oder erwartet. Für die Voice Anwendungen ist das Alert nur
        dann wichtig, wenn man mehrere "Klingelzeiten" abwarten möchte.
        Es gibt [bei HiSax-Versionen<1.2 - die Red.] kein Alerting mehr.
        Manche hatten schon das Problem, daß die Telekom die Gebühren-Info nur 
        für bestimmte Dienste aktiviert haben. Die müssen das offensichtlich 
        für jede Dienstart (Voice, Daten, G4-Fax,...) getrennt machen.
        Ich denke, ich habe den Grund dafür gefunden, warum die Ascotel PBX
        Linux abschießt. Es ist kein übergroßer "FACILITY"-Frame, wie ich 
        früher mal schrieb, sondern ein Frame eines unbekannten Protokolls
        (0x44, während EDSS1=0x08 und DIS_N0=0x40, DIS_N1=0x41).
        [...]
        Jan den Ouden <denouden@groovin.xs4all.nl> hat dafür ja schon einen 
        Patch gemacht, welcher solche Frames einfach mißachtet. Ja, ich *habe* 
        diesen Patch ausprobiert... aber entweder habe ich irgendwas 
        fürchterlich falsch gemacht (z.B. Module nicht richtig geladen?) oder
        es gab einen anderen Grund für den Crash. Und wieder weiß ich nicht
        mehr weiter :-( Ich habe gerade den 2.0.18 ausprobiert und versucht,
        einfach einen Hexdunp der unbekannten Frames zu machen anstatt sie zu 
        interpretieren - und jetzt stürzt die Maschine nicht mehr ab. Und
        genau jetzt habe ich 2.0.20 probiert und sie ist auch nicht
        abgestürzt. *Schulterzuck*, Konfusion...
        Egal, wenn das wirklich nicht der Grund des Crashes ist, denke ich
        immer noch, daß Jan's Patch in den ISDN-Standardtreiber eingebaut
        werden sollte. Es ist keine gute Idee, daß Frames, die nicht vom Typ
        1TR6 sind, voreinstellungsmäßig als EDSS1-Frames interpretiert werden.
        Anmerkung: Der Patch, der hierzu gepostet wurde, hat noch einen bösen
        Bug: X.75 geht damit nicht mehr!
        1. TK-Anlage ausstecken
        2. PC abschalten
        3. TK-Anlage einstecken
        4. PC anschalten
        Cause 64 bedeutet "invalid information element contents" und ist aus
        dem 12TR7 Protokoll, das von Anlagen (bei uns Octopus-M) intern
        gefahren wird. 12TR7 beinhaltet 1TR6. Mehr weiß ich dazu nicht. Die
        Quelle ist ein netter Telekommensch. Dort gibt es "Richtlinien", die
        die Protokolle beschreiben.
        diff isdnctrl.c.dist isdnctrl.c
        240c240
        <   if (strlen(cfg.slave))
        ---
        >   if (cfg.slave && strlen(cfg.slave))
        #define HSCX_RBUF_ORDER 1 
        #define HSCX_RBUF_BPPS 2 
        #define HSCX_RBUF_MAXPAGES 3 
        (4096<<HSCX_RBUF_ORDER)/HSCX_RBUF_BPPS 
        Diese Fehler passieren gerne mit schlechten Sound-Karten bzw.
        Sound-Treibern, die die Interrupts zu lange disablen!
        Ich hatte den gleichen Fehler, bis ich die korrekte Netmask angab.
        insmod -m isdn.o | sort | sed -e 's/   / T /g' |
            egrep '.* T [a-z,A-Z,_]+' > /etc/isdn/isdn.map
        cat /System.map /etc/isdn/isdn.map > /iSystem.map
        Am besten überprüfen, ob der Interrupt korrekt registriert ist. Mit 
        "cat /proc/interrupts" kann man das testen. Folgender Eintrag weist
        auf einen Fehler hin:
          11:        0 + teles
        Die 11 ist korrekt, solange die Teleskarte auf Interrupt 11
        konfiguriert wurde. Die 0 jedoch bedeutet, daß die Teleskarte keine
        Interrupts akzeptiert, und damit nicht funktioniert. Das ist der
        bekannte "Busy"-Bug, er kann durch das Entladen und Neuladen der ISDN-
        Module wieder behoben werden. Der IRQ-Zähler muß nicht unbedingt auf 0
        stehen, auch niedrige Werte ungleich 0 weisen auf das selbe Problem
        hin. Man kann das relativ einfach testen:
          1. cat /proc/interrups, Zählerstand merken
          2. Mit dem Telefon den Rechner anrufen.
          3. Nochmal cat /proc/interrupts, der Zähler muß sich nun
             gravierend vom ersten Wert unterscheiden. 
        Bei PCI-Boards niemals IRQ 12 benutzen. Der wird manchmal von der
        Busmaus benutzt (auch dann, wenn man gar keine hat und für sie den 
        IRQ nicht aktiviert hat), daher geht der IRQ manchmal verloren, und
        man bekommt es mit Fehlern zu tun.
        Bei PCI-Boards niemals IRQ 15 benutzen. Der wird manchmal vom IDE 2
        benutzt (auch dann, wenn man den gar nicht nutzt und für ihn den 
        IRQ nicht aktiviert hat), daher geht der IRQ manchmal verloren, und
        man bekommt es mit Fehlern zu tun.
        Versuch mal statt eines "reboot" (per Kommando) oder "Ctrl-Alt-Del"
        einen Reset per Reset-Taster ("Hard-Reset") am PC.
        Bei manchen Motherboards (was nicht zwangsweise Schuld des
        Motherboards sein muß) werden bei einem "Soft-Reset" die
        Karten nicht wieder in ihren Grundzustand versetzt, so daß
        manche Treiber dann Probleme haben, die Karten anzusprechen.
        l1state 4 
        l1state 8
        l1state 13
        ph_command 9
        l1state 4
        l1state 0
        ph_command 0
        l1state 7
        ph_command 9
        Klarer Fall von IRQ-Problemen.  Gerade der 11 macht auf manchen Boards
        Probleme. Obwohl man denkt, daß manche IRQ's frei sind, werden sie dann
        doch vom BIOS irgendwie reserviert.
        Gut für einen Schuß sind immer IRQ 5 und IRQ 9. Falls Ihr keine Mäuse
        und Modems habt, könnt Ihr es auch mit 4 und 3 probieren. Damit klappts
        auch auf obskuren Boards.
        #ifndef PROTO_H
        #define PROTO_H
        #define PROTO_EURO      0x08
        #define PROTO_DIS_N0    0x40
        #define PROTO_DIS_N1    0x41
        #endif
        HiSax: Teles 16.3 found,irq:5 isac:a80 cfg:e80
        HiSax: hscx A:280 hscx B:680
        Teles3: HSCX version A: V2.1 B: V2.1
        <date> <time> foo kernel: HSCX B EXIR 10
        <date> <time> last message repeated <n> times
        Ich hatte schon vor einigen Wochen über meine Probleme, mit einem
        EL 310 zu connecten berichtet. Es kam keine Connect-Meldung für den
        Daten-Kanal vom ISDN. Das problematische Elink hängt an einem 1TR6
        Anschluß und hat identische Settings wie ein anderes Elink an einem
        Euro-ISDN Anschluß, mit dem ich nie Probleme hatte. Seit ca. 2
        Wochen funktioniert das jetzt plötzlich einwandfrei, ohne daß lokal
        oder remote etwas geändert wurde.
        Schlußfolgerung: Die Software in den Vermittlungsstellen scheint da
        eine Rolle zu spielen....
        { PPP_CCP, ccp_init, ccp_input, ccp_protrej,
          ccp_printpkt, ccp_datainput, "CCP" }
Weitere Hinweise finden sich im gleichnamigen Abschnitt im Kapitel "Konfiguration"!
        Gerade die ersten Pakete des Protokolls können verloren gehen, wenn
        sie sofort nach der Connect-Meldung auf dem B-Kanal rausgefeuert
        werden. Ich hatte das Problem bei raw hdlc, daß Pakete verloren
        gingen, aber nur wenn man von einer bestimmten Seite aus anrief.
        Vielleicht ist es auch ein Problem mit dem verwendeten Kabel...
        Wenn da wirklich kein Prozeß mehr drauf läuft, versuch mal:
          cu -l /dev/ttyI0 dir
          +++
          ath0
          ~.
        Vor und nach dem "+++" ist eine Sekunde Pause einzuhalten, sonst wird
        es von der Modem-Emulation nicht als Escape-Sequenz erkannt (wie echte 
        Modems). Achte mal auf Prozesse, die mit "ps -ax" in der zweiten
        Spalte einen Eintrag der Art "I0" oder "I1" haben, die haben nämlich
        ein ISDN-Terminal als controlling terminal. Eventuell mußt Du diese
        mit kill abschießen.
        Ich mußte das bei mir folgendermassen einstellen. Sonst bekam ich auch
        nur Fehler.
          # Prot
          protocol-parameter g packet-size 512
          protocol-parameter g short-packets y
          protocol-parameter g window 7
          protocol-parameter g remote-window 7
          protocol-parameter v packet-size 512
        Damit komme ich bei großen Paketen auf ca 7300 cps
        Bei mir pollen auch einige XP-Benutzer, wohl auch ohne Probleme. Ich
        habe folgendes gemacht: Zum einen habe ich die Send-Packetsize vom
        ttyI? auf 1024 gesetzt ("AT&B1024") und zum setze ich die
        Paketgrößen für das g-Protokoll beim UUCP:
          protocol-parameter g packet-size 2048
          protocol-parameter g remote-packet-size 0
        Wie gesagt, damit läuft hier alles prima.
       #define DATA_VERSION 1
       #define DATA_VERSION 2
        daemon.*                      /var/log/ppp-log
        Entferne das Kommentarzeichen aus der folgenden Zeile
        in /etc/syslog.conf:
          #*.=debug                       /tmp/debug
        Nach Änderung der Datei kannst Du mit "kill -1 <pid vom syslogd>" den
        syslogd zum restart bringen.
        Der in /tmp/debug erzeugte output ist auch geeignet, um das Aushandeln
        von Optionen zwischen den Gegenstellen zu optimieren.
        Das hatte ich auch! (S.u.S.E. 4.2 Kernel 2.0.0, isdn4k-utils 3.91 mit
        patch). Als ich dann den Kernel neu kompilierte u. ppp als Modul
        konfiguriert hatte, konnte ich ipppd starten. Da gibt's wohl
        Versionsprobleme. 
        isdnctrl addif ippp0
        isdnctrl encap ippp0 syncppp
        ... (siehe isdn4linux-Doku für weitere Informationen) ...
        Bei 1.2.13 sagt man dem Kernel, daß er *keinen* ppp-support
        haben soll, compiliert den Kernel, und macht *anschließend* ein
        'make modules', sowie ein 'make modules_install'. Damit wird dann
        alles(!), was nicht in den Kernel konfiguriert wurde, aber als module
        geladen werden darf, zum Zuladen mittels insmod vorbereitet. 'modprobe
        ppp' beim Booten (im geeigneten rc.xxx Skript) lädt dann das ppp-Modul
        und alle dafür nötigen Module (slhc etc.).
        Voraussetzung für ipppd mit 1.2.13: Installiere ppp-Version 2.2.0c.
        Auch in den Kernel-Sources (ppp-2.2.0c.tar.gz). Und Du brauchst dafür
        modutils 1.2.8 (modules-1.2.8.tar.gz).
        Ich hatte das gleiche Problem auch. Bei mir war es so, daß nach ca. 
        5 Minuten erst - nachdem mehrere dieser Meldungen in den messages 
        erschienen - der ipppd meldete: "started". Dann lief's aber!
        Naja, ich habe dann mal ein paar test-prints in den ipppd-Source
        gestreut und habe dann das Problem einkreisen können:
        Der ipppd berechnet bei der Initialisierung eine Zufallszahl (ich weiß
        nicht mehr wo), und benutzt dafür gethostid(). Das führt aber wohl zu
        einem DNS-Lookup. Daraufhin versucht die Kiste, den in /etc/resolv.conf
        angegebenen Nameserver anzusprechen.
        Da aber der ipppd noch gar nicht vollständig durchgestartet hat, kann
        der Nameserver nicht erreicht werden. Das führt dann zu den Meldungen.
        Die Lösung war ganz einfach:
        Ich habe in /etc/hosts meinen Rechner nicht nur mit dem Kurznamen (z.B.
        isdn) eingetragen, sondern auch noch den kompletten Namen inkl. der in
        /etc/resolv.conf angegebenen Domain, also z.B.
        x.x.x.x isdn isdn.wer.weiß.wo
        Danach war Ruhe und es lief!
        Noch etwas früher wird in main() die Funktion setipdefault()
        aufgerufen, welche (in options.c) gethostbyname() ausführt.
        Dieses führt natürlich auch zu einem DNS-Lookup und verursacht ebenso
        die Meldung "isdn_ppp_bind: Can't find usable ippp device"
        Es wären also 2 Stellen im Source zu ändern, um einen DNS-Lookup zu
        vermeiden.
        Einfacher ist es, in /etc/hosts den eigenen Namen einzutragen, ich
        hab's mit der IP-Adresse der eingebauten Ethernet-Karte gemacht.
        Es gab eine Änderung in patch-2.0.16, die das Problem verursacht haben
        könnte. Bis zum offiziellen Fix kann man den inoffiziellen Patch von
        ftp://ftp.gwdg.de/pub/misc/isdn/linux/ippp/isdn.diff versuchen.
        Der bei meiner Suse-Distribution mitgelieferte ipppd war bei mir
        defekt. Das Paket i4l-43b2.tar von ftp://ftp.suse.de/ hat mir
        geholfen.
        - nur einige wenige "LCP-conf-req SENT"-Meldungen (weniger als zehn)
          und dann ein "Term-REF:
          -> nachsehen, ob die ISDN-Karte richtig konfiguriert worden ist, denn
             es scheint, daß der Rechner nicht wählt (IRQ, IO, Protokoll oder
            ähnliches Problem)
        - nur wenigstens ein paar "RECV"--Medungen
          -> gut: die Karte wählt und die Gegenstelle versucht, zu
             kommunizieren.
             Vielleicht klappt nur die Authentifizierung nicht. Die ipppd-
             Konfiguration nochmals prüfen!
        - den Hinweis, daß der ipppd aus irgendwelchen Gründen beendet wird
          -> nicht gut... Man checke /var/log/messages und /var/adm/daemon.
             Das könnte ein Bug im ipppd sein.
        Bitte auf Kernel 2.0.14 downgraden ... In späteren Versionen (seit 
        2.0.16) gibt es einen kleinen Bug, der den ipppd beendet, wenn keine
        Verbindung zustandekommt. (Das sollte eigentlich gut gehen, wenn man 
        immer Verbindung bekommt.) Ein "quick and dirty hack" ist möglich,
        wenn man ein paar Zeilen im ipppd entfernt, aber es ist schon besser,
        bei 2.0.14 zu bleiben, bis der Bugfix seinen Weg in die neuen Kernels 
        gefunden hat.
        #!/bin/sh
        /sbin/route add default ippp0
        #! /bin/sh
        case $1 in
          on)
            /sbin/isdnctrl dial ippp0       #  Verbindung herstellen
            sleep 5                         #  warten, bis Leitung offen
            /sbin/route add default ippp0   #  Route setzen
            ;;
          off)
            /sbin/isdnctrl hangup ippp0     #  Verbindung abbrechen
            /sbin/route del default         #  und Route wieder löschen
            ;;
          *)
            echo -e "\a Usage: 'isdn on' or 'isdn off'"
            ;;
        esac
        XXX YYY ZZZ
        * * ZZZ
        Ich hatte genau das gleiche Problem bzw. die gleiche Meldung.
        Verursacht war es bei mir dadurch, daß ich in chap-secrets bzw.
        pap-secrets drei Einträge pro Zeile hatte (für client, server,
        secret), aber keinen vierten (IP adresses), JEDOCH: nach dem dritten
        Eintrag bis zur Position des vierten noch BLANKS standen.
        Nach dem Entfernen aller schleppenden BLANKS und/oder TABS lebt
        (i)pppd äußerst zufrieden mit meinen auth-files.
        Mein PAP Skript war verkrüppelt, da ich ein "#" in meinem Paßwort
        hatte! Nachdem ich das Paßwort sauber gequotet hatte (z.B. mit
        Anführungszeichen) war das Problem gelöst.
          Wir sind ISP hier in Dresden und setzen u.a. Linux für unsere Zugänge
        ein (sowohl I4L mit hisax als auch externe Terminaladapter) Wir haben
        das Problem vor allem mit Windows-95 und NT-Kunden, die die
        "eingebaute" (DFÜ-Netzwerk)-Software benutzen. Dabei ist es völlig
        egal, ob sich der Kunde mit async oder sync-PPP einwaehlt. Auch ist
        egal, welche Modememulation er auf seiner Seite benutzt. Allen Fällen
        ist gemein, daß die Einbindung über Microsoft-DFÜ-Adapter+Microsoft-
        PPP erfolgt. (ein Kollege erzählte mir neulich von einem ähnlichen
        Problem mit einem Macintosh-Kunden)
          Da es bei PPP ziemlich egal ist, wer Server ist und wer Client, frag
        mal deinen ISP über welche Technik Du dich einwählst. (mit
        Linux-Kunden und Trumpet-Winsock-Nutzern z.B. haben wir >>null<<
        Probleme (Ich schließe daraus einen Bug in MS-PPP)
          Folgender Workaround hilft bei uns aber in der Regel: (ist kein
        Heilmittel, hilft aber die Schmerzen zu lindern...)
          * Verringern der Max-MTU auf 576 oder gar (296)
          * Verringern des DefaultRcvWindow auf 2144
         Auf der Windows-95-Seite sind das zwei Registry-Einträge, auf der
        Linux-Seite kannst Du mal "mtu 576" und "mru 576" in den ppp-Optionen
        eingeben.
        (ffs. http://www.windows95.com/connect/trouble.html)
        Also, bei mir haben weder PPP-compressions-options geholfen, noch
       mru/mtu auf 296. Was aber gut geholfen hat, war der AT-Befehl:
         AT&B512
       der die maximal verschickten Pakete auf 512 Bytes begrenzt.
        mtu 1024
        Gestern habe ich eine feste IP-Adresse bekommen, und seitdem läuft der 
        automatische Verbindungsaufbau über ipppd phantastisch problemlos.
        Ebenfalls über eine normale serielle Schnittstelle mit async. PPP über
        V.120 und diald (per ELSA Microlink ISDN/TLpro --- wie auch über
        V.34-Modem) funktioniert das Ganze jetzt. Die Ausfallerscheinungen
        waren da ja vorher die gleichen.
        Resumee: Wer automatisches(!) ppp-Dialing benötigt, benötigt zwingend
        eine feste IP-Adresse. Wer seine Verbindung manuell(!) hochzieht und
        auch manuell wieder abbaut, kann wunderbar mit dynamischer
        Adreßzuweisung leben.
        Es wäre sicher an der Zeit, ppp in seiner Funktionalität soweit zu
        erweitern, daß es verbindungsinitiierende Pakete nicht nur zurückhält,
        sondern auch auf die abgehende IP-Adresse hin überprüft, diese nach
        erfolgtem Verbindungsaufbau korrigiert, und das Paket erst dann
        abschickt.
        Dasselbe ebenfalls für die Pakete, die nach dem initiierenden kommen
        bevor die Verbindung schon steht.
        Ebenso müßte der diald diese Funktionalität bekommen, wenn der den
        Verbindungsauf- und -abbau steuern soll.
        IP ist eben vom Konzept nie für dynamische Adressen vorgesehen gewesen,
        und stehende Verbindungen wie telnet oder ftp kann man über
        Verbindungsabbau und -wiederaufbau (mit neuer IP-Adresse) dann ohnehin
        nie mehr recover'n.
        1) Keine lokale Name-Server/Name-Server-Cache
        2) Lokale Squid Proxy-WWW-Server (und Netscape muss ihn benutzen).
        3) positive_dns_ttl auf 1 setzen in /usr/local/squid/etc/squid.conf
           damit Squid nicht die IP-Adressen cachet
          Jetzt wird die Verbindung immer gestartet mit der DNS-
        Anfrage, der immun ist gegen IP-Adresse-Änderungen (weil er
        mit UDP und nicht TCP laueft?). Wenn du andere Programme
        hast, die IP-Adressen cachen, musst du dir ueberlegen wie
        das umgangen werden kann. Normalerweise wird ein Program
        die IP-Adresse chachen, wenn es 2 mal zur selben Server
        connectet. Das ist natürlich kein Problem, wenn die
        beiden Verbindungen so kurz nacheinander erfolgen, daß
        die Dial-On-Demand-Verbindung noch die selbe ist.
        *** 1.14        1996/06/06 22:08:46
        --- isdnctrl.c        1996/09/04 19:13:39
        ***************
        *** 498,504 ****
                  }
                  printf("MSN/EAZ-mapping for %s:\n%s\n",argv[2],nstring);
                } else {
        !         iocts.arg = (unsigned long)argv[3];
                  if ((result=ioctl(fd,IIOCSETMAP,&iocts))<0) {
                    perror(argv[2]);
                    exit(-1);
        --- 498,506 ----
                  }
                  printf("MSN/EAZ-mapping for %s:\n%s\n",argv[2],nstring);
                } else {
        !         char buf[400];
        !         strncpy(buf, argv[3], sizeof(buf)-1);
        !         iocts.arg = (unsigned long)buf;
                  if ((result=ioctl(fd,IIOCSETMAP,&iocts))<0) {
                    perror(argv[2]);
        xosview reagiert, jedenfalls in meiner Version 1.4, auf das ip-
        Accounting des Kernels. Also einkonfigurieren, ggf. neuen Kernel
        bauen, dann anknipsen mit
          ipfwadm -A -a -S your-ip-address-here -D 0.0.0.0/0
          ipfwadm -A -a -D your-ip-address-here -S 0.0.0.0/0
        Wie's mit variablen IP-Adressen geht, weiß ich nicht, ich habe eine
        feste.
Rainer May <r_may@khavi.desaster.heide.de> hat einige Fragen und Antworten zum Thema "i4l und Masquerading" zusammengestellt:
        * Ist auf dem LAN-Rechner der Linux-Router als Gateway eingetragen
          (manche "Betriebssysteme" muß man komplett resetten, bevor Sie da
          eine Änderung mitbekommen)?
        * Liegt auf dem Router die Default-Route auf dem "Bereitschafts-
          Interface" zum Provider (z.B. auf ippp0 bei synch. PPP, oder auf
          sl0 bei diald (auch wenn die "echte" Verbindung nachher per ppp0
          geht - diald benutzt ein SLIP-Interface als "Türklingel")?
        * Erzwingt der Provider die Verwendung von Proxies? Dann müssen die 
          IP-Adressen der Provider-Proxies auch in den entsprechenden
          Programmen der LAN-Rechner eingetragen sein!
          Mir ist dabei aufgefallen, dass nach dem ersten Verbindungsaufbau via
        ippp0 das lokale Netzwerk wieder erreichbar ist. Dann steht auch in
        ifconfig ippp0 nicht mehr die 0.0.0.0 drin, sondern eine zugewiesene
        IP-Adresse aus dem Pool der Gegenstelle, die bei einem neuen
        Verbindungsaufbau neu gesetzt wird.
          In de.comp.os.linux.networking wurde der Thread bereits diskutiert,
        und es kam eine Lösungsmöglichkeit:
          Einfach auf ippp0 eine Dummy-IP-Nummer aus dem Pool setzen. Das
        lokale Netzwerk hat auch direkt nach dem Booten trotz default route
        keine Probleme mehr, und die IP-Nummer in ifconfig ippp0 wird sowieso
        überschrieben.
        Ist bei den "üblichen Meldungen" auch ein
          "(HiSax driver detected)"
        dabei?
        Falls nein:
        - hast du die Version 2.52 auch gestartet - nicht nur compiliert?
        - hast du das "telesctrl <DriverID> 1 4" auch nicht vergessen?
        - ISDN-Verbindungen funzen ansonsten schon?
        Falls ja: Melde dich mal bei mir (isdnlog@Kool.f.EUnet.de) mit
        den entsprechenden Log-Files (mit "isdnlog -v7" erstellt).
        Mein Problem mit isdnlog 2.50 und dem "wrong structure error" lag nur 
        darin, daß ich keine führende 0 bei den Aliases angegeben habe. 
        Beispiel:
          017201234567     Handy           1 -
        Bei mir sah es vorher so aus:
          *17201234567     Handy           1 -
        Damit scheint alles behoben zu sein.
        Bei mir schmierte isdnlog immer ab, weil im /etc/services isdnlog
        nicht eingetragen war.
        #!/bin/sh
        /usr/local/bin/play anruf.au 2>/dev/null
(Die folgende Frage/Antwort schickte uns Andreas Kool <akool@Kool.f.EUnet.de>
        - direkt beim Start von isdnlog oder isdnrep:
          Hier haben sich die beiden Programme beim Einlesen der "isdnlog.conf"
          vertüddelt.
          Abhilfen:
          - nie Blank's in der Alias-Spalte verwenden!
            (z.b.: "Meine MSN")
          - nie "#" in der Alias-Spalte verwenden!
            (z.b.: "MSN#3")
          - nie "\" in der Alias-Spalte verwenden!
            (z.b.: "MSN\#3") (Danke, Holger Wirtz <chick@midips.snafu.de>)
          - nie "*" als Eintrag in der Flags-Spalte angeben!
            (Danke, Werner Wiethege <ww@slarti.frankfurt.netsurf.de>)
          - auch die "START=" Zeile benötigt als Angabe, wann gestartet
            werden soll, also z.b.
              START=IOH=auplay hangup.au
            und nicht
              START=auplay hangup.au
            (Danke, Dirk Staneker <zxmjy04@student.uni-tuebingen.de>)
          - beim Einsatz der "-S" Option zum Starten von externen Programmen.
            Hierbei hat sich isdnlog leider im Code für den X11-Client "xisdn"
            verlaufen, und fing zum einen an, in sich selbst zu loopen, zum
            anderen hinterließ er gerne Zombies - dies wurde durch isdnlog-2.50
            korrigiert.
        Ich hatte neulich den gleichen Effekt, was bei mir nur daran lag, daß 
        ich aus Versehen zwei mal isdnlog gestartet hatte.
        Isdnlog habe ich inzwischen gepatcht. Das Problem ist der strftime()-
        Aufruf in Zeile 264 in isdnlog.c. Dort muß das "%e" durch ein "%d"
        ersetzt werden, dann geht wieder alles.
(Die folgenden Antworten entstammen zumeist der Anleitung zu vbox von 
Matthias Heßler <hessler@wi-inf.uni-essen.de> und
Bernhard Hailer <dl4mhk@lrz.uni-muenchen.de>; man findet sie unter:
http://www.lrz-muenchen.de/~ui161ab/www/isdn/
- dort "Audio!" anklicken!)
        /sbin/route del default
        /sbin/isdnctrl system off
        /sbin/ifconfig ippp0 down
        /sbin/isdnctrl system on
        /sbin/ifconfig ippp0 up 
        /sbin/route add $GATE-IP dev ippp0
        /sbin/route add default ippp0
        Leider gibts meines Wissens nach für tcpdump noch keinen patch für sync
        ppp encapsulation. Wenn du ipppd benutzt bleibt Dir deshalb nur die
        Möglichkeit, konsequent einen daemon nach dem anderen abzuschalten und
        sehen ob Ruhe im Karton ist. Insbesondere named, sendmail aber auch
        smbd (Samba) sind Kandidaten, die gerne Verbindungen aufbauen.
        Ich habs auch nur durch Killen verdächtiger Prozesse rausgefunden.
        Genaueres zum Suchen der Prozesse und wie man sie still bekommt gibts
        unter:
          http://www.fzi.de/sim/people/trautw/i4l/index.html
        Probier mal rauszufinden, welche Anfrage das auslöst, und zwar mit
        "isdnctrl verbose 3". dann sollte in der kernel-message-queue (siehst
        Du wenn Du "dmesg" tippst) ein Eintrag a'la:
          OPEN: 141.76.60.54 -> 193.171.67.253 TCP, port: 1686 -> 540
        aufscheinen. das obige beispiel heisst, dass unser rechner auf port 540
        post abholen will (uucp over tcp/ip over isdn).
        Ein kleiner Tip noch. Es gibt viele Daemons auf der Linux-Seite, die
        Broadcast auf allen Interfaces versenden. Das führt auch häufig zum
        Autodial.
        Da kann man die broadcast-Adresse auf das dummy0-Interface umlenken.
        Ist zwar nicht sauber, aber tut.
        Wenn beim Wintel der Nameserver des Providers eingetragen ist, und
        Sinnlos3.11/95 gestartet wird, muß (warum weiß nur Bill Gates) er
        sich unbedingt mit dem Nameserver unterhalten.
        Warum stellst du nicht einfach das Windows-Setting im Netzwerksetup:
          "Use DNS for Windows Names Resolution"    (oder ähnlich)
        auf No?
        Dann müßte Ruhe sein, zumindest bei mir ist es so.
       nmdb -S -B 192.168.99.255 -I 192.168.99.99
        Leider hat uns die Realität überholt - soweit ich gehört habe,
        baut Netscape z.B. jetzt in der Version 4.02 tatsächlich eine 
        Verbindung auf...
        Wenn man die keep-alive-Packets nicht beantwortet, beendet die Cisco
        das routing! Das passiert in der Regel nach dem 4. oder 5. keep-alive-
        Packet, das der eigene Router nicht beantwortet. 
        Die beste Lösung ist es, dem Provider mitzuteilen, daß man keine 
        keep-alive-Pakete haben will (no keepalive in der Cisco-Konfiguration).
        Gerade zwischen zwei Cisco-Routern und gemieteten Leitungen gibt es 
        keinen Grund, keep-alive zu verwenden. 
        LCP-Messages werden als Verkehr betrachtet und halten die Leitung
        offen. Es gab da einen kleinen Patch gegen Linux-2.0.21 mit 
        dem patch-chargeint-2.04 für isdnlog-2.50-Benutzung. Mit diesem Patch
        werden *alle* syncPPP-LCP-Daten bei der Berechnung des Hangup-Timers
        ignoriert, so daß der Hangup auch dann funktioniert, wenn der Provider
        alle paar Sekunden LCP-Echo-Requests sendet.
        Warnung: Der Code funktioniert bei *mir* (mit meinem Provider), ich
        weiß aber nicht, ob er auch bei *euch* geht! Einfach mal versuchen!
        Nach einigen Experimenten kam ich zu einer Lösung auf der Cisco
        (IOS 11.0.7), das "snapshot routing" genannt wird. Ich konfigurierte
        "snapshot server" auf dem BRI-Interface. Das bedeutet es wird nur dann
        Routing Updates verschicken, wenn es diese auch durch dieses Interface
        empfängt.
        im Modul isdn_net.c (Zeile 1720) gibt es den Kommentar "/* if this
        interface is dialing, it does it probably on a different device, so
        free this device */" und es wird die Funktion isdn_free_channel
        aufgerufen.
        [...]
        Das ganze sieht jetzt folgendermaßen aus:
          #ifdef CONFIG_ISDN_PPP
          if (p->local.p_encap == ISDN_NET_ENCAP_SYNCPPP)
            ippp_table[lp->ppp_minor]->state = IPPP_OPEN;
          #endif
        > ... ich habe den Code mal durchsucht und tatsaechlich
        > eine moegliche Fehlerquelle bei reinkommenden Anrufen
        > ausgemacht. Trifft das auf dein Szenario zu?
        > Wenn ja, mal die Zeile: (isdn_net.c, etwa Zeile 1730)
        >   p->local.pppbind = -1;
        > in der Funktion isdn_net_find_icall() rauswerfen.
       Ich habe die Zeile rausgeschiessen und siehe da es geht.
        Ein Cisco wählt unter Umständen so heftig, daß kein ipppd eine Chance
        hat, einen Callback zu starten.
        Ciscos sind so programmiert (definitive Aussage eines Cisco-
        Entwicklers):
          Wenn ein Cisco ein Paket empfängt, das über ein "dial on demand"
          ISDN-Interface herausgeroutet werden soll, auf dem noch keine
          Telephonverbindung besteht, und wenn gleichzeitig ein D-Kanal zum
          Herausrufen frei ist, dann wird sofort herausgerufen.
        Wenn also (so ist die Situation bei Delta Internet ein halbes Jahr
        gewesen) ein Cisco auf der anderen Seite steht, der locker 8 D-Kanäle
        zur Verfügung hat und wenn jemand einen simplen "ping <RemoteIP>"
        startet, dann benutzt der Cisco (im schlimmsten) Fall alle seine 8
        D-Kanäle, um das Gegenüber anzurufen. Sicher kann er nicht ein und
        dieselbe Telephonnummer mit zwei D-Kanälen gleichzeitig anrufen (gäbe
        ja sofort besetzt). So dumm programmiert ist er auch nicht, aber er
        macht den nächsten D-Kanal schon zum Herauswählen (Blockwahl)
        startklar, bevor der Ruf auf dem vorherigen D-Kanal als gescheitert
        betrachtet wird.
        So ein Cisco funktioniert also wie ein Maschinengewehr bezüglich des
        Herausrufens. Und kein Linux bekommt für einen Callback einen freien
        D-Kanal, wenn es der Cisco nicht will.
        Das Dumme ist: Ein Cisco erwartet, selbst wenn er auf "callback client"
        konfiguriert ist (Linux ruft zurück), immer, daß wenigstens einmal
        abgehoben wird, dann im Einvernehmen wieder aufgelegt wird und danach
        der Rückruf geschieht. Denn bei Verwendung von PPP muß immer, bevor ein
        Rückruf passieren darf, einmal der Username und das Paßwort
        ausgetauscht werden, um sicher zu gehen, daß derjenige, der den
        Callback wünscht, überhaupt dazu autorisiert ist. [...]
        Selber habe ich das Callback über PPP mit zwei CISCOs oft genug
        probiert. Versuche mit der Kombination CISCO <-> Linux sind jedoch,
        nach meiner Erkenntnis, zum Scheitern verurteilt.
        Denn ein CISCO handelt den Callback-Request stets über PPP aus.
        Dafuer muss also die Seite, die die Aufforderung zum Rückrufen
        bekommt erstmal abnehmen und alles aushandeln (Authentisierung,
        ...), dann wird aufgelegt und zurückgerufen.
        isdnctrl-Kommandos von Linux beeinflussen nur das Netzdevice
        des Kernels und haben bezüglich des Callback wenig bis gar
        keine Einflüsse auf den ipppd. Der bekommt gar nicht mit,
        dass er erwarten soll, dass die Gegenstelle zurückruft.
        Entsprechend beantwortet er auch Angebote des CISCO
        über das PPP, dass der CISCO auch zum Zurückrufen bereit wäre,
        mit einer Abweisung. Das veranlasst den CISCO zu der Annahme,
        daß er dann doch nicht zurückrufen soll. Denn wenn er nicht
        im Laufe der Initialisierung über PPP erfährt, daß der Anrufer
        zurückgerufen werden will (er muss explizit sagen: "Ich will"),
        tut er das auch nicht.
        Der Cisco wird Dir das bestätigen, wenn Du Dich auf Deinem
        Cisco einloggst und mit den Befehlen
          deb ppp chap
          deb ppp negotiotion
          deb ppp error
          term mon
        ansiehst, was er zu den Einwählversuchen Deines Linux-Rechners
        sagt, die dann, wenn sie zeitgleich geschehen, durch Debug-Meldungen
        kommentiert werden. Mach das bitte nicht auf der Console, sondern
        über einen Telnet, sonst kommt der CISCO mit dem Loggen über die
        serielle Schnittstelle nicht nach.
       isdnctrl callback isdn0 in
       isdnctrl cbdelay isdn0 1
        telesctrl <id> 3 1  ---> dec module_count
        telesctrl <id> 4 1  ---> inc module_count
        Zuerst mal kurz zum Fehler: deine Gegenseite mag die MP-MRU von 0x5dc
        nicht sondern will eine kleinere (0x5d7) .. das übernimmt allerdings
        der ipppd nicht (Bug) .. Probier einfach mal von vorneherein 0x5d7 als
        MP-MRU auszuhandeln.
        Wenn die MP-MRU nicht ausgehandelt wird, schaltet sich kein MPPP ein ..
        daher wohl auch die Folgefehler.
        EAZ 0: globaler Ruf (alle Telefone klingeln)
        EAZ 9: globaler Ruf (aber kein Telefon klingelt)
        0 würde ich nicht nehmen, da bestünde für meinen Geschmack zu
        sehr die Möglichkeit, daß sich i4l alle Gespräche klaut.
        * Modememulation:
          "AT&e123456789" (ohne Null am Anfang)
        * Netzinterfaces:
          "isdnctrl eaz <interface> 123456789" (ohne Null am Anfang)
          Für Testanrufe an sich selbst:
          "isdnctrl addphone <interface> in 123456789" (ohne Null am Anfang)
          "isdnctrl addphone <interface> out 0123456789" (mit Null am Anfang)
        * Modememulation:
          "AT&e123456789" (ohne Null am Anfang)
        * Netzinterfaces:
          "isdnctrl eaz <interface> 123456789" (ohne Null am Anfang)
          Für Testanrufe an sich selbst:
          "isdnctrl addphone <interface> in 123456789" (ohne Null am Anfang)
          "isdnctrl addphone <interface> out 0123456789" (mit Null am Anfang)
        In Österreich muß als eingehende MSN/EAZ immer "0" für die 
        erste (oder einzige) Rufnummer verwendet werden. Alle weiteren 
        MSNs sind normal zu setzen.
        Ian James
        Customer Service Manager
        SpellCaster Telecommunications Inc.		
        73 Laird Drive, Suite 206
        Toronto, Ontario	
        Canada M4G 3T4	
        Phone: 1 (800) 238-0547
        Fax: (416) 425-0854
        E-mail:  ipj@spellcast.com or sales@spellcast.com
        http://www.spellcast.com
     http://www.siemens.de/, gibt's einen Haufen PDF-Files drauf.
     Wenn Dir eine CD-ROM schriftlich genug ist: Technical Product Information
     for Siemens Semiconductors, Best.Nr. B192-H6641-X5-X-7400
     Siemens AG, Semiconductor Group, Balanstr. 73, Pf. 801709, D-81617
     München, Fax 089-4144-3952.
        (Zitat aus dem Siemens Handbuch)
        Richten Sie bitte Ihre Bestellung an:
        Siemens AG
        LZF Semiconductor Book Shop
        Postfach 2352
        90713 Fürth-Bislohe
        Tel (0911)3001-220/224
        Fax (0911)3001-238
        Preisgruppen (1994)
        I    DM  5.-
        II   DM 10.-
        III  DM 20.-
        IV   DM 30.-
        ISAC S PEB 2085; PEB 2086 ISDN Subscriber Access Controller
        Best-Nr. B115-H6485-G1-X-7600, 328 Seiten Preiskat. IV
        HSCX - High Level Serial Communication Controller Extended
        Best-Nr. B115-H6520-G1-X-7600, 140 Seiten Preiskat. III
        oder als CD-ROM
        Technical Product Information for Communication ICs (Edition 1, Jun
        95)
        Best-Nr. B193-H6905-X-X-7400, Preis ?
        Zitat O'Reilly Katalog 1997 (frisch von der Buchmesse):
        "Buchhändler erzählen uns, daß einige Bücher manchmal so stark mit den
        Tieren identifiziert werden, daß Kunden z.B. gar nicht mehr nach dem
        eigentlichen Titel, sondern z.B. einfach nur nach dem 'Kamel-Buch'
        (Programming Perl) fragen."
        Titel:  sendmail (3. Auflage 9/94)
        Autor:  Costales, Allman, Rickert
        ISBN:   1-56592-056-2
        Kosten: 66.-- DM
        http://www.ora.com/catalog/sendmail/noframes.html
        http://www.lob.de/