# Lock und PID-Files # Beschreibung, was bei der Installation genau gemacht werden muss # (isdn.conf vorhanden oder neu) ISDNLOG - Version 3.0 - 31-Mar-97 22:09 isdnlog ist ein Tool zur Auswertung der Info's vom ISDN-S0-Bus sowie isdn4linux. isdn4linux ist seit Version 1.3.69 im Linux-Kernel enthalten. isdnlog-3.0 wurde ausgiebig mit Linux-2.0.29 / isdn4kernel-2.0.29.5 getestet. Fuer alle, die es nun ueberhaupt nicht mehr abwarten koennen, hier das Quick-Installation-Guide ------------------------ 1. Linux-2.0.29 + isdn4kernel-2.0.29.5 verwenden: CONFIG_ISDN=m CONFIG_ISDN_DRV_TELES=m 2. isdn4k-utils.2.1.tar.gz auspacken, erstellen und installieren: cd /usr/src tar xzf isdn4k-utils.2.1.tar.gz cd isdn4k-utils make install 3. Konfigurationsdatei fuer isdnlog fuellen: vi | emacs | vim | e | nedit | ... | /etc/isdn/isdn.conf ----------------------------------------------------- [MSN] NUMBER = 4711 SI = 1 ALIAS = My Phone ZONE = 1 [MSN] NUMBER = 4712 SI = 1 ALIAS = FAX ZONE = 1 [MSN] NUMBER = 4713 SI = 1 ALIAS = X.75 ZONE = 1 ----------------------------------------------------- NUMBER = SI = ALIAS = ZONE = 1 4. isdn4linux das D-Kanal-Protokoll entlocken: telesctrl 1 4 mit entsprechend Driver-ID, wie beim "insmod" des Teles-Treibers angegeben, oder "line0", falls der Teles-Treiber im Kern enthalten ist. 5. isdnlog starten: /sbin/isdnlog -nsS -v1 w1 -m0x5f7 /dev/isdnctrl 6. Jede Menge rumtelefonieren 7. Sich mittels /usr/sbin/isdnrep die Rechnung ueber das unter 6. veranstaltete ausgeben lassen. Wenn das so nicht klappt, oder wer auch die ganzen anderen Features von isdnlog verwenden moechte, fuer den folgt nun der Inhalt: ======= 1. Was kann/ist/macht isdnlog? 2. Was kann isdnlog nicht? 3. Installation 4. Die Konfigurationsdatei "isdn.conf" 4.1 Grundeinstellungen 4.2 Telefonnummern 4.2.1 1. Eintrag: Telefonnummer 4.2.2 2. Eintrag: Alias 4.2.3 3. Eintrag: Tarifzone 4.2.4 4. Eintrag: IP-Interface 4.2.5 5. Eintrag: Info-Args 4.2.6 Konkretes Beispiel fuer die "-S" Option 5. Die Konfigurationsdatei "isdnlog.users" 5.1 Aufbau 6. Das AVON-Verzeichnis 7. Betriebsmodi 8. Start von isdnlog 9. Die Protokoll-Datei "/var/log/isdn.log" 10. Das Report-Modul "isdnrep" 11. Das Konfigurations-Tool isdnconf 12. Der X-Client xisdn 13. ChargeInt 14. Gebuehren-GAU Begrenzer 14.1 Watchdog 14.2 CHARGEMAX 14.3 CONNECTMAX 14.4 BYTEMAX 15. Dual-Mode 16. SQL-Anbindung 17. Probleme? 18. Verwendete Dateien 19. Verwendete Environment-Variablen 20. Verwendete Abkuerzungen 21. Danksagung Vorwort ------- Die Logdatei "isdn.log" ist nicht mehr im Verzeichnis "/var/adm/, sondern im Verzeichnis "/var/log" zu Hause. Fuer die isdn4linux-Version ("ISDN subsystem Rev: 1.5/1.5/1.5/1.5") respektive Linux-1.3.93 _muss_ isdnlog mit "-DSELECT_FIX" erstellt werden. Dadurch wird ein kleiner Bug in dieser Version umgangen. Dadurch entfaellt leider auch die Durchsatz-Ermittlung! Es wurden folgende Dinge geaendert, die vor dem ersten Start dieser neuen Version unbedingt angepasst werden muessen! Der X11-Version (isdnlog-X11-2.43.tar.gz) liegen einige Sound-Dateien als Samples bei. Diese Datei unterliegen _nicht_ dem GPL. Diese sind nur als Beigaben der Autoren zu Betrachten und stehen in keinem Zusammenhang mit den Sourcen. Aenderungen seit Version 2.50: - Konfigurationsdatei heisst jetzt isdn.conf statt isdnlog.conf - Neue Syntax der Konfigurationsdatei - Watchdog-Funktion (isdnlog ueberwacht isdn4linux) Aenderungen seit Version 2.41: - Das neue Feature "Rueckruf bei Besetzt" der Telekom wird erkannt, und ignoriert Aenderungen seit Version 2.30: - Die "isdnlog.conf" hat fuer die Flags eine komlett neue Syntax erhalten. - Die Optionen -c und -i sind entfallen. Diese wurden durch die ueberarbeitete Option -S ersetzt. - Die -C x Option wurde geaendert. Es muss jetzt dort der gesamte Pfad angegeben werden: Vorher "-C p7 -> /dev/ttyp7", jetzt "-C /dev/ttyp7" Aenderungen seit Version 2.01: - Die "isdnlog.conf" gehoert nun in das Verzeichnis "/etc/isdn" ... anstelle von "/etc" - Die "isdnlog.conf" hat neue Spalten erhalten, die _unbedingt_ in bestehende Dateien einzutragen sind - Alle Telefonnummern in der "isdnlog.conf" muessen nun - ausser den eigenen MSN's - mit der korrekten Anzahl vorlaufender Nullen eingetragen werden - Diverse Command-Line-Argumente von isdnlog haben erweiterte oder geaenderte Funktionen erhalten. Ein Bitte noch: =============== Alle Anfragen zum isdnlog nicht an meine Email-Adresse senden, sondern an i4l-isdnlog@franken.de Bitte auch nicht mehr die alte Adresse isdnlog@Kool.f.EUnet.de verwenden. So bekommen alle Entwickler die Anfragen direkt mit, und muessen nicht von mir extra weitergeleitet werden. Dadurch wird die Anfrage mit Sicherheit durch den jeweiligen Entwickler schneller beantwortet. Alternativ koennen die Anfragen natuerlich auch an die Mailing-Liste fuer isdn4linux (isdn4kernel) geleitet werden. Um dort "Mitglied" zu werden, sollte eine Mail an Majordomo@hub-wue.franken.de gesendet werden. Im Body (_nicht_ im Subject) sollte subscribe "emailadresse" stehen. 1. Was kann/ist/macht isdnlog? ------------------------------ isdnlog ist eine Erweiterung zu isdn4linux, das staendig an "/dev/isdnctrl0" sowie "/dev/isdninfo" lauscht, und saemtliche Vorgaenge auf dem eigenen ISDN-Anschluss anzeigt. Dazu liest es aus "/dev/isdnctrl0" (resp. "/dev/isdnctrl2", falls eine 2. Teles-Karte im Rechner steckt) das gesamte Q.931 Protokoll, sowie aus "/dev/isdninfo" alle internen Meldungen von isdn4linux. isdnlog sammelt all diese Informationen, und gestattet damit folgendes: - der gesamte Verkehr kann auf einer Linux-Console, oder einem xterm angezeigt werden. Dies sieht etwa so aus: Beispiel #1 : Ein Raus-Ruf mit der Teles-Karte: 13 21:16:31 * tei 104 calling EUnet with Phone Digital 13 21:16:33 tei 104 calling EUnet with ISDN Time:Wed Mar 13 21:17:00 1996 13 21:16:33 tei 104 calling EUnet with ISDN CONNECT 13 21:16:33 tei 104 calling EUnet with ISDN 0,12 DM (0 s) 13 21:16:40 tei 104 calling EUnet with ISDN 5,63 kB / 823,43 bps 13 21:16:51 tei 104 calling EUnet with ISDN HANGUP (0,12 DM = 18 s) Der gesamte Ablauf der Verbindung wird also mit allen verfuegbaren Details (wann passierte das, wer hat wen angerufen, was hat's gekostet, wieviel Byte wurden uebertragen, wie lange hat's gedauert ...) angezeigt. Beispiel #2 : Ein Fax kam rein (da der "Gegner" noch keinen ISDN-Anschluss hat, d.h. aus der Analogen Welt kommt, fehlt hier dessen Telefonnummer) Mar 13 21:29:37 * Call from ? on FAX Analog Mar 13 21:29:42 Call to tei 94 from ? on FAX CONNECT Mar 13 21:30:47 Call to tei 94 from ? on FAX HANGUP (65 s) Gesteuert ueber eine Config-Datei zeigt isdnlog anstelle der Telefonnummern frei waehlbare Alias-Bezeichnungen fuer die Telefonnummern an. - isdnlog decodiert (im Gegensatz zum aktuellen Teles-Treiber) die von der VSt uebermittelten Gebuehreninformationen, und zeigt diese sowohl am Ende einer Verbinung (== Gesamtkosten fuer diese Verbindung) als auch waehrend der Verbindung staendig an. - mit einem (beigefuegten) Patch fuer isdn4linux kann isdnlog pro aktivem B-Kanal staendig die aktuelle Durchsatz-Rate (in Byte/s), sowie die bislang komplett durchgerauschten Byte anzeigen. Zur Zeit werden aber nur die ankommenden Bytes angezeigt. - Alle Verbindungen (sowohl die zustande gekommenen, als auch die nicht zustande gekommenen (Besetzt, Gegner nimmt nicht ab, Fehler im ISDN-Netz) schreibt isdnlog komprimiert in ein Logbuch ("/var/log/isdn.log"). Dieses Logbuch kann jederzeit mit dem Programm "isdnrep" ausgewertet resp. eine Verbindungsstatistik ausgedruckt werden. Hat man selbst keine Gebuehreninfo fuer seinen Anschluss beantragt (-> keine Gebuehreninfo A, kein Komfort-Anschluss), berechnet isdnrep die angefallenen Gebuehren aufgrund Uhrzeit/Datum sowie Ortsnetz/Zone des Gegners selbst, und gibt also auch in diesem Fall die aufgelaufenen Gebuehren aus. - Pro Gegner kann ein externes Programm definiert werden, das isdnlog startet, sobald dieser Gegner anruft, oder dieser angerufen wird. Damit kann zum einen pro Verbindung ein Audio-Signal ueber die Sound-Karte erzeugt werden (-> Telefonklingeln abhaengig vom Gegner), oder aber eine Waschmaschine angesteuert werden. Der Phantasie sind hier keine Grenzen gesetzt. - isdnlog kann den gesamten Output von "/dev/isdnctrl0" sowie "/dev/isdninfo" (ergaenzt um Datum/Uhrzeit) fuer eine spaetere Analyse mitprotokollieren (in "/tmp/isdnctrl0"). - isdnlog erzeugt auf Wunsch syslog-Eintraege mit selektierbaren Informationen - isdnlog erkennt selbststaendig 1TR6 oder E-DSS1 Frames, und decodiert entsprechend korrekt. - isdnlog steuert einen X11-Client an, der neben einer Anzeige aller Verbindungen auch die On-Line Definition von bislang unbekannten Gegnern u.ae. ermoeglicht. - Es besteht seit neuestem die Moeglichkeit, alle Informationen ueber den S0-Bus auf der X11-Oberflache mit dem xisdn darstellen zu lassen. Allerdings befindet sich der xisdn noch im Entwicklungstand, so dass sich mit Sicherheit noch einige Aenderungen an der Oberflaeche und an den Funktionalitaeten abzeichnen lassen. 2. Was kann isdnlog nicht? -------------------------- Z.Zt. arbeitet isdnlog _nur_ mir dem Teles-Treiber (und damit mit einer Teles-ISDN-Karte od. compatiblen Karten) zusammen, die ICN-Karte wird leider noch nicht unterstuetzt. Weiterhin kann isdnlog bei allen rausgehenden Verbindungen, die nicht mit der Teles-Karte entstanden sind (ISDN-Telefon, Modem/Fax etc. am a/b Adapter oder einer Telefonanlage) die entsprechenden Telefonnummern leider nicht anzeigen. Dazu Gernot Zander: : Rausgehende Gespraeche von fremden Geraeten (Teflon, Modem) koennen : nicht richtig protokolliert werden, weil die Nummer nur ans's Amt : geschickt, aber nicht _zurueckgeschickt_ wird. Bei eigenen Anrufen weiss der : Treiber die Nummer zwangslaeufig:-), bei ankommenden wird sie _vom_ Amt : mitgeteilt. : Die Karte (und damit teles0.4d) kann nur das mitschreiben, was _vom_ : Amt kommt oder was sie selber _zum_ Amt schickt. Nicht aber, was Fremd- : geraete _zum_ Amt senden. : Die Karte bekommt immer nur eine Richtung mit, naemlich Amt->User. : Sie kann von den User->Amt nur die _eigenen_ Meldungen : ausgeben (also die der Teles selbst). : Wenn man mit seiner TK-Anlage rauswaehlt, geht die Zielnummer : aber User->Amt, und genau das wird von einer Teles : nicht mitgeschnitten (kann sie nicht!), es passiert auf dem falschen Bus! : Der S.0 ist ja deshalb 4adrig, weil 2 Adern von den Endgeraeten _zum_ : und zwei _vom_ NT gehen. Und jedes normale Endgeraet sendet auf : dem einen Paar und empfaengt auf dem anderen. Dazu siehe jedoch Kapitel 15. Dual-Mode ! 3. Installation --------------- Der X11-Client ist zwar im isdnlog-Paket enthalten, aber es ist _nicht_ zwingend notwendig ihn einzusetzen. Der isdnlog laeuft auch weiter wie gewohnt, ohne den Client. Nun kann isdnlog ausgepackt (wohl bereits geschehen ;-) und erstellt sowie installiert werden: cd /usr/src tar xzf isdnlog.tar.gz cd isdnlog- make install Vor dem "make" koennen folgende Eintraege im "Makefile" den eigenen Gegebenheiten angepasst werden: COPTS Compiler-Optionen fuer den gcc ACHTUNG: Die Voreinstellung "-O3" sollte bei gcc-Versionen _vor_ 2.7.2 entfernt werden, da diese Compiler-Versionen noch Probleme mit dem Optimizer haben! Hier koennen folgende grundsaetzliche Verhaltensweisen von isdnlog voreingestellt werden: -DISDN_NL - Gebuehrenauswertung Niederlande (anstelle Deutschland) -DISDN_CH - Gebuehrenauswertung Schweiz (anstelle Deutschland) I4LCONFDIR (/etc/isdn) Wo liegen die "isdn.conf" sowie die "avon" (falls verwendet!) Mit der Environment-Variablen "ISDN_CONF_PATH" kann auch zur Laufzeit das Verzeichnis festgelegt werden. Beispiel "export ISDN_CONF_PATH=/etc/isdn" USERCONFFILE (~/.isdn) Wie soll die Konfigurations-Datei der einzelnen Benutzer heissen CONFFILE (isdn.conf) Wie soll die Konfigurations-Datei heissen OLDCONFFILE (isdnlog.conf) Wie hiess die _alte_ Konfigurations-Datei LOGFILE (/var/log/isdn.log) Wie soll das Logbuch heissen (Diese Einstellung laesst sich spaeter noch zur Laufzeit in der isdn.conf aendern) RUNDIR (/var/run/) Wol liegen die pid files (lock-Dateien). SBINDIR (/sbin) Wohin soll "isdnlog" installiert werden BINDIR (/usr/sbin) Wohin soll "isdnrep" installiert werden TMPDIR (/tmp) Wo soll das "isdnctrl0" hingeschrieben werden X11BIN (/usr/X11R6/bin) Wohin soll "xisdn" installiert werden APPDEF (/usr/X11R6/lib/X11/app-defaults) Wohin soll das Resource-File von "xisdn" installiert werden Folgende Programme und Dateien werden durch den "make install" erstellt: /sbin/isdnlog /usr/sbin/isdnrep /etc/isdn/avon (wenn LIBAREA nicht definiert ist!) /usr/lib/areacodes (wenn LIBAREA definiert ist!) ACHTUNG: Durch die Syntaxandaerung und den Erweiterungen, muessen folgende Anderungen _zuerst_ an der bestehenden isdnlog.conf durchgefuehrt werden: - MYPREFIX wird durch AREACODE ersetzt. - Es gibt einen weiteren zwingenden Eintrag COUNTRYCODE. COUNTRYCODE. beinhaltet die Anwahl an das eigene Land von aussen her. Die beiden Eintrage sollten also folgende Form aufweisen: COUNTRYCODE=+49 # fuer Anwender innerhalb Deutschland AREA=7531 # fuer Anwender im Ortsnetz Konstanz Wer sowohl das Motif-Development-Kit 2.0 (und hoeher) besitzt, und dazu nicht vor Software im Alpha-Stadium zurueckschreckt, kann sich mit make xinstall den X11-Client "xisdn" erstellen. In der Datei "/etc/services" sollte der folgende Eintrag eingefuegt werden, falls noch nicht vorhanden: isdnlog 20011/tcp isdnlog Der X11-Client benoetigt eine eigene Resource-Datei. Diese hat den Namen "Isdn". Waehrend der Installation wird die Datei in das Verzeichnis "/usr/X11R6/lib/X11/app-defaults" kopiert. Wenn dieses bei der Installation unterdrueckt wird, muss dem X11-Client "von Hand" mitgeteilt werden, wo sich sein Resourcen-File befindet: "export XENVIRONMENT=./Isdn" Im Verzeichnis "xisdnload" befindet sich ein weiterer X11-Client von Frank Strauss (strauss@escape.de), der die Durchsatz-Rate pro B-Kanal auch grafisch darstellen kann. Dieser kann mittels xmkmf make erstellt werden. 4. Die Konfigurationsdatei "isdn.conf" ----------------------------------------- Die Konfigurationsdatei wird im Verzeichnis "/etc/isdn" erwartet (wenn die Variable I4LCONFDIR im Makefile so gesetzt ist), und enthaelt alle fuer isdnlog relevanten Steuerungsparameter. Diese Datei muss dem User root gehoeren (auch die Gruppe). Auch nur dieser darf Schreibrechte an dieser Datei haben. Diese Datei wird auch vom isdnlog gelesen. Andernfalls beendet sich der isdnlog sofort wieder. Dieses ist ein Schutz, um Trojanische Pferde zu verhindern und kann auch nicht ausgeschaltet werden. Wenn man dem compilierten den Pfad aendern will, muss man die Umgebungsvariable "ISDN_CONF_PATH" setzen. Die Syntax der Konfigurationsdateien ist ausfuehrlich in der Datei ../lib/README.Syntax.conffile beschrieben. 4.1 Grundeinstellungen ---------------------- Es gibt hier drei Sektionen, die vom isdnlog ausgewertet werden: [GLOBAL] [VARIABLES] [ISDNLOG] Diese Sektionen koennen in einer beliebigen Reihenfolge in der Datei vorkommen. Die Sektion GLOBAL beinhaltet Eintraege, die fuer alle ISDN-Programme von Bedeutung sind. Hier sind folgende Eintrage zu finden: AREACODE: Beinhaltet die eigene Ortsvorwahl (mit oder ohne vorlaufender "0". Der Prefix "0" wird in der Datei config.h durch das Macro S_AREA_PREFIX oder durch den Eintrag AREAPREFIX representiert). Dieser Eintrag ist zwingend. Wird isdnlog im 1TR6 eingesetzt, muss hier die _gesamte_ Telefonnummer exclusive der EAZ eingetragen werden. Diese Variable ist absolute Pflicht! Beispiel fuer Hamburg (Euro-ISDN !!!): AREACODE = 040 # oder AREACODE = 40 Wenn S_AREA_PREFIX den String "0815" enthaelt, dann ist auch folgende Zeile erlaubt: AREACODE = 081540 COUNTRYCODE: Hier wird die eigene Laenderkennung gesetzt (mit oder ohne vorlaufendem "+". Der Prefix "+" wird in der Datei config.h durch das Macro S_COUNTRY_PREFIX oder durch den Eintrag AREAPREFIX representiert). Dieser Eintrag ist ebenfalls zwingend. Beispiel fuer Deutschland: COUNTRYCODE = +49 # oder COUNTRYCODE = 49 Wenn S_COUNTRY_PREFIX den String "0815" enthaelt, dann ist auch folgende Zeile erlaubt: COUNTRYCODE = 081549 AREAPREFIX: Es enthaelt den Prefix zur Ortsvorwahl. Beim Kompilieren ist dieser Wert defaultmaessig auf "0" gesetzt. Dieser Eintrag ist optional. COUNTRYPREFIX: Es enthaelt den Prefix zur Laenderkennung. Beim Kompilieren ist dieser Wert defaultmaessig auf "+" gesetzt. Dieser Eintrag ist optional. AREALIB: Enthaelt den vollen Pfad zu der Datei "areacodes". Diese Angabe ist optional und nur notwendig, wenn sich der Pfad nach der Compilation geaendert hat. Beispiel: AREALIB=/usr/share/lib/areacodes AVONLIB: Enthaelt den vollen Pfad zu der Datei "avon". Diese Angabe ist optional und nur notwendig, wenn sich der Pfad nach der Compilation geaendert hat. Beispiel: AREALIB=/usr/share/lib/avon Da aber defaultmaessig die Arealib verwendet wird, ist die Datei avon obsolet. Die ISDN-Tools erlauben es, Umbebungsvariablen zu setzen und zu verwenden. Es gibt Variablen, die sollten in der isdn.conf (oder vorher) gesetzt sein. Diese werden in der Sektion [VARIABLES] zu setzen. Beispiel: [VARIABLES] MYPATH = /home/fred Es duerfen als Variablennamen nur noch gross geschriebene Woerter verwendet werden. Ein Eintrag der Form myPath = /home/fred oder mypath = /home/fred werden z.B. unter der /bin/sh mit "MYPATH=/home/fred" gesetzt. Hier gibt auch keine andere Möglichkeit das zu aendern. Wenn Kleinbuschstaben verwendet werden sollen, muessen diese vor dem Start von isdnlog mit export (sh, bash) oder setenv (csh) unter der Shell gesetzt werden. ACHTUNG: "MYPATH = /home/fred" wird als Variable zu "MYPATH=/home/fred". Es fallen also alle Blanks und Tabulatoren vor und nach dem "=" heraus. Die dritte Sektion beschreibt spezifische Angaben fuer den isdnlog. Diese Sektion wird durch [ISDNLOG] eingeleitet. LOGFILE = /var/log/isdn.log Dieses ist das Logfile in dem isdnlog alle Gespraeche ablegt, und isdnrep sie anschliessend anzeigt. Wenn diese sich in einem anderen Platz befindet, als zur Compilationszeitpinkt (in der Regel /var/log/isdn.log), dann kann dieses hier passieren. Die Option "-f" vom isdnrep ueberschreibt diesen Wert dann allerdings wieder. Zusatzinformation: Diese Datei wird seit der Version 3.0 vom isdnlog nicht mehr staendig offen gehalten, sondern nur noch nach Beendigung eines Gespraeches wird die Datei geoeffnet, der Eintrag ergaenzt und anschliessend wieder geschlossen. Dadurch ist es jetzt moeglich diese Datei zu verschieben, wenn der isdnlog laeuft und gerade kein Gespraech beendet wird. RELOADCMD = reload Hiermit wird ein ausfuehrbares Programm (z.b. Shell-Script) angegeben, mit dem isdnlog ein evtl. wildgewordenes isdn4linux reanimieren kann. (Ein Beispiel findet sich im Kapitel 14.1 Watchdog) STOPCMD = stop Hiermit wird ein ausfuehrbares Programm (z.b. Shell-Script) angegeben, mit dem isdnlog isdn4linux terminieren kann. (Ein Beispiel findet sich im Kapitel 14.2 CHARGEMAX) REBOOTCMD = /sbin/reboot Hiermit wird ein ausfuehrbares Programm (z.b. Shell-Script) angegeben, mit dem isdnlog Linux herunterfahren kann. (Ein Beispiel findet sich im Kapitel 14.2 CHARGEMAX) CHARGEMAX = 15.00 Hiermit wird (in DM) angegeben, wieviel Geld man pro Tag maximal mit isdn4linux vertelefonieren moechte. CONNECTMAX = 18000,0 Hiermit wird (in Sekunden) angegeben, wieviel Zeit man pro Monat maximal Online sein moechte. BYTEMAX = 67108864,0 Hiermit wird (in Byte) angegeben, wieviel Byte man maximal pro Monat saugen moechte. CURRENCY=factor,currency Wenn die Variablen in der isdn.conf gesetzt werden, dann kann man folgende Syntax verwenden: Angabe der Waehrungsbezeichnung sowie eines Multiplikationsfaktors. Falls dieser Eintrag fehlt, wird "0.12,DM" angenommen, d.h. jeder Gebuehrenimpuls wird mit 0.12 multipliziert, und mit der Bezeichnung "DM" angedruckt. In einigen europaeischen Laendern werden diese beiden Parameter bereits von der VSt uebertragen (z.b. Oesterreich), und brauchen daher nicht angegeben zu werden. ACHTUNG: In der vorliegenden Version werden diese beiden Parameter noch nicht an isdnrep uebergeben, und muessen daher bei Einsatz des "isdnrep" trotz Uebermittlung von der VSt eingetragen werden! Defaultmaessig steht im isdnrep "0.12,DM". Daher entfaellt diese Angabe fuer Deutschland. ILABEL=xxxxx OLABEL=xxxxx Hiermit kann definiert werden, wie die Console-Ausgaben aussehen sollen. Fehlen diese Eintraege, wird ILABEL=%b %e %T %ICall to tei %t from %N2 on %n2 OLABEL=%b %e %T %Itei %t calling %N2 with %n2 angenommen (die bislang bekannte Optik) Bei reinkommenden Verbindungen wird das "ILABEL", und bei rausgehenden Verbindungen das "OLABEL" ausgegeben. Diese Label werden von isdnlog auf jeden Fall um die mit "-m" angeforderten Statusmeldungen wie RING, TIME, CONNECT, HANGUP etc. ergaenzt. Neben beliebigen Buchstaben/Zahlen (incl. der ueblichen "\007" Octal-Notation) koennen folgende Platzhalter angegeben werden: %t tei %C Call reference %Nx MSN (Telefonnummer) des Gegner's (siehe *1) %nx Eigene MSN (Telefonnummer) (siehe *1) %cx Via CLIP vermeldete MSN (siehe *1) %A der Text " alias ", falls CLIP-Meldung, sonst leer %I Tabulation (siehe *2) %a Wochentag (-> "Fri") %b Monat (-> "Aug") %e Tag im Monat (-> " 8") %T Uhrzeit (-> "13:17:11") %B B-Kanal (0, oder 1) %k Nummer der ISDN-Karte, von der die Meldung kam (0 = 1. Karte) %/ % %( %) Falls die Nummer des Gegners bekannt, entsprechendes Zeichen, sonst Leerstring *1 Bei %N, %n sowie %c muss angegeben werden, wie die Telefonnummer ausgegeben werden soll: %N0 - Telefonnummer exakt so, wie von der VSt gemeldet (z.b. "8989810530") %N1 - Telefonnummer, von isdnlog um Vorwahl, vorlaufende "0" etc. ergaenzt (z.b. "+498989810530") %N2 - Von isdnlog optimal "verschoenerte" Nummer, also Alias aus "isdn.conf" oder mit Ortsnetz etc. (z.b. "+49 89/89810530, Muenchen") %N3 - Vorwahl (z.b. "89") %N4 - Rufnummer (z.b. "89810530") %N5 - Alias %N6 - Ortsnetz (z.b. "Muenchen") %N7 - Areacode (z.b. "+49") *2 Dieser Platzhalter wird von isdnlog folgendermassen aufgeloest: Bezieht sich die Zeile auf den ersten aktiven B-Kanal, wird daraus ein Leerstring -> "" Bezieht sich die Zeile auf den zweiten aktiven B-Kanal, werden daraus zwei Blank's -> " " Bezieht sich die Zeile auf eine entstehende Verbindung, wird daraus ein Stern -> "* " Folgende Optionen werden nur fuer den Schalter -S optional benoetigt: START={ ... } Es kann ein zu startender Befehl angegeben werden. Wenn eine Verbindung aufgebaut wird, besteht oder beendet wird und unter den entsprechenden Nummern kein Befehl steht, dann wird der passende Befehl unter "START" in der Sektion [ISDNLOG] ausgefuehrt. Das heisst isdnlog schaut zuerst unter der entsprechenden Telefonnumer nach, ob dort ein Befehl ist. Wenn "START" verwendet wird bei Verbindungen, die raus gehen und nicht von der ISDN-Karte kommen (also Nummern unbekannt), dann geht "OR" (Outgoing Ring) nicht (siehe Info von Gernot Zander), ist also kein Bug vom isdnlog. Wenn ja, wird dieser ausgefuehrt und der Eintrag "START" ignoriert. Wenn die Nummer in der Datei "isdn.conf" keinen Eintrag hat, oder unter der Nummer in der Sektion [Flag] nichts eingetragen ist, dann schaut isdnlog unter "START" nach. Diese Zeilen koennen verwendet werden, wenn man fuer alle Verbindungen die gleichen Programme starten will, oder fuer alle unbekannten Nummern. Die Syntax ist unter "Info-Args" der Dateien "callerid.conf" und"~/.isdn" zu finden. 4.2 Die Dateien "callerid.conf" und "~/.isdn" --------------------------------------------- Hier koennen eine beliebige Anzahl von Telefonnummer nebst einigen zusaetzlichen Parametern angegeben werden. Die Angabe _aller_ eigenen Telefonnummern ist zwingend, alle weiteren Partner-Telefonnummern koennen eingeben werden. Die Datei "callerid.conf" liegt im Verzeichnis /etc/isdn und muss dem User root gehoeren (auch die Gruppe). Auch nur dieser darf Schreibrechte an dieser Datei haben. Diese Datei wird auch vom isdnlog gelesen. Es ist die globale Datei fuer die Telefonnummern. Hier muessen auch die [MSN]-Eintraege untergebracht werden. Die Datei "~/.isdn" kann jeder Benutzer haben, der den isdnrep und den isdnconf verwendet. Hier sind die Rechte der Datei voellig egal. Diese Datei ist dafuer bestimmt, dass ein Benutzer soetwas wie ein eigenes Telefonverzeichnis anlegen kann, wo auch die Nummer nur beim isdnrep angezeigt werden. Es koennen hier aber die [MSN]-Eintraege ueberschrieben werden fuer die beiden Programme isdnconf und isdnrep. Es koennen hier Variablen verwendet werden, die entweder in der isdn.conf gesetzt wurden oder vorher (z.b. auf Shellebene). In den Dateien "callerid.conf" und "~/.isdn" koennen keine Variablen mehr gesetzt werden. Das bedeutet also, dass es dort keine Sektion [VARIABLES] gibt. Eine Variable wird allerdings nur ab dem Gleichheitszeichen ersetzt. Wenn man an die Variable noch etwas anhaengen will, dann muss man den Variablenname in geschweifte Klammern setzen. Im Gegensatz zur frueheren Version koennen die Variablen an beliebiger Stelle kommen. Beispiele: [$num] # wobei num=NUMBER ist geht nicht!!!! $alias=fred # wobei alias=ALIAS ist geht nicht!!!! [NUMBER] NUMBER=$MSN1 # MSN1=1234 -> "1234" ALIAS=${PHONE}1 # PHONE=Telefon -> "Telefon1" ... PROGRAM= auplay ${MY_PATH}ring.au # MY_PATH=/home/fred/ -> "/home/fred/ring.au" PROGRAM= auplay $MY_PATHring.au # geht nicht!! PROGRAM= auplay ${MY_PATH}ring.au ${SOUND_PATH}/$RING_FILE # SOUND_PATH=/home/sound RING_FILE=ring.au -> "/home/sound/ring.au" ... Es gibt bestimmte Regeln, nachdem Eintraege aus der Datei "~/.isdn" die Eintraege der "callerid.conf" ueberschreiben: Der Sektionsname ist in "callerid.conf" und "~/.isdn" gleich (entweder [MSN] oder [NUMBER]). Wenn die Eintraege NUMBER und SI in beiden Dateien vorkommen und identisch sind, dann wird der Eintrag aus der der Datei "callerid.conf" ueberschrieben durch den Eintrag "~/.isdn". Wenn nur die Eintrag NUMBER (und _nicht_ SI) in beiden Dateien vorkommen und identisch sind, dann wird der Eintrag aus der der Datei "callerid.conf" ueberschrieben durch den Eintrag "~/.isdn". Unter Identisch ist du verstehen, wenn beide Strings absolut identisch sind: NUMBER=+49 7531/21103 NUMBER=753121103 sind nicht identisch!!!! Beispiele: Eintrag in "callerid.conf": [NUMBER] NUMBER=753121103 ALIAS=MSN\#1 Eintrag in "~/.isdn": [NUMBER] NUMBER=753121103 ALIAS=Fred's Number Im obigen Fall wird der zweite Eintrag genommen. Eintrag in "callerid.conf": [NUMBER] NUMBER=753121103 SI=7 ALIAS=Internet Eintrag in "~/.isdn": [NUMBER] NUMBER=753121103 SI=6 ALIAS=Fred's Number Im obigen Fall werden beide Eintrage uebernommen. Wenn nun eine Datenverbindung auf der 753121103 stattfindet, dann wird "Internet" angezeigt, wenn jemand z.B. eine Video-Konfernzschaltung oder einen normalen Telefonanruf taetigt, dann wird "Fred's Number" angezeigt. Dieses gilt natuerlich nur beim isdnrep und isdnconf. Eintrag in "callerid.conf": [NUMBER] NUMBER=753121103 SI=7 ALIAS=MSN\#1 Eintrag in "~/.isdn": [NUMBER] NUMBER=753121103 ALIAS=Fred's Number Im obigen Fall gilt das gleiche wie beim vorherigen Beispiel. Jede Sektion (Nummer) kann eine Dienstekennung enthalten. Dieses wird durch einen Eintrag in der Form SI=4 # Video realisiert. isdnlog unterscheidet rein- und rausgehende Verbindungen nach der MSN (Telefonnummer), sowie dem Service Indicator ("Dienstkennung"). Z.Zt. kennt isdnlog folgende Dienstkennungen: 1 = Speech (Telefon, Fax G3, Modem etc.) 2 = Restricted digital information 3 = Unrestricted digital information with tones/announcements 4 = Video 7 = Unrestricted digital information (HDLC, X.75 etc.) Bei jedem Verbindungsaufbau sucht isdnlog aus der "isdn.conf" den Eintrag, bei dem sowohl die MSN, als auch der SI uebereinstimmen. Wird solch ein Eintrag nicht gefunden, nimmt isdnlog den _ersten_ Eintrag mit der passenden MSN. Ein eindeutiger Key fuer eine Nummer ist nun die Telefonnummer selber und die Dienstkennung. Es kann also eine Nummer mehrfach erscheinen mit jeweils einer anderen Dienstkennung. Wird in der Sektion fuer eine Nummer kein Eintrag fuer die Dienstkennung angegeben (keine Zeile SI=x), wird die Kennung "0" angenommen. Das bedeutet alle Dienste werden ueber diese Sektion erkannt. Es gibt also fuer eine Nummer nur einen einzigen Eintrag. Zum Verstaendnis: Nehmen wir mal eine eigne MSN (das funktioniert auch fuer fremde Nummern!). Dort kann man mit einer MSN eine ISDN-Verbindung mit LINUX unterhalten und parallel diese MSN zum Telefonieren verwenden. Obwohl die gleiche Nummer dort verwendet wird, reagiert z.B. das Telefon nicht (es klingelt nicht!), wenn ein Teilnehmer sich mit einem PC an dieser Nummer anwaehlt. Beispiel: Auf der MSN 4711 lauscht sowohl die Teles-Karte auf X.75 Anrufe, als auch ein Analoges Telefon ueber eine Telefonanlage. Hier wuerden folgende Eintraege in der "callerid.conf" passen: [MSN] NUMBER = 4711 SI = 1 # Das normale Telefon ALIAS = Phone START = { [FLAG] FLAGS = I|O|R|A # alternativ geht auch FLAGS=IORA PROGRAM = auplay ring.au } [MSN] NUMBER = 4711 SI = 7 # Der Linux-Rechner ALIAS = X.75 START = { [FLAG] FLAGS = I|O|R|A # alternativ geht auch FLAGS=IORA PROGRAM = auplay computer.au } Die genaue Syntax wird weiter unten beschrieben. Ruft nun jemand die 4711 mit einem Telefon an, wird das als Anruf auf "Phone" angezeigt, und mit "auplay" das Soundfile "ring.au" abgespielt. Waehlt jemand hingehen die 4711 mit einer Teles-Karte an, wird das als "X.75" angezeigt, und mit "auplay" das Soundfile "computer.au" abgespielt. Startet hingegen jemand eine Video-Uebertragung auf die 4711, wird auch dies als "Phone" angezeigt, da in obigem Beispiel die Dienstkennung "4" nicht gesondert definiert wurde. Es gibt zwei verschienden Sektionen in diesen Dateien: [MSN] [NUMBER] Die Eintraege in den einzelnen Sektionen sind gleich. Es koennen beliebig viele von den einzelnen Sektionen (MSN,NUMBER) existieren. Im Gegensatz zu frueheren Versionen des isdnlog's muss nun nicht mehr die Anzahl der eigenen MSN angegeben werden (MYMSNS entfaellt). Alle Eintraege in einer Sektion koennen in einer beliebigen Reihenfolge folgen. Das gleiche gilt fuer die Sektionen innerhalb einer Datei. Im folgenden werden nun die einzelnen Eintraege unter den Sektionen MSN und NUMBER erwaehnt: 4.2.1 1. Eintrag: Telefonnummer [NUMBER] und [MSN] -------------------------------------------------- Hier muss zwischen 1TR6 und DSS1 unterschieden werden: im 1TR6 muss unter [MSN] nur die EAZ eingetragen werden. Unter der Sektion [NUMBER] kommt dort die komplette Nummer. Diese Nummer muss _mindestens_ die Vorwahl enthalten. Im DSS1 ist dieses ziemlich egal. Man kann die Nummern so eintragen, wie man sie vom eigenen Telefon waehlen wuerde. Es muss die Voreinstellungen der Installation beruecksichtigt werden. Die Werte von S_PREFIX_AREA und S_PREFIX_COUNTRY, wie sie waehrend der Installation eingestellt wurden, werden so ueberall uebernommen. Es ist aber empfehlenswert ueberall die Vorwahl mit anzugeben (ist auch bei der MSN moeglich). Wenn man z.B. umzieht in eine andere Stadt, muss man sonst die gesamte Datei ueberarbeiten. Das entfallt, wenn ueberall die Vorwahl angibt. Die Syntax ist jetzt ziemlich frei. Es koennen dort angegeben werden, wie man sie ueblicherweise kennt: NUMBER = 4711 NUMBER = 0815/4711 NUMBER = 0815/471-0 NUMBER = +49 815/4711 NUMBER = +49 815/471* NUMBER = +49 815/471? NUMBER = +49 815/47[!6]1 NUMBER = 4711, 4712, +49 815/4713 Es werden alle NICHT-Zahlen dort herausgefiltert, bis auf die Wildcards '?', '*' und "[]" Ein Plus '+' am Anfang wird durch S_PREFIX_COUNTRY ersetzt. Alle Telefonnummern koennen die ueblichen Wildcard-Symbole enthalten, also "?" matched genau ein Zeichen, "*" matched beliebig viele (also auch "keine") Zeichen, und mit "[]" koennen mehrere moegliche Zeichen angegeben werden (oder auch eine Range [4-7], oder auch die Verneinung, also [!6]) 4.2.2 2. Eintrag: Alias [ALIAS] ------------------------------- In diesem Entrag steht eine beliebige Symbolische Beschreibung fuer diese Nummer ("Mausi", "EUnet" usw.). Diese darf Blanks enthalten! Wenn hier das Zeichen '#' verwendet werden soll, muss dieses gequotet werden mit "\#". ALIAS = MSN #1 ist falsch, dieses fuehrt zu dem Ergebnis: ALIAS = MSN Richtig waere: ALIAS = MSN \#1 Auch ein Eintrag ALIAS = Helmut Kohl ist erlaubt. Allerdings unterscheidet sich dieser von ALIAS = helmut kohl 4.2.3 3. Eintrag: Tarifzone --------------------------- Ein weiterer Eintrag ist die Tarifzone, in der sich von uns aus gesehen diese Nummer befindet: 0 = Verbindung am internen S0-Bus 1 = City (bis 31.12.1995 "Ortszone/Nahzone", bis 20 km) 2 = Region 50 (bis 31.12.1995 "Regionalzone", bis 50 km) 3 = Region 200 (bis 31.12.1995 "Weitzone", dann bis 200 km) 4 = Fernzone (bis 31.12.1995 "Weitzone", dann alles ueber 200 km) 5 = Vis-'a-vis 1 Dieser Eintrag wird wie folgt dargestellt: ZONE = 1 oder ZONE = 5 4.2.4 4. Eintrag: IP-Interface ------------------------------ Dieser Eintrag repraesentiert das IP-Interface, welches auf dieser Nummer konfiguriert wurde, oder ein "-", falls dieser Nummer kein IP-Interface zugeordnet wurde. Diese Information wird fuer die "-hx" huptimeout Option benoetigt. Beispiel: INTERFACE=ippp0 4.2.5 5. Eintrag: Info-Args --------------------------- Hier besteht unter der Sektion [NUMBER] und [MSN] eine Untersektion. Diese ist allerdings optional. Diese Informationen werden vom isdnlog nur ausgewertet, wenn die Option -S gesetzt wurde. Die Untersektion traegt den Namen START. Es koennen mehrere Programme pro Nummer angegeben werden, zum Beispiel fuer jedes Event. Hier folgt nun ein Beispiel. Die Erklaerung folgt anschliessend: [MSN] NUMBER = 4711 SI = 1 # Das normale Telefon ALIAS = Phone START = { # Beginn der Untersektionen [FLAG] FLAGS = I|O|R # alternativ geht auch FLAGS=IORA PROGRAM = auplay ring.au [FLAG] FLAGS = A PROGRAM = auplay pay.au } # Ende der Untersektionen Hier werden jetzt alle anderen Spalten wie Flags, Time und Info-Arg vereinigt. Jeder Programmstart fuer ein Event wird mit der (Unter-)Sektion [FLAG] eingeleitet. Unter dieser Sektion sind nun verschiedene Eintraege zu finden. Die folgende Reihenfolge muss allerdings innerhalb der Sektion nicht eingehalten werden: Eintrag Flags: ------ Hier wird angegeben, bei welchem Event das Info-Programm gestartet werden soll. Es koennen eine beliebige Menge aus folgenden Flag-Gruppen angegeben werden: Gruppe 1: I = Programme werden nur gestartet, wenn es ein eingehendes Gespraech ist O = Programme werden nur gestartet, wenn es ein ausgehendes Gespraech ist Gruppe 2: C = Bei CONNECT Programm starten (Intervall-faehig) B = Programm starten, wenn der Teilnehmer besetzt ist (Busy) E = Programm starten, wenn ein Fehler von der VSt uebermittelt wurde R = Bei RING Programm starten (Intervall-faehig) A = Bei AOCD ("Gebuehrenimpuls") Programm starten H = Bei Verbindungsende Programm starten Gruppe 3: Die folgenden Flags haben nur Bedeutung fuer die Flags "C" und "R" aus Gruppe 2. Es sollte immer nur _ein_ Argument von dieser Gruppe je Info-Arg verwendet werden: L = Es wird waehrend dieses Zeitraum ein Programm immer wieder gestartet, wenn sich das vorherige beendet hat. Es macht dann keinen Sinn noch zusaetzlich ein Intervall einzuschalten, da "L" Vorrang hat. U = Es darf waehrend eines Intervalls nur ein Programm gestartet werden. Wenn ein Intervall erreicht wurde, und das letzte Programm noch laeuft, dann wird das naechste nicht gestartet, sondern wartet, bis sich der Vorgaenger Beendet hat. Wenn das Flag nicht gesetzt ist, dann koennen mehrere Programme gleichzeitig laufen, da dann beim erreichen eines Intervalls ein neues gestartet wird, unabhaengig davon, ob das vorherige noch laeuft. Es wird das Argument Intervall benoetigt! K = Wenn ein Intervall angegeben ist, und das Intervall beendet ist, soll das vorherige Programm beendet werden. Sonst ist es moeglich, das mehrere Programme gleichzeitig laufen. Es wird das Argument Intervall benoetigt! Es macht also keinen Sinn "U" und "K" gleichzeitig einzuschalten, da beide nur ein Programm erlauben. Der einzige Unterschied zwischen "K" und "U" ist, dass bei "U" gewartet wird, bis sich das Programm beendet, waehrend "K" beim Ende des Intervalls das laufende Programm "mit Gewalt" beendet. Damit ein Programm ueberhaupt gestartet werden kann, muessen Flags aus Gruppe 1 _und_ Gruppe 2 angegeben werden. Gruppe 3 ist Optional. Die Events "B", "E", "A" und "H" beschreiben Zeitpunkte in der Verbindung, waehrend "R" und "C" Zeitabschnitte beschreiben. Daher koennen fuer Zeitpunkte auch keine Intervalle angegeben werden, da dieses nur Ereignisse sind. Eine Verbindung oder ein Verbindungsversuch kann folgenden Ablauf haben: (Die Buchstaben entsprechen den Flags unter Gruppe 2) Beim ausgehenden Gespraech ueber die ISDN-Karte 1. | RING | CONNECT | ----------A-----A-----A-----A-----A------A------A------H 2. | RING | CONNECT | ----------A-----A-----A-----A-----A------A------EH 3. | RING | ----------BH 4. | RING | ----------EH Bei ausgehenden Rufen ueber Telefon/Fax...: Dort wird _kein_ "RING" uebermittelt. Es gibt also niemals einen Zustand "OR". 1. | CONNECT | A-----A-----A-----A-----A------A------A------H 2. | CONNECT | A-----A-----A-----A-----A------A------EH 3. BH 4. EH Bei reinkommenden Gespraechen: Bei der ISDN-Karte ist die "Ring-Phase" extrem kurz, so dass es passieren kann, dass isdnlog darauf nicht reagiert. 1. | RING | CONNECT | --------------------------H 2. | RING | CONNECT | -------------------------EH 3. | RING | -------H In der Zeile koennen die einzelnen Events entweder als ein "Wort" geschrieben werden oder aber durch das Zeichen "|" getrennt werden: FLAGS = IORA oder FLAGS = I|O|R|A Wobei die zweite Schreibweise wesentlich uebersichtlicher ist. User ---- Wenn ein Programm gestartet wird, kann die User-ID umgestellt werden. Dieses ist sogar notwendig, wenn der Benutzer (nicht noetig fuer den Bernutzer root !!) die Rechte an der Datei besitzt. isdnlog verbietet es seit der Version 3.0, dass das Programm als normaler Benutzer gestartet wird. Ebenso wird es unterbunden ein Programm zu starten, wo ein Benutzer Leserechte besitzt und dieses als root gestartet wird. Dieses koennte sich als trojanisches Pferd verwenden lassen. Daher muessen Programme, die nicht root gehoeren oder die jeder (others) beschreiben kann mit dem Eintrag USER belegt werden. Der Eintrag hat folgende Syntax: USER=fred oder USER=103 Es kann also entweder der Benutzername oder die Benutzer-ID verwendet werden. Group ----- Dieser Eintrag verhaelt sich analog zu dem Eintrag USER. Auch hier gilt wieder die Systemsicherheit. Die Syntax ist wie folgt: GROUP=freaks oder GROUP=201 Es kann also entweder der Gruppenname oder die Gruppen-ID verwendet werden. *************** Bis hier ist sl gekommen, die Doku zu ueberarbeiten *********** Time ---- In Time kann eine Zeitzone angegeben werden, in der das Info-Programm gestartet werden darf: * = immer 9 = zwischen 9:00:00 Uhr und 9:59:59 Uhr 8-22 = zwischen 8:00:00 Uhr morgen's und 21:59:59 Uhr abend's 22-8 = zwischen 22:00:00 Uhr abend's und 7:59:59 Uhr morgen's 8-16,18-22 = von 8:00:00 .. 15:59:59 Uhr, und von 18:00:00 .. 21:59:59 Uhr 15-15 = immer (gleichbedeutend mit "*") ACHTUNG: Aenderung in der Syntax: Die Zeitangaben duerfen _nur_ mit ',' voneinander getrennt sein. Also kein ';' mehr als Separator verwenden! Beispiel: 8-12,14,16,18-20 8,9,10,11-14 Wenn Time ueberhaupt nicht angegeben wird, dann bedeutet dieses "immer". Beispiele: IOR=/usr/bin/auplay ring.au; IORK=/usr/bin/auplay ring.au,5; IORK=/usr/bin/auplay ring.au,5,; Intervall --------- Fuer die Flags 'C' und 'R' besteht die Moeglichkeit, ein Programm in gewissen Abstaenden zu starten. Das Intervall ist eine Zahl, die in Sekunden die Zeit angibt, die zwischen zwei Programmstarts liegt. Wenn das Flag 'K' gesetzt ist und ein neues Programm gestartet wird, dann wird der "Vorgaenger" automatisch beendet. Wenn bei Ereignissen (Flags 'BAEH') ein Intervall angegeben wird, so wird dieses ignoriert. Das Intervall sollte mindestens auf 2 sec. stehen, da isdnlog es sonst nicht schafft, die beendeten Prozesse zu "beerdigen". So entstehen also Zombies. Der Sekunden-Intervall sollte also hoechstens fuer das Ring-Event benutzt werden. Groessere Intervalle stellen kein Problem dar. Info-Arg -------- Hier wird das Info-Argument angegeben. Es steht dort der gesamte zu startende Befehl Es gibt aber drei zusaetzliche Variablen, die verwendet werden duerfen: $1 : Sind die Flags, die den Programmstart ausgeloest haben. z.B. "IR", "OC", "IH" Zuerst kommt die Gespraechs-Direktive und dann der Zustand der Verbindung. Es kommen immer _genau_ zwei Zeichen. $2 : Gibt als String die Telefonnummer (mit Vorwahl) des Anrufenden an. $3 : Gibt als String die Telefonnummer (mit Vorwahl) des Angerufenden an. Wenn bei $2 und $3 die Telefonnummer nicht bekannt ist, dann wird dort ein "?" eingesetzt. Es fallen also alle Blanks und Tabulatoren vor und nach dem "=" heraus. "IORK = /bin/auplay..." wird also zu "IORK=/bin/auplay...". Eine (zwei) Zeile in der Spalte Info-Agrs kann also wie folgt aussehen: 4711 Phone 1 IORK= /bin/auplay /sounds/ring.au,1,8-14,16-22;\ OA = /bin/auplay /sounds/money.au,,8-14,16-22; 0815 Provider 2 IOCK= /bin/popclient_script $3,300; Angenommen 4711 ist die MSN meines Telefons, dann wird beim Rauswaehlen erst immer "/bin/auplay /sounds/ring.au" abgespielt. Auch wenn das Telefon klingelt, wird "/bin/auplay /sounds/ring.au" ausgefuehrt. Dieser Vorgang wird jede Sekunde wiederholt. Wenn rausgewaehlt wurde, dann erhaelt man bei jedem Gebuehrenimpuls den Sound "/sounds/money.au". Diese Sounds werden nur von 8Uhr bis 14Uhr und 16Uhr bis 22Uhr gespielt. Wenn man zum "Provider" verbunden ist, dann werden alle 5 Minuten Mails geholt. Da hier keine Zeitangabe gemacht wurde, wird das Script zu jeder Zeit ausgefuehrt. Das Script bekommt als Parameter "0815", wenn man "Provider" angerufen hat, und wenn "Provider" einen anruft, seine eigene MSN. Wie unter "START=" beschrieben wurde, ist hier noch mal ein Beispiel zu finden: CMD1=/bin/auplay CMD2=/bin/my_prog DIR = /sounds/ START=IORK=$CMD1 ${DIR}ring.au,1,8-14,16-22;\ OA =$CMD1 ${DIR}money.au,,8-14,16-22;\ IOC =$CMD2 $1 $2 $3,,8-14,16-22; Die letzte Zeile wird also wie folgt expandiert als Kommando, wenn ich jemanden anrufe mit der Nummer 0815 (Meine MSN 040/1234): "/bin/auplay OC 0401234 0815" --------------^^ Ausgehendes Gspraech (O), Ereignis CONNECT (C) -----------------^^^^^^^ Nummer des Anrufenden (also Meine) Nummer des Angerufenden Die Variablen von isdnlog ($1, $2, ..) kann man nicht in geschweiften Klammern setzen. Also auch nicht anhaengen. Wenn eine unbekannte Variable verlangt wird (meistens wohl Tipp-Fehler;-)), dann wird die mit einem "?" ersetzt, damit wenigstens die Parameterzahl stimmt. Wenn als Parameter ein "@" gefolgt von einem Dateinamen erschein, so wird die erste Zeile der Datei als Parameter an die Datei uebergeben. Allerdings darf der Name nicht aus einer Variablen bestehen, da die Variable nicht am Anfang stehen kann, denn da steht ja schon "@" ;-) Beispiel: /tmp/data beinhaltet "Das ist ein test" Der Aufruf /bin/script @/tmp/data fuehrt zu /bin script "Das ist ein test" Die gesamte erste Zeile wird als _ein_ Parameter uebergeben, auch wenn dort Blanks oder Tabulatoren enthalten sind. Das abschliessende "\n" wird entfernt. Beim Start der Programme ist immer darauf zu achten, dass diese sich selber beenden, da der isdnlog nur in gewissen Ausnahmen Programme beendet. Ausnahme ist, wenn ein RING-Zustand oder CONNECT-Zustand beendet wird. Dann beendet der isdnlog die laufenden Programme. ACHTUNG: Bei eigenen MSN's, auf die kein eigenes Geraet reagiert (also "unbenutzt" sind), duerfen keine Info-Argumente angegeben werden, da bei solchen MSN's isdnlog vitale Informationen zur korrekten Ansteuerung fehlen! 4.2.6 Konkretes Beispiel fuer die "-S" Option ---------------------------------------------- MYPREFIX = 0815 PLAYER = /usr/bin/auplay SOUNDS = /usr/sounds START = O R L = $PLAYER ${SOUNDS}/unknown_ring.au,,8-14,16-22;\ IOA = $PLAYER ${SOUNDS}/pay.au,,8-14,16-22;\ IOC U = /usr/bin/who_is_it $2 $3;\ IOH = $PLAYER ${SOUNDS}/hangup.au,,8-14,16-22;\ IORAH = $PLAYER ${SOUNDS}/silent.au,,14-16,22-8; 4711 MSN\#1 1 - I RK = $PLAYER ${SOUNDS}/msn1_ring.au,5,8-14,16-22;\ - IOA = $PLAYER ${SOUNDS}/msn1_pay.au,,8-14,16-22; 4712 MSN\#2 1 - I RK = $PLAYER ${SOUNDS}/msn2_ring.au,5,8-14,16-22; 4713 MSN\#3 1 - I RK = $PLAYER ${SOUNDS}/msn3_ring.au,5,8-14,16-22; *40441777 My_Provider 4 isdn0 OIR = $PLAYER ${SOUNDS}/provider_ring.au;\ OICU = /usr/bin/get.mails.from.provider,300;\ OICU = /usr/bin/get.news.from.provider,1800; Erklaerung zum Beispiel: Wenn man "My_Provider" anwaehlt, dann erklingt einmal der Sound "provider_ring.au". Wenn die Verbindung zu stande gekommen ist, dann wird sofort "/usr/bin/get.mails.from.provider" und "/usr/bin/get.news.from.provider" gestartet. Das Programm "mails.from.provider" wird dann alle 5 Minuten wieder gstartet. Das Programm "get.news.from.provider" wird alle 30 Minuten gestartet. Wenn eines Programm mal laenger als 5 bzw. 30 Minuten laeuft, wird der naechste Start so lange verschoben, bis sich das laufende beendet. Das wird durch "U" ausgedrueckt. Wenn die Verbindung zu "My_Provider" beendet wird, dann werden automatisch evtl. noch laufende Programme beendet (gekillt). Jedes mal wenn eine Einheit von der VSt gemeldet wird, wird ein Sound gespielt. Wenn ich von "MSN#1" anrufe, dann "msn1_pay.au". Von "MSN#2" und "MSN#3" wird der Default-Sound "pay.au" gespielt. Alle "normalen" Sounds werden aber nur von 8 Uhr bis 14 Uhr und von 16 Uhr bis 22 Uhr gespielt. In der uebrigen Zeit laeuft fuer alle Ring's, AOCD und Hangup's der Sound "silent.au". Die Zeit wird hier mit "von" - "bis" angegeben. Wenn sonstige Verbindungen zustande kommen, wird das Programm "/usr/bin/who_is_it" gestartet. Dem wird noch als Parameter die Telefonnummern vom Anrufer und Angerufenen mitgeteilt. Das wird aber nur gestartet, wenn sonst kein Programm existiert, das fuer diese Verbindung bei einem Connect laufen soll. Das Programm wird nur einmal gestartet, direkt wenn die Verbindung zu stande kommt. Wenn ein Ruf ankommt, dann wird je nach MSN ein eigener Sound gespielt. Der Sound wird alle 5 Sek. wieder gespielt. Sollte der Sound laenger als 5 Sek. laufen, so wird er gekillt und der naechste gestartet (K). Der "Ring-Sound" wird auch nur zu den angegebenen Zeiten gespielt. Ansonsten wird wieder "silent.au" gespielt. Wenn man von der ISDN-Karte rauswaehlt und nicht "My_Provider" anwaehlt, dann wird der Sound "unknown_ring.au" gespielt (Achtung: Wieder Zeit beachten). Der wird solange in einer Schleife gespielt (L), bis eine Verbindung zu stande kommt. So wie "/usr/bin/auplay" beendet ist, wird es wieder neu gestartet. Die Flags "OR" haben allerdings keine Bedeutung fuer andere Geraete am S0-Bus, da die ISDN-Karte die Ring-Phase von anderen Geraeten am Bus nicht mitbekommt. Kommentare in der in der Telefonnummerndateien: Es koennen koennen Kommentare an beliebiger Stelle beginnend mit de Zeichen '#' eingefuegt werden (siehe lib/README.Syntax.conffile). Diese Kommentare haben den Nachteil, dass sie verschwinden, wenn die Datei z.B. vom isdnconf (oder auch vom isdnlog selber) neu geschrieben werden. Als Alternative gibt es dort die Moeglichkeit in den Sektionen einfach Dummy-Eintraege zu setzen. Diese sind Eintraege, die von isdnlog nicht ausgewertet werden, aber trotzdem eingelesen werden und auch wieder geschrieben werden. Beispiel [isdnlog] comment1 = Pro Tag duerfen max. 100 DM fuer Datenverbindungen ausgegeben \ werden. CHARGEMAX = 100.00 comment2 = Das Logfile liegt unter /var/log/isdn.log logfile = /var/log/isdn.log Die beiden Eintraege "comment1" und "comment2" bleiben erhalten. auch die Reihenfolge bleibt bestehen. Es ist nur darauf zu achten, dass kein Eintrag den selben Namen hat. Also zweimal die Zeile "comment" geht nicht. Dann wird die erste Zeile durch die zweite ersetzt. Es ist auch darauf zu achten, dass der Name des Eintrages nicht schon von isdnlog verwendet wird. Also ein Kommentar mit "SI" zu benennen schlaegt fehlt, da dieser Name schon reserviert ist. 5. Die Konfigurationsdatei "isdnlog.users" ------------------------------------------ Die Datei wird nur benoetigt, wenn isdnlog mit der Option -xX gestartet werden soll. Andernfalls braucht diese Datei auch nicht angelegt werden. Wird isdnlog mit -xX gestartet, ohne dass diese Datei existiert, wird eine Defaultdatei angelegt, die _unbedingt_ editiert werden sollte. Es erscheint dann auch eine entsprechende Warnung. Die Konfigurationsdatei wird im Verzeichnis "/etc/isdn" erwartet, und enthaelt fuer isdnlog die Informationen ueber Zugriffsberechtigungen von Benutzern via Client. Leere Zeilen werden ignoriert. Wenn in einer Zeile ein "#" enthalten ist, wird der Rest der Zeile als Kommentar gewertet. Steht am Ende einer Nicht-Kommentarzeile ein "\", so wird die Zeile mit der naechste Zeile zu einer "verschmolzen". ACHTUNG: Das Zeichen "\" muss als letztes Zeichen stehen, und darf nicht von Tab's oder Leerzeichen gefolgt werden. Zur Zeit sind folgende Zeichen als Sonderzeichen anzusehen: "$@#,;\". Diese Sonderzeichen muessen gequotet werden, wenn diese in der Datei "isdnlog.users" verwendet werden sollen. 5.1 Aufbau ---------- Der Aufbau ist aehnlich, wie die Benutzerdatei von xcept, aber um einige Eigenschaften erweitert. Jedem Benutzer werden Rechte mitgegeben. Diese Rechte stehen direkt hinter dem Namen, getrennt durch Leerzeichen oder Tab's. Die Rechte beschreiben, welche Informationen der Benutzer vom isdnlog beziehen kann, oder welche Einstellungen er am isdn4linux vornehmen kann: ALL Es werden komplett alle (folgenden) Rechte vergeben. Sinnvoll fuer "root" MSN=msn[,msn...] Es werden nur Informationen zu den angegeben MSN's angezeigt. Das bezieht sich auf ankommende sowie abgehende Gespraeche, sowie auf die Protokoll-Daten. Es koennen beliebig viele MSN's angegeben werden. Auch die Verwendung von Wildcards, wie bei den Nummern von der Datei "isdn.conf", ist erlaubt. Mit "MSN=*" werden alle MSN's abgedeckt. Das Flag MSN funktionert nur bei reinkommenden (von ISDN-Anschluessen) Gespraechen und den ISDN-Karten (siehe Bemerkung von Gernot Zander weiter oben). Alle unbekannten Gegenstellen und rausgehenden Rufe werden nur mit "ALL" oder "MSN=*" angezeigt. PROTOCOL Es wird ein separates Fenster vom Client zur Verfuegung gestellt, wo man alle Informationen vom isdnlog angezeigt bekommt, die mit -xX eingestellt worden sind. In Planung/Vorbereitung: I4LCONF Es besteht die Moeglichkeit, Eigenschaften von isdn4linux von dem Client aus einzustellen. Wenn einem Benutzer dies erlaubt werden soll (Sinnvoll nur fuer "root"!), dann muss dem Benutzernamen dieses Flag folgen. In Planung/Vorbereitung: ADDRESSBOOK Dem Benutzer mit diesem Recht wird die Moeglichkeit gegeben, sich Daten ueber den Anrufer/Angerufenen zu speichern und ein Notizbuch zu fuehren (weitere Info's unter xisdn). Wenn mehrere Rechte an einem Benutzer vergeben werden sollen, koennen diese mit ";" getrennt hintereinander angegeben werden. Am Anfang der Datei koennen Eintrage stehen, wo jeweils ein Benutzer mit einem Hostnamen und seinen Benutzerrechten angegeben wird. fred@vom.jupiter MSN=4711? root@host1.at.home ALL Im obigen Beispiel darf sich der Benutzer "fred" nur von dem Host "vom.jupiter" mit dem isdnlog verbinden. Analog dazu der Benutzer "root" nur von dem Host "host1.at.home". In dem zweiten Abschnitt der Datei koennen Gruppierungen von Benutzern und Hostnamen zusammengestellt werden. Ein Abschnitt beginnt mit der Zeile [Mein_Abschnitt] und endet mit dem Beginn des naechsten Abschnittes oder beim Dateiende. Beim Abschnittnamen wird nicht zwischen Gross- und Kleinschreibung unterschieden. In einem Abschnitt besteht eine Zeile entweder aus einem Benutzernamen oder einem Hostnamen: heinz MSN=*;PROTCOL @host1 @host2 otto MSN=47111,47112 @host3 Einem Benutzernamen muessen immer die Rechte folgen, die dem Benutzer zugeordnet werden sollen. Dem Hostnamen duerfen keine Rechte zugeordnet werden. Im obigen Beispiel duerfen die Benutzer "heinz" und "otto" von den Hosts "host1", "host2" oder "host3" den Client starten. Wenn ueberhaupt keine Rechte vergeben werden sollen, d.h. jeder beliebige Benutzer darf von jedem Host zum isdnlog eine Verbindung aufbauen mit allen Rechten, dann reicht es in der Datei "isdnlog.users" den folgenden Eintrag zu setzen: [world] Beispiele fuer "isdnlog.users" sind im isdnlog-Paket unter dem Verzeichnis "./samples" zu finden. Es ist darauf zu achten, dass die angegeben Hostnamen in der Datei /etc/hosts zu finden sind. Andernfalls wird der Nameserver nach unbekannten Hostnamen befragt, was zu einem unbeabsichtigten Verbindungsaufbau via ppp oder ISDN fuehren kann. Die Datei "isdnlog.users" wird _vor_ jedem Verbindungsaufbau zu einem neuen Client ueberprueft, ob sie noch aktuell ist, ansonsten wird sie neu eingelesen. Dadurch hat man die Moeglichkeit, die Datei zu editieren, ohne anschliessend den isdnlog neu zu starten. 6. Das AVON-Verzeichnis ----------------------- Ein "make install" installiert im isdnlog-Verzeichnis "/etc/isdn" eine ASCII-Datei "avon". Diese enthaelt ein Verzeichnis aller Vorwahlnummern fuer Deutschland in der Form : Beim ersten Start liest isdnlog diese ASCII-Datei ein, und erstellt daraus eine ISAM-Datei ("avon.dir" / "avon.pag"). Sobald die VSt isdnlog eine Telefonnummer meldet, die noch unbekannt ist (d.h. nicht in der "isdn.conf" angegeben ist), sucht isdnlog diese Telefonnummer im AVON-Verzeichnis, und zeigt die Telefonnummer in der Form: " / Rufnummer, Ortsnetz" an. Falls das AVON-Verzeichnis korrigiert oder erweitert wird, muessen danach die Dateien "/etc/isdn/avon.dir" sowie "/etc/isdn/avon.pag" von Hand geloescht, und isdnlog neu gestartet werden, damit das neue Verzeichnis aufgebaut werden kann. Beim Einlesen der ASCII-Datei kann moeglicherweise die Fehlermeldung isdnlog: WARNING: Duplicate Entry ``'' in AVON in Line xx, ignored isdnlog: WARNING: Can't be ``'' and ``''! erscheinen. Dies deutet an, das eine Vorwahl zwei mal eingetragen wurde. 7. Betriebsmodi --------------- isdnlog kennt folgende grundsaetzliche Betriebsmodi: - isdnlog -m1015 isdnlog zeigt den gesamten Ablauf jeder Verbindung auf stdout an. Dieser Output kann mit der Zusatz-Option "-C " z.b. auf andere Linux-Consolen umgelenkt werden ("isdnlog -m1015 -C /dev/tty7" -> 7. Console). - isdnlog -S isdnlog startet bei diversen Event's die gesamte 5. Spalte der "isdn.conf" als externes Programm. Jedoch wird das angegebene Programm nur dann gestartet, wenn folgende Bedingungen erfuellt sind: 1. Die Telefonnummer entspricht dem Eintrag in der "isdn.conf" 2. Der Service-Indicator entspricht dem Eintrag in der "isdn.conf" 3. Man selbst ruft diese Nummer an, und das Flag ist "O" fuer OUTGOING gesetzt. oder Man wird von dieser Nummer angerufen, und das Flag ist "I" fuer INCOMING gesetzt. 4. Es "klingelt", d.h. eine Verbindung ist gerade im Entstehen, und das Flag ist "R" fuer RING gesetzt. oder Die Verbindung kam zustande, und in der Flags-Spalte ist "C" fuer CONNECT gesetzt. Die eigentliche Grund-Aufgabe von isdnlog, das Fortfuehren des Logbuch's "/var/log/isdn.log" wird auf jeden Fall durchgefuehrt. Daneben bietet isdnlog noch folgende interessante Zusatz-Funktion: - isdnlog -t 1 oder isdnlog -t 2 Bei jeder rausgehenden Verbindung uebertraegt die Vermittlungsstelle die aktuelle Uhrzeit/Datum an isdnlog. Mit der Option "-t 1" setzt isdnlog _einmalig_ die Systemzeit des Rechners auf diese uebertragene Zeit. Mit der Option "-t 2" setzt isdnlog bei _jeder_ Uhrzeit-Uebertragung die Rechner-Uhr neu. 8. Start von isdnlog -------------------- Vor dem Start von "isdnlog" muss das D-Channel Q.931 logging des Teles-Treiber eingeschaltet werden. Bis "isdn4linux0.6.6beta" ist dazu telesctrl 1 4 wobei "" mit dem String zu ersetzen ist, der beim "insmod teles.o" als "id=" angegeben wurde. Die Kernel-Version von isdn4linux benoetigt anstelle von "id=" ein "teles_id=" ! Wurde keine "id" angegeben, ist beim "telesctrl" stattdessen "line0" anzugeben. Beim "telesctrl" koennen auch noch weitere Debug-Flags eingeschaltet werden, isdnlog benoetigt allerdings auf jeden Fall die "4" Nun kann isdnlog mittels: isdnlog [ -avsx:m:l:rt:cC:w:SVTRDPeMh: ] [ /dev/isdnctrl0 | - ] gestartet werden. Der isdnlog kann nur als root gestartet werden! isdnlog besitzt drei Ausgabekanaele: - Console (default stderr) (Schalter -mX) - syslog (Schalter -lX) - xisdn (Schalter -xX) Beim normalen Start (nicht als Daemon) werden alle Ausgaben (Meldungen) vom isdnlog auf stderr ausgegeben. Sobald isdnlog gestartet wird, erzeugt es eine Datei "/var/run/isdnlog.'device'.pid", und schreibt dort seine eigene Process-ID hinein. "device" steht fuer entsprechende isdnctrl-Device, welches man gangesprochen hat. Somit kann isdnlog jederzeit mittels "kill `cat /var/run/isdnlog.'device'.pid`" terminiert werden. (Was z.b. zwingend ist, wenn man das teles- oder isdn-Modul entladen will!) Wenn isdnlog ein zweites mal gestartet wird mit dem gleichen Device, beendet er sich sofort wieder, da nur ein isdnlog gleichzeitig auf einem device laufen kann. Muessen mehrere isdnlog's gleichzeitig gestartet werden, muessen diese mit Hilfe von Links gestartet werden. Z. B. ln -s isdnlog isdnlog1 isdnlog kann mittels "kill -HUP `cat /var/run/isdnlog.'device'.pid`" dazu aufgefordert werden, die Konfigurationsdatei "/etc/isdn/isdn.conf" neu einzulesen (z.b., nachdem daran Erweiterungen vorgenommen wurden) Dies darf jedoch _nicht_ waehrend einer laufenden Verbindung gemacht werden! Dieses fuehrt mit Sicherheit zum Programmabsturz! Die Optionen, denen ein "X" folgt, benoetigen einen zusaetzlichen Parameter. (z.b. "-pX" -> "-p 20012" oder "-p20012". Nummerische Parameter koennen in Dezimal (z.b. "64"), hexadezimal (z.b. "0x40"), oder octal (z.b. "0100") angegeben werden. -V isdnlog zeigt seine eigene Versionsnummer an, und terminiert wieder -fX isdnlog liest eine Konfigurationsdatei "X". Hier koennen Optionen angegeben werden. Der Aufbau der Datei (Beispiel). [options] # Muss immer zuerst kommen. log=yes port = 10000 STDOUT = 1023 # Gross/Kleinschreibung wird bei den Bezeichnern nicht # beachtet. ... Die Syntax ist also die gleiche wie bei isdn.conf. Der Aufbau der einzelnen Optionen stehen in Klammern am Ende der einzelnen Optionen. Optionen, die nur fuer Debugging-Zwecke Bedeutung haben wie -T, koennen nicht ueber diese Datei "X" voreingestellt werden. -vX isdnlog schreibt den gesamten Output von "/dev/isdnctrl0", den Output von "/dev/isdninfo" sowie die jeweils gemessene Durchsatz-Rate, ergaenzt um Uhrzeit/Datum nach "/tmp/isdnctrl0" zur spaeteren Kontrolle (siehe auch "-r" Option) Das Argument X gibt an, welche Ausgaben mitprotokolliert werden sollen: 1 nur die "HEX:" Zeilen vom HiSax-Treiber 2 die Ausgaben von "/dev/isdnctrl" 4 die Ausgaben von "/dev/isdninfo" 8 die Byte-Angaben ("ibyte", "obyte") Hier koennen auch Kombinationen angegeben werden (z.b. 2 + 4 = 6 == "/dev/isdnctrl" und "/dev/isdninfo") (log=X) -s isdnlog fuehrt nach jedem Schreibzugriff auf die "/tmp/isdnctrl0" (-> siehe "-vX") einen flush() darauf aus (flush={yes|no}) -pX Angabe der TCP/IP Port-Nummer, ueber die isdnlog mit dem X11-Client kommunizieren soll ACHTUNG: Andere Bedeutung als in frueheren Versionen! (port="value") -mX Angabe der gewuenschten Meldungen, die angezeigt werden sollen. Normalerweise ist das stderr. Es kann aber mit -C X ein anderes Device sein. ACHTUNG: Andere Bedeutung als in frueheren Versionen! (stdout="value") -lX Angabe der gewuenschten Meldungen, die in's syslog eingetragen werden sollen (syslog="value") -xX Angabe der gewuenschten Meldungen, die dem X11-Client gemeldet werden sollen. Gleichzeit mit -xX wird es erlaubt, dass ein X11-Client sich beim isdnlog anmelden darf. (xisdn=XXX) -r isdnlog spielt die angegebene Datei (eine "/tmp/isdnctrl0") nochmals trocken durch (Zwecks debugging etc.) (Diese Option erkennt auch automatisch Dateien, die nicht von isdnlog um Datum/Uhrzeit erweitert wurden, also z.b. der Output eines "cat /dev/isdnctrl0") -tX isdnlog soll bei einer Uhrzeit-Uebertragung durch die VSt die Rechneruhr entsprechend stellen (-t 1 = ein mal, -t 2 = immer) ACHTUNG: Erweiterte Syntax gegenueber frueheren Versionen! (time={0|1|2}) -C X Angabe des Device, an das isdnlog die Meldungen von stderr ausgeben soll. Es werden nach Angabe dieses Schalters keine Meldungen mehr auf stderr ausgegeben, sondern nur noch an das angegebene Device. (-C /dev/tty7, -C /dev/ttyp5) ACHTUNG: Erweiterte Syntax gegenueber frueheren Versionen! OBACHT: Zwischen "-C" und dem Device _muss_ ein Leerzeichen stehen!! (console="path") -S isdnlog soll bei diversen Event's die in der 5. Spalte der isdn.conf angegebenen externen Programme starten (start={yes|no}) -wX in welchen Abstaenden soll isdnlog die Uebertragungsrate neu berechnen und anzeigen (Angabe in Sekunden) (thruput="value") -D isdnlog wird als Daemon gestartet. Wenn -mX nicht verwendet wurde, wird die gesamte Ausgabe (normal stderr) auf den syslog geschrieben. Der isdnlog wird automatisch im Hintergrund gestartet. (daemon={yes|no}) -T Trace-Modus ... isdnlog laeuft im Single-Step-Modus, und wartet pro verarbeiteter Zeile aus "/dev/isdnctrl0" auf einen Tastendruck. An dem Prompt ">>>>>>> TRACE (CR=next, q=quit, d=dump, g=go):" kann mit "d" ein Dump aller relevanten internen Variablen erzeugt, sowie mit "g" der Trace-Modus beendet werden. -P Pipe-Modus ... isdnlog reicht den gesamten Output von "/dev/isdnctrl0" an stdout weiter. Somit kann isdnlog als Quelle einer Pipe laufen: isdnlog -P /dev/isdnctrl0 | prog2 ... (pipe={yes|no}) -b Wenn ein bilingualer NT verwendet wird, mit dem DSS1 gefahren wird, dann muss dieses Flag gesetzt sein, da sonst die eigenen MSN's fehlerhaft angezeigt werden. (bilingual={yes|no}) -M imon/imontty/isdnmon Emulator Hiermit erzeugt isdnlog eine den obigen Tools entsprechende Ausgabe (Achtung: -m2048 muss dann zusaetzlich angegeben werden!) (monitor={yes|no}) -hX Zeitabhaengige Hangup-Timeout Steuerung Wird dieses Flag angegeben, berechnet isdnlog bei jedem rausgehenden Verbindungsaufbau die aktuelle Dauer einer Gebuehreneinheit entsprechend der Tageszeit (nebst Wochentag/Feiertag etc.) sowie der Gebuehrenzone des Gegners, und programmiert - falls erforderlich - die neue Dauer in das entsprechende IP-Interface. Beispiel: Mein Internet-Provider steht folgendermassen in der "isdn.conf" : 4711 EUnet 3 isdn0 OC=$CMD ${SOUNDS}/dial.au Konfiguriert wurde dessen IP-Interface "isdn0" in der "rc.isdn" so: isdnctrl huptimeout isdn0 12 Erfolgt nun ein Verbindungsaufbau Richtung EUnet, berechnet isdnlog die aktuell gueltige Dauer einer Gebuehreneinheit (da mein Provider in "Regio 200" liegt, also 12.0, 13.5, 21.5, 30.0 oder 120.0 Sekunden) und setzt intern die Befehle isdnctrl chargeint isdn0 X isdnctrl huptimeout isdn0 Y ab, wobei fuer "X" die berechnete Zeit, und fuer Y je nachdem, ob X groesser oder kleiner 20 Sekunden ist, den linken oder rechten Parameter der -h Option. Dauert z.b. eine aktuelle Gebuehreneinheit 12 Sekunden, und wurde isdnlog mit "-h5:3" gestartet, wird also der ChargeInt-Counter auf 12 Sekunden, und der huptimeout-Counter auf 5 Sekunden gestellt. Das Nachjustieren des Hangup-Timers geschieht sowohl bei jedem Verbindungsaufbau, als auch bei jedem Uebergang in einen anderen Tarif, also um 9:00, 12:00, 18:00, 21:00, 2:00 sowie 5:00 Uhr. ACHTUNG: Die Gebuehrenimpulse der VSt kommen keineswegs im Rythmus der wirklichen Gebuehrentakt-Laenge, sondern in jeweils auf 10 Sekunden gerundeten Abschnitten (entsprechend eigener Beobachtungen) In obigem Beispiel also nicht nach 12,24,36,48 .. Sekunden, sondern nach 20,30,40,50 Sekunden. ACHTUNG: Wird dieses Feature genutzt, sollte isdnlog mindestens mit "-t1", besser mit "-t2" synchron zur Uhr der VSt laufen! Fuer diese Funktionalitaet benoetigt isdnlog das Programm "isdnctrl" nicht, da es direkt mit isdn4linux komuniziert. (hangup="value") -cX Nur in Verbindung mit -xX. Es werden die X letzten Gespreache vom isdnlog gespeichert, die vom xisdn abgerufen werden, wenn der xisdn gestartet wird. Der Defaultwert betraegt 100. (calls="value") -LX Nur in Verbindung mit -xX. Es werden die X letzten Meldungen von der Option -xX im isdnlog gespeichert, die vom xisdn abgerufen werden, wenn der xisdn gestartet wird. Der Defaultwert betraegt 500. (xlog="value") -n Die Durchsatzmeldungen werden - soweit moeglich - immer in derselben Bildschirmzeile angezeigt. (newline={yes|no}) -Wx Alle Bildschirmausgabezeilen werden auf max. "x" Zeichen/Zeile beschnitten (width="value") -Ax Hiermit kann/koennen die Ziffer(n) angegeben werden, die an einer Telefonanlage vorgewaehlt werden muessen, um ein Amt zu bekommen. Hierbei koennen beliebig viele, jeweils durch ein ":" getrennte Amtsholungen angegeben werden, also z.B. -A0:80:81:82:83:84:85:86:87:88:89 (amt="value") -2x Dual-Mode. isdnlog empfaengt die D-Kanal-Frames der anderen Geraete auf dem S0-Bus ueber eine zweite, falsch angeschlossene Teles-Karte. Mit x = 2 zeigt isdnlog auch jede Kleinigkeit - wie z.b. jedes einzelne gewaehlte Digit beim Telefonieren direkt an. (dual="value") Bei den Optionen -mX, -lX -xX sind folgende Flags moeglich: 1 Errors Fehlermeldungen vom isdnlog. Diese ist eine Defaultausgabe, die auf stderr bzw. an syslog (bei -D) gemeldet wird. 2 Warnings Warnungen vom isdnlog. Diese ist eine Defaultausgabe, die auf stderr bzw. an syslog (bei -D) gemeldet wird. 4 Meldungen Fehlermeldungen vom isdnlog. Diese ist eine Defaultausgabe, die auf stderr bzw. an syslog (bei -D) gemeldet wird. 8 Log-Ausgabe Die Meldungen, die der isdnlog in die Datei "/tmp/isdnctrl0" schreibt. 16 Show Numbers Sofort, wenn Telefonnummern auf dem S0-Bus auftauchen, werden diese angezeigt: Feb 17 19:10:11 * tei 123 calling EUnet with ISDN Digital ACHTUNG: fruehere Versionen: -m1 32 Show AOCD Bei jedem Gebuehrenimpuls wird die Anzahl der bislang aufgelaufenen Gebuehreneinheiten fuer die aktuelle Verbindung angezeigt: Feb 17 19:09:29 tei 123 calling EUnet with ISDN 2.EH = DM 0,24 (20 s) ## Dies funktioniert natuerlich nur, wenn auf der aktiven ## ISDN-Leitung Gebuehreninfo "A" (Charging-Info's during call's - ## AOC-D) bestellt wurde! Es wird die Anzahl der aufgelaufenen Einheiten sowie diese Einheiten umgerechnet in Geld (EH * DM 0,12) angezeigt. In Klammern wird angegeben, nach wieviel Sekunden (seit dem Verbindungsaufbau) dieser Gebuehrentakt erschien - eigentlich mehr, um aufzuzeigen, wie _ungenau_ die Uhr der VSt eigentlich laeuft! ACHTUNG: fruehere Versionen: -m2 64 Show Connect Kommt eine Verbindung zustande (Telefon wird abgenommen, ISDN-Karte akzeptiert den Call etc.) wird dies angezeigt: Feb 17 19:11:11 tei 123 calling EUnet with ISDN CONNECTED ACHTUNG: fruehere Versionen: -m4 128 Show Hangup Sobald diese Verbindung beendet wurde, wird dies angezeigt (Wie bei -m2 mit Anzahl Einheiten, diese in Geld sowie Gesamtdauer der Verbindung. Die Anzahl Einheiten stammt hier jedoch aus der AOC-E Meldung der VSt) Feb 17 19:14:13 tei 123 calling EUnet with ISDN HANGUP (15 EH = DM 1,80 = 148 s) ACHTUNG: fruehere Versionen: -m8 256 Show Cause Der Grund fuer einen Verbindungsabbau/das nicht zustande kommen einer Verbindung wird angezeigt Feb 17 19:14:24 tei 123 calling bun with Phone No user responding ACHTUNG: fruehere Versionen: -m16 512 Show Time Die von der VSt uebermittelte Uhrzeit wird angezeigt Feb 17 19:11:11 tei 123 calling EUnet with ISDN Time:Sat Feb 17 19:09:00 1996 ACHTUNG: fruehere Versionen: -m32 1024 Show Byte Der Durchsatz in Byte/s wird im Rythmus von "-w x" Sekunden angezeigt 2048 imon Anzeige Der aktuelle Zustand der B-Kanaele wird angezeigt 4096 Der vollstaendige Service-Indicator wird bei jedem Verbindungsaufbau aufgeschluesselt angezeigt 8192 Jede "-m" Meldung wird erweitert um eine Schaetzung, wann der naechste Gebuehrentakt beginnt sowie in welcher Zone der Gegner vermutlich liegt. Alle weiteren Flags (16.384 .. 4.194.304) sind Debug-Flags Werden mehrere Optionen gewuenscht, muss bei -mX bzw -lX, -xX die Summe der Optionen angegeben werden, d.h. falls alle obigen Optionen auf stderr gewuenscht werden, muss "isdnlog" nun mit "-m1015" gestartet werden. Das in aelteren Version verwendete "-m63" entspricht jetzt also "-m1015", da die ersten drei Flags auch gesetzt sein sollten. Alle z.Zt. moeglichen Informationen von isdnlog koennen mit "-m4087" angefordert werden. Wenn man die Schalter -mX, -lX oder -xX verwendet, sollte man darauf achten, dass die Meldungen (1: Errors, 2: Warnings und 4: Meldungen) auf jeden Fall irgendwo ausgegeben werden, da dies grundlegende Meldungen vom isdnlog sind. 9. Die Protokoll-Datei "/var/log/isdn.log" ------------------------------------------ Fuer jede (zustande gekommene, oder auch nicht zustande gekommene) Verbindung erzeugt isdnlog einen Eintrag in der Datei "/var/log/isdn.log": Sep 30 15:24:10 1995|xxxxx|xxxxxx| 3| 344| 812471050| 1|I|0| 0| 0| (1) (2) (3) (4) (5) (6) (7) (8)(9) (10) (11) Wobei in den einzelnen Spalten folgendes steht: (1) Zeitpunkt des Verbindungsaufbaues (in Local-Time) (2) Telefonnummer des Anrufers (oder Blank, falls z.b. Analog-Anschluss) (d.h. natuerlich auch die eigene MSN, wenn man selber raus-ruft!) (3) Telefonnummer des Gegners (d.h. die eigene MSN, wenn man angerufen wird) (4) Dauer der Verbindung in Sekunden (5) Dauer der Verbindung in 1/100 Sekunden (im obigen Beispiel: 912 / 100 = 9,12 Sekunden) (6) Zeitpunkt des Verbindungsaufbaues in UTC (7) Anzahl zu zahlender Gebuehreneinheiten (AOC-D) (oder -1, falls keine Gebuehreneinheiten von der VSt gemeldet wurden) (8) "I" fuer incoming call, "O" fuer outgoing call (9) Kam eine Verbindung nicht zustande (d.h. z.b. man wird angerufen, nimmt aber nicht ab) taucht hier der Grund fuer das nicht Zustandekommen auf ("Cause") (10) Summe der uebertragenen Byte _von_ draussen (incoming) (11) Summe der uebertragenen Byte _nach_ draussen (outgoing) (12) Versionsnummer der "isdn.log" Eintragung, z.Zt. Version 2.0 (13) Dienstkennung fuer diese Verbindung (1=Speech, 7=Data usw.) (14) Bei Dienstkennung 1=Speech steht hier eine 1, falls der Gegner aus dem ISDN, und 0, falls der Gegner aus der analogen Welt kommt (15) Der Currency Factor fuer diese Verbinung (in Deutschland z.Zt. 0,12) (16) Die Waehrung fuer diese Verbindung (in Deutschland "DM") 10. Das Report-Modul isdnrep --------------------------- Gestartet wird isdnrep mittels: isdnrep [ -anvt:f:d: ] Die Optionen von isdnrep haben im einzelnen folgende Funktion: -a "all" isdnrep druckt alle Verbindungen an, die sich in der "/var/log/isdn.log" angesammelt haben (sonst nur "heute") -h "no header" Es wird weder fuer jeden Tag der Header angegeben, noch wird die Tages-/Gesamtzusammenfassung der Gespraeche und Gebuehren angezeigt. Dieses ist sinnvoll, wenn man den Output in ein anderes Programm einlesen will. -n "numbers" isdnrep druckt anstelle der Symbolischen Namen die Telefonnummern an -c Zone "compute" Falls man kein AOC-E (Gebuehreninfo am Ende einer Verbindung) bestellt hat, und isdnlog der angerufene Gegner unbekannt ist ("calling ?"), kann hiermit angegeben werden, in welcher Gebuehrenzone isdnrep den Gegner "vermuten" soll: -c 0 : nicht's berechnen, sondern mit DM 0,00 abrechnen -c 1 : in der City-Zone vermuten -c 2 : in der Regio-50 Zone vermuten -c 3 : in der Regio-200 Zone vermuten -c 4 : in der Fernzone vermuten -f file "file" Es kann ein anderes Logfile anstelle von /var/log/isdn.log angegeben werden. -t Zeitabschnitt "time" Mit dieser Option kann ein bestimmter Zeitabschnitt vom Logfile angezeigt werden. Z. b. alle Gespraeche vom Monat November '95 oder vom 3.Januar'96 von 3.00 Uhr bis 9.45 Uhr. Zeitabschnitt hat folgende Syntax: Zeit-Zeit Es wird der Beginn-Zeitpunkt und der End-Zeitpunkt bestimmt. Zeit- Von 'Zeit' bis jetzt -Zeit Von Beginn des Logfiles bis 'Zeit' Zeit Zeigt den aktuellen Monat, Tag, Stunde... an Die 'Zeit' kann folgendes Format beinhalten: [DD/][M]M/[[YY]YY] Gibt den Monat oder Tag an Beispiele: 7/95 (Juli '95) 7/ (Juli des aktuellen Jahres) 8/1996 (August '96) 6/6/95 (6. Juni 95) 6/6/ (FALSCH: ist NICHT 6.Juni des aktuellen Jahres, sondern Juni 1906) [D]D Gibt den Tag im aktuellen Monat an. Beispiele: 5 (5. des aktuellen Monats), 15 (15. des aktuellen Monats) [MM]DD[hhmm[[CC]YY][.ss]] Gibt einen genauen Zeitpunkt an. Wenn Stunden, Minuten und Sekunden nicht gesetzt sind, dann werden sie automatisch auf 0 beim Anfangszeitpunkt und auf 23 bzw. 59 beim Endzeitpunkt gesetzt. Standardgemaess werden mit diesem Format auf den Tag Einstellungen vorgenommen. Wenn das Jahr mit angegeben werden soll, so MUESSEN auch die Stunden und Minuten mitangegeben werden. Das Format ist vom date-Befehl uebernommen worden. Beispiele: 0107 (7.Januar des akt. Jahres) 0107173196.25 (7.Januar'96 17:31:25 Uhr) 010717311996 (7.Januar'96 17:31:00 Uhr) 12141995 (FALSCH: Ist NICHT 12.Dezember'95, sondern 12.Dezember das akt. Jahres 19:95 Uhr -> Muell) Beispiele fuer die Zeitabschnitte und deren Bedeutung: 6/95-081214381996.25 (Alle Eintraege zwischen 1.Juni'95 0:00:00 Uhr und 12.August'96 14:38:25 Uhr) 0912030495.20-12/95 (Alle Eintraege zwischen 12.September'95 3:04:20 Uhr und 31.Dezember'95 23:59:59 Uhr) 7/95 (Alle Eintraege zwischen 1.Juli'95 0:00:00 Uhr und 31.Juli'95 23:59:59 Uhr) 0908 (Alle Eintraege zwischen 8.September des akt. Jahres 0:00:00 Uhr u. 8.September des akt. Jahres 23:59:59 Uhr) 3 3.Tag des akuellen Monats -d -Zeit "delete" Loescht in der Logdatei alle Eintraege ausschliesslich der angegebenen Zeit. Das Zeitformat ist gleich, wie bei Option -t. Das Minus vor der "Zeit" MUSS immer angegeben werden! Es kann auch KEIN von-bis-Zeitraum angegeben werden. Es koennen nur von Anfang des Logfiles bis zu dem angegebenen Zeitpunkt Eintraege geloescht werden. Beispiele: -7/95 Loescht alle Calls bis 30.Juni'1995 23:59:59 Uhr -0107173196.25 Loescht alle Calls bis 7.Januar'96 17:31:24 Uhr ACHTUNG:---------------------------------------------^^ Der angegebene Zeitpunkt wird immer ausgeschlossen! ACHTUNG: Mit dieser Option werden Eintraege aus der Logdatei geloescht. Bei unsachgemaesser Verwendung, kann die gesamte Logdatei geloescht werden! z.b. "isdnrep -d -" loescht ALLE Eintraege. -v "verbose" Zeigt alle Verbindungen und Verbindungsversuche auf. Sonst werden nur die "wahren" Gespraeche angezeigt, die ohne Fehler zustande gekommen sind. -p [n][m]'Nummer'[,[m]'Nummer'...] "phonenumber" Hiermit koennen nur ausgewaehlte Telefonnummer angezeigt werden. 'Nummer' ist eine Zahl im Format der Konfigurationsdatei mit Wildcards (siehe "/etc/isdn/isdn.conf"). Wenn ein 'm' vor der Nummer steht, beschreibt es die entsprechende MSN. Z.b. 'm2' (entspricht MSN#2). Wenn 'MSN' == 0 ("m0") ist, dann bedeutet das, alle uebrigen Nummern werden angezeigt. Wird das Flag n gesetzt, bedeutet dieses, dass die angegebenen Nummer nicht angezeigt werden. Dieses Flag gilt immer fuer alle Nummern. Ist also eine Negierung. -i "incoming" Mit dieser Option werden nur einkommende Gespraeche angezeigt. -o "outgoing" Mit dieser Option werden nur rausgehende Gespraeche angezeigt. Es wird nun auf stdout eine Abrechnung mit folgender Optik generiert: $ isdnrep -v -t 6/1/96 I S D N Connection Report - Sun Jan 7 22:21:19 1996 Sat Jan 6 1996 00:54:19 UNKNOWN -> UNKNOWN No user responding (4) [...] 16:33:24 0:03:23 UNKNOWN -> UNKNOWN 7 EH 0,84 DM 17:33:47 UNKNOWN -> UNKNOWN Unallocated (unassigned)(5) number 20:02:28 0:02:37 Phone/HDLC <- UNKNOWN (1) 20:09:53 0:07:01 Modem/X.75 -> T-Online 3 EH 0,36 DM (2) 21:27:56 UNKNOWN -> UNKNOWN User busy (3) 22:09:41 0:29:36 UNKNOWN -> UNKNOWN 43 EH 9,89 DM * ========================================================================= 1 IN= 0:02:37, 13 OUT= 3:40:14, 3 failed 210 EH 25,20 DM (6)^^^^^^^^^^^^ (7)^^^^^^^^^^^^^ (8)^^^^^^^ (9)^^^^^^ (10)^^^^^^^^ DIALOUT Summary for Sat Jan 6 1996 (11) ----------------------------------------------------------- T-Online 1 call(s) 0:07:01 3 EH 0,36 DM UNKNOWN 11 call(s) 0:17:00 20 EH 2,40 DM DIALIN Summary for Sat Jan 6 1996 (12) ----------------------------------------------------------- UNKNOWN 1 call(s) 0:02:37 Zone 1 : City 2 call(s) 2:23:13 50 EH 6,00 DM (13) Zone x : UNKNOWN 11 call(s) 0:17:00 20 EH 2,40 DM Fussnoten: (1) "xxx <- xxx" war ein eingehender Anruf, kostet also nix (2) "xxx -> xxx" ist ein rausgehender Ruf, macht also bei 203 sec, Cityzone, Freizeittarif (da Samstag) 3 Gebuehreneinheiten = DM 0,36 ;-) (3) Das Telefonat kam nicht zustande, da der angewaehlte Teilnehmer besetzt war. (4) Der angwaehlte Teilnehmer hat den Hoerer nicht abgenommen. (5) "Kein Anschluss unter dieser Nummer..." (6) Gesamte Zeit von eingehender Anrufen (7) Gesamte Zeit von rausgehender Anrufen (8) 3 Anrufe sind gescheitert (hier: einmal besetzt(3), einmal keine Antwort(4) und einmal verwaehlt (5)) (9) Die gesamten Einheiten fuer einen Tag (10) Das Geld, was man selbst fuer diesen Tag zu zahlen hat (11) Aufschluesselung der rausgehenden Rufe nach Nummern (12) Aufschluesselung der eingehenden Rufe nach Nummern (13) Aufschluesselung der raus- und eingehenden Anrufe nach Bereichszonen Wurden die Einheiten mit einem "*" markiert, wurden vom "Amt" keine Einheiten gemeldet (Charging-Info fehlte) Daher steht dann hier die von isdnrep errechnete Anzahl Einheiten. 11. Das Konfigurations-Tool isdnconf ------------------------------------ Dieses Programm bearbeitet oder interpretiert die Datei /etc/isdn/callerid.conf sowie ~/.isdn. Es koennen hiermit Eintraege in dieser Datei angelegt oder geloescht werden. Des weiteren koennen wie mit einem Grep Eintraege gesucht und angezeigt werden. Unter einen Eintrag ist eine eigene MSN ([MSN]) oder eine Telefonnummer ([NUMBER]) gemeint. Dieses Programm hat seine Staerken als ein Suchprogramm in einem persoenlichem Telefonbuch. Hier nun die Optionen des Programmes: Befehle: ACHTUNG: Dieses Programm besitzt zwar die Faehigkeit, die Nummerndateien zu veraendern. Defaultmaessig wird die Datei ~/.isdn editiert. Es kann auch mit den Schaltern -f und -g eine andere Datei verwendet werden. Es wird aber dringend davon abgeraten die Schalter -A und -D zu verwenden!! Hierbei wird die gesamte Struktur der Datei zerstoert (include), so wie alle Kommentare werden geloescht. -A "add" Es wird ein neuer Eintrag hinzugefuegt. Dieser wird ueber Standardinput eingelesen. Es werden folgende Angaben abgefragt: Alias: Fred Number: 0815/441777 SI: 0 Zone: 4 Interface: - Flags: I|O Program: /usr/local/ring User: uucp Group: user Interval: Time: 8-20 Flags: (CONTROL-D) Alias: (CONTROL-D) Wenn kein Control-D bei dem zweiten Flags gedrueckt wuerde, kann ein weiterer Programmstart zur entsprechenden Nummer angeben werden. Wenn bei "Alias" kein Control-D gedrueckt wuerde, koennte man eine weitere Nummer eingeben. Es kann auch eine Datei als Eingabe "gepipt" werden. Der Inhalt der der Datei sieht dann equivalent zur oberen Eingabe aus: Fred 0815/441777 0 4 - I|O /usr/local/ring uucp user 8-20 -D "delete" Loescht einen oder mehrere Eintraege, die den folgenden Mustern entsprechen. Diese Muster werden unter den weiteren Optionen besprochen. -V "version" Zeigt die aktuelle Version und beendet sich. Wenn weder -A noch -D angegeben wurde, dann wird isdnconf nur Telefonnummern anzeigen die, dem Muster entsprechen. Sollte -A und -D gleichzeitig angegeben werden. Wird isdnconf automatisch beendet. Optionen: -n 'Nummer' "number" Sucht nach Telefonnummer unter allen Eintraegen, die dem Muster entsprechen und zeigt sie anschliessend an. 'Nummer' ist eine Zahl im Format der Konfigurationsdatei mit Wildcards (siehe "/etc/isdn/isdn.conf"). Gilt nicht fuer den Befehl -A. -a 'Alias' "alias" Sucht nach dem Alias unter allen Eintraegen, die dem Muster entsprechen und zeigt sie anschliessend an. 'Alias' ist eine Zahl im Format der Konfigurationsdatei mit Wildcards (siehe "/etc/isdn/isdn.conf"). Gilt nicht fuer den Befehl -A. BUG: Statt dem Zeichen '-' muss ein '?' verwendet werden! -t 'SI' Zeigt alle Eintraege mit Service-Indicator 'SI' an. Gilt nicht fuer den Befehl -A. -c 'Code' "code" Ermittelt die Vorzahl zu der Telefonnummer und gibt diese dann aus. Gilt nicht fuer -A und -D. -i "ignore" Es wird dann bei den Optionen -n und -a die Gross/Kleinschreibung ignoriert. -w "word" Der Ganze String von -a und -n muss auf den angewendeteten String passen. Beispiele (hier fuer -n): "*34*" -> 123456, 345677, 1234 "34*" -> 34567, 34111 "34??" -> 3411, 3456 "34" -> 34 (und nichts anderes!!!) Ohne diese Option wuerde das Muster wie beim "grep" arbeiten: "*34*" -> 123456, 345677, 1234 "34*" -> 123456, 345677, 1234, 34567, 34111 "34??" -> 123456, 345677, 1234, 3411, 3456 "34" -> 123456, 345677, 1234, 3411, 3456, 34567 -d "and" Defaultmaessig werden die Optionen -n, -a und -t mit ODER verknuepft. Wenn diese alle mit UND verknuepft werden sollen, muss diese Option verwendet werden. Es koennen die drei oben genannten Optionen nur jeweils einmal in der Befehlszeile verwendet werden. -q "quiet" Es unterdrueckt beim Befehl -A und -D die Ausgabe. Ansonsten zeigt es nur das Alias zur gesuchten Nummer oder die Nummber selber, falls kein Eintrag gefunden wurde. -m "msn" Es besagt beim Befehl -A, das die folgenden Eingaben einen Eintrag MSN erzeugen. Defaultmassig werden NUMBER-Eintraege geschrieben. Normalerweise werden folgende Felder in der Ausgabe angezeigt: Alias: Fred Number: 0815/441777 SI: 0 Zone: 4 Interface: Dieses gilt nicht fuer die Befehle -A und -D. Die folgenden beiden Optionen -l und -s veraendern diese Ausgabe. -s "short" Hiermit werden nun nur noch das Alias und die Nummer angezeigt. -l "long" Hier werden zusaetzlich noch die die zu startenden Programme ([START]) angezeigt. -f 'Datei' "file" isdnconf verwendet normalerweise die Konfigurationsdatei "/etc/isdn/isdn.conf" sowie "~/.isdn". Wenn eine andere benutzt werden soll, dann muss sie mit dieser Option angegeben werden. Gilt nur fuer die Optionen -A und -D -g "global" Hat nur Auswrikungen bei den Befehlen -A und -D. Es wird dann anstatt der ~/.isdn die Datei /etc/isdn/callerid.conf genommen zum editieren. 12. Der X-Client xisdn ---------------------- Der xisdn basiert auf Motif-2.0. Daher werden die wenigsten ihn selber uebersetzen koennen. Der xisdn liegt als binary direkt neben dem isdnlog-Paket auf den meisten ftp-Server'n, die auch isdnlog vorhalten. Der xisdn kann dann in ein beliebiges Verzeichnis eingespielt werden, welches natuerlich im Pfad liegen sollte. Wenn die Datei "Isdn" nicht im Verzeichnis /usr/X11R6/lib/X11/app-defaults zu finden ist (wird normalweise bei "make xinstall" dort hinein kopiert), dann muss dem "xisdn" die Resource-Datei "Isdn" mittels export XENVIRONMENT=/Isdn bekannt gemacht werden. Der X-Client laeuft ueber TCP/IP und muss daher nicht auf dem gleichen Host laufen wie der isdnlog. Der isdnlog ist in der Lage, mehrere Clients gleichzeitig zu bedienen. Dem xisdn koennen folgende Parameter mit auf dem Weg gegeben werden: xisdn: usage: xisdn ["X11 options"] [ -p: ] [host] Es koennen alle ueblichen X11 Optionen angegeben werden (siehe "man X"). -pX Es kann die Portadresse vom isdnlog mit angegeben werden (-p 20011, -p4711). Host Der Host, auf dem isdnlog laeuft. Werden dem xisdn keine Parameter mitgegeben, dann versucht er zum lokalen isdnlog zu verbinden. Als Default-Port nimmt er den Eintrag von der Datei /etc/services. Ist dort der Service "isdnlog" nicht bekannt (dieser wird bei "make xinstall" in die /etc/services" eingetragen), wird der "einkompilierte" Port genommen. Die Prioritaet vom Port (gilt auch fuer den isdnlog): 1. -pXXX 2. /etc/services 3. #define SERV_PORT XXX (im Makefile abgelegt: SERV_PORT = 20011) Kurze Beschreibung der Oberflaeche: Die Oberflaeche ist in 3 Bereiche unterteilt: Ein Menubar mit Funktionen und Hilfe und zwei scrollbaren Listen: die obere mit aktuell bestehenden und die untere mit bereits abgeschlossenen (bzw. abgebrochenen) Verbindungen. Die Zeilen in der letzten Liste koennen ausgewaehlt und dann mit 'Funktionen->Loeschen' entfernt werden. Die Spalten tragen die folgenden Informationen (von links her): Monat, Tag, Verbindungsanfang, Dauer der Verbindung, Gebuehren, Waehrung, MSN, Richtung, Gegenstelle, deren Ort, Status. Mit 'Funktionen->Protokoll' koennen alle Meldungen vom Server im separaten Dialog ausgegeben werden. Die Informationen die beim isdnlog mit -xX eingestellt wurden, erscheinen dann im Protokollfenster. Aber dafuer muss der Benutzer, der xisdn startet auch die Rechte in der Datei /etc/isdn/isdnlog.users haben. Der xisdn beinhaltet Teile von Xmt-2.1.2 Copyright (c) 1992, 1993, 1994 by Dovetail Systems. Diese Programmteile unterliegen _nicht_ dem GPL. Sie duerfen daher auch nicht anderweitig verwendet werden, als fuer den xisdn. Weitere Informationen sind bitte den COPYRIGHT-Dateien im Verzeichnis "client/Xmt" zu entnehmen. 13. ChargeInt ------------- Die folgenden Seiten zum ChargeInt-Patch im contrib-Verzeichnis wurden von Georg v.Zezschwitz (gvz@pop.de) geschrieben, der den ChargeInt-Patch entwickelt hat. Der Patch haengt nicht direkt mit isdnlog zusammen, ist aber im Zusammenspiel mit isdnlog sehr hilfreich, um ohne Leistungs- Einbussen der Telekom ein paar Mark weniger ueberweisen zu muessen. Was ist ChargeInt? ------------------ ChargeInt besteht aus einem Patch fuer den ISDN-Teil der Linux-Kernels und einem Patch fuer isdn4kutils. Er fuehrt einen weiteren Parameter fuer isdnctrl ein: den ChargeInt-Parameter. Mit dem ChargeInt-Parameter wird das aktuelle Gebuehrenintervall einer bestimmten Verbindung angegeben, z.b. 90 Sekunden. Wie wirkt ChargeInt? Ohne ChargeInt prueft isdn4linux permanent, ob fuer eine gewisse Zeit (ueber huptimeout konfiguriert) die bestehende Verbindung nicht genutzt wurde. Ist diese Zeit abgelaufen, wird aufgelegt. Demgegenueber verhaelt sich die kostenbewusste Nutzerin natuerlich so, dass sie die fuer 12 Pf bezahlte Leistung der Telekom auch gerne bis zur letzten Sekunde ausschoepfen wuerde, also erst dann auflegt, wenn in den naechsten 1-2 Sekunden die naechste Einheit anstehen wuerde. ChargeInt macht eigentlich nichts weiter, als die Pruefung, ob in den letzten Sekunden kein Traffic angefallen ist, nur dann durchzufuehren, wenn die naechste Einheit der Telekom anfaengt. Ohne ChargeInt steht man vor dem Konflikt: - Eine niedrige Huptimeout fuehrt dazu, dass evtl. zu schnell aufgelegt wird, also das Lesen einer WWW-Seite schon zum Auflegen fuehrt, obwohl man bequem in der gleichen Einheit noch die zweite haette laden koennen (so man nicht T-Online benutzt, wo sich die Durchschnittseite eh erst nach 3 Einheiten voll darstellt :-) - Ein hoher Huptimeout fuehrt dazu, dass man haeufiger in die naechste Einheit "reinrutscht", obwohl auf der Leitung gar keine Aktivitaet mehr stattfindet. Also ist es am sinnigsten, einen kurzen Huptimeout einzustellen (empfohlen: 3-5 Sekunden), aber nur kurz vor Ablauf der aktuellen Einheit dieses Kriterium abzupruefen. Pro und Kontra von ChargeInt ---------------------------- Generell spricht nichts dagegen, ChargeInt einzukompilieren. Der Patch ist "abwaertskompatibel", d.h., wer nicht explizit per Hand oder Programm ein isdnctrl device chargeint Takt gibt, wird keinerlei Aenderungen feststellen. Zudem enthaelt der Patch fuer isdnctrl die nette Moeglichkeit, mit einem einzigen isdnctrl-Befehl gleich etliche Parameter auf einmal setzen zu koennen. (s.u.) Wann sollte ich ChargeInt (nicht) aktivieren? Wer mit synchronem PPP arbeitet und eine dynamische IP bezieht, duerfte ein Verhalten wuenschen, wie es Otto-Normal-Dumm-Windows-User praktiziert: Explizit Verbindung aufbauen, Rumsurfen, explizit Verbindung abbauen. Zum einen kann etwa eine FTP-Session nicht ohne weiteres bei dynamischer IP-Vergabe fortgesetzt werden, da sich die einem selbst zugewiesene IP-Adresse bei einer erneuten Anwahl aendert. Dies gilt fuer alle TCP-Verbindungen (z.b. Telnet, rlogin). Wer mit dynamischer IP-Adressvergabe leben muss, wird grundsaetzlich seine Verbindung waehrend einer Sitzung stehen lassen wollen und eher noch einen ping starten, damit auch die Gegenseite nicht auflegt. Fuer diese User/innen ist ChargeInt also ueberfluessig. Ueberfluessig ist ChargeInt auch, wenn z.b. Daten im Batch-Betrieb (UUCP ueber TCP/IP) abgeholt werden und anschliessend explizit aufgelegt wird. Falsch ist ChargeInt dann, wenn eine Wiederanwahl so zeitaufwendig waere, dass sie in keiner Relation zu den Mehrkosten fuer eine kontinuierliche Verbindung steht. ChargeInt ist ideal fuer Leute, die - eine feste IP-Adresse haben - gerne mal 1 Minute oder laenger die Seite, die sie sich gezogen haben, auch lesen. - oder z.b. Heimarbeit betreiben und ihr Trommelfeuer auf die Tastatur auch mal kurz unterbrechen, um Nachzudenken oder Tee zu kochen oder... Wie patche ich ChargeInt ein? ----------------------------- ChargeInt ist im isdnlog-Tarfile bereits enthalten. Historisch ist ChargeInt unabhaengig von isdnlog entwickelt worden und beide koennen nach wie vor unabhaengig von einander betrieben werden, aber die eleganteste und einfachste Methode ist, ChargeInt ueber isdnlog zu steuern (siehe Konfiguration). ChargeInt befindet sich innerhalb von isdnlog in folgendem Verzeichnis: contrib/chargeint/patch-chargeint-2.04 contrib/chargeint/patch-chargeint-kutils Die Primary-Site ist ftp://ftp.pop.de/pub/linux/isdn4linux/LOCAL/chargeint.tar.gz , allerdings ist der Patch seit Linux 2.04 (Juli 1996) unveraendert geblieben. Eine etwas ausfuehrlichere HTML-Doku ist unter http://www.provi.de/~gvz/chargeint.html abrufbar. Angenommen, der Kernel liegt in /usr/src/linux und isdn4kutils in /usr/src/isdn4k-utils-2.0, die Patche selbst im Home-Verzeichnis, dann reichen folgende Befehle: cd /usr/src patch -p0 -l -F10 < ~/patch-chargeint-2.04 rm -rf isdn4k-utils-2.0/isdn/RCS patch -p0 -l ~/patch-chargeint-kutils Der patch-chargeint-2.04 wurde urspruenglich gegen Linux 2.0.4 erzeugt, klappt aber mit der -F10 Option auch bei neueren Kerneln. Wer bei dieser Gelegenheit den Kernel zum ersten Mal kompiliert, mache bitte nicht ChargeInt verantwortlich, wenn es nicht klappt! Wie konfiguriere ich ChargeInt? ------------------------------- Parameter fuer die Hangup-Kontrolle Das Gebuehrenintervall wird ueber den Parameter chargeint mitgeteilt. Der Parameter huptimeout erhaelt eine andere Bedeutung: 2 Sekunden, bevor die naechste Einheit faellig wird, prueft Chargeint, ob in den letzten huptimeout Sekunden kein Traffic war. Bei "Stille" wird aufgelegt, sonst weitergemacht. Man koennte auch anders sagen: Durch Chargeint wird der huptimeout-Parameter nur kurz vor Ablauf der Gebuehreneinheit abgefragt. Ich setze bei Cityverbindungen huptimeout auf 5 Sekunden, bei Fernver- bindungen auf 3 Sekunden. Im Juli 96 wurde isdnlog so modifiziert, dass isdnlog selbstaendig beim Aufbau einer Verbindung berechnet, welche Taktzeit zur Zeit von der Telekom vorgegeben wird und diese setzt. Otto Normaluserin muss sich also nur noch darum kuemmern, dass - die Systemuhr halbwegs richtig geht - die Tarif-Zonen fuer die einzelnen Leitungen in der /etc/isdn/isdn.conf korrekt angegeben sind. Flexible Syntax fuer isdnctrl ----------------------------- Als ich den chargeint-Parameter in isdnctrl einbauen wollte, juckte es mich in den Fingern, das Ding gleich ein bisschen umzuschreiben. Mein ISDN-Router daheim ist ein 386DX40, und die endlos vielen isdnctrl-Befehle beim Booten, die die 5 ISDN-Verbindungen eintragen, brauchten ihre Zeit. Daher habe ich eine Moeglichkeit eingebaut, mehrere Parameter auf einmal setzen zu koennen. Auch hier gilt die Abwaertskompatibilitaet, wer also nur einen Parameter aendern will, schreibt weiterhin: isdnctrl chargeint isdn 90 Z.b. beim Booten sind aber auch solche Anweisungen moeglich: isdnctrl l2_prot isdn0 hdlc eaz 232282 addphone in 40110 40112 \ out 2519612 huptimeout 5 Waehrend also die Syntax fuer das erste Kommando unveraendert Kommando isdn-device [Parameter 1] (Parameter 2) lautet, wird bei folgenden Kommandos im Aufruf von isdnctrl das Isdn-Device weggelassen. 14. Gebuehren-GAU Begrenzer --------------------------- isdnlog bietet 4 unterschiedliche (auch kombinierbare) Moeglichkeiten, die maximal pro Zeiteinheit zu entrichtenden Gebuehren an die Telekom sowie den Internet-Provider wirkungsvoll zu begrenzen. Wird isdnlog terminiert, merkt es sich die bislang aufgelaufenen Geld-, Zeit-, sowie Durchsatz-Betraege in der Datei "/etc/isdn/charge.dat" und liest diese beim naechsten Start wieder ein. 14.1 Watchdog ------------- In seltenen Faellen "glaubt" isdn4linux, aufgelegt zu haben. Die VSt sieht das jedoch ganz anders, und laesst den Gebuehrenzaehler weiterlaufen. Hiergegen hilft die Cmd-Line-Option "-H x" von isdnlog. Sobald isdnlog feststellt, das seit mehr als "x" Gebuehrenimpulsen (AOC-D) von der VSt kein Traffic mehr stattfand (Durchsatz rein sowie raus = 0) faehrt isdnlog das gesamte isdn4linux runter. Dies wird in 4 Stufen versucht: 1. Stufe: Es wird ein "isdnctrl hangup isdnX" ausgefuehrt 2. Stufe: Es wird der Shell-Script "/etc/isdn/reload" ausgefuehrt Dieser sollte das Teles-/HiSax-Modul ent- und wieder laden. (Siehe "samples/reload") 3. Stufe: Es wird ein "isdnctrl system off" ausgefuehrt 4. Stufe: Der Rechner wird rebootet ("/sbin/reboot") In der Parameterdatei wird dieses Feature mit watchdog="value" aufgerufen. 14.2 CHARGEMAX -------------- Mit dem Eintrag CHARGEMAX = x in der "/etc/isdn/isdn.conf" kann angegeben werden, das man gewillt ist, maximal DM x pro Tag an Telefongebuehren auszugeben. Sobald dieses Limit ueberschritten wird, fuehrt isdnlog den Shell-Script "/etc/isdn/stop" aus (siehe "samples/stop"), der das isdn4linux abschalten sollte. 14.3 CONNECTMAX --------------- Mit dem Eintrag CONNECTMAX = x,y in der "/etc/isdn/isdn.conf" kann angegeben werden, das man gewillt ist, maximal x Sekunden pro Monat Online zu sein. (Ich persoenlich habe dort die 5 Freistunden (5 * 60 * 60 = 18000 Sekunden) meines Providers eingetragen) Sobald dieses Limit ueberschritten wird, fuehrt isdnlog den Shell-Script "/etc/isdn/stop" aus (siehe "samples/stop"), der das isdn4linux abschalten sollte. Getrennt durch ein Komma (",") muss hinter der Anzahl Sekunden angegeben werden, in welcher Form der Provider Online-Zeit abrechnet: 0 = es wird auf die Sekunde genau abgerechnet 1 = es wird "pro angefangene Minute" abgerechnet 14.4 BYTEMAX ------------ Mit dem Eintrag BYTEMAX = x,y in der "/etc/isdn/isdn.conf" kann angegeben werden, das man gewillt ist, maximal x Byte pro Monat vom Provider zu saugen. (Dies ist relevant bei Providern, die nach Volumen abrechnen) Sobald dieses Limit ueberschritten wird, fuehrt isdnlog den Shell-Script "/etc/isdn/stop" aus (siehe "samples/stop"), der das isdn4linux abschalten sollte. Getrennt durch ein Komma (",") muss hinter der Anzahl Byte angegeben werden, in welcher Form der Provider abrechnet: 0 = auf's Byte genau 1 = auf's KByte genau 2 = auf's Mbyte genau 8 = nur die _zum_ Provider geschickten Bytes sollen zaehlen 16 = die Summe aus _zum_ Provider und _vom_ Provider zaehlen Wird weder 8 noch 16 angegeben, meint das: nur die _vom_ Provider gesaugten Byte zaehlen. 15. Dual-Mode ------------- Wie eingangs erwaehnt, kann isdnlog bei allen rausgehenden Verbindungen, die nicht mit der Teles-Karte entstanden sind (ISDN-Telefon, Modem/Fax) die entsprechenden Telefonnummern leider nicht anzeigen. Mit dem Dual-Mode ist genau dies jedoch moeglich. Dazu muss der Rechner mit einer zweiten Teles-Karte ausgestattet, und darauf ein Teles-/HiSax-Treiber installiert werden. Bei mir sieht das so aus: modprobe hisax io=0xd80,0xe80 irq=12,9 mem=0xd0000,0xd2000 type=1,1 protocol=2,2 id=bri1%echo Dann muss diese zweite Karte (diese muss beim laden des HiSax-Treibers auch auf jeden Fall als *zweite* Karte angegeben werden!) _verkehrt_ am S0-Bus angeschlossen werden: Beim S0 Kabel an der Karte die aeusseren zwei Draehte auf die inneren zwei Anschluesse des Steckers legen. Die beiden inneren nicht anschliessen !!!, das legt den Bus lahm. B 3 -- RX+ 2a ---------------\ U 4 -- TX+ 1a -- offen ------------ S 5 -- TX- 1b -- offen ------------ Karte 6 -- RX- 2b ---------------/ Abschliessend muss isdnlog mit der weiteren Option "-2" gestartet werden. 16. SQL-Anbindung ----------------- Wird isdnlog mit "POSTGRES=1" erstellt, traegt isdnlog alle Verbindungsinformationen zusaetzlich in eine Postgres95 SQL-Datenbank ein. (Datenbank "isdn", Tabelle "isdn2") Da isdnlog die Eintraege im europaeischen Datumsformat (tt.mm.jjjj) vornimmt, muss postgres95 zwingend mit EUROPEAN_DATES=1 (siehe "postgres95/src/Makefile.global") compiliert werden! Die Datenbank muss zuvor folgendermassen erstellt werden: createdb isdn psql isdn < script Mit folgendem "script": ------------------------- create table isdn2 ( sdate date, stime time, calling varchar(30), called varchar(30), charge int4, dir char, in_bytes int4, out_bytes int4, msec int4, sec int4, status int4, service int4, source int4, vrsion int4, factor real, currency varchar(30), pay real ); \q ------------------------- Da isdnlog normalerweise als User "root" laeuft, muss "root" das Recht zum Eintragen gegeben werden: grant insert on isdn2 to root; Wie bei postgres95 ueblich kann ueber die Environment-Variablen $PGHOST sowie $PGPORT auch ein postmaster auf einem anderen Host angesprochen werden. 17. Probleme? ------------- Sollte isdnlog nicht wie beschrieben arbeiten, muessen folgende Punkte geprueft werden: - Funktioniert isdn4linux ? D.h. kann eine ISDN-Verbindung zu einer Gegenstelle aufgebaut werden? - Wurde mittels "telesctrl 1 4" das D-Channel-Logging eingeschaltet? Als kostenlose Testmoeglichkeit fuer isdnlog bietet es sich an, den Hoerer eines ISDN-Telefon's abzunehmen, und gleich wieder aufzulegen. Dies muss isdnlog als "HANGUP" melden. Daneben kann man sich natuerlich auch selbst anrufen, wobei man am besten die MSN anruft, auf der isdn4linux nur die Dienstkennung DATA zulaesst. Also wird dieser Testanruf von isdn4linux abgelehnt, was isdn4linux auch dementsprechend melden sollte. Falls der begruendete Verdacht auf ein Fehlverhalten von isdnlog besteht, bitte ich darum, mir ein mit "isdnlog -v1" erstelltes Protokoll nebst einer aussagekraeftigen Fehlerbeschreibung zuzuschicken. Das Protokoll sollte nur noch die "Q.931 frame ..." sowie "hex: ..." Zeilen enthalten, der Rest wird von isdnlog nicht benoetigt! Diese Fehlermeldung sollte bitte an "isdnlog@Kool.f.EUnet.de" geschickt werden. - Bei jeder Anwahl von draussen an meine Teles-Karte meldet mir isdnlog 2 HANGUP's? Bei einem eingehenden Ruf melden alle Geraete, die sich zustaendig fuehlen, an die Vermittlungsstelle, dass sie "klingeln". (Die Klingel-Wiederholungen machen bei ISDN die Geraete selbst.) Das Geraet, an dem der Ruf angenommen wird, bekommt den CONNECT, alle anderen, die geklingelt haben, ein HANGUP, damit sie mit dem Klingeln wieder aufhoeren. Dasselbe passiert natuerlich auch, wenn der Anrufer vor dem Abnehmen schon auflegt. D.h. der erste HANGUP stammt vom 2. B-Kanal der Teles-Karte, der den Anruf ablehnt! Die Teles-Karte spielt die Rolle von zwei Geraeten, wohl weil ein Geraet zu einer Zeit immer nur eine Dienstkennung haben kann, die Teles koennte aber gleichzeitig eine Voice- und eine Data- Verbindung fahren (nur (noch?) nicht unter i4l). Fehlt also nach dem CONNECT der Teles der HANGUP des zweiten Kanals, ist das ein Indiz dafuer, dass dieser haengt. - Es wird bei isdnlog, isdnrep und xisdn immer nur die letzte Ziffer der eigenen MSN's angezeigt. Das Verhalten tritt bei bilingualen NT's auf. Dann muss isdnlog mit der Option -b gestartet werden. - Es werden die Programme nicht gestartet, die zu den Events ausgefuehrt werden sollen. Dort gibt es mehrere Ursachen. Haeufig liegt das Programm nicht im Pfad, weil der isdnlog meistens in der Bootphase gestartet wird. Daher sollte das Programm mit vollem Pfad gestartet werden. Die folgende Zeile fuehrt zu mehreren Problemen: "/usr/local/bin/myplayer '~fred/*.au'" Die Anfuerungszeichen und die Hochkomma werden so dem execvp() uebergeben. Der kann dieses aber nicht aufloesen. Also wird versucht das Programm "/usr/local/bin/myplayer zu starten. Auch der Parameter fuehrt zu Problemen. Das Hochkomma (') wird mit uebergeben. Ausserdem wird ~fred NICH in /home/fred umgewandelt. Und auch *.au wird so uebergeben und es wird versucht vom Programm *.au abzuspielen. Die Zeile sollte also richtig so aussehen: /usr/local/bin/myplayer /home/fred/telefon.au Bei Verwendung vom xisdn: Der xisdn meldet: - "Nicht autorisierter Zugriff auf Server" Der Benutzer, der xisdn gestartet hat, ist nicht in der Datei /etc/isdn/isdnlog.users eingetragen, oder er darf xisdn von dem Host nicht starten. - "Server und Client haben unterschiedliche Protkollversionen" Der xisdn und isdnlog kommen jeweils aus verschiedenen Versions-Paketen. Die Protokollversion hat nichts mit der Version von isdnlog zu tun. Der Client kann unter Umstaenden laufen, aber es kommt bestimmt zu Fehlverhalten. Daher sollten beide Programme immer aus einem Paket stammen. Wenn ein beliebiger Client mit isdnlog Version 2.23 oder 2.30 gestartet wird, kommt die obige Meldung leider nicht. Es kann dann auch zu Fehlverhalten fuehren, welches vom Client nicht gemeldet wird. Wenn keine Gespreache und keine Verbindungen angezeigt werden, oder nur bestimmte MSN's, dann liegt der Fehler mit Sicherheit bei den Rechten des entsprechenden Benutzers in der Datei /etc/isdn/isdnlog.users. Wenn der isdnlog mit einem Segmentation-fault oder mit der Meldung "Got signal 11" abbricht, dann sollten folgende Schritte durchgefuehrt werden, um Debuginformationen zu erlangen, die an die "isdnlog@Kool.f.EUnet.de" zu senden sind: Im isdnlog-Verzeichnis make clean # Nun im "Makefile" "COPTS = -O3" in "COPTS = -g" aendern make install ulimit -c unlimited bin/isdnlog "Parameter _ohne_ -D" Die angegebenen Flags (-x, -l oder -m) _muessen_ 2048 enthalten, da sonst kein Segmentation-fault auftritt. Wenn ein Segmentation-fault auftritt: gdb bin/isdnlog # Im Debugger "where" eingeben. Den _gesamten_ Output an die oben angegebene Adresse senden. 18. Verwendete Dateien ---------------------- Folgende Files werden von diesem System verwendet: /sbin/isdnlog - Das Protokoll-Programm /usr/sbin/isdnrep - Das Report-Programm /usr/sbin/isdnconf - Das Konfigurationstool /etc/isdn/isdnlog.conf - Die alte Config-Datei /etc/isdn/isdn.conf - Die neue Config-Datei ~/.isdn - Die Config-Datei des Benutzers /etc/isdn/isdnlog.users - Die User-Access-Datei /etc/isdn/avon - altes Vorwahl-Verzeichnis (ASCII) /etc/isdn/avon.pag - altes Vorwahl-Verzeichnis (ISAM-Version) /etc/isdn/avon.dir - altes Vorwahl-Verzeichnis (Index) /etc/isdn/charge.dat - Zwischenspeicher fuer die ChargeMax-Funktion /etc/isdn/reload - Script zum Wiederanfahren eines verklemmten i4l /etc/isdn/stop - Script zum Stoppen bei erreichen von CHARGEMAX /usr/lib/areacode - Neues Vorwahl-Verzeichnis /var/log/isdn.log - Das Logbuch /var/run/isdnlog.pid - Enthaelt die PID des laufenden isdnlog /dev/isdnctrl0 - Gibt das Q.931 Protokoll des Teles-Treibers aus /dev/isdninfo - Interne Meldungen von isdn4linux /tmp/isdnctrl0 - Protokoll obiger Devices als ASCII-Datei /usr/X11R6/lib/X11/app-defaults/Isdn - Resourcefile fuer xisdn 19. Verwendete Environment-Variablen ------------------------------------ Folgende Environment-Variablen werden von diesem System verwendet: $ISDNLOG = Verzeichnis, in dem sich die Konfigurations-Dateien befinden (z.b. "export ISDN_CONF_PATH=/etc/isdn") $XENVIRONMENT = Vollstaendiger Pfad der Resourcen-Datei fuer den X-Client "xisdn" 20. Verwendete Abkuerzungen --------------------------- VSt = Vermittlungsstelle (das Amt) AOCD = Advice of Charge during call (Gebuehreninfo waehrend der Verbindung == Gebuehreninfo A) AOCE = Advice of Charge at end of call (Gebuehreninfo am Ende der Verbindung) Q.931 = Das von der ITU genormte Protokoll auf dem D-Kanal D-Kanal = Der Steuerungskanal im ISDN B-Kanal = Der Datenkanal im ISDN tei = Terminal Endpoint Identifier Gegner = Eine Gegenstelle MSN = Multiple subscriber number (Telefonnummer) E-DSS1 = Das Euro-ISDN-Protokoll 1TR6 = Das nationale ISDN-Protokoll SI = Service-Indicator (Dienstkennung) CLIP = Calling Line Identification Presentation CLIR = Calling Line Identification Restriction COLP = Connected Line Identification Presentation COLR = Connected Line Identification Restriction 21. Danksagung -------------- Bedanken moechte ich mich vor allem bei Fritz Elfert (fritz@wuemaus.franken.de) fuer isdn4linux, sowie Jan den Ouden (denouden@groovin.xs4all.nl) fuer den Teles-Treiber. Bei Beat Doebeli (doebeli@vptt.ch) fuer den Einbau jeglicher D-Channel Messages, sowie Michael Bongartz (micha@mubo.saar.de) fuer die Entdeckung der AOC-D sowie AOC-E Bytes im D-Kannel-Protokoll Bei Kai Voelcker (kai@fantaghiro.deceiver.org) sowie Martin Stover (mstover@Stover.f.EUnet.de) und vielen anderen aus der isdn4linux Mailing-Liste fuer ihre Muehen beim Testen von isdnlog, staendigen neuen Ideen dafuer sowie fuer die unzaehligen Testdaten. Bei Karsten Keil (isdn4@temic-ech.spacenet.de) fuer die 1TR6 Unterstuetzung von isdnlog, und natuerlich vor allem fuer seinen HiSax-Treiber sowie das neue Protokoll zwischen HiSax und isdnlog. Bei Jochen Heuer (jogi@planetzork.ping.de) fuer seinen Kampf mit den neuen Tarifen der Telekom Bei Hardy Buchholz (hardy@Kool.f.EUnet.de) der viele Ideen zum CHARGEMAX beigetragen hat Bei Ad Aerts (ad@aasup.nl) der die Gebuehrenauswertung fuer die Niederlande beigesteuert hat Bei Markus Maeder (mmaeder@cyberlink.ch) der die Gebuehrenauswertung fuer die Schweiz korrigiert hat Bei Markus Leist (markus@hal.dirnet.com) fuer die Anbindung an postgres95 Sowie bei Ullrich von Bassewitz (uz@musoftware.com) fuer die "AreaCode" Library (AVON-Verzeichnis) Gar nicht genug danken kann ich Dr.-Ing. Joachim Goeller sowie Sebastian Goeller, die mir unzaehlige Informationen zum D-Kanal Protokoll geliefert haben. Und natuerlich bei der deutschen Telekom, die mir seit nunmehr zwei Jahren falsche (aber von isdnlog erkannte) AOC-E Elemente schickt ;-) Aber ganz besonders bei Stefan Luethje (luethje@sl-gw.lake.de) von dem sicherlich mittlerweile 50% des isdnlog-Codes bestehen. Viel Spass mit isdnlog wuenscht Andreas Kool (akool@Kool.f.EUnet.de)