diff options
author | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2008-06-19 14:26:10 +0000 |
---|---|---|
committer | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2008-06-19 14:26:10 +0000 |
commit | e78c863ec69587ffb55e44abc0641f5c392a08f3 (patch) | |
tree | 2cc44fbb71c33d2b1f5c906fd34e1f90b07ab4a2 | |
parent | 3b1feb04be38909f23568140838bdf8ae20ea020 (diff) |
A slightly simplified version of zaptel.init as dahdi.init .
git-svn-id: http://svn.asterisk.org/svn/dahdi/tools/trunk@4414 a0bf4364-ded3-4de4-8d8a-66a801d63aff
-rwxr-xr-x | dahdi.init | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/dahdi.init b/dahdi.init new file mode 100755 index 0000000..49120f0 --- /dev/null +++ b/dahdi.init @@ -0,0 +1,236 @@ +#!/bin/sh +# +# zaptel This shell script takes care of loading and unloading \ +# Zapata Telephony interfaces +# chkconfig: 2345 9 92 +# description: The zapata telephony drivers allow you to use your linux \ +# computer to accept incoming data and voice interfaces +# +# config: /etc/sysconfig/zaptel + +initdir=/etc/init.d + +# Don't edit the following values. Edit /etc/sysconfig/zaptel or +# /etc/defualt/zaptel (depending on your system) instead. + +DAHDI_CFG=/sbin/dahdi_cfg +DAHDI_CFG_CMD="$DAHDI_CFG" # e.g: for a custom zaptel.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=redhat # assume redhat +if [ -f /etc/debian_version ]; then + system=debian +fi + +# Source function library. +if [ $system = redhat ]; then + . $initdir/functions || exit 0 +fi + +[ -f /etc/dahdi/init.conf ] && . /etc/dahdi/init.conf + +if [ $system = redhat ]; then + [ -f /etc/sysconfig/zaptel ] && . /etc/sysconfig/zaptel + LOCKFILE=/var/lock/subsys/zaptel +fi + +# 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 +} + +# Initialize the Xorcom Astribank (xpp/) using perl utiliites: +# intended to replace all the the three functions below if user has +# installed the zaptel-perl utilities. +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 + if [ $system = debian ]; then + echo -n "Running zaphpec_enable: " + /usr/sbin/zaphpec_enable 2> /dev/null + elif [ $system = redhat ]; then + action "Running zaphpec_enable: " /usr/sbin/zaphpec_enable + fi + 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/zaptel.conf ]; then + echo "/etc/zaptel.conf not found. Nothing to do." + exit 0 +fi + +RETVAL=0 + +# See how we were called. +case "$1" in + start) + # Load drivers + echo -n "Loading zaptel hardware modules:" + for x in $MODULES; do + eval localARGS="\$${x}_ARGS" + if modprobe ${x} ${localARGS} 2> /dev/null; then + echo -n " $x" + echo "." + fi + done + TMOUT=$DAHDI_DEV_TIMEOUT # max secs to wait + while [ ! -d /dev/zap ] ; do + sleep 1 + TMOUT=`expr $TMOUT - 1` + if [ $TMOUT -eq 0 ] ; then + echo "Error: missing /dev/zap!" + exit 1 + fi + done + sleep 3 # TODO: remove it + + # If you have zaptel-perl, the three below can be replaced with: + xpp_startup + + if [ ! -e /proc/zaptel/1 ]; then + echo "No hardware timing source found in /proc/zaptel, loading dahdi_dummy" + modprobe dahdi_dahdi_dummy 2> /dev/null + fi + + if [ $system = debian ]; then + echo -n "Running dahdi_cfg: " + $DAHDI_CFG_CMD 2> /dev/null && echo -n "done" + echo "." + elif [ $system = redhat ]; then + action "Running dahdi_cfg: " $DAHDI_CFG_CMD + fi + RETVAL=$? + + [ $RETVAL -eq 0 ] && touch $LOCKFILE + + 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 -n "Unloading zaptel hardware drivers:" + unload_module zaptel + RETVAL=$? + echo "." + + [ $RETVAL -eq 0 ] && rm -f $LOCKFILE + ;; + unload) + # We don't have zaptel helper, so let's not replicate too much code: + # allow others to use the unload command. + unload_module zaptel + ;; + restart|force-reload) + $0 stop + $0 start + ;; + reload) + if [ $system = debian ]; then + echo -n "Rerunning dahdi_cfg: " + $DAHDI_CFG_CMD 2> /dev/null && echo -n "done" + echo "." + elif [ $system = redhat ]; then + action "Rerunning dahdi_cfg: " $DAHDI_CFG_CMD + fi + RETVAL=$? + ;; + *) + echo "Usage: zaptel {start|stop|restart|reload|unload}" + exit 1 +esac + +exit $RETVAL + |