ImonC

Aus Neobikers Wiki
Zur Navigation springen Zur Suche springen

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.

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#