ImonC

Aus Neobiker's Wiki
Wechseln zu: Navigation, Suche

Zur ISDN Anrufsignalisierung verwende ich das Tool ImonC. Dieses benötigt auf dem Server mit der ISDN-Karte die beiden Daemons Imond und Telmond. Die Daemons laufen auf jedem Linux-System mit funktionsfähiger ISDN-Konfiguration, also auch auf Debian mit isdnlog (notwendig zur Anrufsignalisierung mit telmond!).

Hinweis: Bei mir ging die Anrufsignalisierung erst, nachdem ich mit isdnctrl verbose 2 vor Start von telmond den Loglevel erhöht habe. Der wird ansonsten unter Debian erst mit Konfiguration von anderen (ipppx/isdnx) Devices entsprechend erhöht, ansonsten liegt der Defaultmässig zu niedrig und telmond reagiert nicht auf Anrufe - und das obwohl isdnlog schon funktioniert.

Unter LENNY habe ich für telmond ausserdem den Kernel ohne die Option PRINTK_TIME übersetzen müssen, da sonst wegen der geänderten Syntax der Syslog Ausgabe des Kernels die Anrufe nicht mehr erkannt wurden. Besser wäre es hier, telmond die neue Syntax beizubringen...die Variante ging einfach schneller (und ich brauche die Uhrzeit im Mikrosekunden im Logfile nicht!).

Edit: Es gibt dafür die Kernel Option printk.time=0.

Die FLI4L Sourcen laden und entpacken.

mkdir -p /usr/src/fli4l
cd /usr/src/fli4l
wget http://www.fli4l.de/fileadmin/downloadzaehler.php?file=3.0.2/src.tar.gz
tar xvzf src.tar.gz

Im buildroot Verzeichnis kann das Make-System verwendet werden. Alternativ kann man unter src/fli4l/base auch telmond.c und imond.c frei kompilieren. Hier gibt's meine binaries für Debian Etch und Kernel 2.6.

cd src/buildroot
make imond telmond

cd target/root/usr/local/bin
strip *
cp * /usr/local/bin

Download ISDN Files

Telmond liest das syslog bei meiner Konfiguration aus einem eigenem File, welches in /etc/syslog.conf definiert wird:

mkfifo /var/log/kernel-info
echo "kern.info     |/var/log/kernel-info" >> /etc/syslog.conf
kill -1 `cat /var/run/syslogd.pid`

Weiterhin werden folgende Konfigurationsfiles benötigt:

/etc/telmond.conf und /etc/imond.conf:

touch /etc/telmond.conf
vi /etc/imond.conf

Mo-Su 00-24 ippp0 -1:-1 240 yes yes 0193792: Dummy_Eintrag 0.0 1
#Mo-Su 00-24 ippp1 -1:-1 240 no yes 0193792: Tiscali_1,49ct 0.0149 1
#Mo-Su 00-24 ippp2 -1:-1 240 no yes 0191011: T-Online_1,59ct 0.0159 1
#Mo-Su 00-24 ippp3 -1:-1 240 no yes 0191771: Tiscali-8,8ct_+_0,44ct-0,88ct 0.0044 1

Auf Debian verwende ich folgendes Startskript:

/etc/init.d/imond

#!/bin/sh

test -f /usr/local/bin/imond   || exit 0
test -f /usr/local/bin/telmond || exit 0

START_IMOND='yes'                   # start imond: yes or no
IMOND_PORT='5000'                   # port (tcp), don't open it to the outside
IMOND_PASS=''                       # imond-password, may be empty
IMOND_ADMIN_PASS='adminpw'          # imond-admin-password, may be empty
IMOND_ENABLE='yes'                  # accept "enable/disable" commands
IMOND_DIAL='yes'                    # accept "dial/hangup" commands
IMOND_ROUTE='yes'                   # accept "route" command
IMOND_REBOOT='no'                   # accept "reboot" command

DIALMODE='off'                      # standard dialmode: auto, manual, or off

TELMOND_PORT='5001'                 # port (tcp), don't open in INPUT_ACCEPT_PORT_x

IMOND_OPT="-port $IMOND_PORT -log-to-syslog /var/log /var/log"
TELMOND_OPT="-port $TELMOND_PORT -log-to-syslog -syslog-fifo /var/log/kernel-info /var/log"

#------------------------------------------------------------------------
# export some config variables for imond
#------------------------------------------------------------------------
export START_IMOND IMOND_PASS IMOND_ADMIN_PASS IMOND_ENABLE IMOND_DIAL
export IMOND_ROUTE IMOND_REBOOT DIALMODE

echo $IMOND_PORT >/var/run/imond.port
echo $TELMOND_PORT >/var/run/telmond.port

case "$1" in
        start)
                echo -n "Starting imond server: telmond "
                isdnctrl verbose 2
                rm /var/run/imond.pid /var/run/telmond.pid >/dev/null 2>&1
                start-stop-daemon --start --quiet --pidfile /var/run/telmond.pid --exec \
                    /usr/local/bin/telmond -- $TELMOND_OPT
                while [ "`ps aux|grep -v grep|grep -c telmond`" -le 0 ]; do
                    echo -n "."
                    start-stop-daemon --start --quiet --pidfile /var/run/telmond.pid --exec \
                        /usr/local/bin/telmond -- $TELMOND_OPT
                    sleep 1
                done
                echo " imond."
                start-stop-daemon --start --quiet --pidfile /var/run/imond.pid --exec \
                    /usr/local/bin/imond -- $IMOND_OPT
                ;;
        stop)
                echo -n "Stopping imond server: telmond imond"
                start-stop-daemon --stop --quiet --pidfile /var/run/imond.pid
                start-stop-daemon --stop --quiet --pidfile /var/run/telmond.pid
                rm /var/run/imond.pid /var/run/telmond.pid >/dev/null 2>&1
                echo "."
                ;;
        restart|force-reload)
                echo -n "Restarting imond server: stop..."
                (
                    start-stop-daemon --stop --quiet --pidfile /var/run/imond.pid
                    start-stop-daemon --stop --quiet --pidfile /var/run/telmond.pid
                    rm /var/run/imond.pid /var/run/telmond.pid >/dev/null 2>&1
                )
                while [ "`ps aux|grep -v grep|grep -c telmond`" -gt 0 ]; do
                    echo -n "."
                    ( killall -9 telmond >/dev/null 2>&1 )
                    ( killall -9 imond >/dev/null 2>&1 )
                    sleep 1
                done
                echo -n " start telmond "
                isdnctrl verbose 2
                start-stop-daemon --start --quiet --pidfile /var/run/telmond.pid --exec \
                    /usr/local/bin/telmond -- $TELMOND_OPT
                while [ "`ps aux|grep -v grep|grep -c telmond`" -le 0 ]; do
                    echo -n "."
                    start-stop-daemon --start --quiet --pidfile /var/run/telmond.pid --exec \
                        /usr/local/bin/telmond -- $TELMOND_OPT
                    sleep 1
                done
                echo -n " imond"
                start-stop-daemon --start --quiet --pidfile /var/run/imond.pid --exec \
                    /usr/local/bin/imond -- $IMOND_OPT
                echo "."
                ;;
        *)
                echo "Usage: /etc/init.d/imond {start|stop|restart|force-reload}"
                exit 1
                ;;
esac

exit 0

Da ImonC bzw. eigentlich imond mehr kann, habe ich die folgenden FLI4L Dateien ebenfalls nach /usr/local/bin kopiert. Damit kann man bei Bedarf z.B zusätzlich einen ISDN-Kanal nach draussen zu einem weiteren Provider schalten...wenn DSL mal klemmt, geht wenigstens noch ISDN raus.

exchange4linux:/usr/local/bin# l
total 192
-rwxr-xr-x  1 root staff   481 2007-01-20 17:41 add-default-route*
-rwxr-xr-x  1 root staff   684 2007-01-20 17:41 delete-all-routes*
-rwxr-xr-x  1 root staff   161 2007-01-20 17:43 dtou*
-rwxr-xr-x  1 root staff  4598 2007-01-20 17:41 fli4lctrl*
lrwxrwxrwx  1 root staff     6 2007-01-21 18:00 imond -> imond3*
-rwxr-xr-x  1 root staff 47468 2007-01-20 17:45 imond2*
-rwxr-xr-x  1 root staff 44852 2007-01-20 17:45 imond3*
-rwxr-xr-x  1 root staff 44388 2007-01-20 15:52 imond-dev*
lrwxrwxrwx  1 root staff    10 2007-01-20 16:58 imond-send -> imond-stat*
-rwxr-xr-x  1 root staff  5048 2007-01-20 15:56 imond-stat*
-rwxr-xr-x  1 root staff  1802 2007-01-20 17:43 support.sh*
lrwxrwxrwx  1 root staff     8 2007-01-21 18:00 telmond -> telmond3*
-rwxr-xr-x  1 root staff 10348 2007-01-20 17:45 telmond2*
-rwxr-xr-x  1 root staff 10128 2007-01-21 12:21 telmond3*
lrwxrwxrwx  1 root staff    25 2007-01-20 17:23 telmond-send -> /usr/local/bin/imond-stat*
exchange4linux:/usr/local/bin#