isdn4k-utils/isdnlog
Peter Marschall 94cdcd37ee isdnlog/Makefile: remove
Remove Makefile that gets automatically re-generated from Makefile.in
by configure.
2012-04-21 23:16:34 +02:00
..
client isdnlog: remove leftover configure-files 2012-03-29 16:36:36 +02:00
connect isdnlog-4.58: 2002-04-22 19:07:49 +00:00
contrib Problem with access of this file. 1997-03-17 19:20:12 +00:00
install isdnlog-3.45 1999-08-20 19:27:15 +00:00
isdnconf drop .cvsignore files 2012-03-29 16:36:36 +02:00
isdnlog drop all isdnlog/isdnlog/ora* files 2012-03-31 21:14:07 +02:00
isdnrep isdnlog: fix some spelling mistakes 2012-03-29 16:36:38 +02:00
samples drop .cvsignore files 2012-03-29 16:36:36 +02:00
tools isdnlog/tools/zone: autoreconf 2012-04-21 18:10:50 +02:00
.Config.in Enabled text substitution by configure for isdnlog sample config files 2004-10-28 01:53:28 +00:00
.country-alias Separate entries for Serbia and Montenegro, new German cellphone prefixes 2007-01-05 03:03:32 +00:00
BUGS isdnlog Version 3.24 1999-05-04 19:32:01 +00:00
COPYING Add license files as symlinks 2012-01-08 18:48:01 +01:00
CREDITS isdnlog-4.00 (Millenium-Edition) 1999-12-31 13:57:16 +00:00
ChangeLog Made isdnrep and isdnrate buildable under cygwin. See ChangeLog for details. 2007-01-05 04:23:57 +00:00
FAQ isdnlog-4.37 2000-08-01 20:31:28 +00:00
Isdn Added files in isdnlog 1997-03-03 04:37:31 +00:00
Makefile.in isdnlog: autoreconf 2012-04-21 23:12:13 +02:00
NEWS added IIOCNETGPN support for 2.0 kernels 2001-03-13 14:39:30 +00:00
README fix example for LD_LIBRARY_PATH use 2006-01-15 15:10:26 +00:00
README.Distributor isdnlog-3.58 1999-10-26 18:17:11 +00:00
README.History isdnlog-4.35 2000-07-21 18:46:24 +00:00
README.Internationalization More renaming of country-de.dat to country.dat . 2000-09-01 12:35:43 +00:00
TODO more zone files 1999-06-11 15:48:11 +00:00
aclocal.m4 isdnlog: autoreconf 2012-04-21 23:12:13 +02:00
configure isdnlog: autoreconf 2012-04-21 23:12:13 +02:00
configure.ac isdnlog/configure.ac: updated from configure.in 2012-04-21 23:08:40 +02:00
country-de.dat Separate entries for Serbia and Montenegro, new German cellphone prefixes 2007-01-05 03:03:32 +00:00
holiday-at.dat make isdnlog data UTF8 encoded 2006-01-23 17:07:09 +00:00
holiday-ch.dat make isdnlog data UTF8 encoded 2006-01-23 17:07:09 +00:00
holiday-de.dat make isdnlog data UTF8 encoded 2006-01-23 17:07:09 +00:00
holiday-default.dat isdnlog enhancments 2012-02-26 18:21:28 +01:00
holiday-lu.dat isdnlog-4.04 2000-01-23 22:31:13 +00:00
holiday-nl.dat cosmetics 1999-09-20 18:42:29 +00:00
holiday-no.dat make isdnlog data UTF8 encoded 2006-01-23 17:07:09 +00:00
holiday-sk.dat make isdnlog data UTF8 encoded 2006-01-23 17:07:09 +00:00
install-sh Make isdnlog configurable. 1997-03-23 19:22:32 +00:00
policy.h.in isdnlog: autoreconf 2012-04-21 23:12:13 +02:00
rate-at.dat make isdnlog data UTF8 encoded 2006-01-23 17:07:09 +00:00
rate-ch.dat make isdnlog data UTF8 encoded 2006-01-23 17:07:09 +00:00
rate-de.dat make isdnlog data UTF8 encoded 2006-01-23 17:07:09 +00:00
rate-default.dat isdnlog enhancments 2012-02-26 18:21:28 +01:00
rate-lu.dat isdnlog-4.04 2000-01-23 22:31:13 +00:00
rate-nl.dat Updated mostly KPN. 2002-07-04 10:40:18 +00:00
rate-no.dat make isdnlog data UTF8 encoded 2006-01-23 17:07:09 +00:00
rate-pl.dat new rates 2001-11-17 12:00:23 +00:00
rate-sk.dat added -sk file 2001-05-14 14:16:23 +00:00

README

| Vorbemerkung:
| Diese Datei wurde inhaltlich zuletzt im Mai 2001 bearbeitet.  Spätere
| Änderungen an isdnlog & Co. sind daher nur in den man-Pages beschrieben.
| Tobias Becker <tobiasb@isdn4linux.de>, Maintainer im Dezember 2004.


ISDNLOG - Version 4.50  -  				26-Feb-2001


isdnlog ist ein Utility zur Auswertung des D-Kanals eines
ISDN-BRI Anschlusses.

isdnlog wurde ausgiebig mit Linux-2.0.38, Linux-2.2.16-SMP sowie
Linux-2.3.35 getestet.


Fuer alle, die es nun ueberhaupt nicht mehr abwarten koennen, hier das

Quick-Installation-Guide
------------------------

1. Linux-2.0.38 verwenden:
     CONFIG_ISDN=m
     CONFIG_ISDN_DRV_HISAX=m

2. isdn4k-utils-3.1.tar.gz auspacken, erstellen und installieren:
     cd /usr/src
     tar xzf isdn4k-utils-3.1.tar.gz
     cd isdn4k-utils
     make config
     make
     make install


3. Konfigurationsdatei fuer isdnlog fuellen:

     vi | emacs | vim | e | nedit | ... | /etc/isdn/callerid.conf

   -----------------------------------------------------
   [MSN]
   NUMBER = 4711
   SI     = 1
   ALIAS  = My Phone

   [MSN]
   NUMBER = 4712
   SI     = 1
   ALIAS  = FAX

   [MSN]
   NUMBER = 4713
   SI     = 1
   ALIAS  = X.75
   -----------------------------------------------------

     NUMBER = <eigene_Telefonnumer_ohne_Vorwahl>
     SI = <Dienstkennung>
     ALIAS = <Alias>


4. isdn4linux das D-Kanal-Protokoll entlocken:

     hisaxctrl <DriverID> 1 4

   mit <DriverID> entsprechend Driver-ID, wie beim "insmod" des HiSax-Treibers
   angegeben, oder "line0", falls der HiSax-Treiber im Kern enthalten ist.

5. isdnlog starten:

     /sbin/isdnlog -nsS -v1 -w1 -m0x5f7 /dev/isdnctrl

6. Jede Menge rumtelefonieren

7. Sich mittels

     /usr/bin/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.     [obsolet]
 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
16.1.   Postgres95
16.2.   MySQL
16.3. 	Oracle
17.	Tarifdatenbank
18.	LCR (Least cost router)
19.    	Probleme?
20.     Verwendete Dateien
20.a    Datenbanken
21.     Verwendete Environment-Variablen
22.     Verwendete Abkuerzungen
23.     Danksagung


Vorwort
-------

Die Logdatei "isdn.log" ist nicht mehr im Verzeichnis "/var/adm/,
sondern im Verzeichnis "/var/log" zu Hause.

Ein Bitte noch:
===============

Alle Anfragen zum isdnlog bitte nicht an meine Email-Adresse senden,
sondern an

     akool@isdn4linux.de

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. ISDN-Karte im Rechner steckt) das gesamte D-Kanal 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 ISDN-Karte:
    13 21:16:31 * tei 104 calling UUnet with Phone  Digital
    13 21:16:33 tei 104 calling UUnet with ISDN  Time:Wed Mar 13 21:17:00 1996
    13 21:16:33 tei 104 calling UUnet with ISDN  CONNECT
    13 21:16:33 tei 104 calling UUnet with ISDN  0,12 DM (0 s)
    13 21:16:40 tei 104 calling UUnet with ISDN        5,63 kB /   823,43 bps
    13 21:16:51 tei 104 calling UUnet 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 HiSax-Treiber) die
   von der VSt uebermittelten Gebuehreninformationen, und zeigt diese
   sowohl am Ende einer Verbindung (== Gesamtkosten fuer diese Verbindung)
   als auch waehrend der Verbindung staendig an.


 - isdnlog kann pro aktivem B-Kanal staendig die aktuelle Durchsatz-Rate
   (in Byte/s), sowie die bislang komplett durchgerauschten Byte anzeigen.


 - 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.
   Da auch _alle_ alternativen Carrier (die neuen, "privaten"
   Telefongesellschaften, die seit dem 1.1.1998 neben der Deutschen Telekom
   verfuegbar sind) keine Gebuehreninformationen uebermitteln, ist isdnlog
   in diesem Fall besonders hilfreich, da es Mithilfe einer umfangreichen
   Tarifdatenbank die entstandenen Gebuehren selbststaendig berechnet.

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

 - Da die grafische Oberflaeche KDE mehr und mehr zum Standard aller Linux-
   Rechner wird, gibt es natuerlich auch schon eine KDE-Oberflaeche zum
   isdnlog: kisdnlog!


2. Was kann isdnlog nicht?
--------------------------

Z.Zt. arbeitet isdnlog _nur_ mit dem HiSax-Treiber (d.h. allen passiven
Karten) sowie der AVM-B1 und der Eicon DIVA Server 4?BRI zusammen,
die ICN-Karte wird leider noch nicht unterstuetzt.

Weiterhin kann isdnlog bei allen rausgehenden Verbindungen, die nicht
mit der ISDN-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 HiSax) 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 ISDN-Karte selbst).
: Wenn man mit seiner TK-Anlage rauswaehlt, geht die Zielnummer
: aber User->Amt, und genau das wird von einer ISDN-Karte
: 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
---------------

Da isdnlog seit der Version 3.0 nur noch als Bestandteil der isdn4k-utils
freigegeben wird, findet die Konfiguration ueber das dortige Menu statt.
Es darf also nicht mehr direkt in dem Makefile editiert werden.

Die alte Datei "isdnlog.conf" wird, wenn vorhanden, in die Dateien "isdn.conf"
und "callerid.conf" umgesetzt. Dieses macht die Installation automatisch.

Die alte Konfigurationsdatei "isdnlog.conf" wird in das neue Verzeichnis
uebernommen. Allerdings traegt sie dann den Namen "isdnlog.conf.old".

Es ist dabei zu beachten, dass bei allen Telefonnummern in der
isdn.conf, die mit einem "*" oder einem "?" beginnen, dieses Zeichen
geloescht wird.

Beispiel:

*8154711 -> 8154711
081547*  -> 081547*

Wenn das Zeichen ("*" oder "?") nur als Platzhalter fuer eine "0" stand, kann
man es lassen, andernfalls muss eine manuelle Nacheditierung stattfinden.

Auch die Datei "isdnlog.users" wird uebernommen. Allerdings finden hier keine
Aenderungen statt.

Hier sind nochmal alle Eintraege aufgefuehrt, die isdnlog im Makefile enthaelt,
und die ueber das Menue konfiguriert 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)
      -DISDN_AT     - Gebuehrenauswertung Oesterreich (anstelle Deutschland)

  I4LCONFDIR  (/etc/isdn)
    Wo liegen die "isdn.conf".

    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.
    Wenn der Name der Datei mit '+' anfangt, wird der Datei nicht neu
    geschrieben, sondern neue Infos wirden am Ende zugefuegt.
    (Diese Einstellung laesst sich spaeter noch zur Laufzeit in der isdn.conf
    aendern)

  LOCKDIR  (/var/lock/)
  	Wo liegen die lock files (lock-Dateien).

  RUNDIR  (/var/run/)
  	Wo liegen die pid files (pid-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


ACHTUNG: Durch die Syntaxaenderung und den Erweiterungen muessen folgende
         Anderungen _zuerst_ an der bestehenden "isdnlog.conf" durchgefuehrt
         werden:

         Bei der Installation von isdnlog werden automatisch die neuen
         Konfigurationsdateien angelegt.

         Wenn isdnlog noch nie installiert war, muss noch die Datei
         callerid.conf editiert werden.
         Bestand schon eine aeltere Version von isdnlog und wurde der alte
         Pfad der Dateien korrekt im Installationsmenue angegeben,
         werden alle Daten aus der alten Datei isdnlog.conf in die neuen
         uebernommen. Es sollte also keine Nachbearbeitung noetig sein.

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.


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). 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 in dem compilierten Programm 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 Eintraege 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.

[ISDNLOG]

COUNTRYFILE = /usr/lib/isdn/country.dat

  Diese Datei beinhaltet Laenderbezeichnungen und Vorwahlen. Sie dient
  als Ausgangsbasis zum  Erzeugen der Destination-Datenbank dest.gdbm.
  s. [20.a] Datenbanken

RATEFILE= /usr/lib/isdn/rate-de.dat

  Pfad fuer die Gebuehrendatenbank. Diese Datei ist landesspezifisch.
  s. auch
    man rate-files

RATECONF= /etc/isdn/rate.conf

  Beinhaltet den selektierten Tarif fuer Provider, die unterschiedliche
  Tarife anbieten.

HOLIDAYS= /usr/lib/isdn/holiday-de.dat

  Feiertagstabelle - landesspezifisch.

ZONEFILE= /usr/lib/isdn/zone-de-%s.gdbm

  Verzonungsinformation fuer die einzelnen Provider - landesspezifisch.
  Das '%s' im Dateinahmen wird durch den Eintrag D:xxx in rate-CC.dat
  ersetzt.

  s. auch isdnlog/samples/isdn.conf.CC fuer verschiedene Konfigurationen.
  s. [20.a] Datenbanken

DESTFILE= /usr/lib/isdn/dest.gdbm

  Destination Database mit Ortsnamen und Vorwahlen
  s. [20.a] Datenbanken

VBN =  Verbindungsnetzbetreiberauswahlnummer

  Deutschland ... 010
  Oesterreich ... 10
  Niederlande ... 16:17

VBNLEN = Anzahl Ziffern nach VBN

  Deutschland ... 2:3
  Oesterreich ... 2
  Niederlande ... 1 ???


PRESELECTED = Providernummer

  Deutschland ... 33
  Oesterreich ... 1
  Niederlande ... 999
  Frankreich  ... 0

  s. auch die entsprechenden Kommandlineparameter von isdnlog


Die ISDN-Tools erlauben es, Umgebungsvariablen zu setzen und zu verwenden.
Es gibt Variablen, die in der isdn.conf (oder vorher) gesetzt werden sollten.
Diese sind 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

wird z.B. unter /bin/sh mit "MYPATH=/home/fred" gesetzt.
Hier gibt es auch keine andere Moeglichkeit das zu aendern.

Wenn Kleinbuchstaben 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

Dies ist das Logfile, in dem isdnlog alle Gespraeche ablegt, und isdnrep
sie anschliessend anzeigt. Wenn diese sich an einem anderen Platz befindet,
als zur Compilationszeitpunkt (in der Regel "/var/log/isdn.log"), dann kann
die Lokation hier angegeben werden.
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.
Dieser Eintrag ist optional.

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)
Dieser Eintrag ist optional.

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)
Dieser Eintrag ist optional.

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)
Dieser Eintrag ist optional.

CHARGEMAX = 15.00

Hiermit wird (in DM) angegeben, wieviel Geld man pro Tag maximal
mit isdn4linux vertelefonieren moechte.
Dieser Eintrag ist optional.

CONNECTMAX = 18000,0

Hiermit wird (in Sekunden) angegeben, wieviel Zeit man pro Monat
maximal Online sein moechte.
Dieser Eintrag ist optional.

BYTEMAX = 67108864,0

Hiermit wird (in Byte) angegeben, wieviel Byte man maximal pro
Monat saugen moechte.
Dieser Eintrag ist optional.

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.

Wenn man sich zum Beispiel die Nettogebuehren (ohne MwSt.) anzeigen
lassen will, kann man hier z.B. folgenden Wert setzen:

CURRENCY=0.1043,DM

Dieser Eintrag ist optional.

Wenn der isdnrep via HTML aufgezeichneten Anrufe abspielen soll, dann muss hier
der Pfad eingetragen werden. Eine genaue Beschreibung findet man unter
dem Kapitel isdnrep.
Dieser Eintrag ist optional.

Beipiel:
VBOXPATH = /var/spool/vbox/fred/incoming

Der isdnrep kann fuer jeden aufgezeichneten Anruf ein Konvertierungsprogramm
starten.  Eine genaue Beschreibung findet man unter dem Kapitel isdnrep.
Dieser Eintrag ist optional.

Beipiel:
VBOXCMD1 = /usr/bin/zyxeltowav # Fuer Version vbox 0.x und 1.x
VBOXCMD2 = /usr/bin/zyxeltowav # Fuer Version vbox 2.x

Wenn der isdnrep via HTML angekommene Faxe anzeigen soll, dann muss hier
der Pfad eingetragen werden. Eine genaue Beschreibung findet man unter
dem Kapitel isdnrep.
Dieser Eintrag ist optional.

Beipiel:
MGETTYPATH = /var/spool/fax/incoming

Der isdnrep kann fuer jedes Fax ein Konvertierungsprogramm starten.
Eine genaue Beschreibung findet man unter dem Kapitel isdnrep.
Dieser Eintrag ist optional.

Beipiel:
MGETTYCMD = /usr/bin/g3tojpg

Fuer den isdnrep kann man einen oder mehrere Formatsstrings definieren,
wie der isdnrep die einzelnen Gebuehren anzeigen soll. Die genaue Syntax
wird unter dem Kapitel isdnrep beschrieben.

Der Formatstring kann in Hochkommata eingeschlossen werden. Dieses ist
sinnvoll, wenn das erste Zeichen ein Leerzeichen oder ein Tabulator
sein sollte. Dabei ist zu beachten, falls ein Hochkomma im Formatstring
selber vorkommen soll, dass dieses zu quoten ist.
Dieses gilt fuer ILABEL, OLABEL und auch REPFMT.

Beispiel:

REPFMT = "%X\"%x"

Alle Formateintraege sind optional. Bei der Installation werden diese
allerdings erzeugt.

Die folgenden beiden sind Standard-Eintraege, die der isdnrep sucht:

REPFMT    = "  %X %D %15.15H %T %-15.15F %7u %U %I %O"
REPFMTWWW = "%X %D %17.17H %T %-17.17F %-20.20l SI: %S %9u %U %I %O"

Der erste ist fuer den "normalen" Gebuehrenausdruck. Der zweite wird
verwendet, falls die Ausgabe im HTML-Format erfolgen soll.

Es koennen noch weitere angegeben werden:

REPFMTxxx = ...

Fuer "xxx" kann eine beliebige Zeichenfolge ohne Leerzeichen und Tabulator
stehen. Dieser Formatstring wird dann vom isdnrep verwendet mit der
Option -Fxxx.

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 <MSN>", 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 (1 oder 2)
 %k   Nummer der ISDN-Karte, von der die Meldung kam (0 = 1. Karte)
 %p   Nummer des Provider's
 %P   "via <Providerbezeichnung>"
 %Z   Gebuehrenzone des Gegners ("CityCall", "RegioCall", "GermanCall", "GlobalCall")
 %z   Gebuehrenzone des Gegners (1, 2, 3, 4)

 %/
 %
 %(
 %)   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  - Countrycode (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.


Sobald die Calling party number ueber die Leitung kommt, wird diese in eine
spezielle Datei geschrieben. Dieses Feature wird ueber zwei
Konfigurationseinstellungen (CALLFILE und CALLFMT) in der isdn.conf aktiviert.
Beispiel:

CALLFILE = /var/log/caller.log
CALLFMT  = %b %e %T  %N7 %N3 %N4 %N5 %N6



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). 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 ebenfalls Variablen
gesetzt werden. Das bedeutet also, dass es dort auch eine Sektion [VARIABLES]
gibt, wie in der "isdn.conf". Aber Achtung!! Hier koennen nur gross
geschriebene Variablennamen verwendet werden:

[VARIABLES]
fred=fred1234 # -> "FRED=fred1234" !!!!
FRED=fred1234 # -> "FRED=fred1234"

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 nicht geht !!!!
$alias=fred     # wobei alias=ALIAS nicht geht !!!!

[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"
...

Wenn eine Variable nicht ersetzt werden konnte, so wird dieses angemahnt,
und die Variable bleibt so bestehen, im Gegensatz zur bash-Shell, wo
dann ein Leerstring ausgegeben wird:

...
ALIAS = $FRED Feuerstein # -> "$FRED Feuerstein", wenn $FRED ungueltig ist.
...

Wenn das "$" nicht als Zeichen fuer
eine Variable verwendet werden soll, so muss diese mit "\$" geqoutet werden:

...
ALIAS = \$PATH # -> "$PATH"
...

Wenn eine Variable mehrfach gesetzt wird, so wird sie ueberschrieben. Die
Regel fuer das ueberschreiben entspricht der Reihenfolge, in der die
Konfigurationsdateien gelesen werden:

1. isdn.conf
2. callerid.conf
3. ~/.isdn

Wenn eine Variable "FRED" in "isdn.conf" und "~/.isdn" gesetzt wird, so wird
der Wert von "isdn.conf" durch den Wert der zweiten Datei ueberschrieben.

Die Variablen werden zuerst aus allen drei Dateien gelesen, bevor die
Ersetzung stattfindet. Das bedeutet also, das z. B. eine Variable, die
in "~/.isdn" gesetzt wurde, in der isdn.conf verwendet werden kann.

Dieses mag im ersten Augenblick als ein Sicherheitsloch erscheinen, aber
wenn als root ein Programm gestartet wurde, muessen alle drei Dateien
auf readonly fuer group und world gesetzt sein. Andersherum kann ein Benutzer,
der ein Programm startet auf diese Dateien nur lesend zugreifen.

ACHTUNG:
Es ist allerdings davon abzuraten, weder den isdnlog, noch den isdnrep oder den
isdnconf mit dem sticky-Bit auszustatten!!!!

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 der Eintrag NUMBER (und _nicht_ SI) in beiden Dateien vorkommt und
identisch ist, dann wird der Eintrag aus der der Datei "callerid.conf"
ueberschrieben durch den Eintrag "~/.isdn".
Unter Identisch ist zu 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 ISDN-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 ISDN-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 verschiedene 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 am eigenen Telefon waehlen wuerde. Es muss die Voreinstellungen der
Installation beruecksichtigt werden. Die Werte von AREACODE
und COUNTRYCODE, 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 man
ueberall die Vorwahl angibt.

Die Syntax ist jetzt ziemlich frei. Es koennen dort Telefonnummern 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 COUNTRYCODE 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])

Es ist auch moeglich, mehrere Telefonnummern unter einem Eintrag zu setzen.
Die einzelnen Nummern werden dann durch ein Komma getrennt.


4.2.2 2. Eintrag: Alias [ALIAS]
-------------------------------

In diesem Entrag steht eine beliebige Symbolische Beschreibung fuer
diese Nummer ("Mausi", "UUnet" usw.). Diese darf Blanks enthalten!
Wenn hier das Zeichen '#' verwendet werden soll, muss dieses gequotet
werden mit "\#".
Das Zeichen "|" darf auf keinen Fall verwandt werden, da es fuer interne
Zwecke benoetigt wird!

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
---------------------------

ZONE = x wird nicht mehr verwendet.


4.2.4 4. Eintrag: IP-Interface
------------------------------

Dieser Eintrag repraesentiert das IP-Interface, welches auf dieser
Rufnummer konfiguriert wurde, oder ein "-", falls dieser Nummer kein
IP-Interface zugeordnet wurde.
Diese Information wird fuer die "-hx" huptimeout Option sowie
fuer die Anzeige des Durchsatzes (ibytes/obytes) benoetigt.

Ab Linux-2.2.12 sowie isdnlog-4.38 ist dieser Eintrag obsolete,
und kann daher ersatzlos entfallen, da isdnlog ab diesen Versionen das
Interface selbstst„ndig detektieren kann.

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
ZONE      = 1
START     = {                  # Beginn der Untersektionen
                               # Die geschweifte Klammer muss in der gleichen
                               # Zeile stehen, wie "START =" !!!!
	[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 Benutzer 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.

Wenn die folgenden Eintraege nicht vorhanden sind und diese Dateien nicht
dem User root gehoeren, dann setzt isdnlog die Rechte so, wie sie der
Datei mitgegeben sind auf dem Dateisystem. Beispiel:

luethje@bundy:bin$ ls -l
total 3
-rwxr-xr-x   1 luethje  users         315 Mar  9 16:15 deloldmails*

Die Datei "deloldmails" wird mit den Rechten luethje.users gestartet, wenn die
folgenden Eintraege in der isdn.conf fehlen. Allerdings haben diese Eintraege
hoehere Prioritaet.

Der Eintrag in der isdn.conf 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.

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:

...
START={
	[FLAG]
	FLAGS   = IOR
	PROGRAM = /usr/bin/auplay ring.au

	FLAGS   = IORK
	PROGRAM = /usr/bin/auplay ring.au
	INTERVAL= 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.


Das zu startende Programm
-------------------------

Hier wird das Info-Argument angegeben. Es steht dort der gesamte zu
startende Befehl

Es gibt aber 10 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.
\$4   : Enthaelt die Zeit des Gespraechsbeginns. Beipiel:
        "Wed May 28 23:07:44 1997"
\$5   : Enthaelt die Zeit die Gespraechsdauer bis zum aktuellen Zeitpunkt in
        Sekunden.
\$6   : Enthaelt die Zeit des Gespraechsendes. Beipiel:
        "Wed May 28 23:07:49 1997"
\$7   : Die Input-Bytes
\$8   : Die Output-Bytes
\$9   : Die Input-Bytes pro Sekunde
\$10  : Die Output-Bytes pro Sekunde
\$11  : Die Dienstkennung
\$12  : Die Gebuehren
\$13  : Gibt als String die Landesvorwahl des Anrufenden an.
\$14  : Gibt als String die Landesvorwahl des Angerufenden an.
\$15  : Gibt als String die Vorwahl des Anrufenden an.
\$16  : Gibt als String die Vorwahl des Angerufenden an.
\$17  : Gibt als String den Ort des Anrufenden an.
\$18  : Gibt als String den Ort des Angerufenden an.
\$19  : Gibt als String den Alias des Anrufenden an.
\$20  : Gibt als String den Alias des Angerufenden an.

Folgende Punkte sind zu beachten:

- Sollten mehr als zehn Variablen gleichzeitig verwendet werden, so kennt
  die Shell nur die Variablen 0 - 9!
- Das Zeichen "$" muss gequotet werden, da dieses sonst zu einer Warnung fuehrt!
- Wenn eine Variable keinen gueltigen Wert hat, dann wird sie durch ein "?"
  ersetzt.
- Diese Variablen koennen auch innerhalb eines Argumentes stehen.
- Wenn diese Variablen innerhalb eines Strings verwendet werden, muss der
  Name (hier z.B. "1", "2") in geschweiften Klammern gesetzt werden.
- Es koennen wie auf der Shell die Hochkommata verwendet werden, um Argumente
  zu kapseln (allderings nur die Hochkommata!). Wenn das Hochkomma im
  Argument erscheinen soll, muss es gequotet werden.

Beispiele:

PROGRAM=/bin/auplay "Arg 1" "Arg 2" Arg3 "Arg\"4"
PROGRAM=/bin/auplay "Hier kommt der Anrufer:\${2}test"
PROGRAM=/bin/auplay "Der folgende Ausdruck wird nicht ausgewertet: \\$3"

Eine (zwei) Section [NUMBER] (oder [MSN]) kann also wie folgt aussehen:

[MSN]
NUMBER = 4711
ALIAS  = Phone
ZONE   = 1
START={
	[FLAG]
	FLAGS   = IORK
	PROGRAM = /bin/auplay  /sounds/ring.au
	INTERVAL= 1
	TIME    = 8-14,16-22

	[FLAG]
  FLAGS   = OA
  PROGRAM = /bin/auplay  /sounds/money.au
  TIME    = 8-14,16-22
}

[NUMBER]
NUMBER = 0815/1234
ALIAS  = Provider
ZONE   = 2
START={

	[FLAG]
	FLAGS   = IOCK
	PROGRAM = /bin/popclient_script \$3
	INTERVAL= 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/1234", 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:

...
[VARIABLES]
CMD1=/bin/auplay
CMD2=/bin/my_prog
DIR = /sounds/

START={
	[FLAG]
	FLAGS   = I|O|R|K
	PROGRAM = $CMD1 ${DIR}ring.au
	INTERVAL= 1
	TIME    = 8-14,16-22

	[FLAG]
  FLAGS   = O|A
	PROGRAM = $CMD1 ${DIR}money.au
	TIME    = 8-14,16-22

	[FLAG]
  FLAGS   = I|O|C
	PROGRAM = $CMD2 \$1 \$2 \$3
  TIME    = 8-14,16-22
}

Die letzte Sektion 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 Gespraech (O), Ereignis CONNECT (C)
-----------------^^^^^^^
Nummer des Anrufenden (also Meine)
Nummer des Angerufenden

Die Variablen von isdnlog ($1, $2, ..) kann man ebenfalls 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
----------------------------------------------

[GLOBAL]
AREACODE    = 0815
COUNTRYCODE = 49

[VARIABLES]
PLAYER   = /usr/bin/auplay
SOUNDS   = /usr/sounds

START    = {

  [FLAG]
  FLAGS    = O R  L
  PROGRAM  = $PLAYER ${SOUNDS}/unknown_ring.au
  TIME     = 8-14,16-22

  [FLAG]
  FLAGS    = IOA
  PROGRAM  = $PLAYER ${SOUNDS}/pay.au
  TIME     = 8-14,16-22

  [FLAG]
  FLAGS    = IOC  U
  PROGRAM  = /usr/bin/who_is_it $2 $3

  [FLAG]
  FLAGS    = IOH
  PROGRAM  = $PLAYER ${SOUNDS}/hangup.au
  TIME     = 8-14,16-22

  [FLAG]
  FLAGS    = IORAH
  PROGRAM  = $PLAYER ${SOUNDS}/silent.au
  TIME     = 14-16,22-8
}

[MSN]
NUMBER   = 4711
ALIAS    = MSN\#1
ZONE     = 1
START    = {

  [FLAG]
  FLAGS    = I RK
  PROGRAM  = $PLAYER ${SOUNDS}/msn1_ring.au
  INTERVAL = 5
  TIME     = 8-14,16-22
}

[MSN]
NUMBER   = 4712
ALIAS    = MSN\#2
ZONE     = 1
START    = {

  [FLAG]
  FLAGS    = I RK
  PROGRAM  = $PLAYER ${SOUNDS}/msn2_ring.au
  INTERVAL = 5
  TIME     = 8-14,16-22
}

[MSN]
NUMBER   = 4713
ALIAS    = MSN\#3
ZONE     = 1
START    = {

  [FLAG]
  FLAGS    = I RK
  PROGRAM  = $PLAYER ${SOUNDS}/msn3_ring.au
  INTERVAL = 5
  TIME     = 8-14,16-22
}

[NUMBER]
NUMBER   = *40441777
ALIAS    = My_Provider
ZONE     = 4
INTERFACE= isdn0
START    = {

  [FLAG]
  FLAGS    = OIR
  PROGRAM  = $PLAYER ${SOUNDS}/provider_ring.au

  [FLAG]
  FLAGS    = OICU
  PROGRAM  = /usr/bin/get.mails.from.provider
  INTERVAL = 300

  [FLAG]
  FLAGS    = OICU
  PROGRAM  = /usr/bin/get.news.from.provider
  INTERVAL = 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
gestartet. Das Programm "get.news.from.provider" wird alle 30 Minuten
gestartet. Wenn ein 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 den Konfigurationsdateien isdn.conf, callerid.conf und ~/.isdn:
-----------------------------------------------------------------------------

Es koennen koennen Kommentare an beliebiger Stelle beginnend mit dem 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.

Eine Ueberarbeitung in die neue Syntax ist geplant.


6. [obsolete]


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 <file>" 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
--------------------

ACHTUNG: Ab der Version 3.0 kann der isdnlog nur noch als root gestartet werden!

Vor dem Start von "isdnlog" muss das D-Channel Q.931 logging des
HiSax-Treiber eingeschaltet werden. Bis "isdn4linux0.6.6beta" ist dazu

         hisaxctrl <DriverID> 1 4

wobei "<DriverID>" mit dem String zu ersetzen ist, der beim "insmod hisax.o"
als "id=<DriverID>" angegeben wurde.

Wurde keine "id" angegeben, ist beim "hisaxctrl" stattdessen "line0"
anzugeben.

Beim "hisaxctrl" koennen auch noch weitere Debug-Flags eingeschaltet werden,
isdnlog benoetigt allerdings auf jeden Fall die "4"

Nun kann isdnlog mittels:

  isdnlog [ -av:sp:x:m:l:rt:c:C:w:SVTDPMh:nW:H:f:bL:NFA:2:O:Ki ] [ /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 HiSax- 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.

Ebenfalls wird unter dem Verzeichnis /var/lock (LOCKDIR) eine Datei namens
LCK..'device' angelegt. Auch diese Datei wird bei der Beendigung wieder
geloescht.

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. Die Datei hat nichts mit der isdn.conf zu tun.
     Hier befinden sich nur Parameter zum starten von isdnlog.
     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")
     Diese Datei wird bei einem "kill -HUP" geschlossen und wieder geoeffnet.
     (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")

 -OX Angabe einer Datei, an der der Output von Option -mx (stderr) umgelenkt
     werden soll. Nur gueltig mit Option -m zusammen!
     Es ist moeglich parallel die Option -C X zu setzen. Dann wird
     sowohl auf der Console als auch in der Datei die Ausgabe ausgegeben.
     Diese Datei wird bei einem "kill -HUP" geschlossen und wieder geoeffnet.

     Beginnt der Name der Ausgabedatei mit einem "+", wird diese Datei
     nicht bei jedem Neustart von isdnlog gel”scht, sondern es wird
     an diese endlos angeh„ngt, also z.b. "outfile=+/tmp/logger"
     (outfile="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 unter START
     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:y:z Zeitabhaengige Hangup-Timeout Steuerung
     Der normale Hangup einer aufgebauten Verbindung erfolgt, wenn
     eine bestimmte Anzahl Sekunden kein Traffic auf der Leitung
     stattfand. (Der "isdnctrl" Parameter dafuer ist "huptimeout").

     Viele Telefonanbieter rechnen aber in variablen (DTAG)
     oder anderen Zeitintervallen (z.b. Minuten) ab. In diesen
     Faellen ist es sinnvoller, die angefangene Einheit oder Minute
     voll auszuschoepfen. Diese Moeglichkeit wird mit dem
     "chargeint" (Gebuehrenintervall)-Parameter von isdnctrl
     angeboten (Siehe auch Abschnitt 13: Chargeint)

     Mit dem Parameter -h 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" :

         [NUMBER]
         NUMBER    = 4711
         ALIAS     = UUnet
         ZONE      = 3
         INTERFACE = isdn0

     Erfolgt nun ein Verbindungsaufbau Richtung UUnet, 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 huptimeout isdn0 X
         isdnctrl chargeint isdn0 Y
     ab. Das Gebuehrenintervall ("Y") wird automatisch berechnet.

     Mit X ist gemeint, wie lange vor Ablauf des aktuellen Taktes
     kein Traffic auf der Leitung gewesen sein darf, damit
     aufgelegt wird. Je niedriger dieser Wert ist, desto eher wird bei
     kurzen Pausen aufgelegt. Der -h Parameter laesst sich mit drei
     Werten angeben: Einem fuer Taktzeiten unter 20 Sekunden, einem fuer
     Taktzeiten ueber 20 Sekunden und schliesslich einem dritten,
     optionalen Wert fuer Verbindungen zu (Internet-) Providern, die
     zusaetzlich zu den Gebuehren ein einmaliges Verbindungsentgelt
     verlangen (z.B. T-Online, AOL). Wenn dieser dritte Wert nicht
     angegeben wird, stellt isdnlog automatisch 240 Sekunden ein.

     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
     (erster -h Wert fuer Taktzeiten unter 20 Sekunden).
     Wird isdnlog z.B. mit "-h5:3:30" gestartet und eine Verbindung
     zu z.B. T-Online aufgebaut, erfolgt automatisch ein Verbindungs-
     abbau, wenn 30 Sekunden vor Ablauf eines Taktes (bei T-Online
     1 Minute) kein Traffic mehr vorhanden war. Ohne Angabe dieses
     dritten Wertes wird 240 Sekunden als default eingestellt.

     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.

 -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
     ISDN-Karte, oder eine HFC-Karte im Echo-Modus.
     Mit x = 2 zeigt isdnlog auch jede Kleinigkeit - wie z.b. jedes
     einzelne gewaehlte Digit beim Telefonieren direkt an.
     (dual="value")

 -1  Es wird eine HFC Karte mit Cologne Chip Design Chip eingesetzt,
     die im Echo Mode laeuft. Durch diesen Schalter darf der Dual-Mode
     (siehe: -2x) eingeschaltet werden, obwohl sich nur eine ISDN-Karte
     im Rechner befindet. Der HFC-Treiber muá dazu durch die Befehle
       hisaxctrl <DriverID> 10 1
       hisaxctrl <DriverID> 12 1
     in den Echo-Mode geschaltet werden.

 -K  isdnlog zeigt bei Betaetigung der Taste <l> eine Liste der letzten
     Anrufer an. (History)
     Kann nicht zusammen mit Option -d verwendet werden!
     (keyboard={yes|no})

 -ix isdnlog laeuft an einem internen S0-Bus
     Mit x wird dabei die Mindestanzahl Ziffern fuer eine externe
     Telefonnummer angegeben. Arbeitet die Anlage also z.b. mit 2-stelligen
     internen Teilnehmernummern. sollte hier 3 angegeben werden.
     (interns0="value")

 -Bx Angabe der Vorwahl, die eine Verbindungsnetzbetreiberauswahlnummer
     einleitet. In Deutschland ist dies "010", in Holland hingegen
     "16" oder "17". Gibt es (wie in Holland) mehrere, m<>ssen diese
     durch ein ":" getrennt angegeben werden, also
     -B16:17
     (vbn="value")

 -Rx Angabe der Verbindungsnetzbetreiberauswahlnummer der Telefongesellschaft,
     auf die man preselected ist. Hierbei ist 010 wegzulassen, d.h. z.b.
     bei Arcor ist -R70 anzugeben.
     Fehlt diese Angabe, wird 33, d.h. die Deutsche Telekom angenommen.
     (preselected="value")

 -0x Beliebiges Unterdruecken vorlaufender Zeichen. Haengt isdnlog an dem
     internen S0-Bus einer TK-Anlage, und ist es nicht moeglich, isdnlog
     mit seiner internen Logik sowie der "-A" Option dazu zu ueberreden,
     Deutschland und Ausland auseinanderzuhalten, kann hiermit die
     gesamte interne Logik uebersteuert werden.

     Der Option "-0" sind zwei, durch ein ":" getrennte Ziffern zu
     uebergeben. Diese geben an, wieviele vorlaufende Zeichen von der
     Tk-Anlage isdnlog bei rein- sowie rausgehenden Gespraechen entfernen
     soll.

     Beispiel:

       Meine TK-Anlage signalisiert bei einem reinkommenden Gespraech
       aus Hamburg diese Nummer als "00040..." Bei einem rausgehenden
       Gespraech nach Hamburg wird die Nummer als "0040..." signalisiert.

       Da eine Nummer innerhalb Deutschlands ohne fuehrende "0"
       weiterverarbeitet wird (bei einer Nummer im Ausland muss eine
       fuehrende "0" uebrigbleiben), muessen dementsprechend bei
       reinkommenden Gespaechen 3, bei rausgehenden Gespraechen 2
       vorlaufende "0" entfernt werden, um die Normalform zu erreichen.

       Somit waere in diesem Fall die Option "-03:2" korrekt. Links
       vom ":" wird die Anzahl Ziffern fuer reinkommende, rechts vom
       ":" die Anzahl Ziffern fuer rausgehende Gespaeche angegeben.
       Wird nur ein Argument angegeben, wird fuer reinkommende wie
       rausgehende Verbindungen diese Anzahl verwendet, d.h. "-01"
       bedeutet dasselbe wie "-01:1".

     Wird die Option "-0" verwendet, darf die "-A" Option nicht verwendet
     werden, da auch diese ja vorlaufende "0" entfernt!
     (trim="value:value")

     Auch eine Amtholung wie z.b. "#0" läßt sich damit entfernen!


 -o  Auch die causes (Hinweise, wie z.b. "non-selected user clearing")
     anderer Geraete werden angezeigt. Ohne diese Option werden nur
     die causes der an der Verbindung beteiligten Geraete angezeigt.
     (other={yes|no})

 -ux Unterdruecken von "unwichtigen" Frames.
     Fuer "x" kann angegeben werden:
       1 = keine RR (Receiver ready) Frames.
       2 = keine EMP (Euracom Management Protokoll) Frames.
     (ignoreRR="value")

 -Ux Ignorieren der COLP/CLIP Frames.
     (ignoreCOLP="value")

 -Ix[:y] Intervall für CI und EH-Meldungen setzen.
     Die berechneten Chargeint- und die AOC-D-Ausgaben werden nur alle
     "x" bzw "y" Sekunden ausgegeben. Ist "y" nicht angegeben, gelten für
     beide Werte dasselbe Interval. Diese Option empfiehlt sich bei Providern
     mit sekundengenauer Abrechnung.
     (ciInterval="value[:value2]")

 -dx Aktives LCR durchfuehren.
     Bei jedem Rausruf mit der eigenen ISDN-Karte berechnet isdnlog den
     guenstigsten Provider (Telefondienst-, *nicht* Internet-Provider!)
     und waehlt dann ueber diesen, und nicht den Default-, Preselected- oder
     angegebenen Provider die gegebene Zielrufnummer an.

     Dazu muss bei der Kernel-Generierung isdn4linux mit der Option
       CONFIG_ISDN_WITH_ABC_LCR_SUPPORT=y
     erstellt worden sein!

     Mit "x" koennen folgende Manipulationen vorgenommen werden:
       (Der Parameter "x" wird bitweise ausgewertet).
       ACHTUNG: Aenderung des Parameters ab isdnlog 4.16

       -d0 = LCR abschalten, isdnlog fuehrt _kein_ LCR durch
       -d1 = LCR einschalten fuer Ferngespraeche
       -d2 = LCR einschalten, auch fuer Ortsrufnummern
       -d4 = LCR einschalten fuer Sonderrufnummern
       -d5 = LCR fuer Fern- und Sondernummern
       ...
       -d7 = LCR ein, alle Nummern

      Hinweis:
      - Call-by-Call im Ortsnetz ist in Deutschland (noch) nicht moeglich.

   Um nun fuer aktives LCR zu verschiedenen IS-Provider das Routing und die
   Namensauflöscung anzupassen, kann isdnlog eine Script aufrufen.

   (providerchange="path_top_script")

   Die Script erhält 3 Parameter:
    - Providernummer (wie in rate-CC.dat)
    - Telefonnummer
    - Servicename
    Retouniert die Skript ungleich '0', wird kein LCR durchgeführt.

   z.B.
   providerchange = /etc/isdn/provider

   Ein Beispiel findet sich als isdnlog/samples/provider.

   Diese Feature ist EXPERIMENTELL.


Bei den Optionen -mX, -lX -xX sind folgende Werte 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 UUnet with ISDN  Digital

  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 UUnet 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!

  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 UUnet with ISDN  CONNECTED


 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 UUnet with ISDN  HANGUP (15 EH = DM 1,80 = 148 s)

 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

 512  Show Time
      Die von der VSt uebermittelte Uhrzeit wird angezeigt

       Feb 17 19:11:11 tei 123 calling UUnet with ISDN  Time:Sat Feb 17 19:09:00 1996

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 höheren Angaben (16.384 .. 4.194.304) sind Debug-Flags.

D.h. die einzelnen Log-Optionen sind bitkodiert, die Summe der angegebenen
Zahlen ergibt die gewünschte Ausgabe.

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.

Der Loglevel kann auch hexadezimal angegeben werden:
syslog=0x3ff7 entspricht daher allen oben definierten Flags mit Ausnahme
der Debugflags (i.e. 16383 - 8).

Hinweis: die man-Page führt die Werte in Hex auf.
$ man isdnlog
/LOG MOD


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")
(17) Gesamtkosten der Verbindung
(18) Providernummer
(19) Zone

10. Das Report-Modul isdnrep
----------------------------

Gestartet wird isdnrep mittels:

         isdnrep [ -ac:d:f:hinop:s:t:uvw:NVF: ]

Der isdnrep kann seit der Version 3.0 die Ausgabe im HTML-Format erzeugen.
Dieses kann ueber zwei Wege erreicht werden:
- Option -wX
- Der Name des isdnrep hat die Endung ".cgi" (z.B. isdnrep.cgi). Diese
  entspricht der Option -w1. Man kann also z.B. einen Link auf
  den isdnrep machen: ln -s isdnrep isdnrep.cgi

Wenn das Programm mit der Extension ".cgi" gestartet wird, koennen ihm
Parameter mit der URL ueberreicht werden:

http://localhost/isdnrep.cgi?-t8+-v
                                ^--- representiert ein Blank zwischen Parametern
                            ^------- representiert ein Blank zwischen dem
                                     Prorammnamen und dem ersten Parameter

Alternativ kann man auch ein Shellscript mit der Endung ".cgi" schreiben,
von dem aus der isdnrep gestartet wird:

Beispiel:

-------------------------------------------------
#!/bin/sh
isdnrep -w1 -t `date +%m` $@ # Monatliche Anzeige
-------------------------------------------------

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.
                        Diese Option hat keine Funktion, wenn der isdnrep
                        ebenfalls mit der Option -wX aufgerufen wurde.

  -n        "numbers" isdnrep druckt anstelle der Symbolischen Namen die
                      Telefonnummern an

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


-E          "Errors"  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.

-u          "unknown caller"
                     Zeigt am Ende alle Nummern an, die nicht in der
                     callerid.conf oder ~/.isdn eingetragen sind.
                     Diese Option laeuft nicht bei der Ausgabe im HTML-Format.

-v          "verbose"
                     Zeigt Warnungen (-v) und Fehler (-vv) beim Starten
		     des Programms.   		     

-wX         "WWW"    Der isdnrep kann die Ausgabe im HTML-Format erzeugen.
                     dieses wird mit der Option -w erreicht. Es gibt dort zwei
                     Modi:
                     0  Es wird der HTML-Header unterdrueckt. Dieses ist
                        sinnvoll, wenn die Ausgabe des isdnrep in eine
                        bestehende Seite eingebettet werden soll.
                     1  Es wird eine eigenstaendige Seite im HTML-Format
                        erzeugt.

-sX         "format string"
                     Die Ausgabe des isdnrep kann beeinflusst werden, indem
                     im Formatstring angegeben wird, welche Informationen
                     pro Verbindung angezeigt werden sollen. Die Syntax
                     entspricht dem printf. Folgende Platzhalter sind bekannt:

                     %X: Die Zeit ohne Datum (z.B. 23:54:06)
                     %x: Das Datum (z.B. 05/07/97)
                     %y: Datum ohne Jahresangabe (z.B. Sun May 04)
                     %Y: Das Jahr, vierstellig (z.B. 1997)

                     %D: Gespraechsdauer (z.B. 00:03:34)
                     %j: Der Name des Providers, ueber den diese Verbindung
                     	 gelaufen ist (der Telefon-Carrier)
                     %H: Die eigene MSN, wenn ein Eintrag in der callerid.conf
                         gefunden wurde wird dort das Alias angezeigt.
                         Es sollte die Precision angegeben werden!
                     %h: Die eigene MSN (kein Alias, nur die Nummer)
                         Es sollte die Precision angegeben werden!
                     %F: Der andere Gesprachsteilnehmer, wenn ein Eintrag in
                         der callerid.conf gefunden wurde wird dort das Alias
                         angezeigt.
                         Es sollte die Precision angegeben werden!
                     %f: Der andere Gesprachsteilnehmer (kein Alias, nur die
                         Nummer)
                         Es sollte die Precision angegeben werden!
                     %L: Gibt den Ort aus fuer die eigene MSN falls bekannt,
                         sonst ein Leerstring.
                         Es sollte die Precision angegeben werden!
                     %l: Gibt den Ort aus fuer den anderen Gesprachsteilnehmer
                         falls bekannt, sonst ein Leerstring.
                         Es sollte die Precision angegeben werden!
                     %T: Gibt den Pfeil an zwischen den Nummern ("->" oder "<-")
                         fuer die Gespraechsrichtung. Die eigene MSN
                         sollte hierbei immer links vom Pfeil stehen.
                     %t: Gibt den Pfeil an zwischen den Nummern ("->" oder "<-")
                         fuer die Gespraechsrichtung. Die eigene MSN
                         sollte hierbei immer rechts vom Pfeil stehen.

                     %u: Gibt die Einheiten aus, falls vorhanden (z.B. 6 EH)
                         Es sollte die Precision angegeben werden!
                     %U: Gibt die Gebuehren aus, falls vorhanden (z.B. 2,28 DM)
                     %I: Gibt den INPUT-Datendurchsatz an.
                     %O: Gibt den OUTPUT-Datendurchsatz an.
                     %P: Gibt den INPUT-Datendurchsatz pro Sekunde an.
                     %p: Gibt den OUTPUT-Datendurchsatz pro Sekunde an.
                     %S: Gibt die SI an.
                     %G: Gibt ein Link auf die entsprechenden Faxe fuer
                         diese Verbindung an. Diese koennen dann angesehen
                         werden. Die Faxe muessen allerdings mit mgetty
                         empfangen worden sein.
                         Diese Option geht nur mit der Option -wx
                         Weitere Informationen weiter unten.
                     %C: Gibt ein Link auf den entsprechenden gespeicherten
                         Anruf vom vbox an.
                         Diese Option geht nur mit der Option -wx
                         Weitere Informationen weiter unten.


                     Defaultmaessig ist der folgende String fuer den isdnrep
                     (nicht HTML) eingestellt:

                     "  %X %D %15.15H %T %-15.15F %7u %U %I %O"

                     Mit dem folgenden String hat man alle wichtigen Daten
                     ueber 80 Zeichen pro Zeile:

                     "%X%D %10.10H%T%-14.14F%U%I %O"

                     Der oben genannte String wird bei der Installation
                     in der isdn.conf unter REPFMTSHORT abgelegt und kann mit
                     -Fshort verwendet werden.

-FX         "format" Es koennen in der Datei isdn.conf Format-Strings definiert
                     werden. Diese koennen mit Option -F verwendet werden.
                     Unter der Sektion [ISDNLOG] kann es Eintraege namens
                     "REPFMTxxx" existieren. Der String nach der Option -F
                     muss identisch sein mit "xxx". Beispiel:

                     REPFMT1        = ... # -> isdnrep -F1
                     REPFMTMYSTRING = ... # -> isdnrep -Fmystring oder
                                          #    isdnrep -F MYSTRING

-Rx                  Angabe der Verbindungsnetzbetreiberauswahlnummer
		     der Telefongesellschaft, auf die man preselected ist.
		     Hierbei ist 010 wegzulassen, d.h. z.b.
     		     bei Arcor ist -R70 anzugeben.
     		     Fehlt diese Angabe, wird 33, d.h. die Deutsche Telekom
     		     angenommen.
		     s. auch PRESELECTED.


Abspielen von Anrufen vom vbox und Anzeigen von Faxen vom mgetty im HTML-Format
-------------------------------------------------------------------------------

Unter HTML kann der isdnrep die Dateien von den Programmen
finden und sie dem entsprechenden Anruf zuordnen. Diese koennen dann via einem
Link aufgerufen werden z.B. mit dem Netscape.
Dazu sind allerdings noch einige Einstellungen noetig.

Anrufbeantworter abspielen
--------------------------
Wenn dieses im Formatstring mit %C eingetragen wurde unter REPFMTWWW= ... %C ...
Dann wird isdnrep die entsprechenden Gespraeche mit einem Link hinterlegen,
die dann abgerufen werden koennen.

Dazu wird in der isdn.conf unter Sektion [ISDNLOG] folgender Eintrag benoetigt:

VBOXPATH= /var/spool/vbox/fred/incoming #Pfad zum Incoming-Verzeichnis vom vbox.

Nun kann der isdnrep diese Dateien finden. Wird nun der Link angeklickt,
wird die Datei direkt uebermittelt. Die Datei besteht aus dem Zyxel-Format.
Dieses kann der Browser nicht selber erkennen. Also muss
dieser Typ ergaenzt werden. isdnrep uebertraegt folgende Zeile am Anfang:

Content-Type: application/x-zyxel4

Hier muss man also noch die entsprechende Applikation im Browser eintragen,
damit die Datei erkannt werden kann.

Alternativ kann man aber auch dem isdnrep ein Programm mitteilen, dass das
Zyxel-Format umwandelt. Dieses Programm bekommt einen Parameter mit. Dieser
Parameter enthaelt die zu uebertragende Datei:

program /play/file

Dieses teilt man dem isdnrep wieder ueber die Datei isdn.conf mit. Es muss
dort unter [ISDNLOG] der Eintrag

VBOXCMD1 = /usr/bin/program1

fuer Version 0.x und 1.x vom vbox
und

VBOXCMD2 = /usr/bin/program2

fuer Version 2.x vom vbox
eingefuegt werden. Es koennen auch beide gesetzt sein, da der isdnrep selber
erkennt, welches Format die entsprechende Datei hat.

Das Programm muss zuerst den Datei-Typ und die Sound-Datei auf stdout ausgeben.
Um das Zyxel-Format in eine WAVE-Datei auszugeben, kann man folgende Skripte
verwenden:

Fuer Version 0.x und 1.x:
-----------------------------------------------------------
#! /bin/sh
##
## Kommando zum abspielen von Voicenachrichten vom vbox-1.0
##
## ACHTUNG! Wenn die Pfade falsch gesetzt sind oder fehlen,
## stuerzt netscape einfach ab!

PATH=$PATH:"Pfad zum sox":"Pfad zu den pvftools"
FILENAME1=/tmp/voxplay.$$.voc
FILENAME2=/tmp/voxplay.$$.wav
VOLUME=8

zyxeltopvf < $1   | \
   pvfspeed 0.8   | \
   pvfamp $VOLUME | \
   pvfcut 0.20    | \
   pvftovoc > $FILENAME1

sox $FILENAME1 $FILENAME2

echo Content-Type: audio/x-wav
echo
cat $FILENAME2

rm -f $FILENAME1 $FILENAME2
-----------------------------------------------------------

Fuer Version 2.x:
-----------------------------------------------------------
#! /bin/sh
##
## Kommando zum abspielen von Voicenachrichten vom vbox-2.0
##
## ACHTUNG! Wenn die Pfade falsch gesetzt sind oder fehlen,
## stuerzt netscape einfach ab!

PATH=$PATH:"Pfad zum sox":"Pfad zu den pvftools":"Pfad zum vbox"
FILENAME1=/tmp/voxplay.$$.voc
FILENAME2=/tmp/voxplay.$$.wav
VOLUME=8

vboxtoau <$1             | \
          autopvf        | \
          pvfamp $VOLUME | \
          pvfcut 0.20    | \
   				pvftovoc > $FILENAME1

sox $FILENAME1 $FILENAME2

echo Content-Type: audio/x-wav
echo
cat $FILENAME2

rm -f $FILENAME1 $FILENAME2
-----------------------------------------------------------

Die obigen Skripte benoetigen die Pakete sox und pvftools.
Es ist darauf zu achten, dass die benoetigten Programme im Pfad stehen.
Andernfalls quittiert netscape 3.0 gold (alpha??) dieses mit einem "bus error".

Damit der Browser etwas mit dem Typ "audio/x-wav" anfangen kann, muss
an den folgenden Dateien noch Zeilen angefuegt werden:

~/.mime.types
-----------------------------------------------------------
type=audio/x-wav  \
desc="auWAV Audio"  \
exts="wav"
-----------------------------------------------------------

~/.mailcap:
-----------------------------------------------------------
audio/x-wav;/usr/bin/auplay %s
-----------------------------------------------------------

Hierzu muss das Paket NAS installiert sein.

Wenn jetzt der Browser gestartet wird, kann er diese Dateien vom Typ WAVE
erkennen und das entsprechende Programm starten.
Wird vom isdnlog jetzt der Link zu einer Anruf, angeklickt, wird die Datei
abgespielt.

Das Format WAVE wurde aus dem Grund ausgewaehlt, da dieses auch unter
Windows abspielbar ist.

Anzeigen von Faxen vom mgetty
-----------------------------

Hierzu muss im Formatstring %G eingetragen werden. Dann werden alle Seiten
einzeln, die zu diesem Fax gehoeren durch einen eigenen Link dargestellt.

Diese laeuft analog zur vbox-Einstellungen.
Es muss also der Pfad zu den Fax-Dateien dem isdnrep mitgeteilt werden:

...
[ISDNLOG]
MGETTYPATH = /var/spool/fax/incoming
...

ACHTUNG: Wenn der isdnrep keine Berechtigung zum Lesen der Datei(en) hat,
werden diese auch nicht angezeigt. Es wird auch keine Fehlermeldung erscheinen.
Wenn also keine Dateien vom isdnrep angezeigt werden, sind haeufig die Rechte
an der Datei falsch.

Wenn isdnrep diese Dateien an den Browser uebertraegt (oder besser der HTTPD),
dann haben diese das G3-Format. Der isdnrep uebertraegt daher das Header-Type
folgende Zeile:

Content-Type: application/x-faxg3

Da dieses der Browser nicht kennt, muessen wiederum folgendende Eintraege
an den Dateien des Browsers ergaenzt werden:

~/.mime.types
-----------------------------------------------------------
type=application/x-faxg3  \
desc="G3-Fax Format" \
exts="fax,g3"
-----------------------------------------------------------

~/.mailcap:
-----------------------------------------------------------
application/x-faxg3;/usr/X11/bin/g3view %s
-----------------------------------------------------------

Hierzu muss das Programm g3view installiert sein.

Wird jetzt der Link verfolgt, wird automatisch vom Browser das externe Programm
g3view gestartet.

Wenn man auch hier nicht mit dem G3-Format einverstanden ist, kann man z.B.
auch das JPEG-Format dem Browser uebermitteln lassen. Hierzu sollte man
dann folgenden Eintrag fuer das Konvertierungsskript in die isdn.conf
eintragen:

...
[ISDNLOG]
VBOXCMD = /usr/bin/g3tojpeg # Beispielpfad
...

ACHTUNG: Wenn der isdnrep keine Berechtigung zum Lesen der Datei(en) hat,
werden diese auch nicht angezeigt. Es wird auch keine Fehlermeldung erscheinen.
Wenn also keine Dateien vom isdnrep angezeigt werden, sind haeufig die Rechte
an der Datei falsch.

Dann sollte die Datei /usr/bin/g3tojpeg wie folgt aussehen:

-----------------------------------------------------------
#! /bin/sh
##
## Kommando zum anzeigen von Faxen unter einem Browser
##
## ACHTUNG! Wenn die Pfade falsch gesetzt sind oder fehlen,
## stuerzt netscape einfach ab!

export PATH=$PATH:"Pfad zu g3topbm":"Pfad zu convert"

echo Content-Type: image/jpeg
echo

g3topbm < $1 | convert pbm:- jpeg:-
-----------------------------------------------------------

Es werden hierfuer die Pakete ImageMagick und mgetty (sollte wohl vorhanden
sein!) benoetigt.

Wenn jetzt der Link angeklickt wird, wird das Fax im Browser angezeigt.

Das Format JPEG wurde aus dem Grund ausgewaehlt, da dieses auch unter
Windows angezeigt werden kann.

Ein Beipspiel fuer REPFMTWWW:

REPFMTWWW     = "%X %D %17.17H %T %-17.17F %-20.20l SI: %S %9u %U %I %O %G %C"

Falls jemand andere/bessere Skripte/Loesungen hat, sollte er sie unbedingt an

akool@isdn4linux.de

senden, damit diese in der naechsten Version vom isdnlog aufgenommen werden
koennen.

Als Browser wurden von mir der netscape 3.0 gold und arena verwendet. Beide
arbeiten mit der Ausgabe vom isdnrep. Allerdings war die Ausgabe vom arena
nicht so farbenpraechtig, wie die vom netscape.

Bekannte und unloesbare Probleme sind die Zuordnung von einem Anruf zu einem
Fax oder vbox-Call. Leider sind die Zeiten des Anrufsbeginn unterschiedlich
zwischen isdnrep, mgetty und vbox. Daher versucht der isdnrep die beste
Annaeherung zu erreichen. Es kann aber immer passieren, dass z.B. ein Fax
dem falschen Anruf zugeordnet wurde.

Anzeige der isdnrep
-------------------

Es wird nun auf stdout eine Abrechnung mit folgender Default-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 : CityCall          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,
       CityCall, 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.

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.

Hier nun die Optionen des Programmes:

Befehle:

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


  -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 Auswirkungen bei den Befehlen -A und -D. Es
                        wird dann anstatt der ~/.isdn die Datei
                        /etc/isdn/callerid.conf genommen zum editieren.

  -1          "first"   loescht nur den ersten Eintrag oder zeigt nur den
                        ersten Eintrag an.

  -M          "isdnmon" liefert den Output fuer den isdnmon.


12. Der X-Client xisdn
----------------------

ACHTUNG: Der xisdn ist noch nicht an die Version 3.0 angepasst. Daher ist der
         Client in dieser Version nicht enthalten. Es kann allerdings nicht
         garantiert werden, ob der xisdn mit der Version 3.0 lauffaehig ist.

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=<Pfad_der_Resource_Datei>/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 wurden von Georg v.Zezschwitz
(gvz@pop.de) geschrieben, der "ChargeInt" entwickelt hat. "ChargeInt"
war lange ein Patch fuer Linux, ist aber mittlerweile voll in
isdn4linux integriert und wird von isdnlog unterstuetzt (siehe
Option -h)


Was ist ChargeInt?
------------------

ChargeInt ist ein Feature von isdn4linux. Damit wird eine Taktzeit
fuer ein ISDN-Interface angegeben, die moeglichst voll ausgenutzt
werden soll. Ohne isdnlog wird ChargeInt ueber einen Parameter
von isdnctrl angesprochen: 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
----------------------------

Chargeint wird nur dann aktiv, wenn es manuell mit

  isdnctrl chargeint device Takt

aufgerufen wird, oder isdnlog mit der Option -h aufgerufen wird.


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 eher 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, wenn man nicht bei der Telekom oder
gar Mobilcom, sondern einem Anbieter mit sekundengenauer Abrechnung
telefoniert.

Ueberfluessig ist ChargeInt auch, wenn z.b. Daten im Batch-Betrieb (UUCP
ueber TCP/IP) abgeholt werden und anschliessend explizit aufgelegt wird.

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...
 - generell lieber kurz auflegen wuerden, wenn die Verbindung 1-2
   Minuten nicht gebraucht wird.


Wie konfiguriere ich ChargeInt?
-------------------------------

Eine manuelle Konfiguration von ChargeInt ist nur noetig, wenn
isdnlog nicht die Steuerung uebernehmen kann, weil z.B. der Anbieter
mit seinen Gebuehrenintervallen nicht unterstuetzt wird.

Wer z.B. grundsaetzlich im Minutenintervall (z.B. Viag-Interkom) oder
gar 2 Minuten-Intervall (Mobilcom) zahlt, braucht die intelligente
Steuerung von isdnlog nicht.

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 CityCall's huptimeout auf 5 Sekunden, bei GermanCall's
auf 3 Sekunden.


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 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 ISDN-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 entweder mit einer zweiten ISDN-Karte, oder
einer HFC-ISDN-Karte ausgestattet sein.

Werden zwei Karten eingesetzt, muessen auf beiden der 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 "-2x" gestartet werden.
Nach heutigem Kenntnisstand ist es nicht moeglich, eine Teles-16.3c
Karte als Echo-Karte einzusetzen. Ein Grund mehr, diese Karte nicht
zu kaufen ...

Wird hingegen eine ISDN-Karte mit HFC-Chip eingesetzt, muá isdnlog mit
den Optionen "-1 -2x" gestartet werden.


16. SQL-Anbindung
-----------------

16.1. Postgres
--------------

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.


16.2. MySQL
-----------

Wenn im Konfigurationmenue mysql ausgewaehlt wird, werden alle
Verbindungsdaten zusaetzlich zur Datei isdn.log in eine Tabelle in der
Datenbank geschrieben.

Der Name der Datenbank, die Tabelle, der SQL-Host, der Username und
das Passwort werden in der Datei ./isdnlog/mysqldb.h definiert.
Standardmaessig enthalten sie folgende Werte.

DB_HOST = localhost
DB_NAME = isdn
DB_USER = isdn
DB_PASSWD = isdn
DB_TABLE = isdnlog

Zur Erstellung der Datenbank sind folgende Schritte notwendig.

# mysqladmin create isdn
# mysql mysql < grants.txt  (Inhalt wird spaeter erlaeutert)
# mysqladmin reload
# mysql isdn < table.txt    (Inhalt wird spaeter erlaeutert)

Inhalt der Datei grants.txt:

--

INSERT INTO user VALUES ('localhost','isdn',password('isdn'),'N','N','N','N','N','N','N','N','N','N','N','N','N','N');
INSERT INTO db VALUES ('localhost','isdn','isdn','N','Y','N','N','N','N','N','N','N','N');

--

Inhalt der Datei table.txt:

--

CREATE TABLE isdnlog (
  sdate date NOT NULL,
  stime time NOT NULL,
  calling varchar(32) NOT NULL,
  called varchar(32) NOT NULL,
  charge int(4) NOT NULL,
  dir char(1) NOT NULL,
  in_bytes int(4) NOT NULL,
  out_bytes int(4) NOT NULL,
  msec int(4) NOT NULL,
  sec int(4) NOT NULL,
  status int(4) NOT NULL,
  service int(4) NOT NULL,
  source int(4) NOT NULL,
  vrsion int(4) NOT NULL,
  factor double(16,4) NOT NULL,
  currency varchar(30) NOT NULL,
  pay double(16,4) NOT NULL,
  provider varchar(30) NOT NULL,
  KEY (sdate,stime),
  KEY (calling,called),
  KEY (pay,provider)
);

--


16.3. Oracle
------------

Wenn im Konfigurationmenue Oracle ausgewaehlt wird, werden alle
Verbindungsdaten zusaetzlich zur Datei isdn.log in die Tabelle isdn
in der Oracle-Datenbank geschrieben.

Der Connect-String wird in der Datei ./isdnlog/oracle.h definiert.
DB_CONNECT_STRING=isdn/isdn
Durch die Environment-Variable DB_CONNECT_STRING kann der Wert ueberschrieben
werden. export DB_CONNECT_STRING=user/password@db

In der Datenabnk ist der user anzulegen.
sqlplus system/system_password
SQL> create user isdn identified by isdn
SQL> default tablespace users temporary tablespace temp;
SQL> grant connect, resource to isdn;
SQL> quit

Mit dem isdnlog/isdnlog/oracle/Script oracle.sql
wird die Tabelle isdn angelegt:
# sqlplus isdn/isdn @oracle

Verbindungsdaten, deren insert fehlschlaegt (DB is offline), landen als SQL
in /var/log/isdn-fail.sql und koennen mit sqlplus nachgeladen werden.

Das Programm ora_load importiert die bestehende Datei isdn.log in die
Oracle-Datenbank. (DB_CONNECT_STRING s.o.)

Die Oracle-Umgebung muss fuer isdnlog und ora_load gesetzt sein, alle
Start-Scripts muessen entsprechend angepasst werden.

Bei mir sieht das so aus

# Oracle 8.0
export ORACLE_BASE ORACLE_HOME ORACLE_SID ORACLE_TERM ORA_NLS33
export TNS_ADMIN NLS_LANG LD_LIBRARY_PATH TWO_TASK
ORACLE_BASE=/ora01/app/oracle
ORACLE_HOME=/ora01/app/oracle/product/8.0.5
ORACLE_SID=orcl
#ORACLE_TERM=vt100
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
#NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
TNS_ADMIN=$ORACLE_HOME/network/admin
# Alternativ in /etc/ld.so.conf
if [ "" = "$LD_LIBRARY_PATH" ]; then
    LD_LIBRARY_PATH=$ORACLE_HOME/lib
else
    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
fi
#PATH="$PATH:$ORACLE_HOME/bin"
# Default DB
TWO_TASK=jb2


17. Tarifdatenbank
------------------

Die Tarifdatenbank fuer isdnlog wird bei jedem Neustart von isdnlog aus
der ASCII-Datei "/usr/lib/isdn/rate-xx.dat" neu generiert.

Anstelle von "xx" tritt das jeweilige Laenderkuerzel, also z.b. "de" fuer
Deutschland oder "at" fuer Oesterreich.

Welche Tarifdatei gilt, wird ueber den Eintrag

RATEFILE = /usr/lib/isdn/rate-de.dat

im Kapitel

[ISDNLOG]

der Konfigurationsdatei angegeben.

Benutzerbezogene Einstellungen an der Tarifdatenbank (wie Auswahl
eines bestimmten Tarifes eines Providers (z.b. Sekundentakt oder Minutentakt),
oder auch der konkrete Provider bei Kennzahlen, die von mehreren Providern
vergeben werden (z.b. 01098 wird von Star, Nikoma, Mox sowie C@llas verwendet)
werden in der Datei "/etc/isdn/rate.conf" vorgenommen.

Diese Datei muá ueber den Eintrag

RATECONF       = /etc/isdn/rate.conf

im Kapitel

[ISDNLOG]

der Konfigurationsdatei angegeben werden.

Die Datei "rate-xx.dat" wird in einem Durchgang von oben nach unten eingelesen,
und muss folgenden Aufbau (als Beispiel hier nun Mobilcom) haben:

#######################################################################
P:19 Mobilcom CbC
B:01019
C:CityLine Telefondienste GmbH, Schwarzer Weg 13, 24837 Schleswig 01019
G:06.04.1999
C:MobilCom AG
C:Homepage: http://www.mobilcom.de
C:Hotline:  01805/191919
C:Adresse:  Postfach 1249
C:	    24822 Schleswig
Z:2-4 Ferngespraeche bundesweit
T:*/07-19=0.12/60 Standard
T:*/19-22=0.08/60 Spar
T:*/22-07=0.04/60 Nacht
A:+49
Z:5-10 Mobilfunk
A:01610,01617,01619,01618 # C
A:0170,0171  		  # D1
A:0172,0173		  # D2
A:0177,0178		  # Eplus
A:0176,0179  		  # E2
T:*/*=0.49/60
Z:14 Gruppe A
A:US     # Vereinigte Staaten (USA)
A:AT    # Oesterreich
...
T:*/*=0.49/60
Z:20 Internet
A:01929 # (Benutzername: mobilcom; Passwort: mobilcom)
T:*/*=0.05/60 FreeNet
#######################################################################

Leerzeilen, sowie Kommentare mittels "#" sind an jeder beliebigen
Stelle zulaessig.

Die Reihenfolge der Eintraege muss zwingend so wie angegeben sein.
Es ist auch nicht erlaubt, irgend welche Leerzeichen, Tabs o.ae.
einzufuegen, als Dezimalkomma muss der "." (Punkt) verwendet werden.


Nun die Eintraege im einzelnen:

-> V:

Hiermit wird die Version der Tarifdatenbank angegeben.
V:Versionsstring (Vorschlag: 1.0-Germany [18-Mar-1999])

-> U:

Damit wird das Waehrungsformat und die Anzahl der Dezimalstellen
angegeben, z.B.
U:%.3 DM

-> X:

Mit diesem Eintrag werden Ausnahmen fuer die Proivder/Zonenbestimmung fuer
gewisse Nummern definiert.
Der Syntax lautet:
X:Numregexp=Providernr['z'Zone] ,...
'Numregep' ist ein regulaere Ausdruch á la glob(7), der die gesamte Nummer
definiert, 'Providernr' ist die externe Provider-Nummer (s. P:) und Zone ist
die Zone gefolgt von einem 'z'-Literal, dieser EIntrag ist optional.
Es können mehrere X:Eintäge vorhanden sein, und der X:-Tag kann auch in
raate.conf verwendet werden, um spezielle Tarifmodelle wie "5 Freunde" zu
konfigurieren.

z.b
[^0]*=33  # alle lokalen Gespraeche -> DTAG
01234567=1z5 # diese Nummer ist immer Provider 1 Zone 5

-> B:

Verbindungsbetreibernummer

-> P:

Hiermit beginnt die Definition des (naechsten) Providers.
Es wird die Kennzahl, evtl. eine laufende Nummer sowie die
Bezeichnung des Providers definiert. Diese Bezeichnung ist moeglichst
kurz zu halten, da isdnlog diese staendig anzeigt.
Unter Kennzahl versteht isdnlog hier die Vorwahl vor der eigentlichen
Telefonnummer, ueber die der jeweilige Anbieter verwendet werden kann.
In Deutschland sowie Oesterreich muá z.b.

  01019 040 4711

gewaehlt werden, um die Telefonnummer 4711 in Hamburg (040) ueber den
Telefondienstanbieter (=Provider) 19 (Mobilcom) zu erreichen.

Beispiel:

P:19,0 MobilCom

Gibt es fuer eine Kennzahl mehrere Alternativen (wie verschiedene Provider
oder verschiedene Tarife), werden diese hierueber auseinander gehalten.
Der erste Tarif bekommt "P:xx,0", der naechste "P:xx,1" usw.
Gibt es keine Alternativen, darf das ",0" entfallen.
Dieser Eintrag muss mit rate.conf übereinstimmen.


-> C:

Hiermit koennen beliebig viele Kommentare eingefuegt werden, Beispiel:

C:Homepage: http://www.mobilcom.de
C:Hotline:  01805/191919
C:Adresse:  Postfach 1249, 24822 Schleswig

Im Gegensatz zu den "#" Kommentaren werden diese Kommentare von isdnlog
gespeichert und sollten daher zumindest genug Informationen enthalten,
um eine Kontaktaufnahme mit der jeweiligen Telefongesellschaft zu
ermoeglichen.

-> D:

Damit wird die Art der Inlandsverzonung (D steht für Domestic) angegeben.
Der Name wird mit dem Eintrag in der isdn.conf

ZONEFILE=/usr/lib/isdn/zone-de-%s.dat

zum Pfad zur Verzonungstabelle zusammengebaut. Mehrere Provider können
dieselbe Verzonungstabelle nutzen.

Nun folgen die eigentlichen Tarifinformationen. Es wird zuerst die
Tarifzone, und danach die Kosten innerhalb dieser Zone angegeben. Es koennen
beliebig viele Zonen, jeweils gefolgt von beliebig vielen Kosten
angegeben werden.

-> R: Provider, Subnummer ; Zonenliste

Liest Zoneneintraege (Z: s. unten) vom angegebenen 'Provider,Subprovider'.
Ist der Subprovider nicht definiert, muss -1 angegeben werden.
Zonenliste ist eine Zonenummer oder Von_Zone - Bis_Zone, mehrere Eintraege,
durch Beistrich getrennt, sind moeglich. Der letze Eintrag 'Bis_Zone' kann
auch entfallen, dann werden von 'Von_Zone' bis zum Ende alle Zonen vom
referenzierten Provider uebernommen.
Die referenzierten Zoneneintraege koennen vor oder nach dem R:-Tag definiert
sein, muessen aber echte Zoneneintrage sein, d.h. mit Z;/A:/T: definierte
Zonen.

z.B.
 R:1,0; 4-6,8,200-

-> Z:

Gibt die Zone an. Grundsaetzlich koennen die Zonen vollkommen willkuerlich
vergeben werden. Dies haengt vom jeweiligen Land und/oder
Telefondienstprovider ab. Aber prinzipiell sollten zuerst die Inlands-
und dann die Auslandszonen definiert werden.

Fuer Deutschland habe ich folgende Zonenzuordnung getroffen:

  0 : Verbindungen an der eigenen Tk-Anlage (zwangslaeufig kostenlos)
      sowie alle "FreeCall" (kostenlos) Nummern des jeweiligen Providers
  1 : Ortszone (alle Nummern, die ohne Vorwahl erreichbar sind.
      Z.Zt. nur ueber den preselected Provider erreichbar)
  2 : Cityzone (Nummern im Umkreis von max. 20 km)
  3 : Region 50 (Nummern im Umkreis von max. 50 km)
  4 : Fernzone (Deutschlandweit)
 100 : Internet
 200 : Ausland

Diese Zuordnung muá erhalten bleiben, da isdnlog fuer Deutschland bereits
eine Verzonungstabelle (der DTAG) enthaelt. In dieser Verzonungstabelle
kann isdnlog nachschlagen, welche der obigen Zonen zwischen zwei
gegebenen Telefonnummern liegt.


Falls ein Provider in mehreren Zonen denselben Tarif anbietet, kann das
durch die Notation Z:1-2 (bedeutet: Gilt sowohl fuer die Orts- als die
Regionalzone) oder auch Z:5-10 (bedeutet: Gilt fuer alle Funknetze) angegeben
werden. Moeglich ist auch: Z:5,7,9-10
Die Nummer der Zone kann durch eine textuelle Bezeichnung fuer diese
Zone gefolgt werden, also z.b.

  Z:4 GermanCall


-> A:

Telefonnummer(n), an der isdnlog die Zone erkennen kann.
Die Zonen
  0 : Verbindungen an der eigenen Tk-Anlage
  1 : Ortszone
  2 : Cityzone
  3 : Region 50
  4 : Fernzone
kann isdnlog automatisch (mittels der Verzonungstabelle) erkennen. Daher
muessen fuer diese Zonne in Deutschland keine "A:" Eintraege vorgenommen
werden (das waere auch eine lange Liste ;-)
Die Fernzone bzw. letzte Inlandszone muß einen Eintrag A:+49 (bzw. A:DE, bzw
eigener Country-Code) enthalten.
Von allen anderen Zonen weiss isdnlog intern nichts.

Durch einen Eintrag

Z:8 D2-Netz
A:0172,0173

wird isdnlog bekannt gemacht, das alle Telefonnummern, die mit "0172" oder
"0173" beginnen, in die Zone 8 gehoeren.

Auslandsnummern werden über ihren Landescode eingegeben.
Die Umsetzung von z.b A:+1 in A:US erledigt der Rate-Preprozessor pp_rate.

Ueber diesen "A:" Tag werden isdnlog auch alle "Sonderrufnummern" bekannt
gemacht. Durch den Eintrag

Z:0 FreeCall
A:110   # Polizei / Notruf
A:112   # Feuerwehr / Rettungsleitstelle
A:0010  # Operator Service
A:0130  # freecall 0130
A:0800  # freecall 0800

weiss isdnlog, das alle Nummern, die mit "110", "112", "0010", "0130" oder
"0800" beginnen, kostenlos sind.

-> T:

Hiermit wird letztendlich der eigentliche Tarif angegeben.

T:Tag[-Spanne][,Tag]/Zeit[-Spanne][,Zeit]=Kosten[,Kosten] Name

wobei Tag in der Form 1-5 oder 1,2,3,4,5 stehen kann, 1=Montag, es gibt
noch * fuer alle Tage und H fuer Holiday=Feiertag sowie
W=Werktag (entspricht 1-5) sowie E=Weekend (entspricht 6-7)
Welcher Tag ein Holiday (Tag mit verguenstigen Tarifen) ist, entnimmt
isdnlog der Datei "holiday-xx.dat" (Mit "xx" fuer das Land, in dem sich
isdnlog befindet). Auch diese Datei muss ueber den Eintrag

HOLIDAYS = /usr/lib/isdn/holiday-de.dat

im Kapitel

[ISDNLOG]

der Konfigurationsdatei angegeben werden.


die Zeit sieht aehnlich aus, 8-12 oder 8,9,10,11 oder 8-12,13-17
ACHTUNG: 8-12 bedeutet 8:00 bis 11:59 !!!

Kosten: Kosten einer Einheit/Dauer der Einheit z.B. 0.56/30; Kosten und
Dauer sind doubles; bei mehreren Kosten kann/soll die Verzoegerung, nach
der auf den naechsten Kostenwert gewechselt werden soll, mit ':'getrennt
angegeben werden
z.B. 0.56/30:600,0.56/60 heisst: zuerst alle 30 Sekunden, nach 10 min
alle 60 Sekunden
Wenn das Delay nicht angegeben wird, wird die Taktdauer als Delay
verwendet (d.h. die Kosten gelten nur fuer eine Einheit)
Der letzte Kosteneintrag darf kein Delay haben!

Sonderfaelle:
Grundkosten pro Gespraech:
1.0/0,0.40/30: 1 DM pro Verbindung, danach alle 30 Sekunden eine Einheit
zu 40 Pfennig

Freie Gespraechszeit:
0/10,0.50/30: 10 Sekunden mit 0 DM, dann alle 30 Sekunden 50 Pf

Abgeschlossen wird der Tarif durch eine textuelle Bezeichnung, wie z.b.

T:1-5/09-18=0.96/60 Hauptzeit

Da in den meisten Preislisten die Tarife in DM/Minute angegeben werden,
gibt es die Spezialnotation:

T:1-5/07-09=0.09(60)/1

Dies bedeutet: Der Minutenpreis betraegt DM 0.09 - abgerechnet wird
jedoch im Sekundentakt.
Um nun nicht alle Minutenpreise in Sekundenpreise umrechnen zu muessen,
und auch, um nicht arge Rundungsprobleme zu provozieren
(ohne die (60) Funktionalitaet wuerde hier stehen: ...0.0015/1),
sollte stets diese Form gewaehlt werden.

Um die korrekte Funktion vor allem von CHARGEINT zu gewaehrleisten, ist
es von extremer Wichtigkeit, die richtigen Taktlaengen anzugeben, und
hier nicht "kuenstlich" umzurechnen!

Es folgen in beliebig vielen weiteren "T:" Zeilen alle weiteren Tarife
fuer die darueber definierte Zone.

Danach wird mittels "Z:" die naechste Zone begonnen, wiederum gefolgt von
beliebig vielen "T:" Tarifen.


Sind alle Tarife eines Anbieters definiert, folgt mittels "P:"
der naechste Provider usw.



In der Datei "/etc/isdn/rate.conf" werden die Benutzerabhaengigen
Einstellungen an der Tarifdatenbank vorgenommen.
Beispiel:

# Kennzahl 98, moegliche Varianten:
#   0=Nikoma Minutentakt
#   1=Nikoma Sekundentakt
#   2=Nikocity Minutentakt
#   3=Nikocity Sekundentakt
#   4=Mox Telecom AG
#   5=C@llas Clever Communications
P:98=4

Hier wird definiert, das der konkrete Anwender bei einer Verbindung ueber
die Kennzahl "98" den Tarif der Fa. Mox Telecom AG meint.


18. LCR (Least cost router)
---------------------------

Seit dem 1.1.1998 duerfen in Deutschland ganz offiziell (im kommerziellen
Umfeld war das schon laenger gang und gebe) auch andere Firmen
(neben der DTAG = Deutsche Telekom) Telefondienste anbieten.

Dazu wurde die RegTP - Regulierungsbehoerde fuer Telekomunikation und Post
(http://www.regtp.de) ins Leben gerufen, die seitdem (u.a.) die
Verbindungsnetzbetreiberauswahlkennziffern vergibt.

Ueber diese Nummern kann nun jeder selbst entscheiden, ueber welchen
Provider (== Telefongesellschaft) er fuer das folgende Telefonat telefonieren
moechte.

Daher taucht im Bereich der Telekomunikation ein neuer - bislang primaer
in den USA gelaeufiger Begriff auf: das LCR, Least cost routing, d.h. die
Auswahl des guenstigsten Providers fuer eine gleich entstehende Verbindung.


Dazu muss folgendermassen gewaehlt werden:


  010 xxx 49 69 123456
   ^-------------------------- Verbindungsnetzbetreiberauswahl
       ^---------------------- Nummer des gewuenschten Providers
           ^------------------ Landesvorwahl
              ^--------------- Ortsvorwahl
                  ^----------- Rufnummer

Endet der Ruf im eigenen Land, kann die Landesvorwahl entfallen.
Endet der Ruf im eigenen Ortsnetz, kann die Ortsvorwahl (bis auf weiteres)
entfallen.

Mittels "xxx" wird der gewuenschte Provider selektiert, wobei die RegTP
zuerst alle 99 2-stelligen Nummern vergeben hat, und danach dazu ueber ging,
dreistellige Nummern, bislang i.d.F, 0xx zu vergeben.

Um ein konkretes Beispiel zu machen: Wenn man beabsichtigt, von Muenchen
nach Frankfurt ein Telefonat mit der Nummer 4711 zu fuehren, und dazu
den Provider VIAG Intercom verwenden moechte, waehlt man folgende Nummer:

   010 90 069 4711
    ^---------------- Verbindungsnetzbetreiberauswahl
       ^------------- VIAG Intercom
           ^--------- Frankfurt
              ^------ Rufnummer


Ein grundlegendes Problem wurde jedoch bislang nicht geloest: Sobald man
ueber einen alternativen Carrier (also irgend eine Telefongesellschaft
jenseits der DTAG) eine Verbindung aufbaut, werden keinerlei Gebuehren-
informationen mehr uebertragen - weder waehrend, noch am Ende der
Verbindung.
D.h. die schoenen "Leistungsmerkmale" AOCD sowie AOCE funktionieren _nicht_
mehr.

Daher macht es per heute (1999) wirklich absolut keinen Sinn mehr, einen
ISDN-Komfort-Anschluss zu beantragen! Das dort enthaltene "Leitungsmerkmal"
Gebuehreninformationen waehrend der Verbindung wird sowieso nur noch bei
Verbindungen ueber die DTAG erbracht (da die DTAG meistens die teuerste
Gesellschaft ist, kommt das also praktisch nie mehr vor ...)
Wer den isdnlog (und eine up-to-date "rate-xx.dat") verwendet, bekommt jedoch
bei *allen* Gesellschaften - incl. der DTAG - Gebuehreninformationen geliefert,
in Bezug auf AOCD (waehrend der Verbindung) sogar genauer, als die
von der DTAG!


Was kann nun isdnlog (ab der Version 3.x) mit dieser neuen Situation anstellen?

1. isdnlog erkennt eine evtl. vorgewaehlte Verbindungsnetzbetreiberauswahl,
   und dekodiert den entsprechenden Provider heraus.

   Dazu greift isdnlog auf drei Quellen zurueck:
     - zum ersten besitzt isdnlog ... bislang hardcoded ... die Namen
       aller bislang bei der RegTP angemeldeten Provider. Von den bis zum
       11.Maerz 1999 angemeldeten 126 Telefongesellschaften bieten allerdings
       noch bei weitem nicht alle wirklich Telefondienste an.

     - zum zweiten besitzt isdnlog eine Tarif-Datenbank, die Datei
       "/usr/lib/isdn/rate-xx.dat"
       Dort sind die Tarife der diversen Telefongesellschaften hinterlegt.

       Da sich die Tarife haeufig sogar taeglich aendern, kann diese
       Datei im Moment nur als Anhaltspunkt angesehen werden. Zu welchem
       Zeitpunkt die dort hinterlegten Tarife mit Sicherheit gueltig waren,
       kann dem Eintrag "V:" am Anfang der Datei entnommen werden.
       Sollte mir irgend jemand verbesserte Tarifinformationen zuschicken
       (an akool@isdn4linux.de), bitte ich darum, immer auch diese
       Versionsnummer zu incrementieren!

     - diverse Telefongesellschaften arbeiten mittlerweile mit sog.
       Resellern - Firmen, die unter derselben Verbindungsnetzbetreiberauswahl
       zu unterschiedlichen Tarifen Telefondienste anbieten. Hierzu muss man
       sich bei einem der Reseller zuerst anmelden - meistens kostenlos.

       Zum Beispiel hat die Firma Star Telecom die
       Verbindungsnetzbetreiberauswahl 01098 erhalten, bietet jedoch an
       Privatkunden praktisch gar keine Telefondienste an.

       Stattdessen verkauft Star ihre Dienste weiter an die Firmen

         Nikoma, Mox sowie C@llas

       Ist man gewillt, ueber eine dieser drei Firmen zu telefonieren,
       muss man sich zuerst dort anmelden. Erschwerend kommt hinzu, dass alle
       diese Firmen noch unterschiedliche Tarif-Varianten anbieten:

         - Abrechnung im Minutentakt
         - Abrechnung im Sekundentakt, dafuer etwas teurer
         - besondere Abrechnung, wenn man in einer sog. Superregion, d.h.
           einer Grossstadt wie Frankfurt, Muenchen, Hamburg, Stuttgart usw.
           wohnt.

       Da jedoch alles oben genannte ueber ein und dieselbe
       Verbindungsnetzbetreiberauswahlkennziffer, im Beispiel also
       01098 laeuft, ist isdnlog absolut ausser Stande zu entscheiden,
       was nun gemeint ist, wenn eine Verbindung mit der Nummer "01098"
       beginnt.

       Daher sieht isdnlog in der Datei "/etc/isdn/tarif.conf" nach,
       welcher konkrete Provider sowie welche konkrete Tarifvariante
       gemeint ist, wenn z.b. die Nummer 01098 auftaucht.
       Diese Datei muss dementspechend jeder entsprechend seiner eigenen
       Situation fuellen.

2. Anhand des ermittelten Providers kann isdnlog nun berechnen, was dieser
   Provider fuer eine Verbindung verlangt, und wie lang bei diesem Provider
   ein "Gebuehrentakt" dauert.

   Mit diesen Informationen macht isdnlog per heute folgendes:

     1. Er ist in der Lange, am Ende einer Verbindung auszugeben, was die
     	gerade beendete Verbindung gekostet hat.

     2. Er ist in der Lage, den CHARGEINT von isdn4linux neu zu setzen,
     	d.h. die Steuerung, wann eine ISDN-Data-Verbindung auflegen soll,
        um genau in einen Gebuehrentakt hineinzupassen.

     3. Er ist in der Lage, den Gebuehrentakt (-> AOCD) zu "erfinden", und
     	auszugeben. Dieser dazuerfundene Gebuehrentakt wurde CI (fuer
        ChargeInt) getauft.

     4. Da isdnlog von (fast) allen aktiven Providern die Tarifinformationen
     	besitzt, macht er zu Beginn einer Verbindung evtl. den Vorschlag,
        einen anderen - guenstigeren - Provider zu waehlen.

       	Das ist (leider) nur fast das, was ein sog. LCR (least-cost-router)
        erbringt. Ein echter LCR sagt nicht, welchen Provider man haette
        benutzten sollen, sondern benutzt genau diesen automatisch.
        Dies ist aber per heute leider aufgrund der Physik einer
	handelsueblichen ISDN-Karte nicht moeglich.
        (Ich persoenlich benutze seit dem 1.1.1998 eine Tk-Anlage mit
         internem S0-Bus, an dem alle ISDN-Telefone angeschlossen sind)

3. Praktisch alle neuen Provider kaempfen mit einem ueblen Problem: Sie
   besitzen (in Relation zur DTAG) nur eine sehr begrenzte Anzahl freier
   Leitungen. Besonders Provider, die mit extrem guenstigen Angeboten
   locken, sind erst nach 10 .. 20 maligem Versuchen verfuegbar.
   (Das beste Beispiel z.Zt. (Maerz 1999) ist sicherlich die Firma
    01079:Viatel, die zwar extrem guenstige Tarife anbietet, aber praktisch
    nie verfuegbar ist)
   Dieses Problem kann natuerlich auch isdnlog nicht aus der Welt schaffen,
   jedoch bringt isdnrep eine Statistik
   (in der Rubrik "Outgoing calls ordered by Provider") mit der
   prozentualen Verfuegbarkeit jedes benutzen Providers.
   Diese Verfuegbarkeitsrate bezieht sich natuerlich nur auf die jeweils
   eigenen Daten.


4. Zum echten LCR gehoert aber noch etwas anderes! Bei den normalen
   Telefonnummern ist es einfach (naja, ich habe ueber 3 Jahre gebraucht,
   bis isdnlog das konnte), anhand einer Vorzonungstabelle zu berechnen,
   was eine Verbindung zwischen A und B kostet. Leider gibt es jedoch in
   Deutschland ca. 210 sog. Sonderrufnummern, die sich nicht dem ueblichen
   Schema unterziehen. Ein sehr bekanntes Beispiel fuer eine Sonderrufnummer
   iat die Telefonnummer "112 -> Feuerwehr"
   Die Telefonnummer 112 kostet nichts, was aber beileibe nicht fuer alle
   Sonderrufnummern gilt. Ganz im Gegenteil: Es gibt viele Sonderrufnummern,
   die weit mehr kosten, als die Fernzone! Bekannt sind hier sicherlich
   alle Rufnummern, die mit 0180 oder 0190 beginnen, oder die div.
   Telefonauskunften 118xx
   Dummerweise kosten diese Sondernummern bei jedem Provider etwas anderes,
   oder werden Fallweise von dem einen oder anderen Provider gar nicht
   unterstuetzt.

   Da sich die Tarife manchmal sogar taeglich aendern, lebt isdnlog
   natuerlich von einer stets aktuellen "rate-de.dat". Diese Datei
   wird z.Zt. von der Rate-Crew in einem CVS gepflegt, und taeglich
   aktuell unter folgender Adresse zur Verfuegung gestellt:

      http://rates4linux.sourceforge.net/


   Wer Fehler in der Tarifdatenbank findet, oder gar Verbesserungen oder
   neue Anbieter dafuer zusammengestellt hat, schickt diese bitte an
   folgende Adresse:

      rates@gmx.de


19. 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 "hisaxctrl <DriverID> 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 (resp. beim HiSax-Treiber nur noch die "HEX:" Zeilen),
der Rest wird von isdnlog nicht benoetigt!

Diese Fehlermeldung sollte bitte an "akool@isdn4linux.de" geschickt
werden.


 - Bei jeder Anwahl von draussen an meine ISDN-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 ISDN-Karte, der den
   Anruf ablehnt!

   Die ISDN-Karte spielt die Rolle von zwei Geraeten, wohl weil ein
   Geraet zu einer Zeit immer nur eine Dienstkennung haben kann,
   die ISDN-Karte koennte aber gleichzeitig eine Voice- und eine Data-
   Verbindung fahren (nur (noch?) nicht unter i4l).
   Fehlt also nach dem CONNECT der ISDN-Karte 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 NICHT 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
"akool@isdn4linux.de" zu senden sind:

Im isdnlog-Verzeichnis

make clean
# Nun im "Makefile" "CFLAGS = -O3" in "CFLAGS = -g" aendern
make install

ulimit -c unlimited
bin/isdnlog   "Parameter _ohne_ -D"

Die angegebenen Flags  (-x, -l oder -m) _muessen_ 0x8000 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.


20. Verwendete Dateien
----------------------

Folgende Files werden von diesem System verwendet:

  /sbin/isdnlog              - Das Protokoll-Programm
  /usr/bin/isdnrep           - Das Report-Programm
  /usr/bin/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/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
  /etc/isdn/dontstop         - verhindert temporaer die CHARGEMAX-Funktion
  /usr/lib/isdn/rate-xx.dat  - Tarifdatenbank
  /usr/lib/isdn/zone-xx-yy.gdbm - Nationale Verzonungstabellen
  /usr/lib/isdn/dest-xx.gdbm - Internationale Vorahlen und Orte
  /var/log/isdn.log	     - Das Logbuch
  /var/run/isdnlog.pid	     - Enthaelt die PID des laufenden isdnlog
  /dev/isdnctrl0	     - Gibt das Q.931 Protokoll des HiSax-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

  s. [20.a] Datenbanken

20.a Datenbanken
----------------

In alle den vorhergehenden Beispielen wurde '.gdbm' als Endung der
Zonen- oder Destination-Datenbank genannt. Das haengt aber von der
vorhandenen Konfiguration ab, welche Datenbank-Bibliotheken auf dem
Rechner unterstuetzt sind.
Ueber die Erkennung und das Verwenden verschiedenr DB-Systeme gibt
es in der exim-Dokumentation (www.exim.org, [.tgz..] doc/dbm.discuss.txt)
eine sehr ausfuehrliche Zusammenfassung.

Isdnlog/rep/rate verwendeten bis dato (27.7.2000) den Gnu Database Manager
(gdbm) als Standard, Konfigurationsoptionen fuer ndbm und db sind zwar
vorhanden, ich weiss aber nicht, ob sie funktionieren.

Nun verwendet isdnlog standardmaessig die Constant DataBase von
D. J. Bernstein <http://cr.yp.to/cdb.html>.

In tools/NEWS ist u.a. auch eine Prozedur zum Switchen zwischen gdbm und
cdb beschrieben.


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


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

  BRI	  = Basic rate interface (2 B-Kanaele)

  PRI	  = Primary rate interface (30 B-Kanaele)


23. Danksagung
--------------

Bedanken moechte ich mich vor allem bei
  Fritz Elfert (fritz@isdn4linux.de)
fuer isdn4linux, sowie
  Jan den Ouden (denouden@groovin.xs4all.nl)
fuer den ISDN-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-Kanal-Protokoll

Bei
  Kai Voelcker (kai@fantaghiro.deceiver.org)
sowie
  Martin Stover (mstover@Stover.f.UUnet.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.UUnet.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
  Paul Slootman <paul@wau.mis.ah.nl>
der die Gebuehrenauswertung fuer die Niederlande korrigiert,
sowie unzaehlige Fehler beseitigt hat. Daneben verdankt isdnlog
Paul die schoenen man-Pages sowie die Debian Distribution.

Bei
  Michael Reinelt <reinelt@eunet.at>
sowie
  Leopold Toetsch <lt@toetsch.at>
die die gesamte Anpassung fuer Oesterreich implementiert haben

Bei
  Markus Leist (markus@hal.dirnet.com)
fuer die Anbindung an postgres95

Bei
  Dirk Staneker (dirk.staneker@student.uni-tuebingen.de)
fuer die Idee und das Design des HTML-Formats des isdnrep

Sowie bei
  Ullrich von Bassewitz (uz@musoftware.com)
fuer die "AreaCode" Library (AVON-Verzeichnis)

Weiterer Dank gebuehrt der Rate-Crew
  Jochen Erwied <j.erwied@gmx.de>
  Alexander Werner Skwar <askwar@digitalprojects.com>
  Ingo Richter <ingo.richter@gmx.de>
die die Tariftabellen staendig aktuell halten.

Last but not least bei Sabine Nagel (snagel@hlzm.de) fuer das
Korrekturlesen dieser Dokumentation.

Gar nicht genug danken kann ich Dr.-Ing. Joachim Goeller sowie
Sebastian Goeller, die mir unzaehlige Informationen zum D-Kanal
Protokoll geliefert haben.

Aber ganz besonders bei
  Stefan Luethje (luethje@sl-gw.lake.de)
von dem sicherlich mittlerweile 50% des isdnlog-Codes bestehen.

Mein groesster Dank gilt natuerlich meiner Frau Claudia (clw@akool.de),
die die ganze Geduld aufgebracht hat, waerend ich am isdnlog
rumgeschraubt habe!

Viel Spass mit isdnlog wuenscht

Andreas Kool (akool@isdn4linux.de)