ISDNLOG - Version 3.0 -  				4-Mai-97  22:09


isdnlog ist ein Tool zur Auswertung der Info's vom ISDN-S0-Bus sowie
isdn4linux. isdn4linux ist seit Version 1.3.69 im Linux-Kernel enthalten.

isdnlog-3.0 wurde ausgiebig mit Linux-2.0.29 / isdn4kernel-2.0.29.5
getestet.


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

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

1. Linux-2.0.29 + isdn4kernel-2.0.29.5 verwenden:
     CONFIG_ISDN=m
******* Andreas, die folgende Zeile ist wohl ueberholt!!!
     CONFIG_ISDN_DRV_TELES=m ????????????????????????????????????

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

3. Konfigurationsdatei fuer isdnlog fuellen:

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

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

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

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

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

4. isdn4linux das D-Kanal-Protokoll entlocken:

     telesctrl <myTeles> 1 4

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

5. isdnlog starten:

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

6. Jede Menge rumtelefonieren

7. Sich mittels

     /usr/sbin/isdnrep

   die Rechnung ueber das unter 6. veranstaltete ausgeben lassen.


Wenn das so nicht klappt, oder wer auch die ganzen anderen Features von
isdnlog verwenden moechte, fuer den folgt nun der

Inhalt:
=======

 1.     Was kann/ist/macht isdnlog?
 2.     Was kann isdnlog nicht?
 3.     Installation
 4.     Die Konfigurationsdatei "isdn.conf"
 4.1    Grundeinstellungen
 4.2    Telefonnummern
 4.2.1  1. Eintrag: Telefonnummer
 4.2.2  2. Eintrag: Alias
 4.2.3  3. Eintrag: Tarifzone
 4.2.4  4. Eintrag: IP-Interface
 4.2.5  5. Eintrag: Info-Args
 4.2.6  Konkretes Beispiel fuer die "-S" Option
 5.     Die Konfigurationsdatei "isdnlog.users"
 5.1    Aufbau
 6.     Das AVON-Verzeichnis
 7.     Betriebsmodi
 8.     Start von isdnlog
 9.     Die Protokoll-Datei "/var/log/isdn.log"
10.     Das Report-Modul "isdnrep"
11.     Das Konfigurations-Tool isdnconf
12.     Der X-Client xisdn
13.	ChargeInt
14.	Gebuehren-GAU Begrenzer
14.1    Watchdog
14.2    CHARGEMAX
14.3    CONNECTMAX
14.4    BYTEMAX
15.     Dual-Mode
16.     SQL-Anbindung
17.    	Probleme?
18.     Verwendete Dateien
19.     Verwendete Environment-Variablen
20.     Verwendete Abkuerzungen
21.     Danksagung


Vorwort
-------

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

Fuer die isdn4linux-Version ("ISDN subsystem Rev: 1.5/1.5/1.5/1.5")
respektive Linux-1.3.93 _muss_ isdnlog mit "-DSELECT_FIX"
erstellt werden. Dadurch wird ein kleiner Bug in dieser Version umgangen.
Dadurch entfaellt leider auch die Durchsatz-Ermittlung!


Es wurden folgende Dinge geaendert, die vor dem ersten Start
dieser neuen Version unbedingt angepasst werden muessen!

Der X11-Version (isdnlog-X11-2.43.tar.gz) liegen einige Sound-Dateien
als Samples bei.
Diese Datei unterliegen _nicht_ dem GPL. Diese sind nur als Beigaben
der Autoren zu Betrachten und stehen in keinem Zusammenhang mit den
Sourcen.

Aenderungen seit Version 2.50:

    - Konfigurationsdateien heissen jetzt isdn.conf, callerid.conf und
      ~/.isdn statt isdnlog.conf
    - Neue Syntax der Konfigurationsdateien
    - Watchdog-Funktion (isdnlog ueberwacht isdn4linux)
    - HTML-Ausgabe des isdnrep

Aenderungen seit Version 2.41:

    - Das neue Feature "Rueckruf bei Besetzt" der Telekom wird erkannt,
      und ignoriert

Aenderungen seit Version 2.30:

    - Die "isdnlog.conf" hat fuer die Flags eine komlett neue
      Syntax erhalten.

    - Die Optionen -c und -i sind entfallen. Diese wurden durch die
      ueberarbeitete Option -S ersetzt.

    - Die -C x Option wurde geaendert. Es muss jetzt dort der gesamte
      Pfad angegeben werden:
        Vorher "-C p7 -> /dev/ttyp7",
        jetzt  "-C /dev/ttyp7"

Aenderungen seit Version 2.01:

    - Die "isdnlog.conf" gehoert nun in das Verzeichnis
      "/etc/isdn" ... anstelle von "/etc"

    - Die "isdnlog.conf" hat neue Spalten erhalten, die _unbedingt_
      in bestehende Dateien einzutragen sind

    - Alle Telefonnummern in der "isdnlog.conf" muessen nun -
      ausser den eigenen MSN's - mit der korrekten Anzahl vorlaufender
      Nullen eingetragen werden

    - Diverse Command-Line-Argumente von isdnlog haben erweiterte
      oder geaenderte Funktionen erhalten.


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

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

     i4l-isdnlog@franken.de

Bitte auch nicht mehr die alte Adresse isdnlog@Kool.f.EUnet.de verwenden.

So bekommen alle Entwickler die Anfragen direkt mit, und muessen nicht
von mir extra weitergeleitet werden. Dadurch wird die Anfrage mit
Sicherheit durch den jeweiligen Entwickler schneller beantwortet.

Alternativ koennen die Anfragen natuerlich auch an die Mailing-Liste
fuer isdn4linux (isdn4kernel) geleitet werden.

Um dort "Mitglied" zu werden, sollte eine Mail an

Majordomo@hub-wue.franken.de

gesendet werden. Im Body (_nicht_ im Subject) sollte

subscribe "emailadresse"

stehen.


1. Was kann/ist/macht isdnlog?
------------------------------

isdnlog ist eine Erweiterung zu isdn4linux, das staendig an "/dev/isdnctrl0"
sowie "/dev/isdninfo" lauscht, und saemtliche Vorgaenge auf dem eigenen
ISDN-Anschluss anzeigt.

Dazu liest es aus "/dev/isdnctrl0" (resp. "/dev/isdnctrl2", falls eine
2. Teles-Karte im Rechner steckt) das gesamte Q.931 Protokoll, sowie aus
"/dev/isdninfo" alle internen Meldungen von isdn4linux.

isdnlog sammelt all diese Informationen, und gestattet damit folgendes:

 - der gesamte Verkehr kann auf einer Linux-Console, oder einem xterm
   angezeigt werden. Dies sieht etwa so aus:

   Beispiel #1 : Ein Raus-Ruf mit der Teles-Karte:
    13 21:16:31 * tei 104 calling EUnet with Phone  Digital
    13 21:16:33 tei 104 calling EUnet with ISDN  Time:Wed Mar 13 21:17:00 1996
    13 21:16:33 tei 104 calling EUnet with ISDN  CONNECT
    13 21:16:33 tei 104 calling EUnet with ISDN  0,12 DM (0 s)
    13 21:16:40 tei 104 calling EUnet with ISDN        5,63 kB /   823,43 bps
    13 21:16:51 tei 104 calling EUnet with ISDN  HANGUP (0,12 DM = 18 s)

   Der gesamte Ablauf der Verbindung wird also mit allen verfuegbaren
   Details (wann passierte das, wer hat wen angerufen, was hat's gekostet,
   wieviel Byte wurden uebertragen, wie lange hat's gedauert ...) angezeigt.

   Beispiel #2 : Ein Fax kam rein (da der "Gegner" noch keinen
   	       	 ISDN-Anschluss hat, d.h. aus der Analogen Welt kommt,
   	       	 fehlt hier dessen Telefonnummer)

    Mar 13 21:29:37 * Call from ? on FAX  Analog
    Mar 13 21:29:42 Call to tei 94 from ? on FAX  CONNECT
    Mar 13 21:30:47 Call to tei 94 from ? on FAX  HANGUP (65 s)

   Gesteuert ueber eine Config-Datei zeigt isdnlog anstelle der Telefonnummern
   frei waehlbare Alias-Bezeichnungen fuer die Telefonnummern an.


 - isdnlog decodiert (im Gegensatz zum aktuellen Teles-Treiber) die
   von der VSt uebermittelten Gebuehreninformationen, und zeigt diese
   sowohl am Ende einer Verbinung (== Gesamtkosten fuer diese Verbindung)
   als auch waehrend der Verbindung staendig an.


 - mit einem (beigefuegten) Patch fuer isdn4linux kann isdnlog pro aktivem
   B-Kanal staendig die aktuelle Durchsatz-Rate (in Byte/s), sowie die
   bislang komplett durchgerauschten Byte anzeigen.
   Zur Zeit werden aber nur die ankommenden Bytes angezeigt.


 - Alle Verbindungen (sowohl die zustande gekommenen, als auch die nicht
   zustande gekommenen (Besetzt, Gegner nimmt nicht ab, Fehler im ISDN-Netz)
   schreibt isdnlog komprimiert in ein Logbuch ("/var/log/isdn.log").
   Dieses Logbuch kann jederzeit mit dem Programm "isdnrep" ausgewertet
   resp. eine Verbindungsstatistik ausgedruckt werden.

   Hat man selbst keine Gebuehreninfo fuer seinen Anschluss beantragt
   (-> keine Gebuehreninfo A, kein Komfort-Anschluss), berechnet isdnrep
   die angefallenen Gebuehren aufgrund Uhrzeit/Datum sowie Ortsnetz/Zone
   des Gegners selbst, und gibt also auch in diesem Fall die aufgelaufenen
   Gebuehren aus.


 - Pro Gegner kann ein externes Programm definiert werden, das isdnlog
   startet, sobald dieser Gegner anruft, oder dieser angerufen wird.
   Damit kann zum einen pro Verbindung ein Audio-Signal ueber die Sound-Karte
   erzeugt werden (-> Telefonklingeln abhaengig vom Gegner), oder aber
   eine Waschmaschine angesteuert werden. Der Phantasie sind hier keine
   Grenzen gesetzt.


 - isdnlog kann den gesamten Output von "/dev/isdnctrl0" sowie "/dev/isdninfo"
   (ergaenzt um Datum/Uhrzeit) fuer eine spaetere Analyse mitprotokollieren
   (in "/tmp/isdnctrl0").


 - isdnlog erzeugt auf Wunsch syslog-Eintraege mit selektierbaren
   Informationen


 - isdnlog erkennt selbststaendig 1TR6 oder E-DSS1 Frames, und decodiert
   entsprechend korrekt.

 - isdnlog steuert einen X11-Client an, der neben einer Anzeige aller
   Verbindungen auch die On-Line Definition von bislang unbekannten
   Gegnern u.ae. ermoeglicht.

 - Es besteht seit neuestem die Moeglichkeit, alle Informationen ueber
   den S0-Bus auf der X11-Oberflache mit dem xisdn darstellen zu lassen.
   Allerdings befindet sich der xisdn noch im Entwicklungstand, so dass
   sich mit Sicherheit noch einige Aenderungen an der Oberflaeche und an
   den Funktionalitaeten abzeichnen lassen.


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

Z.Zt. arbeitet isdnlog _nur_ mir dem Teles-Treiber (und damit mit einer
Teles-ISDN-Karte od. compatiblen Karten) zusammen, die ICN-Karte wird
leider noch nicht unterstuetzt.

Weiterhin kann isdnlog bei allen rausgehenden Verbindungen, die nicht
mit der Teles-Karte entstanden sind (ISDN-Telefon, Modem/Fax etc. am
a/b Adapter oder einer Telefonanlage) die entsprechenden Telefonnummern
leider nicht anzeigen. Dazu Gernot Zander:

: Rausgehende Gespraeche von fremden Geraeten (Teflon, Modem) koennen
: nicht richtig protokolliert werden, weil die Nummer nur ans's Amt
: geschickt, aber nicht _zurueckgeschickt_ wird. Bei eigenen Anrufen weiss der
: Treiber die Nummer zwangslaeufig:-), bei ankommenden wird sie _vom_ Amt
: mitgeteilt.
: Die Karte (und damit teles0.4d) kann nur das mitschreiben, was _vom_
: Amt kommt oder was sie selber _zum_ Amt schickt. Nicht aber, was Fremd-
: geraete _zum_ Amt senden.

: Die Karte bekommt immer nur eine Richtung mit, naemlich Amt->User.
: Sie kann von den User->Amt nur die _eigenen_ Meldungen
: ausgeben (also die der Teles selbst).
: Wenn man mit seiner TK-Anlage rauswaehlt, geht die Zielnummer
: aber User->Amt, und genau das wird von einer Teles
: nicht mitgeschnitten (kann sie nicht!), es passiert auf dem falschen Bus!
: Der S.0 ist ja deshalb 4adrig, weil 2 Adern von den Endgeraeten _zum_
: und zwei _vom_ NT gehen. Und jedes normale Endgeraet sendet auf
: dem einen Paar und empfaengt auf dem anderen.
Dazu siehe jedoch Kapitel 15. Dual-Mode !


3. Installation
---------------

Da isdnlog seit der Version 3.0 nur noch im isdn4k-utils freigegeben wird,
findet die Konfiguration ueber das 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 ins neue Verzeichnis uebernommen.
Allerdings traegt sie dann den Namen isdnlog.conf.old.

Es ist dabei zu beachten, dass bei allen Telefonnummern, die in der
isdnlog.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.

Das Vornummernverzeichnis AVON wird nicht uebernommen. Da sich die Syntax 
etwas geaendert hat. Muss die alte Datei von Hand an die neue angefuegt werden.
Aber normalerweise wird bei der Installation von isdnlog empfohlen die
areacode-Library zu verwenden.

Hier sind nochmal alle Eintraege aufgefuehrt, die isdnlog im Makefile enthaelt,
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)

  I4LCONFDIR  (/etc/isdn)
    Wo liegen die "isdn.conf" sowie die "avon" (falls verwendet!)

    Mit der Environment-Variablen "ISDN_CONF_PATH" kann auch zur Laufzeit das
    Verzeichnis festgelegt werden.
    Beispiel "export ISDN_CONF_PATH=/etc/isdn"

  USERCONFFILE (~/.isdn)
    Wie soll die Konfigurations-Datei der einzelnen Benutzer heissen

  CONFFILE (isdn.conf)
    Wie soll die Konfigurations-Datei heissen

  OLDCONFFILE (isdnlog.conf)
    Wie hiess die _alte_ Konfigurations-Datei

  LOGFILE  (/var/log/isdn.log)
    Wie soll das Logbuch heissen
    (Diese Einstellung laesst sich spaeter noch zur Laufzeit in der isdn.conf
    aendern)

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

  RUNDIR  (/var/run/)
  	Wol 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
  /etc/isdn/avon (wenn LIBAREA nicht definiert ist!)
  /usr/lib/areacodes (wenn LIBAREA definiert ist!)


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

         Bei der Installation von isdnlog werden automatisch die neuen
         Konfigurationsdatei 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. Dieser kann mittels

  xmkmf
  make

erstellt werden.


4. Die Konfigurationsdatei "isdn.conf"
-----------------------------------------

Die Konfigurationsdatei wird im Verzeichnis "/etc/isdn" erwartet (wenn die
Variable I4LCONFDIR im Makefile so gesetzt ist), und enthaelt alle fuer isdnlog
relevanten Steuerungsparameter.

Diese Datei muss dem User root gehoeren (auch die Gruppe). Auch nur dieser
darf Schreibrechte an dieser Datei haben. Diese Datei wird auch vom isdnlog
gelesen. Andernfalls beendet sich der isdnlog sofort wieder. Dieses ist ein
Schutz, um Trojanische Pferde zu verhindern und kann auch nicht ausgeschaltet
werden.

Wenn man dem compilierten den Pfad aendern will, muss man die
Umgebungsvariable "ISDN_CONF_PATH" setzen.

Die Syntax der Konfigurationsdateien ist ausfuehrlich in der Datei

../lib/README.Syntax.conffile

beschrieben.

4.1 Grundeinstellungen
----------------------

Es gibt hier drei Sektionen, die vom isdnlog ausgewertet werden:
[GLOBAL]
[VARIABLES]
[ISDNLOG]
Diese Sektionen koennen in einer beliebigen Reihenfolge in der Datei
vorkommen.

Die Sektion GLOBAL beinhaltet Eintraege, die fuer alle ISDN-Programme
von Bedeutung sind. Hier sind folgende Eintrage zu finden:

AREACODE:
  Beinhaltet die eigene Ortsvorwahl (mit oder ohne vorlaufender "0". Der
	Prefix "0" wird in der Datei config.h durch das Macro S_AREA_PREFIX
	oder durch den Eintrag AREAPREFIX representiert).  Dieser Eintrag ist
	zwingend.
	Wird isdnlog im 1TR6 eingesetzt, muss hier die _gesamte_ Telefonnummer
	exclusive der EAZ eingetragen werden. Diese Variable ist absolute Pflicht!
	Beispiel fuer Hamburg (Euro-ISDN !!!):
	AREACODE = 040 # oder
	AREACODE = 40

	Wenn S_AREA_PREFIX den String "0815" enthaelt, dann ist auch folgende
	Zeile erlaubt:
	AREACODE = 081540

COUNTRYCODE:
	Hier wird die eigene Laenderkennung gesetzt (mit oder ohne vorlaufendem "+".
	Der Prefix "+" wird in der Datei config.h durch das Macro S_COUNTRY_PREFIX
	oder durch den Eintrag AREAPREFIX representiert). Dieser Eintrag ist
	ebenfalls zwingend.
	Beispiel fuer Deutschland:
	COUNTRYCODE = +49 # oder
	COUNTRYCODE = 49

	Wenn S_COUNTRY_PREFIX den String "0815" enthaelt, dann ist auch folgende
	Zeile erlaubt:
	COUNTRYCODE = 081549

AREAPREFIX:
  Es enthaelt den Prefix zur Ortsvorwahl. Beim Kompilieren ist dieser
  Wert defaultmaessig auf "0" gesetzt. Dieser Eintrag ist optional.

COUNTRYPREFIX:
  Es enthaelt den Prefix zur Laenderkennung. Beim Kompilieren ist dieser
  Wert defaultmaessig auf "+" gesetzt. Dieser Eintrag ist optional.

CODELIB:
	Es kann nach dem Kompilieren eingestellt werden, welche Library verwendet
	werden soll. Fuer AVON wird dort "AVON" eingetragen und fuer areacode
	wird dort "AREACODE" eingetragen. Andere Werte sind dort zur Zeit nicht 
	erlaubt. Es sollte dann aber zusaetzlich AREALIB bzw. AVONLIB eingetragen
	werden.
	Dieser Eintrag ist optional.
	Beispiel:
	CODELIB=avon

AREALIB:
  Enthaelt den vollen Pfad zu der Datei "areacodes". Diese Angabe ist
	optional und nur notwendig, wenn sich der Pfad nach der Compilation
	geaendert hat.
	Beispiel:
	AREALIB=/usr/share/lib/areacodes

AVONLIB:
  Enthaelt den vollen Pfad zu der Datei "avon". Diese Angabe ist
	optional und nur notwendig, wenn sich der Pfad nach der Compilation
	geaendert hat.
	Beispiel:
	AREALIB=/usr/share/lib/avon

	Da aber defaultmaessig die Arealib verwendet wird, ist die Datei
	avon obsolet.


Die ISDN-Tools erlauben es, Umbebungsvariablen zu setzen und zu verwenden.
Es gibt Variablen, die sollten in der isdn.conf (oder vorher) gesetzt
sein. Diese werden in der Sektion [VARIABLES] zu setzen.
Beispiel:

[VARIABLES]
MYPATH = /home/fred

Es duerfen als Variablennamen nur noch gross geschriebene Woerter verwendet
werden. Ein Eintrag der Form

myPath = /home/fred

oder

mypath = /home/fred

werden z.B. unter der /bin/sh mit "MYPATH=/home/fred" gesetzt.
Hier gibt auch keine andere Möglichkeit das zu aendern. Wenn Kleinbuschstaben
verwendet werden sollen, muessen diese vor dem Start von isdnlog mit
export (sh, bash) oder setenv (csh) unter der Shell gesetzt werden.

ACHTUNG: "MYPATH  =  /home/fred" wird als Variable zu "MYPATH=/home/fred".
         Es fallen also alle Blanks und Tabulatoren vor und nach dem "="
				 heraus.


Die dritte Sektion beschreibt spezifische Angaben fuer den isdnlog. Diese
Sektion wird durch [ISDNLOG] eingeleitet.

LOGFILE   = /var/log/isdn.log

Dieses ist das Logfile in dem isdnlog alle Gespraeche ablegt, und isdnrep
sie anschliessend anzeigt. Wenn diese sich in einem anderen Platz befindet,
als zur Compilationszeitpunkt (in der Regel /var/log/isdn.log), dann kann
dieses hier passieren.
Die Option  "-f" vom isdnrep ueberschreibt diesen Wert dann allerdings wieder.

Zusatzinformation:
Diese Datei wird seit der Version 3.0 vom isdnlog nicht mehr staendig offen
gehalten, sondern nur noch nach Beendigung eines Gespraeches wird die Datei
geoeffnet, der Eintrag ergaenzt und anschliessend wieder geschlossen.
Dadurch ist es jetzt moeglich diese Datei zu verschieben, wenn der isdnlog
laeuft und gerade kein Gespraech beendet wird.
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 pflicht!

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.

**********Andreas, stimmt das noch??????????????????????????
  ACHTUNG: In der vorliegenden Version werden diese beiden Parameter
  noch nicht an isdnrep uebergeben, und muessen daher bei Einsatz des
  "isdnrep" trotz Uebermittlung von der VSt eingetragen werden!
  Defaultmaessig steht im isdnrep "0.12,DM". Daher entfaellt diese
  Angabe fuer Deutschland.

Wenn man zum Beispiel sich 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 Koonvertierungsprogramm
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 Koonvertierungsprogramm 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 (0, oder 1)
 %k   Nummer der ISDN-Karte, von der die Meldung kam (0 = 1. Karte)

 %/
 %
 %(
 %)   Falls die Nummer des Gegners bekannt, entsprechendes Zeichen,
      sonst Leerstring


*1 Bei %N, %n sowie %c muss angegeben werden, wie die Telefonnummer ausgegeben
   werden soll:

    %N0  - Telefonnummer exakt so, wie von der VSt gemeldet
    	   (z.b. "8989810530")
    %N1  - Telefonnummer, von isdnlog um Vorwahl, vorlaufende "0" etc.
    	   ergaenzt (z.b. "+498989810530")
    %N2  - Von isdnlog optimal "verschoenerte" Nummer, also Alias
    	   aus "isdn.conf" oder mit Ortsnetz etc.
    	   (z.b. "+49 89/89810530, Muenchen")
    %N3  - Vorwahl (z.b. "89")
    %N4  - Rufnummer (z.b. "89810530")
    %N5  - Alias
    %N6  - Ortsnetz (z.b. "Muenchen")
    %N7  - Areacode (z.b. "+49")

*2 Dieser Platzhalter wird von isdnlog folgendermassen aufgeloest:

     Bezieht sich die Zeile auf den ersten aktiven B-Kanal, wird daraus
     ein Leerstring -> ""
     Bezieht sich die Zeile auf den zweiten aktiven B-Kanal, werden daraus
     zwei Blank's -> "  "
     Bezieht sich die Zeile auf eine entstehende Verbindung, wird daraus
     ein Stern -> "* "


Folgende Optionen werden nur fuer den Schalter -S optional benoetigt:

START={
...
}

Es kann ein zu startender Befehl angegeben werden. Wenn eine Verbindung
aufgebaut wird, besteht oder beendet wird und unter den entsprechenden
Nummern kein Befehl steht, dann wird der passende Befehl unter "START"
in der Sektion [ISDNLOG] ausgefuehrt. Das heisst isdnlog schaut zuerst
unter der entsprechenden Telefonnumer nach, ob dort ein Befehl ist.

Wenn "START" verwendet wird bei Verbindungen, die raus gehen und nicht von
der ISDN-Karte kommen (also Nummern unbekannt), dann geht "OR" (Outgoing
Ring) nicht (siehe Info von Gernot Zander), ist also kein Bug vom isdnlog.

Wenn ja, wird dieser ausgefuehrt und der Eintrag "START" ignoriert.

Wenn die Nummer in der Datei "isdn.conf" keinen Eintrag hat, oder unter
der Nummer in der Sektion [Flag] nichts eingetragen ist, dann schaut isdnlog
unter "START" nach.

Diese Zeilen koennen verwendet werden, wenn man fuer alle Verbindungen
die gleichen Programme starten will, oder fuer alle unbekannten Nummern.
Die Syntax ist unter "Info-Args" der Dateien "callerid.conf" und"~/.isdn"
zu finden.


4.2 Die Dateien "callerid.conf" und "~/.isdn"
---------------------------------------------

Hier koennen eine beliebige Anzahl von Telefonnummer nebst einigen
zusaetzlichen Parametern angegeben werden.
Die Angabe _aller_ eigenen Telefonnummern ist zwingend, alle weiteren
Partner-Telefonnummern koennen eingeben werden.

Die Datei "callerid.conf" liegt im Verzeichnis /etc/isdn und muss dem User
root gehoeren (auch die Gruppe). Auch nur dieser darf Schreibrechte an dieser
Datei haben. Diese Datei wird auch vom isdnlog gelesen. Es ist die globale
Datei fuer die Telefonnummern. Hier muessen auch die [MSN]-Eintraege
untergebracht werden.

Die Datei "~/.isdn" kann jeder Benutzer haben, der den isdnrep und den isdnconf
verwendet. Hier sind die Rechte der Datei voellig egal. Diese Datei ist
dafuer bestimmt, dass ein Benutzer soetwas wie ein eigenes Telefonverzeichnis
anlegen kann, wo auch die Nummer nur beim isdnrep angezeigt werden.
Es koennen hier aber die [MSN]-Eintraege ueberschrieben werden fuer die
beiden Programme isdnconf und isdnrep.

Es koennen hier Variablen verwendet werden, die entweder in der isdn.conf
gesetzt wurden oder vorher (z.b. auf Shellebene).
In den Dateien "callerid.conf" und "~/.isdn" koennen ebenfalls Variablen
gesetzt werden. Das bedeutet also, dass es dort auch eine Sektion [VARIABLES]
geben, 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 ist geht nicht!!!!
$alias=fred     # wobei alias=ALIAS ist geht nicht!!!!

[NUMBER]
NUMBER=$MSN1    # MSN1=1234 -> "1234"
ALIAS=${PHONE}1 # PHONE=Telefon -> "Telefon1"

...
 PROGRAM= auplay ${MY_PATH}ring.au  # MY_PATH=/home/fred/ -> "/home/fred/ring.au"
 PROGRAM= auplay $MY_PATHring.au    # geht nicht!!
 PROGRAM= auplay ${MY_PATH}ring.au ${SOUND_PATH}/$RING_FILE
 # SOUND_PATH=/home/sound RING_FILE=ring.au -> "/home/sound/ring.au"
...

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 werden, 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 die Eintrag NUMBER (und _nicht_ SI) in beiden Dateien vorkommen und
identisch sind, dann wird der Eintrag aus der der Datei "callerid.conf"
ueberschrieben durch den Eintrag "~/.isdn".
Unter Identisch ist du verstehen, wenn beide Strings absolut identisch sind:
NUMBER=+49 7531/21103
NUMBER=753121103
sind nicht identisch!!!!

Beispiele:

Eintrag in "callerid.conf":
[NUMBER]
NUMBER=753121103
ALIAS=MSN\#1

Eintrag in "~/.isdn":
[NUMBER]
NUMBER=753121103
ALIAS=Fred's Number

Im obigen Fall wird der zweite Eintrag genommen.

Eintrag in "callerid.conf":
[NUMBER]
NUMBER=753121103
SI=7
ALIAS=Internet

Eintrag in "~/.isdn":
[NUMBER]
NUMBER=753121103
SI=6
ALIAS=Fred's Number

Im obigen Fall werden beide Eintrage uebernommen. Wenn nun eine Datenverbindung
auf der 753121103 stattfindet, dann wird "Internet" angezeigt, wenn jemand z.B.
eine Video-Konfernzschaltung oder einen normalen Telefonanruf taetigt, dann
wird "Fred's Number" angezeigt. Dieses gilt natuerlich nur beim isdnrep
und isdnconf.

Eintrag in "callerid.conf":
[NUMBER]
NUMBER=753121103
SI=7
ALIAS=MSN\#1

Eintrag in "~/.isdn":
[NUMBER]
NUMBER=753121103
ALIAS=Fred's Number

Im obigen Fall gilt das gleiche wie beim vorherigen Beispiel.

Jede Sektion (Nummer) kann eine Dienstekennung enthalten. Dieses wird durch
einen Eintrag in der Form

SI=4 # Video

realisiert.

isdnlog unterscheidet rein- und rausgehende Verbindungen nach der
MSN (Telefonnummer), sowie dem Service Indicator ("Dienstkennung").

Z.Zt. kennt isdnlog folgende Dienstkennungen:

  1 = Speech (Telefon, Fax G3, Modem etc.)
  2 = Restricted digital information
  3 = Unrestricted digital information
      with tones/announcements
  4 = Video
  7 = Unrestricted digital information (HDLC, X.75 etc.)

Bei jedem Verbindungsaufbau sucht isdnlog aus der "isdn.conf" den
Eintrag, bei dem sowohl die MSN, als auch der SI uebereinstimmen.

Wird solch ein Eintrag nicht gefunden, nimmt isdnlog den _ersten_ Eintrag
mit der passenden MSN.

Ein eindeutiger Key fuer eine Nummer ist nun die Telefonnummer selber und die
Dienstkennung. Es kann also eine Nummer mehrfach erscheinen mit jeweils
einer anderen Dienstkennung. Wird in der Sektion fuer eine Nummer kein
Eintrag fuer die Dienstkennung angegeben (keine Zeile SI=x), wird die Kennung
"0" angenommen. Das bedeutet alle Dienste werden ueber diese Sektion erkannt.
Es gibt also fuer eine Nummer nur einen einzigen Eintrag.

Zum Verstaendnis:

Nehmen wir mal eine eigne MSN (das funktioniert auch fuer fremde Nummern!).
Dort kann man mit einer MSN eine ISDN-Verbindung mit LINUX unterhalten und
parallel diese MSN zum Telefonieren verwenden. Obwohl die gleiche Nummer
dort verwendet wird, reagiert z.B. das Telefon nicht (es klingelt nicht!),
wenn ein Teilnehmer sich mit einem PC an dieser Nummer anwaehlt.
Beispiel:

Auf der MSN 4711 lauscht sowohl die Teles-Karte auf X.75 Anrufe, als auch
ein Analoges Telefon ueber eine Telefonanlage.

Hier wuerden folgende Eintraege in der "callerid.conf" passen:

[MSN]
NUMBER    = 4711
SI        = 1                  # Das normale Telefon
ALIAS     = Phone
START     = {
	[FLAG]
	FLAGS   = I|O|R|A            # alternativ geht auch FLAGS=IORA
	PROGRAM = auplay ring.au
}

[MSN]
NUMBER    = 4711
SI        = 7                  # Der Linux-Rechner
ALIAS     = X.75
START     = {
	[FLAG]
	FLAGS   = I|O|R|A            # alternativ geht auch FLAGS=IORA
	PROGRAM = auplay computer.au
}

Die genaue Syntax wird weiter unten beschrieben.

Ruft nun jemand die 4711 mit einem Telefon an, wird das als Anruf auf
"Phone" angezeigt, und mit "auplay" das Soundfile "ring.au" abgespielt.

Waehlt jemand hingehen die 4711 mit einer Teles-Karte an, wird das als
"X.75" angezeigt, und mit "auplay" das Soundfile "computer.au" abgespielt.

Startet hingegen jemand eine Video-Uebertragung auf die 4711, wird auch
dies als "Phone" angezeigt, da in obigem Beispiel die Dienstkennung "4"
nicht gesondert definiert wurde.


Es gibt zwei verschienden Sektionen in diesen Dateien:

[MSN]
[NUMBER]

Die Eintraege in den einzelnen Sektionen sind gleich. Es koennen beliebig viele
von den einzelnen Sektionen (MSN,NUMBER) existieren. Im Gegensatz zu frueheren
Versionen des isdnlog's muss nun nicht mehr die Anzahl der eigenen MSN angegeben
werden (MYMSNS entfaellt).


Alle Eintraege in einer Sektion koennen in einer beliebigen Reihenfolge
folgen. Das gleiche gilt fuer die Sektionen innerhalb einer Datei.

Im folgenden werden nun die einzelnen Eintraege unter den Sektionen MSN
und NUMBER erwaehnt:


4.2.1 1. Eintrag: Telefonnummer [NUMBER] und [MSN]
--------------------------------------------------

Hier muss zwischen 1TR6 und DSS1 unterschieden werden:

im 1TR6 muss unter [MSN] nur die EAZ eingetragen werden. Unter der Sektion
[NUMBER] kommt dort die komplette Nummer. Diese Nummer muss _mindestens_
die Vorwahl enthalten.

Im DSS1 ist dieses ziemlich egal. Man kann die Nummern so eintragen, wie man
sie vom eigenen Telefon waehlen wuerde. Es muss die Voreinstellungen der
Installation beruecksichtigt werden. Die Werte von 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
ueberall die Vorwahl angibt.

Die Syntax ist jetzt ziemlich frei. Es koennen dort angegeben werden,
wie man sie ueblicherweise kennt:

NUMBER = 4711
NUMBER = 0815/4711
NUMBER = 0815/471-0
NUMBER = +49 815/4711
NUMBER = +49 815/471*
NUMBER = +49 815/471?
NUMBER = +49 815/47[!6]1
NUMBER = 4711, 4712, +49 815/4713

Es werden alle NICHT-Zahlen dort herausgefiltert, bis auf die Wildcards '?',
'*' und "[]"

Ein Plus '+' am Anfang wird durch 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", "EUnet" usw.). Diese darf Blanks enthalten!
Wenn hier das Zeichen '#' verwendet werden soll, muss dieses gequotet
werden mit "\#".

ALIAS = MSN #1
ist falsch, dieses fuehrt zu dem Ergebnis:
ALIAS = MSN

Richtig waere:

ALIAS = MSN \#1

Auch ein Eintrag

ALIAS = Helmut Kohl

ist erlaubt. Allerdings unterscheidet sich dieser von

ALIAS = helmut kohl


4.2.3 3. Eintrag: Tarifzone
---------------------------

Ein weiterer Eintrag ist die Tarifzone, in der sich von uns aus gesehen
diese Nummer befindet:

 0 = Verbindung am internen S0-Bus
 1 = City (bis 31.12.1995 "Ortszone/Nahzone", bis 20 km)
 2 = Region 50 (bis 31.12.1995 "Regionalzone", bis 50 km)
 3 = Region 200 (bis 31.12.1995 "Weitzone", dann bis 200 km)
 4 = Fernzone (bis 31.12.1995 "Weitzone", dann alles ueber 200 km)
 5 = Vis-'a-vis 1

Dieser Eintrag wird wie folgt dargestellt:

ZONE = 1

oder

ZONE = 5

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

Dieser Eintrag repraesentiert das IP-Interface, welches auf dieser
Nummer konfiguriert wurde, oder ein "-", falls dieser Nummer kein
IP-Interface zugeordnet wurde.
Diese Information wird fuer die "-hx" huptimeout Option benoetigt.

Beispiel:

INTERFACE=ippp0

4.2.5 5. Eintrag: Info-Args
---------------------------

Hier besteht unter der Sektion [NUMBER] und [MSN] eine Untersektion. Diese
ist allerdings optional. Diese Informationen werden vom isdnlog nur ausgewertet,
wenn die Option -S gesetzt wurde.
Die Untersektion traegt den Namen START.

Es koennen mehrere Programme pro Nummer angegeben werden, zum Beispiel fuer
jedes Event. Hier folgt nun ein Beispiel. Die Erklaerung folgt anschliessend:

[MSN]
NUMBER    = 4711
SI        = 1                  # Das normale Telefon
ALIAS     = Phone
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 Bernutzer root !!)
die Rechte an der Datei besitzt. isdnlog verbietet es seit der Version 3.0,
dass das Programm als normaler Benutzer gestartet wird. Ebenso wird es
unterbunden ein Programm zu starten, wo ein Benutzer Leserechte besitzt
und dieses als root gestartet wird. Dieses koennte sich als trojanisches Pferd
verwenden lassen. Daher muessen Programme, die nicht root gehoeren oder
die jeder (others) beschreiben kann mit dem Eintrag USER belegt werden.
Der Eintrag hat folgende Syntax:

USER=fred

oder

USER=103

Es kann also entweder der Benutzername oder die Benutzer-ID verwendet werden.

Group
-----

Dieser Eintrag verhaelt sich analog zu dem Eintrag USER. Auch hier gilt wieder
die Systemsicherheit. Die Syntax ist wie folgt:

GROUP=freaks

oder

GROUP=201

Es kann also entweder der Gruppenname oder die Gruppen-ID verwendet werden.

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 drei zusaetzliche Variablen, die verwendet werden duerfen:

\$1   : Sind die Flags, die den Programmstart ausgeloest haben.
        z.B. "IR", "OC", "IH"
        Zuerst kommt die Gespraechs-Direktive und dann der Zustand
        der Verbindung. Es kommen immer _genau_ zwei Zeichen.
\$2   : Gibt als String die Telefonnummer (mit Vorwahl) des Anrufenden an.
\$3   : Gibt als String die Telefonnummer (mit Vorwahl) des Angerufenden an.

Es ist zu beachten, dass hier das Zeichen "$" gequotet werden muss,
da dieses sonst zu einem Warning fuehrt!

Wenn bei "\$2" und "\$3" die Telefonnummer nicht bekannt ist, dann wird dort
ein "?" eingesetzt.

Folgende Punkte sind zu beachten:

- 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 Gspraech (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
gstartet. Das Programm "get.news.from.provider" wird alle 30 Minuten gestartet.
Wenn eines Programm mal laenger als 5 bzw. 30 Minuten laeuft,
wird der naechste Start so lange verschoben, bis sich das laufende beendet.
Das wird durch "U" ausgedrueckt. Wenn die Verbindung zu "My_Provider" beendet
wird, dann werden automatisch evtl. noch laufende Programme beendet (gekillt).
Jedes mal wenn eine Einheit von der VSt gemeldet wird, wird ein Sound gespielt.
Wenn ich von "MSN#1" anrufe, dann "msn1_pay.au". Von "MSN#2" und "MSN#3" wird
der Default-Sound "pay.au" gespielt. Alle "normalen" Sounds werden aber nur
von 8 Uhr bis 14 Uhr und von 16 Uhr bis 22 Uhr gespielt.  In der uebrigen
Zeit laeuft fuer alle Ring's, AOCD und Hangup's der Sound "silent.au".
Die Zeit wird hier mit "von" - "bis" angegeben.

Wenn sonstige Verbindungen zustande kommen, wird das Programm
"/usr/bin/who_is_it" gestartet. Dem wird noch als Parameter die Telefonnummern
vom Anrufer und Angerufenen mitgeteilt. Das wird aber nur gestartet, wenn sonst
kein Programm existiert, das fuer diese Verbindung bei einem Connect laufen
soll. Das Programm wird nur einmal gestartet, direkt wenn die Verbindung zu
stande kommt.

Wenn ein Ruf ankommt, dann wird je nach MSN ein eigener Sound gespielt. Der
Sound wird alle 5 Sek. wieder gespielt. Sollte der Sound laenger als 5 Sek.
laufen, so wird er gekillt und der naechste gestartet (K). Der "Ring-Sound"
wird auch nur zu den angegebenen Zeiten gespielt. Ansonsten wird wieder
"silent.au" gespielt.

Wenn man von der ISDN-Karte rauswaehlt und nicht "My_Provider" anwaehlt,
dann wird der Sound "unknown_ring.au" gespielt (Achtung: Wieder Zeit beachten).
Der wird solange in einer Schleife gespielt (L), bis eine Verbindung zu stande
kommt. So wie "/usr/bin/auplay" beendet ist, wird es wieder neu gestartet.
Die Flags "OR" haben allerdings keine Bedeutung fuer andere Geraete am S0-Bus,
da die ISDN-Karte die Ring-Phase von anderen Geraeten am Bus nicht mitbekommt.

Kommentare in den Konfigurationsdateien isdn.conf, callerid.conf und ~/.isdn:
-----------------------------------------------------------------------------

Es koennen koennen Kommentare an beliebiger Stelle beginnend mit de Zeichen
'#' eingefuegt werden (siehe lib/README.Syntax.conffile).
Diese Kommentare haben den Nachteil, dass sie verschwinden, wenn die Datei
z.B. vom isdnconf (oder auch vom isdnlog selber) neu geschrieben werden.
Als Alternative gibt es dort die Moeglichkeit in den Sektionen einfach
Dummy-Eintraege zu setzen. Diese sind Eintraege, die von isdnlog nicht
ausgewertet werden, aber trotzdem eingelesen werden und auch wieder geschrieben
werden.

Beispiel

[isdnlog]
comment1  = Pro Tag duerfen max. 100 DM fuer Datenverbindungen ausgegeben \
            werden.
CHARGEMAX = 100.00
comment2  = Das Logfile liegt unter /var/log/isdn.log
logfile   = /var/log/isdn.log


Die beiden Eintraege "comment1" und "comment2" bleiben erhalten. auch die
Reihenfolge bleibt bestehen. Es ist nur darauf zu achten, dass kein
Eintrag den selben Namen hat. Also zweimal die Zeile "comment" geht nicht.
Dann wird die erste Zeile durch die zweite ersetzt. Es ist auch darauf zu
achten, dass der Name des Eintrages nicht schon von isdnlog verwendet wird.
Also ein Kommentar mit "SI" zu benennen schlaegt fehlt, da dieser Name
schon reserviert ist.



5. Die Konfigurationsdatei "isdnlog.users"
------------------------------------------

Die Datei wird nur benoetigt, wenn isdnlog mit der Option -xX gestartet werden
soll. Andernfalls braucht diese Datei auch nicht angelegt werden.

Wird isdnlog mit -xX gestartet, ohne dass diese Datei existiert, wird eine
Defaultdatei angelegt, die _unbedingt_ editiert werden sollte. Es erscheint
dann auch eine entsprechende Warnung.

Die Konfigurationsdatei wird im Verzeichnis "/etc/isdn" erwartet, und
enthaelt fuer isdnlog die Informationen ueber Zugriffsberechtigungen von
Benutzern via Client.

Leere Zeilen werden ignoriert. Wenn in einer Zeile ein "#" enthalten ist,
wird der Rest der Zeile als Kommentar gewertet.

Steht am Ende einer Nicht-Kommentarzeile ein "\", so wird die Zeile mit der
naechste Zeile zu einer "verschmolzen". ACHTUNG: Das Zeichen "\" muss als
letztes Zeichen stehen, und darf nicht von Tab's oder Leerzeichen gefolgt
werden.

Zur Zeit sind folgende Zeichen als Sonderzeichen anzusehen: "$@#,;\".
Diese Sonderzeichen muessen gequotet werden, wenn diese in der
Datei "isdnlog.users" verwendet werden sollen.


5.1 Aufbau
----------

Der Aufbau ist aehnlich, wie die Benutzerdatei von xcept, aber um einige
Eigenschaften erweitert.

Jedem Benutzer werden Rechte mitgegeben. Diese Rechte stehen direkt hinter
dem Namen, getrennt durch Leerzeichen oder Tab's.

Die Rechte beschreiben, welche Informationen der Benutzer vom isdnlog
beziehen kann, oder welche Einstellungen er am isdn4linux vornehmen kann:

  ALL
  	Es werden komplett alle (folgenden) Rechte vergeben.
  	Sinnvoll fuer "root"

  MSN=msn[,msn...]
  	Es werden nur Informationen zu den angegeben MSN's angezeigt.
  	Das bezieht sich auf ankommende sowie abgehende Gespraeche,
  	sowie auf die Protokoll-Daten.

   	Es koennen beliebig viele MSN's angegeben werden. Auch die Verwendung
   	von Wildcards, wie bei den Nummern von der Datei "isdn.conf", ist
   	erlaubt. Mit "MSN=*" werden alle MSN's abgedeckt.

   	Das Flag MSN funktionert nur bei reinkommenden (von ISDN-Anschluessen)
   	Gespraechen und den ISDN-Karten (siehe Bemerkung von Gernot Zander weiter
   	oben). Alle unbekannten Gegenstellen und rausgehenden Rufe werden nur mit
   	"ALL" oder "MSN=*" angezeigt.

  PROTOCOL
  	Es wird ein separates Fenster vom Client zur Verfuegung gestellt,
  	wo man alle Informationen vom isdnlog angezeigt bekommt, die mit -xX
  	eingestellt worden sind.

In Planung/Vorbereitung:
  I4LCONF
  	Es besteht die Moeglichkeit, Eigenschaften von isdn4linux von
  	dem Client aus einzustellen. Wenn einem Benutzer dies erlaubt werden
  	soll (Sinnvoll nur fuer "root"!), dann muss dem Benutzernamen
  	dieses Flag folgen.

In Planung/Vorbereitung:
  ADDRESSBOOK
    Dem Benutzer mit diesem Recht wird die Moeglichkeit gegeben, sich
    Daten ueber den Anrufer/Angerufenen zu speichern und ein Notizbuch zu
    fuehren (weitere Info's unter xisdn).

Wenn mehrere Rechte an einem Benutzer vergeben werden sollen, koennen diese
mit ";" getrennt hintereinander angegeben werden.

Am Anfang der Datei koennen Eintrage stehen, wo jeweils ein Benutzer mit einem
Hostnamen und seinen Benutzerrechten angegeben wird.

  fred@vom.jupiter MSN=4711?
  root@host1.at.home ALL

Im obigen Beispiel darf sich der Benutzer "fred" nur von dem Host "vom.jupiter"
mit dem isdnlog verbinden. Analog dazu der Benutzer "root" nur von dem
Host "host1.at.home".

In dem zweiten Abschnitt der Datei koennen Gruppierungen von Benutzern und
Hostnamen  zusammengestellt werden. Ein Abschnitt beginnt mit der Zeile

  [Mein_Abschnitt]

und endet mit dem Beginn des naechsten Abschnittes oder beim Dateiende.
Beim Abschnittnamen wird nicht zwischen Gross- und Kleinschreibung
unterschieden.
In einem Abschnitt besteht eine Zeile entweder aus einem Benutzernamen oder
einem Hostnamen:

  heinz MSN=*;PROTCOL
  @host1
  @host2
  otto MSN=47111,47112
  @host3

Einem Benutzernamen muessen immer die Rechte folgen, die dem Benutzer zugeordnet
werden sollen. Dem Hostnamen duerfen keine Rechte zugeordnet werden.

Im obigen Beispiel duerfen die Benutzer "heinz" und "otto" von den Hosts
"host1", "host2" oder "host3" den Client starten.

Wenn ueberhaupt keine Rechte vergeben werden sollen, d.h. jeder beliebige
Benutzer darf von jedem Host zum isdnlog eine Verbindung aufbauen mit allen
Rechten, dann reicht es in der Datei "isdnlog.users" den folgenden Eintrag
zu setzen:

  [world]

Beispiele fuer "isdnlog.users" sind im isdnlog-Paket unter dem Verzeichnis
"./samples" zu finden.

Es ist darauf zu achten, dass die angegeben Hostnamen in der Datei /etc/hosts
zu finden sind. Andernfalls wird der Nameserver nach unbekannten Hostnamen
befragt, was zu einem unbeabsichtigten Verbindungsaufbau via ppp oder
ISDN fuehren kann.

Die Datei "isdnlog.users" wird _vor_ jedem Verbindungsaufbau zu einem neuen
Client ueberprueft, ob sie noch aktuell ist, ansonsten wird sie neu eingelesen.
Dadurch hat man die Moeglichkeit, die Datei zu editieren, ohne anschliessend
den isdnlog neu zu starten.


6. Das AVON-Verzeichnis
-----------------------

Ein "make install" installiert im isdnlog-Verzeichnis "/etc/isdn"
eine ASCII-Datei "avon". Diese enthaelt ein Verzeichnis aller
Vorwahlnummern fuer Deutschland in der Form <Vorwahl> : <Ortsnetzbezeichnung>

Beim ersten Start liest isdnlog diese ASCII-Datei ein, und erstellt
daraus eine ISAM-Datei ("avon.dir" / "avon.pag").

Sobald die VSt isdnlog eine Telefonnummer meldet, die noch unbekannt ist
(d.h. nicht in der "isdn.conf" angegeben ist), sucht isdnlog diese
Telefonnummer im AVON-Verzeichnis, und zeigt die Telefonnummer in der
Form: "<Vorwahl> / Rufnummer, Ortsnetz" an.

Falls das AVON-Verzeichnis korrigiert oder erweitert wird, muessen danach
die Dateien "/etc/isdn/avon.dir" sowie "/etc/isdn/avon.pag"
von Hand geloescht, und isdnlog neu gestartet werden, damit das
neue Verzeichnis aufgebaut werden kann.

Beim Einlesen der ASCII-Datei kann moeglicherweise die Fehlermeldung

  isdnlog: WARNING: Duplicate Entry ``<Ort2>'' in AVON in Line xx, ignored
  isdnlog: WARNING: Can't be ``<Ort1>'' and ``<Ort2>''!

erscheinen. Dies deutet an, das eine Vorwahl zwei mal eingetragen wurde.


7. Betriebsmodi
---------------

isdnlog kennt folgende grundsaetzliche Betriebsmodi:

  - isdnlog -m1015

   isdnlog zeigt den gesamten Ablauf jeder Verbindung auf stdout an.
   Dieser Output kann mit der Zusatz-Option "-C <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
Teles-Treiber eingeschaltet werden. Bis "isdn4linux0.6.6beta" ist dazu

         telesctrl <DriverID> 1 4

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

Die Kernel-Version von isdn4linux benoetigt anstelle von
"id=" ein "teles_id=" !

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

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

Nun kann isdnlog mittels:

  isdnlog [ -avsx:m:l:rt:cC:w:SVTRDPeMh: ] [ /dev/isdnctrl0 | - ]

gestartet werden. Der isdnlog kann nur als root gestartet werden!

isdnlog besitzt drei Ausgabekanaele:
 - Console (default stderr) (Schalter -mX)
 - syslog  (Schalter -lX)
 - xisdn   (Schalter -xX)

Beim normalen Start (nicht als Daemon) werden alle Ausgaben (Meldungen)
vom isdnlog auf stderr ausgegeben.

Sobald isdnlog gestartet wird, erzeugt es eine Datei
"/var/run/isdnlog.'device'.pid", und schreibt dort seine eigene
Process-ID hinein. "device" steht fuer entsprechende isdnctrl-Device,
welches man gangesprochen hat. Somit kann isdnlog
jederzeit mittels "kill `cat /var/run/isdnlog.'device'.pid`" terminiert werden.
(Was z.b. zwingend ist, wenn man das teles- oder isdn-Modul entladen will!)
Wenn isdnlog ein zweites mal gestartet wird mit dem gleichen Device, beendet
er sich sofort wieder, da nur ein isdnlog gleichzeitig auf einem
device laufen kann.

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.
     (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 in der 5. Spalte der isdn.conf
     angegebenen externen Programme starten
     (start={yes|no})

 -wX in welchen Abstaenden soll isdnlog die Uebertragungsrate neu
     berechnen und anzeigen (Angabe in Sekunden)
     (thruput="value")

 -D  isdnlog wird als Daemon gestartet. Wenn -mX nicht verwendet wurde, wird
     die gesamte Ausgabe (normal stderr) auf den syslog geschrieben. Der
     isdnlog wird automatisch im Hintergrund gestartet.
     (daemon={yes|no})

 -T  Trace-Modus ... isdnlog laeuft im Single-Step-Modus, und wartet
     pro verarbeiteter Zeile aus "/dev/isdnctrl0" auf einen Tastendruck.
     An dem Prompt ">>>>>>> TRACE (CR=next, q=quit, d=dump, g=go):" kann
     mit "d" ein Dump aller relevanten internen Variablen erzeugt,
     sowie mit "g" der Trace-Modus beendet werden.

 -P  Pipe-Modus ... isdnlog reicht den gesamten Output von "/dev/isdnctrl0"
     an stdout weiter. Somit kann isdnlog als Quelle einer Pipe laufen:

        isdnlog -P /dev/isdnctrl0 | prog2  ...

     (pipe={yes|no})

 -b  Wenn ein bilingualer NT verwendet wird, mit dem DSS1 gefahren wird,
     dann muss dieses Flag gesetzt sein, da sonst die eigenen MSN's fehlerhaft
     angezeigt werden.
     (bilingual={yes|no})

 -M  imon/imontty/isdnmon Emulator
     Hiermit erzeugt isdnlog eine den obigen Tools entsprechende Ausgabe
     (Achtung: -m2048 muss dann zusaetzlich angegeben werden!)
     (monitor={yes|no})

 -hX Zeitabhaengige Hangup-Timeout Steuerung
     Wird dieses Flag angegeben, berechnet isdnlog bei jedem rausgehenden
     Verbindungsaufbau die aktuelle Dauer einer Gebuehreneinheit
     entsprechend der Tageszeit (nebst Wochentag/Feiertag etc.) sowie
     der Gebuehrenzone des Gegners, und programmiert - falls erforderlich -
     die neue Dauer in das entsprechende IP-Interface.

     Beispiel:
       Mein Internet-Provider steht folgendermassen in der "isdn.conf" :

         [NUMBER]
         NUMBER    = 4711
         ALIAS     = EUnet
         ZONE      = 3
         INTERFACE = isdn0
         START = {

           [FLAG]
           FLAGS     = OC
           PROGRAM   = $CMD ${SOUNDS}/dial.au
         }

       Konfiguriert wurde dessen IP-Interface "isdn0" in der "rc.isdn" so:
         isdnctrl huptimeout isdn0 12

     Erfolgt nun ein Verbindungsaufbau Richtung EUnet, berechnet isdnlog
     die aktuell gueltige Dauer einer Gebuehreneinheit
     (da mein Provider in "Regio 200" liegt, also 12.0, 13.5, 21.5, 30.0
      oder 120.0 Sekunden)
     und setzt intern die Befehle
         isdnctrl chargeint isdn0 X
         isdnctrl huptimeout isdn0 Y
     ab, wobei fuer "X" die berechnete Zeit, und fuer Y je nachdem, ob
     X groesser oder kleiner 20 Sekunden ist, den linken oder rechten
     Parameter der -h Option.

     Dauert z.b. eine aktuelle Gebuehreneinheit 12 Sekunden, und wurde
     isdnlog mit "-h5:3" gestartet, wird also der ChargeInt-Counter auf
     12 Sekunden, und der huptimeout-Counter auf 5 Sekunden gestellt.


     Das Nachjustieren des Hangup-Timers geschieht sowohl bei jedem
     Verbindungsaufbau, als auch bei jedem Uebergang in einen anderen
     Tarif, also um 9:00, 12:00, 18:00, 21:00, 2:00 sowie 5:00 Uhr.

     ACHTUNG: Die Gebuehrenimpulse der VSt kommen keineswegs im Rythmus
     	        der wirklichen Gebuehrentakt-Laenge, sondern in jeweils
              auf 10 Sekunden gerundeten Abschnitten (entsprechend eigener
              Beobachtungen)
	            In obigem Beispiel also nicht nach 12,24,36,48 .. Sekunden,
              sondern nach 20,30,40,50 Sekunden.

     ACHTUNG: Wird dieses Feature genutzt, sollte isdnlog mindestens
     	        mit "-t1", besser mit "-t2" synchron zur Uhr der VSt
              laufen!

     Fuer diese Funktionalitaet benoetigt isdnlog das Programm "isdnctrl"
     nicht, da es direkt mit isdn4linux komuniziert.
     (hangup="value")

 -cX Nur in Verbindung mit -xX. Es werden die X letzten Gespreache vom isdnlog
     gespeichert, die vom xisdn abgerufen werden, wenn der xisdn gestartet wird.
     Der Defaultwert betraegt 100.
     (calls="value")

 -LX Nur in Verbindung mit -xX. Es werden die X letzten Meldungen von der Option
     -xX im isdnlog gespeichert, die vom xisdn abgerufen werden, wenn der xisdn
     gestartet wird. Der Defaultwert betraegt 500.
     (xlog="value")

 -n  Die Durchsatzmeldungen werden - soweit moeglich - immer in derselben
     Bildschirmzeile angezeigt.
     (newline={yes|no})

 -Wx Alle Bildschirmausgabezeilen werden auf max. "x" Zeichen/Zeile
     beschnitten
     (width="value")

 -Ax Hiermit kann/koennen die Ziffer(n) angegeben werden, die
     an einer Telefonanlage vorgewaehlt werden muessen, um ein Amt
     zu bekommen. Hierbei koennen beliebig viele, jeweils durch ein ":"
     getrennte Amtsholungen angegeben werden, also z.B.
       -A0:80:81:82:83:84:85:86:87:88:89
     (amt="value")

 -2x Dual-Mode. isdnlog empfaengt die D-Kanal-Frames der anderen
     Geraete auf dem S0-Bus ueber eine zweite, falsch angeschlossene
     Teles-Karte.
     Mit x = 2 zeigt isdnlog auch jede Kleinigkeit - wie z.b. jedes
     einzelne gewaehlte Digit beim Telefonieren direkt an.
     (dual="value")


Bei den Optionen -mX, -lX -xX sind folgende Flags moeglich:

   1  Errors
      Fehlermeldungen vom isdnlog. Diese ist eine Defaultausgabe, die auf
      stderr bzw. an syslog (bei -D) gemeldet wird.

   2  Warnings
      Warnungen vom isdnlog. Diese ist eine Defaultausgabe, die auf stderr
      bzw. an syslog (bei -D) gemeldet wird.

   4  Meldungen
      Fehlermeldungen vom isdnlog. Diese ist eine Defaultausgabe, die auf
      stderr bzw. an syslog (bei -D) gemeldet wird.

   8  Log-Ausgabe
      Die Meldungen, die der isdnlog in die Datei "/tmp/isdnctrl0" schreibt.

  16  Show Numbers
      Sofort, wenn Telefonnummern auf dem S0-Bus auftauchen,
      werden diese angezeigt:

       Feb 17 19:10:11 * tei 123 calling EUnet with ISDN  Digital

      ACHTUNG: fruehere Versionen: -m1

  32  Show AOCD
      Bei jedem Gebuehrenimpuls wird die Anzahl der bislang
      aufgelaufenen Gebuehreneinheiten fuer die aktuelle Verbindung
      angezeigt:

       Feb 17 19:09:29 tei 123 calling EUnet with ISDN  2.EH = DM 0,24 (20 s)

      ## Dies funktioniert natuerlich nur, wenn auf der aktiven
      ## ISDN-Leitung Gebuehreninfo "A" (Charging-Info's during call's -
      ## AOC-D) bestellt wurde!

      Es wird die Anzahl der aufgelaufenen Einheiten sowie diese
      Einheiten umgerechnet in Geld (EH * DM 0,12) angezeigt.
      In Klammern wird angegeben, nach wieviel Sekunden (seit dem
      Verbindungsaufbau) dieser Gebuehrentakt erschien - eigentlich
      mehr, um aufzuzeigen, wie _ungenau_ die Uhr der VSt eigentlich
      laeuft!

      ACHTUNG: fruehere Versionen: -m2

  64  Show Connect
      Kommt eine Verbindung zustande (Telefon wird abgenommen,
      ISDN-Karte akzeptiert den Call etc.) wird dies angezeigt:

       Feb 17 19:11:11 tei 123 calling EUnet with ISDN  CONNECTED

      ACHTUNG: fruehere Versionen: -m4


 128  Show Hangup
      Sobald diese Verbindung beendet wurde, wird dies angezeigt
      (Wie bei -m2 mit Anzahl Einheiten, diese in Geld sowie
      Gesamtdauer der Verbindung. Die Anzahl Einheiten stammt hier
      jedoch aus der AOC-E Meldung der VSt)

       Feb 17 19:14:13 tei 123 calling EUnet with ISDN  HANGUP (15 EH = DM 1,80 = 148 s)

      ACHTUNG: fruehere Versionen: -m8

 256  Show Cause
      Der Grund fuer einen Verbindungsabbau/das nicht zustande
      kommen einer Verbindung wird angezeigt

       Feb 17 19:14:24 tei 123 calling bun with Phone  No user responding

      ACHTUNG: fruehere Versionen: -m16

 512  Show Time
      Die von der VSt uebermittelte Uhrzeit wird angezeigt

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

      ACHTUNG: fruehere Versionen: -m32

1024  Show Byte
      Der Durchsatz in Byte/s wird im Rythmus von "-w x" Sekunden angezeigt

2048  imon Anzeige
      Der aktuelle Zustand der B-Kanaele wird angezeigt

4096  Der vollstaendige Service-Indicator wird bei jedem Verbindungsaufbau
      aufgeschluesselt angezeigt

8192  Jede "-m" Meldung wird erweitert um eine Schaetzung, wann der naechste
      Gebuehrentakt beginnt sowie in welcher Zone der Gegner vermutlich
      liegt.


Alle weiteren Flags (16.384 .. 4.194.304) sind Debug-Flags

Werden mehrere Optionen gewuenscht, muss bei -mX bzw -lX, -xX  die Summe der
Optionen angegeben werden, d.h. falls alle obigen Optionen auf stderr
gewuenscht werden, muss "isdnlog" nun mit "-m1015" gestartet werden.

Das in aelteren Version verwendete "-m63" entspricht jetzt also "-m1015",
da die ersten drei Flags auch gesetzt sein sollten.
Alle z.Zt. moeglichen Informationen von isdnlog koennen mit "-m4087"
angefordert werden.

Wenn man die Schalter -mX, -lX oder -xX verwendet, sollte man darauf achten,
dass die Meldungen (1: Errors, 2: Warnings und 4: Meldungen) auf jeden Fall
irgendwo ausgegeben werden, da dies grundlegende Meldungen vom isdnlog sind.


9. Die Protokoll-Datei "/var/log/isdn.log"
------------------------------------------

Fuer jede (zustande gekommene, oder auch nicht zustande gekommene)
Verbindung erzeugt isdnlog einen Eintrag in der Datei "/var/log/isdn.log":

Sep 30 15:24:10 1995|xxxxx|xxxxxx|    3| 344| 812471050|    1|I|0|     0|   0|
      (1)             (2)   (3)    (4)   (5)   (6)       (7) (8)(9)  (10) (11)

Wobei in den einzelnen Spalten folgendes steht:

 (1) Zeitpunkt des Verbindungsaufbaues (in Local-Time)
 (2) Telefonnummer des Anrufers (oder Blank, falls z.b. Analog-Anschluss)
     (d.h. natuerlich auch die eigene MSN, wenn man selber raus-ruft!)
 (3) Telefonnummer des Gegners (d.h. die eigene MSN, wenn man angerufen
     wird)
 (4) Dauer der Verbindung in Sekunden
 (5) Dauer der Verbindung in 1/100 Sekunden
     (im obigen Beispiel: 912 / 100 = 9,12 Sekunden)
 (6) Zeitpunkt des Verbindungsaufbaues in UTC
 (7) Anzahl zu zahlender Gebuehreneinheiten (AOC-D)
     (oder -1, falls keine Gebuehreneinheiten von der VSt gemeldet wurden)
 (8) "I" fuer incoming call, "O" fuer outgoing call
 (9) Kam eine Verbindung nicht zustande (d.h. z.b. man wird angerufen, nimmt
     aber nicht ab) taucht hier der Grund fuer das nicht Zustandekommen auf
     ("Cause")
(10) Summe der uebertragenen Byte _von_ draussen (incoming)
(11) Summe der uebertragenen Byte _nach_ draussen (outgoing)
(12) Versionsnummer der "isdn.log" Eintragung, z.Zt. Version 2.0
(13) Dienstkennung fuer diese Verbindung (1=Speech, 7=Data usw.)
(14) Bei Dienstkennung 1=Speech steht hier eine 1, falls der Gegner aus dem
     ISDN, und 0, falls der Gegner aus der analogen Welt kommt
(15) Der Currency Factor fuer diese Verbinung (in Deutschland z.Zt. 0,12)
(16) Die Waehrung fuer diese Verbindung (in Deutschland "DM")


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

Gestartet wird isdnrep mittels:

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

  -c Zone   "compute" Falls man kein AOC-E (Gebuehreninfo am Ende einer Verbindung)
     	    	      bestellt hat, und isdnlog der angerufene Gegner unbekannt
                      ist ("calling ?"), kann hiermit angegeben werden, in
                      welcher Gebuehrenzone isdnrep den Gegner "vermuten" soll:
                       -c 0 : nicht's berechnen, sondern mit DM 0,00 abrechnen
                       -c 1 : in der City-Zone vermuten
                       -c 2 : in der Regio-50 Zone vermuten
                       -c 3 : in der Regio-200 Zone vermuten
                       -c 4 : in der Fernzone vermuten

  -f file   "file"    Es kann ein anderes Logfile anstelle von /var/log/isdn.log
	              angegeben werden.

  -t Zeitabschnitt
            "time"    Mit dieser Option kann ein bestimmter Zeitabschnitt vom
                      Logfile angezeigt werden. Z. b. alle Gespraeche vom
                      Monat November '95 oder vom 3.Januar'96 von 3.00 Uhr
                      bis 9.45 Uhr.

	Zeitabschnitt hat folgende Syntax:
		Zeit-Zeit  Es wird der Beginn-Zeitpunkt und der End-Zeitpunkt
			   bestimmt.
		Zeit-      Von 'Zeit' bis jetzt
		-Zeit 	   Von Beginn des Logfiles bis 'Zeit'
		Zeit       Zeigt den aktuellen Monat, Tag, Stunde... an

	Die 'Zeit' kann folgendes Format beinhalten:

		[DD/][M]M/[[YY]YY]	Gibt den Monat oder Tag an

			Beispiele: 7/95   (Juli '95)
				   7/	  (Juli des aktuellen Jahres)
				   8/1996 (August '96)
				   6/6/95 (6. Juni 95)
				   6/6/   (FALSCH: ist NICHT 6.Juni des
					   aktuellen Jahres, sondern
					   Juni 1906)

		[D]D			Gibt den Tag im aktuellen Monat an.

			Beispiele: 5  (5. des aktuellen Monats),
				   15 (15. des aktuellen Monats)

		[MM]DD[hhmm[[CC]YY][.ss]]
			Gibt einen genauen Zeitpunkt an. Wenn Stunden, Minuten
			und Sekunden nicht gesetzt sind, dann werden sie
			automatisch auf 0 beim Anfangszeitpunkt und
			auf 23 bzw. 59 beim Endzeitpunkt gesetzt.
			Standardgemaess werden mit diesem Format auf den
			Tag Einstellungen vorgenommen. Wenn das Jahr mit
			angegeben werden soll, so MUESSEN auch die Stunden
			und Minuten mitangegeben werden.
			Das Format ist vom date-Befehl uebernommen worden.

			Beispiele: 0107          (7.Januar des akt. Jahres)
				   0107173196.25 (7.Januar'96 17:31:25 Uhr)
				   010717311996  (7.Januar'96 17:31:00 Uhr)
				   12141995	 (FALSCH: Ist NICHT
						  12.Dezember'95, sondern
						  12.Dezember das akt. Jahres
						  19:95 Uhr -> Muell)

	Beispiele fuer die Zeitabschnitte und deren Bedeutung:
		6/95-081214381996.25 (Alle Eintraege zwischen
				      1.Juni'95 0:00:00 Uhr und
				      12.August'96 14:38:25 Uhr)
		0912030495.20-12/95  (Alle Eintraege zwischen
				      12.September'95 3:04:20 Uhr und
				      31.Dezember'95 23:59:59 Uhr)
		7/95		     (Alle Eintraege zwischen
				      1.Juli'95 0:00:00 Uhr und
				      31.Juli'95 23:59:59 Uhr)
		0908		     (Alle Eintraege zwischen
				      8.September des akt. Jahres 0:00:00 Uhr u.
				      8.September des akt. Jahres 23:59:59 Uhr)
			 3      3.Tag des akuellen Monats


-d -Zeit    "delete" Loescht in der Logdatei alle Eintraege ausschliesslich
                     der angegebenen Zeit. Das Zeitformat ist gleich, wie
                     bei Option -t. Das Minus vor der "Zeit" MUSS immer
                     angegeben werden! Es kann auch KEIN von-bis-Zeitraum
                     angegeben werden. Es koennen nur von Anfang des Logfiles
                     bis zu dem angegebenen Zeitpunkt Eintraege geloescht
                     werden.

	Beispiele:
		-7/95    	Loescht alle Calls bis 30.Juni'1995 23:59:59 Uhr
		-0107173196.25	Loescht alle Calls bis 7.Januar'96 17:31:24 Uhr
				ACHTUNG:---------------------------------------------^^
				Der angegebene Zeitpunkt wird immer
				ausgeschlossen!

	ACHTUNG: Mit dieser Option werden Eintraege aus der Logdatei
		 geloescht. Bei unsachgemaesser Verwendung, kann
		 die gesamte Logdatei geloescht werden!
		 z.b. "isdnrep -d -" loescht ALLE Eintraege.


-v          "verbose" Zeigt alle Verbindungen und Verbindungsversuche auf.
	              Sonst werden nur die "wahren" Gespraeche angezeigt, die
	              ohne Fehler zustande gekommen sind.

-p [n][m]'Nummer'[,[m]'Nummer'...] "phonenumber"
                     Hiermit koennen nur ausgewaehlte Telefonnummer angezeigt
                     werden.
                     'Nummer' ist eine Zahl im Format der Konfigurationsdatei
                     mit Wildcards (siehe "/etc/isdn/isdn.conf").
                     Wenn ein 'm' vor der Nummer steht, beschreibt es die
                     entsprechende MSN. Z.b. 'm2' (entspricht MSN#2).
                     Wenn 'MSN' == 0 ("m0") ist, dann bedeutet das, alle uebrigen
                     Nummern werden angezeigt.

                     Wird das Flag n gesetzt, bedeutet dieses, dass die
                     angegebenen Nummer nicht angezeigt werden. Dieses Flag
                     gilt immer fuer alle Nummern. Ist also eine Negierung.

-i          "incoming"
                     Mit dieser Option werden nur einkommende Gespraeche
                     angezeigt.

-o          "outgoing"
                     Mit dieser Option werden nur rausgehende Gespraeche
                     angezeigt.

-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.
                     
-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 der 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
                     ein Formatstring angegeben wird, welche Informationen
                     Pro Verbindung gezeigt werden soll. 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)
                     %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 zischen den Nummern ("->" oder "<-")
                         fuer die Gespraechsrichtung. Die eigene MSN
                         sollte hierbei immer links vom Pfeil stehen.
                     %t: Gibt den Pfeil an zischen 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

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 Einstellung 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. Zur Zeit funktioniert das nur mit Dateien
vom Typ vbox-1.x und vbox-0.x.

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

i4l-isdnlog@franken.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 verwedet. 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 : City              2 call(s)  2:23:13     50 EH    6,00 DM          (13)
Zone x : UNKNOWN          11 call(s)  0:17:00     20 EH    2,40 DM

Fussnoten:
  (1)  "xxx <- xxx" war ein eingehender Anruf, kostet also nix
  (2)  "xxx -> xxx" ist ein rausgehender Ruf, macht also bei 203 sec,
       Cityzone, Freizeittarif (da Samstag) 3 Gebuehreneinheiten = DM 0,36 ;-)
  (3)  Das Telefonat kam nicht zustande, da der angewaehlte Teilnehmer
       besetzt war.
  (4)  Der angwaehlte Teilnehmer hat den Hoerer nicht abgenommen.
  (5)  "Kein Anschluss unter dieser Nummer..."
  (6)  Gesamte Zeit von eingehender Anrufen
  (7)  Gesamte Zeit von rausgehender Anrufen
  (8)  3 Anrufe sind gescheitert (hier: einmal besetzt(3),
       einmal keine Antwort(4) und einmal verwaehlt (5))
  (9)  Die gesamten Einheiten fuer einen Tag
  (10) Das Geld, was man selbst fuer diesen Tag zu zahlen hat
  (11) Aufschluesselung der rausgehenden Rufe nach Nummern
  (12) Aufschluesselung der eingehenden Rufe nach Nummern
  (13) Aufschluesselung der raus- und eingehenden Anrufe nach Bereichszonen

Wurden die Einheiten mit einem "*" markiert, wurden vom "Amt" keine
Einheiten gemeldet (Charging-Info fehlte)
Daher steht dann hier die von isdnrep errechnete Anzahl Einheiten.


11. Das Konfigurations-Tool isdnconf
------------------------------------

Dieses Programm bearbeitet oder interpretiert die Datei /etc/isdn/callerid.conf
sowie ~/.isdn.
Es koennen hiermit Eintraege in dieser Datei angelegt oder geloescht werden.
Des weiteren koennen wie mit einem Grep Eintraege gesucht und angezeigt werden.
Unter einen Eintrag ist eine eigene MSN ([MSN]) oder eine Telefonnummer
([NUMBER]) gemeint.

Dieses Programm hat seine Staerken als ein Suchprogramm in einem persoenlichem
Telefonbuch.

Hier nun die Optionen des Programmes:

Befehle:

ACHTUNG:

Dieses Programm besitzt zwar die Faehigkeit, die Nummerndateien zu veraendern.
Defaultmaessig wird die Datei ~/.isdn editiert. Es kann auch mit den Schaltern
-f und -g eine andere Datei verwendet werden.
Es wird aber dringend davon abgeraten die Schalter -A und -D zu verwenden!!
Hierbei wird die gesamte Struktur der Datei zerstoert (include), so wie alle
Kommentare werden geloescht.

  -A        "add"     Es wird ein neuer Eintrag hinzugefuegt. Dieser wird ueber
                      Standardinput eingelesen. Es werden folgende Angaben
                      abgefragt:

                      Alias:          Fred
                      Number:         0815/441777
                      SI:             0
                      Zone:           4
                      Interface:      -
                      Flags:          I|O
                      Program:        /usr/local/ring
                      User:           uucp
                      Group:          user
                      Interval:
                      Time:           8-20
                      Flags:          (CONTROL-D)

                      Alias:          (CONTROL-D)

                      Wenn kein Control-D bei dem zweiten Flags gedrueckt
                      wuerde, kann ein weiterer Programmstart zur
                      entsprechenden Nummer angeben werden.

                      Wenn bei "Alias" kein Control-D gedrueckt wuerde,
                      koennte man eine weitere Nummer eingeben.

                      Es kann auch eine Datei als Eingabe "gepipt" werden.
                      Der Inhalt der der Datei sieht dann equivalent zur
                      oberen Eingabe aus:

                      Fred
                      0815/441777
                      0
                      4
                      -
                      I|O
                      /usr/local/ring
                      uucp
                      user

                      8-20

  -D        "delete"  Loescht einen oder mehrere Eintraege, die den folgenden
                      Mustern entsprechen. Diese Muster werden unter den
                      weiteren Optionen besprochen.

  -V        "version" Zeigt die aktuelle Version und beendet sich.

  Wenn weder -A noch -D angegeben wurde, dann wird isdnconf nur Telefonnummern
  anzeigen die, dem Muster entsprechen.

	Sollte -A und -D gleichzeitig angegeben werden. Wird isdnconf automatisch
	beendet.


  Optionen:

  -n 'Nummer' "number"  Sucht nach Telefonnummer unter allen Eintraegen,
                        die dem Muster entsprechen und zeigt sie anschliessend
                        an. 'Nummer' ist eine Zahl im Format der
                        Konfigurationsdatei mit Wildcards (siehe
                        "/etc/isdn/isdn.conf"). Gilt nicht fuer den
                        Befehl -A.

  -a 'Alias'  "alias"   Sucht nach dem Alias unter allen Eintraegen,
                        die dem Muster entsprechen und zeigt sie anschliessend
                        an. 'Alias' ist eine Zahl im Format der
                        Konfigurationsdatei mit Wildcards (siehe
                        "/etc/isdn/isdn.conf"). Gilt nicht fuer den
                        Befehl -A.
                        BUG: Statt dem Zeichen '-' muss ein '?' verwendet
                             werden!

  -t 'SI'               Zeigt alle Eintraege mit Service-Indicator 'SI' an.
                        Gilt nicht fuer den Befehl -A.

  -c 'Code'   "code"    Ermittelt die Vorzahl zu der Telefonnummer und gibt
                        diese dann aus. Gilt nicht fuer -A und -D.

  -i          "ignore"  Es wird dann bei den Optionen -n und -a die
                        Gross/Kleinschreibung ignoriert.

  -w          "word"    Der Ganze String von -a und -n muss auf den
                        angewendeteten String passen.
                        Beispiele (hier fuer -n):
                          "*34*" -> 123456, 345677, 1234
                          "34*"  -> 34567, 34111
                          "34??" -> 3411, 3456
                          "34"   -> 34 (und nichts anderes!!!)

                        Ohne diese Option wuerde das Muster wie beim
                        "grep" arbeiten:
                          "*34*" -> 123456, 345677, 1234
                          "34*"  -> 123456, 345677, 1234, 34567, 34111
                          "34??" -> 123456, 345677, 1234, 3411, 3456
                          "34"   -> 123456, 345677, 1234, 3411, 3456, 34567

  -d          "and"     Defaultmaessig werden die Optionen -n, -a und -t
                        mit ODER verknuepft. Wenn diese alle mit UND
                        verknuepft werden sollen, muss diese Option
                        verwendet werden.
                        Es koennen die drei oben genannten Optionen nur
                        jeweils einmal in der Befehlszeile verwendet werden.

  -q          "quiet"   Es unterdrueckt beim Befehl -A und -D die Ausgabe.
                        Ansonsten zeigt es nur das Alias zur gesuchten Nummer
                        oder die Nummber selber, falls kein Eintrag gefunden
                        wurde.

  -m          "msn"     Es besagt beim Befehl -A, das die folgenden Eingaben
                        einen Eintrag MSN erzeugen. Defaultmassig werden
                        NUMBER-Eintraege geschrieben.

                        Normalerweise werden folgende Felder in der Ausgabe
                        angezeigt:

                        Alias:          Fred
                        Number:         0815/441777
                        SI:             0
                        Zone:           4
                        Interface:

                        Dieses gilt nicht fuer die Befehle -A und -D.
                        Die folgenden beiden Optionen -l und -s veraendern
                        diese Ausgabe.

  -s          "short"   Hiermit werden nun nur noch das Alias und die
                        Nummer angezeigt.

  -l          "long"    Hier werden zusaetzlich noch die die zu startenden
                        Programme ([START]) angezeigt.

  -f 'Datei'  "file"    isdnconf verwendet normalerweise die Konfigurationsdatei
                        "/etc/isdn/isdn.conf" sowie "~/.isdn". Wenn eine
                        andere benutzt werden soll, dann muss sie mit dieser
                        Option angegeben werden. Gilt nur fuer die
                        Optionen -A und -D

  -g          "global"  Hat nur Auswrikungen bei den Befehlen -A und -D. Es
                        wird dann anstatt der ~/.isdn die Datei
                        /etc/isdn/callerid.conf genommen zum editieren.

  -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-Patch im contrib-Verzeichnis wurden
von Georg v.Zezschwitz (gvz@pop.de) geschrieben, der den ChargeInt-Patch
entwickelt hat. Der Patch haengt nicht direkt mit isdnlog zusammen, ist
aber im Zusammenspiel mit isdnlog sehr hilfreich, um ohne Leistungs-
Einbussen der Telekom ein paar Mark weniger ueberweisen zu muessen.


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

ChargeInt besteht aus einem Patch fuer den ISDN-Teil der Linux-Kernels und
einem Patch fuer isdn4kutils. Er fuehrt einen weiteren Parameter fuer
isdnctrl ein: den ChargeInt-Parameter. Mit dem ChargeInt-Parameter wird das
aktuelle Gebuehrenintervall einer bestimmten Verbindung angegeben, z.b.
90 Sekunden.

Wie wirkt ChargeInt?

Ohne ChargeInt prueft isdn4linux permanent, ob fuer eine gewisse Zeit (ueber
huptimeout konfiguriert) die bestehende Verbindung nicht genutzt wurde.
Ist diese Zeit abgelaufen, wird aufgelegt.
Demgegenueber verhaelt sich die kostenbewusste Nutzerin natuerlich so, dass
sie die fuer 12 Pf bezahlte Leistung der Telekom auch gerne bis zur letzten
Sekunde ausschoepfen wuerde, also erst dann auflegt, wenn in den naechsten
1-2 Sekunden die naechste Einheit anstehen wuerde.
ChargeInt macht eigentlich nichts weiter, als die Pruefung, ob in den
letzten Sekunden kein Traffic angefallen ist, nur dann durchzufuehren,
wenn die naechste Einheit der Telekom anfaengt.
Ohne ChargeInt steht man vor dem Konflikt:

- Eine niedrige Huptimeout fuehrt dazu, dass evtl. zu schnell aufgelegt wird,
  also das Lesen einer WWW-Seite schon zum Auflegen fuehrt, obwohl man
  bequem in der gleichen Einheit noch die zweite haette laden koennen
  (so man nicht T-Online benutzt, wo sich die Durchschnittseite eh erst
  nach 3 Einheiten voll darstellt :-)

- Ein hoher Huptimeout fuehrt dazu, dass man haeufiger in die naechste
  Einheit "reinrutscht", obwohl auf der Leitung gar keine Aktivitaet mehr
  stattfindet.

Also ist es am sinnigsten, einen kurzen Huptimeout einzustellen (empfohlen:
3-5 Sekunden), aber nur kurz vor Ablauf der aktuellen Einheit dieses
Kriterium abzupruefen.


Pro und Kontra von ChargeInt
----------------------------

Generell spricht nichts dagegen, ChargeInt einzukompilieren. Der Patch
ist "abwaertskompatibel", d.h., wer nicht explizit per Hand oder Programm
ein

  isdnctrl device chargeint Takt

gibt, wird keinerlei Aenderungen feststellen. Zudem enthaelt der Patch
fuer isdnctrl die nette Moeglichkeit, mit einem einzigen isdnctrl-Befehl
gleich etliche Parameter auf einmal setzen zu koennen. (s.u.)


Wann sollte ich ChargeInt (nicht) aktivieren?

Wer mit synchronem PPP arbeitet und eine dynamische IP bezieht, duerfte
ein Verhalten wuenschen, wie es Otto-Normal-Dumm-Windows-User praktiziert:
Explizit Verbindung aufbauen, Rumsurfen, explizit Verbindung abbauen.
Zum einen kann etwa eine FTP-Session nicht ohne weiteres bei dynamischer
IP-Vergabe fortgesetzt werden, da sich die einem selbst zugewiesene
IP-Adresse bei einer erneuten Anwahl aendert. Dies gilt fuer alle
TCP-Verbindungen (z.b. Telnet, rlogin). Wer mit dynamischer IP-Adressvergabe
leben muss, wird grundsaetzlich seine Verbindung waehrend einer Sitzung
stehen lassen wollen und eher noch einen ping starten, damit auch die
Gegenseite nicht auflegt. Fuer diese User/innen ist ChargeInt also
ueberfluessig.

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

Falsch ist ChargeInt dann, wenn eine Wiederanwahl so zeitaufwendig waere,
dass sie in keiner Relation zu den Mehrkosten fuer eine kontinuierliche
Verbindung steht.

ChargeInt ist ideal fuer Leute, die
 - eine feste IP-Adresse haben
 - gerne mal 1 Minute oder laenger die Seite, die sie sich gezogen
   haben, auch lesen.
 - oder z.b. Heimarbeit betreiben und ihr Trommelfeuer auf die Tastatur
   auch mal kurz unterbrechen, um Nachzudenken oder Tee zu kochen oder...


Wie patche ich ChargeInt ein?
-----------------------------

ChargeInt ist im isdnlog-Tarfile bereits enthalten. Historisch ist ChargeInt
unabhaengig von isdnlog entwickelt worden und beide koennen nach wie vor
unabhaengig von einander betrieben werden, aber die eleganteste und einfachste
Methode ist, ChargeInt ueber isdnlog zu steuern (siehe Konfiguration).

ChargeInt befindet sich innerhalb von isdnlog in folgendem Verzeichnis:

contrib/chargeint/patch-chargeint-2.04
contrib/chargeint/patch-chargeint-kutils

Die Primary-Site ist

  ftp://ftp.pop.de/pub/linux/isdn4linux/LOCAL/chargeint.tar.gz

, allerdings ist der Patch seit Linux 2.04 (Juli 1996) unveraendert geblieben.
Eine etwas ausfuehrlichere HTML-Doku ist unter

  http://www.provi.de/~gvz/chargeint.html

abrufbar.


Angenommen, der Kernel liegt in /usr/src/linux und isdn4kutils in
/usr/src/isdn4k-utils-2.0, die Patche selbst im Home-Verzeichnis,
dann reichen folgende Befehle:

cd /usr/src
patch -p0 -l -F10 < ~/patch-chargeint-2.04
rm -rf isdn4k-utils-2.0/isdn/RCS
patch -p0 -l ~/patch-chargeint-kutils

Der patch-chargeint-2.04 wurde urspruenglich gegen Linux 2.0.4 erzeugt,
klappt aber mit der -F10 Option auch bei neueren Kerneln.

Wer bei dieser Gelegenheit den Kernel zum ersten Mal kompiliert, mache
bitte nicht ChargeInt verantwortlich, wenn es nicht klappt!


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

Parameter fuer die Hangup-Kontrolle

Das Gebuehrenintervall wird ueber den Parameter chargeint mitgeteilt.
Der Parameter huptimeout erhaelt eine andere Bedeutung: 2 Sekunden, bevor
die naechste Einheit faellig wird, prueft Chargeint, ob in den letzten
huptimeout Sekunden kein Traffic war. Bei "Stille" wird aufgelegt, sonst
weitergemacht. Man koennte auch anders sagen: Durch Chargeint wird der
huptimeout-Parameter nur kurz vor Ablauf der Gebuehreneinheit abgefragt.

Ich setze bei Cityverbindungen huptimeout auf 5 Sekunden, bei Fernver-
bindungen auf 3 Sekunden.

Im Juli 96 wurde isdnlog so modifiziert, dass isdnlog selbstaendig beim
Aufbau einer Verbindung berechnet, welche Taktzeit zur Zeit von der
Telekom vorgegeben wird und diese setzt. Otto Normaluserin muss sich also
nur noch darum kuemmern, dass
 - die Systemuhr halbwegs richtig geht
 - die Tarif-Zonen fuer die einzelnen Leitungen in der
   /etc/isdn/isdn.conf korrekt angegeben sind.


Flexible Syntax fuer isdnctrl
-----------------------------
Als ich den chargeint-Parameter in isdnctrl einbauen wollte, juckte es
mich in den Fingern, das Ding gleich ein bisschen umzuschreiben. Mein
ISDN-Router daheim ist ein 386DX40, und die endlos vielen isdnctrl-Befehle
beim Booten, die die 5 ISDN-Verbindungen eintragen, brauchten ihre Zeit.
Daher habe ich eine Moeglichkeit eingebaut, mehrere Parameter auf einmal
setzen zu koennen. Auch hier gilt die Abwaertskompatibilitaet, wer also
nur einen Parameter aendern will, schreibt weiterhin:

   isdnctrl chargeint isdn 90

Z.b. beim Booten sind aber auch solche Anweisungen moeglich:

   isdnctrl l2_prot isdn0 hdlc eaz 232282 addphone in 40110 40112 \
            out 2519612 huptimeout 5

Waehrend also die Syntax fuer das erste Kommando unveraendert

   Kommando isdn-device [Parameter 1] (Parameter 2)

lautet, wird bei folgenden Kommandos im Aufruf von isdnctrl das Isdn-Device
weggelassen.


14. Gebuehren-GAU Begrenzer
---------------------------

isdnlog bietet 4 unterschiedliche (auch kombinierbare) Moeglichkeiten,
die maximal pro Zeiteinheit zu entrichtenden Gebuehren an die Telekom
sowie den Internet-Provider wirkungsvoll zu begrenzen.

Wird isdnlog terminiert, merkt es sich die bislang aufgelaufenen
Geld-, Zeit-, sowie Durchsatz-Betraege in der Datei "/etc/isdn/charge.dat"
und liest diese beim naechsten Start wieder ein.


14.1 Watchdog
-------------

In seltenen Faellen "glaubt" isdn4linux, aufgelegt zu haben. Die VSt
sieht das jedoch ganz anders, und laesst den Gebuehrenzaehler weiterlaufen.

Hiergegen hilft die Cmd-Line-Option "-H x" von isdnlog.
Sobald isdnlog feststellt, das seit mehr als "x" Gebuehrenimpulsen (AOC-D)
von der VSt kein Traffic mehr stattfand (Durchsatz rein sowie raus = 0)
faehrt isdnlog das gesamte isdn4linux runter.

Dies wird in 4 Stufen versucht:

 1. Stufe: Es wird ein "isdnctrl hangup isdnX" ausgefuehrt

 2. Stufe: Es wird der Shell-Script "/etc/isdn/reload" ausgefuehrt
    	   Dieser sollte das Teles-/HiSax-Modul ent- und wieder laden.
           (Siehe "samples/reload")

 3. Stufe: Es wird ein "isdnctrl system off" ausgefuehrt

 4. Stufe: Der Rechner wird rebootet ("/sbin/reboot")

In der Parameterdatei wird dieses Feature mit

watchdog="value"

aufgerufen.


14.2 CHARGEMAX
--------------

Mit dem Eintrag
 CHARGEMAX = x
in der "/etc/isdn/isdn.conf" kann angegeben werden, das man gewillt
ist, maximal DM x pro Tag an Telefongebuehren auszugeben.
Sobald dieses Limit ueberschritten wird, fuehrt isdnlog den Shell-Script
"/etc/isdn/stop" aus (siehe "samples/stop"), der das isdn4linux
abschalten sollte.


14.3 CONNECTMAX
---------------

Mit dem Eintrag
 CONNECTMAX = x,y
in der "/etc/isdn/isdn.conf" kann angegeben werden, das man gewillt
ist, maximal x Sekunden pro Monat Online zu sein.

(Ich persoenlich habe dort die 5 Freistunden (5 * 60 * 60 = 18000 Sekunden)
 meines Providers eingetragen)

Sobald dieses Limit ueberschritten wird, fuehrt isdnlog den Shell-Script
"/etc/isdn/stop" aus (siehe "samples/stop"), der das isdn4linux
abschalten sollte.

Getrennt durch ein Komma (",") muss hinter der Anzahl Sekunden angegeben
werden, in welcher Form der Provider Online-Zeit abrechnet:

  0  = es wird auf die Sekunde genau abgerechnet
  1  = es wird "pro angefangene Minute" abgerechnet


14.4 BYTEMAX
------------

Mit dem Eintrag
 BYTEMAX = x,y
in der "/etc/isdn/isdn.conf" kann angegeben werden, das man gewillt
ist, maximal x Byte pro Monat vom Provider zu saugen.

(Dies ist relevant bei Providern, die nach Volumen abrechnen)

Sobald dieses Limit ueberschritten wird, fuehrt isdnlog den Shell-Script
"/etc/isdn/stop" aus (siehe "samples/stop"), der das isdn4linux
abschalten sollte.

Getrennt durch ein Komma (",") muss hinter der Anzahl Byte angegeben
werden, in welcher Form der Provider abrechnet:

  0  = auf's Byte genau
  1  = auf's KByte genau
  2  = auf's Mbyte genau

  8  = nur die _zum_ Provider geschickten Bytes sollen zaehlen
 16  = die Summe aus _zum_ Provider und _vom_ Provider zaehlen

Wird weder 8 noch 16 angegeben, meint das: nur die _vom_ Provider
gesaugten Byte zaehlen.


15. Dual-Mode
-------------

Wie eingangs erwaehnt, kann isdnlog bei allen rausgehenden Verbindungen,
die nicht mit der Teles-Karte entstanden sind (ISDN-Telefon, Modem/Fax)
die entsprechenden Telefonnummern leider nicht anzeigen.

Mit dem Dual-Mode ist genau dies jedoch moeglich.

Dazu muss der Rechner mit einer zweiten Teles-Karte ausgestattet, und
darauf ein Teles-/HiSax-Treiber installiert werden.

Bei mir sieht das so aus:

  modprobe hisax io=0xd80,0xe80 irq=12,9 mem=0xd0000,0xd2000 type=1,1
  	   protocol=2,2 id=bri1%echo

Dann muss diese zweite Karte (diese muss beim laden des HiSax-Treibers
auch auf jeden Fall als *zweite* Karte angegeben werden!) _verkehrt_
am S0-Bus angeschlossen werden:

Beim S0 Kabel an der Karte die aeusseren zwei Draehte auf die inneren
zwei Anschluesse des Steckers legen. Die beiden inneren nicht
anschliessen !!!, das legt den Bus lahm.

B  3 -- RX+ 2a ---------------\
U  4 -- TX+ 1a -- offen        ------------
S  5 -- TX- 1b -- offen        ------------  Karte
   6 -- RX- 2b ---------------/


Abschliessend muss isdnlog mit der weiteren Option "-2" gestartet werden.


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

Wird isdnlog mit "POSTGRES=1" erstellt, traegt isdnlog alle
Verbindungsinformationen zusaetzlich in eine Postgres95 SQL-Datenbank ein.
(Datenbank "isdn", Tabelle "isdn2")

Da isdnlog die Eintraege im europaeischen Datumsformat (tt.mm.jjjj)
vornimmt, muss postgres95 zwingend mit EUROPEAN_DATES=1
(siehe "postgres95/src/Makefile.global") compiliert werden!

Die Datenbank muss zuvor folgendermassen erstellt werden:

  createdb isdn
  psql isdn < script

Mit folgendem "script":

-------------------------
create table isdn2 (
  sdate     date,
  stime     time,
  calling   varchar(30),
  called    varchar(30),
  charge    int4,
  dir       char,
  in_bytes  int4,
  out_bytes int4,
  msec      int4,
  sec       int4,
  status    int4,
  service   int4,
  source    int4,
  vrsion    int4,
  factor    real,
  currency  varchar(30),
  pay	    real
);
\q
-------------------------

Da isdnlog normalerweise als User "root" laeuft, muss "root" das Recht
zum Eintragen gegeben werden:

  grant insert on isdn2 to root;

Wie bei postgres95 ueblich kann ueber die Environment-Variablen
  $PGHOST
sowie
  $PGPORT
auch ein postmaster auf einem anderen Host angesprochen werden.


17. Probleme?
-------------

Sollte isdnlog nicht wie beschrieben arbeiten, muessen folgende Punkte
geprueft werden:

 - Funktioniert isdn4linux ? D.h. kann eine ISDN-Verbindung zu einer
   Gegenstelle aufgebaut werden?

 - Wurde mittels "telesctrl <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, der Rest wird von isdnlog nicht benoetigt!

Diese Fehlermeldung sollte bitte an "isdnlog@Kool.f.EUnet.de" geschickt
werden.


 - Bei jeder Anwahl von draussen an meine Teles-Karte meldet mir isdnlog
   2 HANGUP's?

   Bei einem eingehenden Ruf melden alle Geraete, die sich zustaendig
   fuehlen, an die Vermittlungsstelle, dass sie "klingeln".
   (Die Klingel-Wiederholungen machen bei ISDN die Geraete selbst.)

   Das Geraet, an dem der Ruf angenommen wird, bekommt den CONNECT,
   alle anderen, die geklingelt haben, ein HANGUP, damit sie mit
   dem Klingeln wieder aufhoeren. Dasselbe passiert natuerlich auch,
   wenn der Anrufer vor dem Abnehmen schon auflegt.

   D.h. der erste HANGUP stammt vom 2. B-Kanal der Teles-Karte, der den
   Anruf ablehnt!

   Die Teles-Karte spielt die Rolle von zwei Geraeten, wohl weil ein
   Geraet zu einer Zeit immer nur eine Dienstkennung haben kann,
   die Teles koennte aber gleichzeitig eine Voice- und eine Data-
   Verbindung fahren (nur (noch?) nicht unter i4l).
   Fehlt also nach dem CONNECT der Teles der HANGUP des zweiten
   Kanals, ist das ein Indiz dafuer, dass dieser haengt.

 - Es wird bei isdnlog, isdnrep und xisdn immer nur die letzte Ziffer der
   eigenen MSN's angezeigt. Das Verhalten tritt bei bilingualen NT's auf.
   Dann muss isdnlog mit der Option -b gestartet werden.

 - Es werden die Programme nicht gestartet, die zu den Events ausgefuehrt
   werden sollen.
   Dort gibt es mehrere Ursachen. Haeufig liegt das Programm nicht
   im Pfad, weil der isdnlog meistens in der Bootphase gestartet wird.
   Daher sollte das Programm mit vollem Pfad gestartet werden.
   Die folgende Zeile fuehrt zu mehreren Problemen:
   "/usr/local/bin/myplayer '~fred/*.au'"
   Die Anfuerungszeichen und die Hochkomma werden so dem execvp() uebergeben.
   Der kann dieses aber nicht aufloesen. Also wird versucht das Programm
   "/usr/local/bin/myplayer zu starten.
   Auch der Parameter fuehrt zu Problemen. Das Hochkomma (') wird mit
   uebergeben. Ausserdem wird ~fred NICH in /home/fred umgewandelt. Und auch
   *.au wird so uebergeben und es wird versucht vom Programm *.au  abzuspielen.
   Die Zeile sollte also richtig so aussehen:
   /usr/local/bin/myplayer /home/fred/telefon.au

Bei Verwendung vom xisdn:

Der xisdn meldet:

  - "Nicht autorisierter Zugriff auf Server"
      Der Benutzer, der xisdn gestartet hat, ist nicht in der
      Datei /etc/isdn/isdnlog.users eingetragen, oder
      er darf xisdn von dem Host nicht starten.

  - "Server und Client haben unterschiedliche Protkollversionen"
      Der xisdn und isdnlog kommen jeweils aus verschiedenen Versions-Paketen.
      Die Protokollversion hat nichts mit der Version von isdnlog zu tun.
      Der Client kann unter Umstaenden laufen, aber es kommt bestimmt
      zu Fehlverhalten. Daher sollten beide Programme immer aus einem
      Paket stammen. Wenn ein beliebiger Client mit isdnlog
      Version 2.23 oder 2.30 gestartet wird, kommt die obige Meldung leider
      nicht. Es kann dann auch zu Fehlverhalten fuehren, welches
      vom Client nicht gemeldet wird.

Wenn keine Gespreache und keine Verbindungen angezeigt werden, oder nur
bestimmte MSN's, dann liegt der Fehler mit Sicherheit bei den Rechten des
entsprechenden Benutzers in der Datei /etc/isdn/isdnlog.users.

Wenn der isdnlog mit einem Segmentation-fault oder mit der Meldung
"Got signal 11" abbricht, dann sollten folgende Schritte durchgefuehrt
werden, um Debuginformationen zu erlangen, die an die
"isdnlog@Kool.f.EUnet.de" zu senden sind:

Im isdnlog-Verzeichnis

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

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

Die angegebenen Flags  (-x, -l oder -m) _muessen_ 2048 enthalten, da sonst
kein Segmentation-fault auftritt.

Wenn ein Segmentation-fault auftritt:

gdb bin/isdnlog
# Im Debugger "where" eingeben.

Den _gesamten_ Output an die oben angegebene Adresse senden.


18. Verwendete Dateien
----------------------

Folgende Files werden von diesem System verwendet:

  /sbin/isdnlog              - Das Protokoll-Programm
  /usr/sbin/isdnrep          - Das Report-Programm
  /usr/sbin/isdnconf         - Das Konfigurationstool
  /etc/isdn/isdnlog.conf     - Die alte Config-Datei
  /etc/isdn/isdn.conf        - Die neue Config-Datei
  ~/.isdn                    - Die Config-Datei des Benutzers
  /etc/isdn/isdnlog.users    - Die User-Access-Datei
  /etc/isdn/avon 	           - altes Vorwahl-Verzeichnis (ASCII)
  /etc/isdn/avon.pag	       - altes Vorwahl-Verzeichnis (ISAM-Version)
  /etc/isdn/avon.dir	       - altes Vorwahl-Verzeichnis (Index)
  /etc/isdn/charge.dat       - Zwischenspeicher fuer die ChargeMax-Funktion
  /etc/isdn/reload           - Script zum Wiederanfahren eines verklemmten i4l
  /etc/isdn/stop    	       - Script zum Stoppen bei erreichen von CHARGEMAX
  /usr/lib/areacode          - Neues Vorwahl-Verzeichnis
  /var/log/isdn.log	         - Das Logbuch
  /var/run/isdnlog.pid	     - Enthaelt die PID des laufenden isdnlog
  /dev/isdnctrl0	           - Gibt das Q.931 Protokoll des Teles-Treibers aus
  /dev/isdninfo		           - Interne Meldungen von isdn4linux
  /tmp/isdnctrl0	           - Protokoll obiger Devices als ASCII-Datei
  /usr/X11R6/lib/X11/app-defaults/Isdn - Resourcefile fuer xisdn


19. Verwendete Environment-Variablen
------------------------------------

Folgende Environment-Variablen werden von diesem System verwendet:

  $ISDNLOG = Verzeichnis, in dem sich die Konfigurations-Dateien
  	     befinden (z.b. "export ISDN_CONF_PATH=/etc/isdn")

  $XENVIRONMENT = Vollstaendiger Pfad der Resourcen-Datei fuer den
  		  X-Client "xisdn"


20. Verwendete Abkuerzungen
---------------------------

  VSt     = Vermittlungsstelle (das Amt)

  AOCD	  = Advice of Charge during call
  	    (Gebuehreninfo waehrend der Verbindung == Gebuehreninfo A)

  AOCE	  = Advice of Charge at end of call
  	    (Gebuehreninfo am Ende der Verbindung)

  Q.931   = Das von der ITU genormte Protokoll auf dem D-Kanal

  D-Kanal = Der Steuerungskanal im ISDN

  B-Kanal = Der Datenkanal im ISDN

  tei     = Terminal Endpoint Identifier

  Gegner  = Eine Gegenstelle

  MSN	  = Multiple subscriber number (Telefonnummer)

  E-DSS1  = Das Euro-ISDN-Protokoll

  1TR6	  = Das nationale ISDN-Protokoll

  SI	  = Service-Indicator (Dienstkennung)

  CLIP	  = Calling Line Identification Presentation

  CLIR	  = Calling Line Identification Restriction

  COLP	  = Connected Line Identification Presentation

  COLR	  = Connected Line Identification Restriction


21. Danksagung
--------------

Bedanken moechte ich mich vor allem bei
  Fritz Elfert (fritz@wuemaus.franken.de)
fuer isdn4linux, sowie
  Jan den Ouden (denouden@groovin.xs4all.nl)
fuer den Teles-Treiber.

Bei
  Beat Doebeli (doebeli@vptt.ch)
fuer den Einbau jeglicher D-Channel Messages, sowie
  Michael Bongartz (micha@mubo.saar.de)
fuer die Entdeckung der AOC-D sowie AOC-E Bytes im D-Kannel-Protokoll

Bei
  Kai Voelcker (kai@fantaghiro.deceiver.org)
sowie
  Martin Stover (mstover@Stover.f.EUnet.de)
und vielen anderen aus der isdn4linux Mailing-Liste fuer ihre Muehen
beim Testen von isdnlog, staendigen neuen Ideen dafuer sowie
fuer die unzaehligen Testdaten.

Bei
  Karsten Keil (isdn4@temic-ech.spacenet.de)
fuer die 1TR6 Unterstuetzung von isdnlog, und natuerlich vor allem fuer
seinen HiSax-Treiber sowie das neue Protokoll zwischen HiSax und isdnlog.

Bei
  Jochen Heuer (jogi@planetzork.ping.de)
fuer seinen Kampf mit den neuen Tarifen der Telekom

Bei
 Hardy Buchholz (hardy@Kool.f.EUnet.de)
der viele Ideen zum CHARGEMAX beigetragen hat

Bei
  Ad Aerts (ad@aasup.nl)
der die Gebuehrenauswertung fuer die Niederlande beigesteuert hat

Bei
  Markus Maeder (mmaeder@cyberlink.ch)
der die Gebuehrenauswertung fuer die Schweiz korrigiert hat

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

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)

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

Und natuerlich bei der deutschen Telekom, die mir seit nunmehr zwei Jahren
falsche (aber von isdnlog erkannte) AOC-E Elemente schickt ;-)

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


Viel Spass mit isdnlog wuenscht

Andreas Kool (akool@Kool.f.EUnet.de)
