u-isdn/tools/rc.isdn

102 lines
2.1 KiB
Bash
Executable File

#!/bin/sh
## =()<DESTDIR=@<DESTDIR>@>()=
DESTDIR=/usr/lib/isdn
## =()<LOCKNAME=@<LOCKNAME>@>()=
LOCKNAME=/var/lock
set -e
. /etc/rc.config
if [ "$1" = "config" ] ; then # smurfsche Spezialitäten
cat <<'END' >/tmp/cf.$$
#
## welcher ISDN-Treiber? uisdn, i4l, off
#
ISDN=uisdn
END
fillup /etc/rc.config /tmp/cf.$$
rm /tmp/cf.$$
cd /sbin/init.d/rc2.d
ln -sf ../scripts/uisdn S18uisdn
ln -sf ../scripts/uisdn K18uisdn
cd /sbin/init.d/rc3.d
ln -sf ../scripts/uisdn S18uisdn
ln -sf ../scripts/uisdn K18uisdn
exit 0
fi
if [ "$ISDN" != "uisdn" ] ; then exit 0; fi
PATH=${DESTDIR}/bin-$(uname -r):${DESTDIR}/bin:$PATH
if [ "$1" = "off" -o "$1" = "stop" ] ; then
trap '' 1 2 15
echo -n "Killing the ISDN server ... "
if test -f /var/run/isdn.pid ; then
read pid < /var/run/isdn.pid
rm /var/run/isdn.pid
fi
pf=$(echo $LOCKNAME | sed -e 's/%s/isdn0/')
if test -f $pf ; then
read pid <$pf
if kill $pid ; then
sleep 10
kill -9 $pid || true
fi
rm -f $pf
fi
echo -n "find modules ..."
while read x a b c d ; do
case "$x" in
MO*)
if [ "x$a" = "x-o" ] ; then
mod=$b
elif [ "x$b" = "x-o" ] ; then
mod=$c
else
mod=$(basename $a .o)
fi
mods="$mod $mods"
;;
esac
done < /etc/isdn.conf
echo ""
echo rmmod $mods
exec rmmod $mods
exit 0
fi
if test -d /lib/gnu; then
export LD_LIBRARY_PATH=/lib/gnu
fi
echo $$ > /var/run/isdn.pid
if lsmod | grep isdn_2 >/dev/null 2>&1 ; then : ; else
cd /lib/modules/$(uname -r)
if test -f /tmp/symbols.isdn ; then mv /tmp/symbols.isdn /tmp/symbols.isdn.old ; fi
while read x a ; do
case "$x" in
MO*)
/bin/echo -n "\rISDN Modules: " >&2
/bin/echo -n "\rISDN Modules: $a: " >&2
eval "insmod -m $a" ## wegen name=$(cardname Foo0) in $a
;;
esac
done < /etc/isdn.conf > /tmp/symbols.isdn
/bin/echo "\rISDN Modules...done. "
fi
cd /var/tmp # for coredumps...
ulimit -c 40000
# ulimit -d 20000
set +e
while test -f /var/run/isdn.pid ; do
master -wd /etc/isdn.conf 2>>/tmp/isdn.log >>/var/log/isdn
sleep 5
done &