#! /bin/sh # # Written by Oron Peled # Copyright (C) 2009, Xorcom # # All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # # This is an experimental script to activate an Astribank TwinStar # during failover. # # The script assume that there is an /etc/dahdi/xpp_order file # specifying the Astribanks' labels according to the required # registration order. # # This file can be easily generated by running: # dahdi_genconf xpporder # after the system is configured and working. # me=`basename $0` dir=`dirname $0` LOGGER="logger -i -t '$me'" # Always redirect stderr somewhere, otherwise the shell script will die # when it tries to do I/O related stuff on closed file descriptor. # Our default is to throw it down the bit-bucket. #exec 2> /dev/console ## If you wish to trace this script: #exec 2> "/tmp/${me}_$XBUS_NAME" 1>&2 # Our directory in the beginning, so we can use local lab setup PATH="$dir:/usr/sbin:/sbin:/usr/bin:/bin" set -e # For lab testing liveconf="$dir/liveconf/dahdi" if [ -d "$liveconf" ]; then dahdi_conf="$liveconf" else dahdi_conf="/etc/dahdi" fi export XPPORDER_CONF="$dahdi_conf/xpp_order" if [ ! -r "$XPPORDER_CONF" ]; then echo "Skip($ACTION): No '$XPPORDER_CONF'" | $LOGGER exit 0 fi SYSTEMCONF="$dahdi_conf/system.conf" TWS_DIR="/var/tmp" TWS_PREFIX="$TWS_DIR/twinstar-" LABELFILE="/sys/$DEVPATH/label" export XBUS_SORT='SORT_LABEL' echo "starting($ACTION): setup from $XPPORDER_CONF" | $LOGGER STAMP="${TWS_PREFIX}${XBUS_NAME}" TWS_TOTAL=`sed -e 's/#.*//' -e '/^[ ]*$/d' -e 'y/\t/ /' "$XPPORDER_CONF" | wc -l` case "$ACTION" in online) if [ ! -f "$LABELFILE" ]; then echo "Missing labelfile '$LABELFILE'" | $LOGGER exit 1 fi LABEL=`cat $LABELFILE` TWS_LINE=`awk "/^$LABEL/" $XPPORDER_CONF` if [ "$TWS_LINE" = "" ]; then echo "online($XBUS_NAME): '$LABEL' is not in '$XPPORDER_CONF'" | $LOGGER exit 1 fi echo "$LABEL" > "$STAMP" HOW_MANY=`ls ${TWS_PREFIX}* | wc -l` echo "online($XBUS_NAME): $LABEL (${HOW_MANY}/${TWS_TOTAL})" | $LOGGER twinstar enable-wd if [ "$HOW_MANY" -eq "$TWS_TOTAL" ]; then echo "online: GOT ALL $TWS_TOTAL" | $LOGGER dahdi_registration on dahdi_registration 2>&1 | tr '\t' ' ' | $LOGGER echo "Using '$SYSTEMCONF'" 2>&1 | $LOGGER dahdi_cfg -v -c "$SYSTEMCONF" 2>&1 | $LOGGER sleep 1 # Just for visual effect asterisk -rx 'module load chan_dahdi.so' 2>&1 | $LOGGER xpp_blink bzzt xpd "$XBUS_NUM" ports=`twinstar ports` if [ "$ports" = 0 ]; then play /usr/share/zaptel/primary-pbx-is-ready.wav || : elif [ "$ports" = 1 ]; then play /usr/share/zaptel/backup-pbx-is-ready.wav || : fi echo "online: READY" | $LOGGER fi ;; offline) LABEL=`cat $STAMP` TWS_LINE=`awk "/^$LABEL/" $XPPORDER_CONF` rm -f "$STAMP" if [ "$TWS_LINE" = "" ]; then echo "offline($XBUS_NAME): $LABEL is not in $XPPORDER_CONF" | $LOGGER exit 1 fi echo "offline($XBUS_NAME): $LABEL" | $LOGGER twinstar disable-wd # If we want to disconnect everybody twinstar jump asterisk -rx 'module unload chan_dahdi.so' ;; *) echo "$0: Unknown ACTION='$ACTION'" | $LOGGER echo "$0: ARGS='$*'" | $LOGGER echo "$0: ENV:" | $LOGGER env | $LOGGER exit 1 esac