File dahdi.init of Package dahdi-tools
#!/bin/sh
#
# dahdi This shell script takes care of loading and unloading \
# DAHDI Telephony interfaces
# chkconfig: 2345 9 92
# description: The DAHDI drivers allow you to use your linux \
# computer to accept incoming data and voice interfaces
#
### BEGIN INIT INFO
# Provides: dahdi
# Required-Start: $remote_fs $local_fs
# Required-Stop: $remote_fs $local_fs
# Should-Start:
# Should-Stop:
# Default-Start: 1 2 3 5
# Default-Stop: 0 6
# Short-Description: Load and initialize Dahdi.
# Description: Load and initialize the Dahdi telephony drivers
# which can be used by the Asterisk PBX system.
### END INIT INFO
. /etc/rc.status
initdir=/etc/init.d
# Don't edit the following values. Edit /etc/dahdi/init.conf instead.
DAHDI_CFG=/usr/sbin/dahdi_cfg
DAHDI_CFG_CMD="$DAHDI_CFG" # e.g: for a custom system.conf location
FXOTUNE=/sbin/fxotune
# The default syncer Astribank. Usually set automatically to a sane
# value by xpp_sync(1) if you have an Astribank. You can set this to an
# explicit Astribank (e.g: 01).
XPP_SYNC=auto
# The maximal timeout (seconds) to wait for udevd to finish generating
# device nodes after the modules have loaded and before running dahdi_cfg.
DAHDI_DEV_TIMEOUT=20
#
# Determine which kind of configuration we're using
#
system=suse # assume redhat
[ -r /etc/sysconfig/dahdi ] && . /etc/sysconfig/dahdi
LOCKFILE=/var/lock/subsys/dahdi
# recursively unload a module and its dependencies, if possible.
# where's modprobe -r when you need it?
# inputs: module to unload.
# returns: the result from
unload_module() {
module="$1"
line=`lsmod 2>/dev/null | grep "^$1 "`
if [ "$line" = '' ]; then return; fi # module was not loaded
set -- $line
# $1: the original module, $2: size, $3: refcount, $4: deps list
mods=`echo $4 | tr , ' '`
# xpp_usb keeps the xpds below busy if an xpp hardware is
# connected. Hence must be removed before them:
case "$module" in xpd_*) mods="xpp_usb $mods";; esac
for mod in $mods; do
# run in a subshell, so it won't step over our vars:
(unload_module $mod)
# TODO: the following is probably the error handling we want:
# if [ $? != 0 ]; then return 1; fi
done
rmmod $module
}
# have we loaded the modules
running()
{
lsmod|grep -q "$1[^_-]"
}
# Initialize the Xorcom Astribank (xpp/) using perl utiliites:
xpp_startup() {
# do nothing if there are no astribank devices:
if ! grep -q connected /proc/xpp/xbuses 2>/dev/null; then return 0; fi
echo "Waiting for Astribank devices to initialize:"
cat /proc/xpp/XBUS-[0-9]*/waitfor_xpds 2>/dev/null || true
# overriding locales for the above two, as perl can be noisy
# when locales are missing.
# No register all the devices if they didn't auto-register:
LC_ALL=C dahdi__registration on
# this one could actually be run after dahdi_cfg:
LC_ALL=C xpp_sync "$XPP_SYNC"
}
hpec_start() {
# HPEC license found
if ! echo /var/lib/digium/licenses/HPEC-*.lic | grep -v '\*' | grep -q .; then
return
fi
# zaphpec_enable not installed in /usr/sbin
if [ ! -f /usr/sbin/zaphpec_enable ]; then
echo -n "Running zaphpec_enable: Failed"
echo -n "."
echo " The zaphpec_enable binary is not installed in /usr/sbin."
return
fi
# zaphpec_enable not set executable
if [ ! -x /usr/sbin/zaphpec_enable ]; then
echo -n "Running zaphpec_enable: Failed"
echo -n "."
echo " /usr/sbin/zaphpec_enable is not set as executable."
return
fi
# zaphpec_enable properly installed
echo -n "Running zaphpec_enable: "
/usr/sbin/zaphpec_enable 2> /dev/null
if [ $? = 0 ]; then
echo -n "done"
echo "."
else
echo -n "Failed"
echo -n "."
echo " This can be caused if you had already run zaphpec_enable, or if your HPEC license is no longer valid."
fi
}
shutdown_dynamic() {
if ! grep -q ' ZTD/' /proc/* 2>/dev/null; then return; fi
# we should only get here if we have dynamic spans. Right?
$DAHDI_CFG_CMD -s
}
if [ ! -x "$DAHDI_CFG" ]; then
echo "dahdi_cfg not executable"
exit 0
fi
if [ ! -f /etc/dahdi/system.conf ]; then
echo "/etc/dahdi/system.conf not found. Nothing to do."
exit 0
fi
RETVAL=0
# See how we were called.
case "$1" in
start)
cat "/etc/dahdi/modules" | grep "^[^\#]" | {
foundone=false
echo -ne $"Loading DAHDI hardware modules:\n"
while read line; do
foundone=true
echo -n " ${line}: "
if modprobe $line 2> /dev/null; then
echo -n "done"
else
echo -n "error"
fi
done
echo -ne $"\n"
if ! $foundone; then
echo "There aren't any DAHDI hardware modules specified to "
echo "load. Please update /etc/dahdi/modules in order to "
echo "specify the modules to load."
exit 1
fi
}
TMOUT=$DAHDI_DEV_TIMEOUT # max secs to wait
while [ ! -d /dev/dahdi ] ; do
sleep 1
TMOUT=`expr $TMOUT - 1`
if [ $TMOUT -eq 0 ] ; then
echo "Error: missing /dev/dahdi!"
exit 1
fi
done
sleep 3 # TODO: remove it
xpp_startup
if [ ! -e /proc/dahdi/1 ]; then
echo "No hardware timing source found in /proc/dahdi, loading dahdi_dummy"
modprobe dahdi_dummy 2> /dev/null
fi
echo -n "Running dahdi_cfg: "
$DAHDI_CFG_CMD 2> /dev/null && echo -n "done"
echo "."
RETVAL=$?
if [ "$LOCKFILE" != '' ]; then
[ $RETVAL -eq 0 ] && touch $LOCKFILE
fi
if [ -x "$FXOTUNE" ] && [ -r /etc/fxotune.conf ]; then
# Allowed to fail if e.g. Asterisk already uses channels:
$FXOTUNE -s || :
fi
hpec_start
;;
stop)
# Unload drivers
#shutdown_dynamic # FIXME: needs test from someone with dynamic spans
echo -ne $"Unloading DAHDI hardware modules: "
if unload_module dahdi; then
echo -n "done"
else
echo -n "error"
fi
if [ "$LOCKFILE" != '' ]; then
[ $RETVAL -eq 0 ] && rm -f $LOCKFILE
fi
;;
unload)
unload_module dahdi
;;
status)
echo -n "Checking for dahdi ..."
## Check status with running(), if modules are loaded running
## running() will return with exit status 0.
# Return value is slightly different for the status command:
# 0 - service up and running
# 1 - service dead, but /var/run/ pid file exists
# 2 - service dead, but /var/lock/ lock file exists
# 3 - service not running (unused)
# 4 - service status unknown :-(
# 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)
if running dahdi; then
echo -n " modules loaded."
rc_failed 0
else
echo -n " no modules loaded."
rc_failed 3
fi
# NOTE: rc_status knows that we called this init script with
# "status" option and adapts its messages accordingly.
rc_status -v
;;
restart|force-reload)
$0 stop
$0 start
;;
reload)
echo -n "Rerunning dahdi_cfg: "
$DAHDI_CFG_CMD 2> /dev/null && echo -n "done"
echo "."
RETVAL=$?
;;
*)
echo "Usage: dahdi {start|stop|restart|reload|unload|status}"
exit 1
esac
exit $RETVAL