aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-isdn/dahdi-tools/files/dahdi.init.d
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-isdn/dahdi-tools/files/dahdi.init.d')
-rw-r--r--recipes-isdn/dahdi-tools/files/dahdi.init.d343
1 files changed, 343 insertions, 0 deletions
diff --git a/recipes-isdn/dahdi-tools/files/dahdi.init.d b/recipes-isdn/dahdi-tools/files/dahdi.init.d
new file mode 100644
index 0000000..87b57d5
--- /dev/null
+++ b/recipes-isdn/dahdi-tools/files/dahdi.init.d
@@ -0,0 +1,343 @@
+#!/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
+#
+# config: /etc/dahdi/init.conf
+
+### BEGIN INIT INFO
+# Provides: dahdi
+# Required-Start: $local_fs $remote_fs
+# Required-Stop: $local_fs $remote_fs
+# Should-Start: $network $syslog
+# Should-Stop: $network $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: DAHDI kernel modules
+# Description: dahdi - load and configure DAHDI modules
+### END INIT INFO
+
+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_CMD:-"$DAHDI_CFG"} # e.g: for a custom system.conf location
+
+FXOTUNE=/usr/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
+
+# A list of modules to unload when stopping.
+# All of their dependencies will be unloaded as well.
+DAHDI_UNLOAD_MODULES="dahdi"
+
+#
+# Determine which kind of configuration we're using
+#
+system=debian # assume debian
+if [ -f /etc/debian_version ]; then
+ system=debian
+fi
+
+if [ -f /etc/gentoo-release ]; then
+ system=debian
+fi
+
+if [ -f /etc/SuSE-release -o -f /etc/novell-release ]
+then
+ system=debian
+fi
+
+# Source function library.
+if [ $system = debian ]; then
+ . $initdir/functions || exit 0
+fi
+
+DAHDI_MODULES_FILE="/etc/dahdi/modules"
+
+[ -r /etc/dahdi/init.conf ] && . /etc/dahdi/init.conf
+
+if [ $system = redhat ]; then
+ LOCKFILE=/var/lock/subsys/dahdi
+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 , ' '`
+ ec_modules=""
+ # 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
+ case "$mod" in
+ dahdi_echocan_*)
+ ec_modules="$mod $ec_modules"
+ ;;
+ *)
+ # run in a subshell, so it won't step over our vars:
+ (unload_module $mod)
+ ;;
+ esac
+ done
+ # Now that all the other dependencies are unloaded, we can unload the
+ # dahdi_echocan modules. The drivers that register spans may keep
+ # references on the echocan modules before they are unloaded.
+ for mod in $ec_modules; do
+ (unload_module $mod)
+ done
+ rmmod $module
+}
+
+unload_modules() {
+ for module in $DAHDI_UNLOAD_MODULES; do
+ unload_module $module
+ done
+}
+
+# In (xpp) hotplug mode, the init script is also executed from the
+# hotplug hook. In that case it should not attempt to loade modules.
+#
+# This function only retunrs false (1) if we're in hotplug mode and
+# coming from the hotplug hook script.
+hotplug_should_load_modules() {
+ if [ "$XPP_HOTPLUG_DAHDI" = yes -a "$CALLED_FROM_ATRIBANK_HOOK" != '' ]
+ then
+ return 1
+ fi
+ return 0
+}
+
+# In (xpp) hotplug mode: quit after we loaded modules.
+#
+# In hotplug mode, the main run should end here, whereas the rest of the
+# script should be finished by the instance running from the hook.
+# Note that we only get here if there are actually Astribanks on the
+# system (otherwise noone will trigger the run of the hotplug hook
+# script).
+hotplug_exit_after_load() {
+ if [ "$XPP_HOTPLUG_DAHDI" = yes -a "$CALLED_FROM_ATRIBANK_HOOK" = '' ]
+ then
+ exit 0
+ fi
+}
+
+# Initialize the Xorcom Astribank (xpp/) using perl utiliites:
+xpp_startup() {
+ if [ "$ASTERISK_SUPPORTS_DAHDI_HOTPLUG" = yes ]; then
+ aas_param='/sys/module/dahdi/parameters/auto_assign_spans'
+ aas=`cat "$aas_param" 2>/dev/null`
+ if [ "$aas" = 0 ]; then
+ echo 1>&2 "Don't wait for Astribanks (use Asterisk hotplug-support)"
+ return 0
+ fi
+ fi
+ # do nothing if there are no astribank devices:
+ if ! /usr/share/dahdi/waitfor_xpds; then return 0; fi
+
+ hotplug_exit_after_load
+}
+
+
+hpec_start() {
+ # HPEC license found
+ if ! echo /var/lib/digium/licenses/HPEC-*.lic | grep -v '\*' | grep -q .; then
+ return
+ fi
+
+ # dahdihpec_enable not installed in /usr/sbin
+ if [ ! -f /usr/sbin/dahdihpec_enable ]; then
+ echo -n "Running dahdihpec_enable: Failed"
+ echo -n "."
+ echo " The dahdihpec_enable binary is not installed in /usr/sbin."
+ return
+ fi
+
+ # dahdihpec_enable not set executable
+ if [ ! -x /usr/sbin/dahdihpec_enable ]; then
+ echo -n "Running dahdihpec_enable: Failed"
+ echo -n "."
+ echo " /usr/sbin/dahdihpec_enable is not set as executable."
+ return
+ fi
+
+ # dahdihpec_enable properly installed
+ if [ $system = debian ]; then
+ echo -n "Running dahdihpec_enable: "
+ /usr/sbin/dahdihpec_enable 2> /dev/null
+ elif [ $system = redhat ]; then
+ action "Running dahdihpec_enable: " /usr/sbin/dahdihpec_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 dahdihpec_enable, or if your HPEC license is no longer valid."
+ fi
+}
+
+shutdown_dynamic() {
+ if ! grep -q ' DYN/' /proc/dahdi/* 2>/dev/null; then return; fi
+
+ # we should only get here if we have dynamic spans. Right?
+ $DAHDI_CFG_CMD -s
+}
+
+load_modules() {
+ # Some systems, e.g. Debian Lenny, add here -b, which will break
+ # loading of modules blacklisted in modprobe.d/*
+ unset MODPROBE_OPTIONS
+ modules=`sed -e 's/#.*$//' $DAHDI_MODULES_FILE 2>/dev/null`
+ #if [ "$modules" = '' ]; then
+ # what?
+ #fi
+ echo "Loading DAHDI hardware modules:"
+ modprobe dahdi
+ for line in $modules; do
+ if [ $system = debian ]; then
+ echo -n " ${line}: "
+ if modprobe $line 2> /dev/null; then
+ echo -n "done"
+ else
+ echo -n "error"
+ fi
+ elif [ $system = redhat ]; then
+ action " ${line}: " modprobe $line
+ fi
+ done
+ echo ""
+}
+
+# Make sure that either dahdi is loaded or modprobe-able
+dahdi_modules_loadable() {
+ modinfo dahdi >/dev/null 2>&1 || lsmod | grep -q -w ^dahdi
+}
+
+if [ ! -x "$DAHDI_CFG" ]; then
+ echo "dahdi_cfg not executable"
+ exit 0
+fi
+
+RETVAL=0
+
+# See how we were called.
+case "$1" in
+ start)
+ if ! dahdi_modules_loadable; then
+ echo "No DAHDI modules on the system. Not starting"
+ exit 0
+ fi
+ if hotplug_should_load_modules; then
+ load_modules
+ 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
+
+ xpp_startup
+
+ # Assign all spans that weren't handled via udev + /etc/dahdi/assigned-spans.conf
+ /usr/share/dahdi/dahdi_auto_assign_compat
+
+ 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=$?
+
+ 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
+
+ # Do not try to call xpp_sync if there are no Astribank devices
+ # installed.
+ if test -e /sys/bus/astribanks; then
+ # Set the right Astribanks ticker:
+ LC_ALL=C xpp_sync "$XPP_SYNC"
+ fi
+
+ hpec_start
+ ;;
+ stop)
+ # Unload drivers
+ #shutdown_dynamic # FIXME: needs test from someone with dynamic spans
+ echo -n "Unloading DAHDI hardware modules: "
+ if unload_modules; then
+ echo "done"
+ else
+ echo "error"
+ fi
+ if [ "$LOCKFILE" != '' ]; then
+ [ $RETVAL -eq 0 ] && rm -f $LOCKFILE
+ fi
+ ;;
+ unload)
+ unload_modules
+ ;;
+ 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=$?
+ ;;
+ status)
+ if [ -d /proc/dahdi ]; then
+ /usr/sbin/lsdahdi
+ RETVAL=0
+ else
+ RETVAL=3
+ fi
+ ;;
+ *)
+ echo "Usage: dahdi {start|stop|restart|status|reload|unload}"
+ exit 1
+esac
+
+exit $RETVAL
+