wanpipe/samples/wanrouter

3286 lines
72 KiB
Bash

#!/bin/bash -p
# chkconfig: 2345 7 9
# Description: WANPIPE WAN Router Initialization Script.
#
# copyright (c) 1999-2002, Sangoma Technologies Inc.
#
# 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.
# ==========================================================================
# Sep 19, 2007 Alex Feldman Add DEPMOD=NO support for FreeBSD OS.
# July 28,2004 Alex Feldman Do not run 'ztcfg' after interface
# configuration. Run ztcfg script manually
# after all Voip interfaces loaded.
# Jan 16, 2004 David Rokhvarg Added 'lineprobe' option
# Mar 12, 2001 Nenad Corbic Added new if support
# Feb 20, 2001 Nenad Corbic Use /proc/net/wanrouter/status to determine
# the active devices.
# Jul 17, 2000 Nenad Corbic Added version option.
# Fixed the shutdown bug. If all interfaces
# are down but modules loaded, unload
# modules.
# May 30, 2000 Nenad Corbic Updated for v2.1.4
# Enable IP Forwarding Option
# Apr 05, 2000 Nenad Corbic Updated for v2.1.3
# Feb 22. 2000 Nenad Corbic Updated for v2.1.2
# Feb 15, 2000 Nenad Corbic Load WANPIPE socket module along
# with router modules.
# Jan 18, 2000 Nenad Corbic No interface files are needed for API,
# interfaces. No IP addresses neccessary.
# Nov 09, 1999 Nenad Corbic Updated for v2.1.1
# Enabled starting and stoping
# each wanpipe device separately.
# Nov 09, 1999 Nenad Corbic Updated for v2.1.1
# Oct 04, 1999 Nenad Corbic Updated for v2.1.0
# Aug 04, 1999 Nenad Corbic Updated for v2.0.5
# Oct 15, 1998 Jaspreet Singh Updated for v2.0.4
# Dec 09, 1997 Jaspreet Singh Updated for v2.0.2
# Nov 28, 1997 Jaspreet Singh Updated for v2.0.1
# Nov 06, 1997 Jaspreet Singh Updated for v2.0.0
# Jul 28, 1997 Jaspreet Singh Updated for v1.0.5
# Jul 10, 1997 Jaspreet Singh Updated for v1.0.4
# Dec 15, 1996 Gene Kozin Initial version based on Sangoma's WANPIPE(tm)
# ============================================================================
####### FUNCTION DEFINITIONS #################################################
# ----------------------------------------------------------------------------
# Prompt user for input.
# ----------------------------------------------------------------------------
prompt()
{
if test $NONINTERACTIVE; then
return 0
fi
# BASH echo -ne "$*" >&2
echo -n "$*" >&2
read CMD rest
return 0
}
# ----------------------------------------------------------------------------
# Get Yes/No
# ----------------------------------------------------------------------------
getyn()
{
if test $NONINTERACTIVE; then
return 0
fi
while prompt "$* (y/n) "
do case $CMD in
[yY]) return 0
;;
[nN]) return 1
;;
*) echo -e "\nPlease answer y or n" >&2
;;
esac
done
}
# ----------------------------------------------------------------------------
# Pause.
# ----------------------------------------------------------------------------
pause()
{
# BASH [ $# -ne 0 ] && echo -e $* >&2
[ $# -ne 0 ] && echo -e "$*" >&2
echo -e "Press [Enter] to continue...\c" >&2
read tmp
return 0
}
check_bash ()
{
BASH_SUPPORT=`echo $BASH_VERSION | cut -d'.' -f1 2> /dev/null`
}
check_awk ()
{
major_ver=${RELEASE%%.*}
if [ $OSYSTEM = "Linux" ]; then
eval "type awk 2> /dev/null > /dev/null"
elif [ $OSYSTEM = "FreeBSD" ]; then
eval "type awk 2> /dev/null > /dev/null"
else
eval "awk 2> /dev/null > /dev/null"
fi
if [ $? -eq 0 ]; then
AWK_SUPPORT=YES
else
AWK_SUPPORT=NO
fi
}
cleanup ()
{
eval "rm -f $WAN_PROG_LOCK 2> /dev/null > /dev/null"
#Check module checks if modules are loaded and updates
#the subsys lock for LINUX
check_module
if [ $g_rc -gt 0 ]; then
exit $g_rc
fi
exit $1
}
# ----------------------------------------------------------------------------
# Check to see if a value belongs to the list.
# Return: 0 - yes
# 1 - no
# ----------------------------------------------------------------------------
check_list()
{
[ $# -lt 2 ] && return 1
val=$1
shift
# BASH for i in $*
for i in "$*"
do [ "$val" = "$i" ] && return 0
done
return 1
}
# ----------------------------------------------------------------------------
# Display error message.
# ----------------------------------------------------------------------------
error()
{
echo -e "$SCRIPT: $*!"
[ -f "$WAN_LOG" ] && echo -e "$*!" >> $WAN_LOG
return 0
}
file_exist()
{
local ret
eval "ls $1.* > /dev/null 2> /dev/null"
ret=$?
return $ret
}
# ----------------------------------------------------------------------------
# Configure network interface.
# This routine performs TCP/IP-level interface configuration. Interface name
# is given as an argument. It reads a configuration file with the same name in
# and calls ifconfig and route to do the job.
#
# Configuration file is actually a shell script containing only variables:
#
# ONBOOT=yes if not 'yes' then skip this file
# IPADDR=xxx.xxx.xxx.xxx IP address of this interface
# NETMASK=xxx.xxx.xxx.xxx Network mask for this interface
# NETWORK=xxx.xxx.xxx.xxx Network address
# BROADCAST=xxx.xxx.xxx.xxx Broadcast address
# POINTOPOINT=xxx.xxx.xxx.xxx Point-to-point address
# GATEWAY=xxx.xxx.xxx.xxx Gateway address
# ----------------------------------------------------------------------------
interface_up()
{
ONBOOT=
IPADDR=
NETMASK=
NETWORK=
BROADCAST=
POINTOPOINT=
GATEWAY=
if [ ! -d "$WAN_INTR_DIR" ]; then
error "Directory $WAN_INTR_DIR not found"
return 1
fi
if [ $NEW_IF_TYPE = YES ]; then
if [ $LINUX_DISTR = redhat ]; then
if [ $WAN_INTR_DIR = "/etc/sysconfig/network-scripts" ]; then
ifup $1
return 0
fi
fi
# BASH source $WAN_INTR_DIR/ifcfg-$1
. $WAN_INTR_DIR/ifcfg-$1
else
if [ ! -f $WAN_INTR_DIR/$1 ]; then
ifconfig $1 up
return 0;
fi
# BASH source $WAN_INTR_DIR/$1"
. $WAN_INTR_DIR/$1
fi
# Configure interface.
if [ "$IPADDR" -a "$IPADDR" != "0.0.0.0" ]; then
# Prepare ifconfig options.
OPTIONS=
if [ $OSYSTEM = "Linux" ]; then
[ "$POINTOPOINT" ] && OPTIONS="$OPTIONS pointopoint $POINTOPOINT"
else
[ "$POINTOPOINT" ] && OPTIONS="$OPTIONS $POINTOPOINT"
fi
[ "$NETMASK" ] && OPTIONS="$OPTIONS netmask $NETMASK"
[ "$BROADCAST" ] && OPTIONS="$OPTIONS broadcast $BROADCAST"
if [ $OSYSTEM = "Linux" ]; then
ifconfig $1 $IPADDR $OPTIONS
else
ifconfig $1 inet $IPADDR $OPTIONS
fi
ifconfig $1 up
else
ifconfig $1 up
fi
if [ "$GATEWAY" ]; then
check_command_exist route
if [ $? -eq 0 ]; then
if [ $OSYSTEM = "Linux" ]; then
if [ "$GATEWAY" = 0 ] || [ "$GATEWAY" = "0.0.0.0" ]; then
if [ "$IPADDR" -a "$IPADDR" != "0" -a "$IPADDR" != "0.0.0.0" ]; then
route add default dev $1
fi
else
route add default gw $GATEWAY
fi
else
if [ "$GATEWAY" = 0 ] || [ "$GATEWAY" = "0.0.0.0" ]; then
if [ "$IPADDR" -a "$IPADDR" != "0" -a "$IPADDR" != "0.0.0.0" ]; then
route add -net 0.0.0.0 -interface $1
fi
else
route add -net 0.0.0.0 $GATEWAY
fi
fi
else
if [ $OSYSTEM = "Linux" ]; then
check_command_exist ip
if [ $? -eq 0 ]; then
if [ "$GATEWAY" = 0 ] || [ "$GATEWAY" = "0.0.0.0" ]; then
ip route add default dev $1
else
ip route add default via $GATEWAY
fi
return 0
fi
fi
echo
echo "Error: Failed to set route, no route or ip cmd found"
echo
fi
fi
if [ $OSYSTEM = "Linux" ] && [ $LINUX_DISTR = redhat ]; then
/etc/sysconfig/network-scripts/ifup-routes $1
fi
return 0
}
check_module () {
if [ $OSYSTEM = "Linux" ]; then
[ -d "$ROUTER_PROC" ] && {
touch $WAN_LOCK 2> /dev/null
return 0
}
else
for i in $WAN_DRIVERS
do $MODULE_STAT | grep -q $i && {
touch $WAN_LOCK 2> /dev/null
return 0
}
done
fi
# Driver is not loaded
if [ -e $WAN_LOCK ]; then
rm -f $WAN_LOCK 2> /dev/null
fi
return 1;
}
get_mod_name()
{
local path=$1
local name=$2
if [ "$DEPMOD" = "YES" ]; then
if [ "$OSYSTEM" = "Linux" ]; then
module_name=$name
else
module_name=$name$MODULE_EXT
fi
else
module_name=$path/$name$MODULE_EXT
fi
return 0
}
load_driver () {
local err
if [ $OSYSTEM = "Linux" ]; then
$MODULE_LOAD $1 > /dev/null
err=$?
elif [ $OSYSTEM = "FreeBSD" ]; then
err=`$MODULE_LOAD $1 >/dev/null`
elif [ $OSYSTEM = "OpenBSD" -o $OSYSTEM = "NetBSD" ]; then
err=`$MODULE_LOAD -o ${WAN_MODULE_DIR}/$1.out -e$1 -p${WAN_MODULE_DIR}/$POSTINSTALL ${WAN_MODULE_DIR}/$1.o 1> /dev/null`
fi
return $err
}
unload_driver () {
local err
if [ $OSYSTEM = "OpenBSD" -o $OSYSTEM = "NetBSD" ]; then
\rm -rf ${WAN_MODULE_DIR}/$1.out
err=`$MODULE_UNLOAD -n $1 2> /dev/null`
else
err=`$MODULE_UNLOAD $1 2> /dev/null`
err=`$MODULE_UNLOAD sdladrv 2> /dev/null`
fi
#Deprecated: Confirm Alex
#FIXME
# if [ $OSYSTEM = "Linux" ]; then
# # try to unload Echo Canceller module
# eval "wan_ec_client unload 2>/dev/null"
# fi
return $err
}
#--------------------------------------------------------------------------
# Create character device /dev/wanrouter
#--------------------------------------------------------------------------
create_cdev()
{
if [ $OSYSTEM = "FreeBSD" ]; then
[ ! -e "$CDEV_WANROUTER" ] && {
mknod $CDEV_WANROUTER c $CDEV_MAJOR $CDEV_MINOR
}
fi
}
# ----------------------------------------------------------------------------
# Start WAN wanrouter.
# o create log file
# o check configuration file presence
# o load WAN drivers (using modprobe)
# o configure drivers
# o configure interfaces
# ----------------------------------------------------------------------------
load_module()
{
local opt=${1:-NO}
check_module
if [ $? -eq 0 ]; then
return 0
fi
if [ $opt != silent ]; then
echo "Starting WAN Router..."
echo "`date`: starting WAN router" >> $WAN_LOG
fi
if [ $OSYSTEM = "Linux" ]; then
if [ -e "/proc/net/wanrouter" ]; then
#Make sure to load optionl modules
wansock_config LOAD
annexg_config LOAD
lip_config LOAD
wanec_config LOAD
#RuggedCom LedTask
touch $WANPIPE_IS_RUNNING
return 0
fi
fi
# Check if SecureLevel allows to load module.
if [ $OSYSTEM = "OpenBSD" ]; then
if [ $SECURELEVEL -gt 0 ]; then
echo "Error: Your securelevel does not allow to load kernel modules!"
return 1
fi
fi
for i in $MODULES
do
module_name=$i$MODULE_EXT
if [ ! -f $module_name ]; then
if [ $OSYSTEM = "Linux" ]; then
eval "echo $OPT_MODULES | grep $i > /dev/null 2> /dev/null"
if [ $? -ne 0 ]; then
mod_error $i
return 1
fi
else
mod_error $i
return 1
fi
fi
done
[ "$ROUTER_BOOT" = "NO" -o -z "$WAN_DRIVERS" ] && {
echo -e "\n\nERROR in $WAN_CONF_DIR/wanrouter.rc file !!!"
echo -e " ROUTER_BOOT is set to NO, OR"
echo -e " WAN_DRIVERS must be set to wanpipe\n"
echo -e " wanrouter start failed !!!\n"
return 1
}
if [ $DEPMOD = YES ]; then
if [ $opt != silent ]; then
echo -n "Loading WAN drivers: "
fi
for i in $WAN_DRIVERS
do
$MODULE_STAT | grep -q $i && continue
if [ $opt != silent ]; then
echo -n "$i "
echo -n "Loading driver $i ... " >> $WAN_LOG
fi
if load_driver $i
then
echo "ok" >> $WAN_LOG
else
if [ $opt != silent ]; then
echo -e "\nFailed to load wanpipe modules !\n"
echo "fail" >> $WAN_LOG
fi
unload_module
return 1
fi
done
else
if [ $opt != silent ]; then
echo -n "Loading WAN drivers: "
fi
for i in $MODULES
do
module_name=$i$MODULE_EXT
if load_driver "$module_name"
then
if [ $opt != silent ]; then
echo "ok" >> $WAN_LOG
fi
else
if [ $opt != silent ]; then
echo -e "\nFailed to load $module_name modules !\n"
echo "fail" >> $WAN_LOG
fi
unload_module
return 1
fi
done
fi
if [ $OSYSTEM = "Linux" ]; then
wansock_config LOAD
annexg_config LOAD
fi
if ! lip_config LOAD
then
unload_module
return 1
fi
if ! wanec_config LOAD
then
lip_config UNLOAD
unload_module
return 1
fi
if [ $opt != silent ]; then
echo "done."
fi
# Create char devices (if needed)
create_cdev
touch $WANPIPE_IS_RUNNING
return 0
}
router_config()
{
# Configure router.
if [ $OSYSTEM != "Linux" ]; then
[ -e "$CDEV_WANROUTER" ] || {
return 1
}
fi
# $1 = /etc/wanpipe#.conf where # is an integer
if [ "$WAN_DYN_WANCONFIG" = YES ]; then
eval "/usr/sbin/wanconfig_client cmd=start,card=$2"
else
wanconfig -v -f $1 -a $WAN_ADSL_LIST >> $WAN_LOG
fi
}
interf_config()
{
local device=$1
local WAN_CONF=$2
local int_file
local INTERFACES
local voip_flag
#echo "============ iterf_config ================"
# Configure network interfaces.
#If TTY is defined there are no network interfaces
eval "grep \"TTY.*=.*YES\" -i $WAN_CONF > /dev/null"
if [ $? -eq 0 ]; then
echo -e "done."
return 0
fi
#eval "grep \"WAN_EDU_KIT\" -i $WAN_CONF > /dev/null"
#if [ $? -eq 0 ]; then
# echo -e "done."
# return 0
#fi
eval "grep \"WAN_DEBUG\" -i $WAN_CONF > /dev/null"
if [ $? -eq 0 ]; then
echo -e "done."
return 0
fi
eval "grep \"WAN_MLINK_PPP\" -i $WAN_CONF > /dev/null"
if [ $? -eq 0 ]; then
echo -e "done."
return 0
fi
#NC: Used to be when we used PPPD but now we
# use syncppp for PPPOA. This is just legacy
# the code should be deleted once we are sure
# we will never go back to tty model
# eval "grep \"WAN_ADSL\" -i $WAN_CONF > /dev/null"
# if [ $? -eq 0 ]; then
# eval "grep \"PPP_.*_OA\" -i $WAN_CONF > /dev/null"
# if [ $? -eq 0 ]; then
# echo -e "done."
# return 0
# fi
# fi
# cd $WAN_INTR_DIR
# if [ -f $WAN_INTERFACE_PROC_FILE ]; then
# INTERFACES=`cat $WAN_INTERFACE_PROC_FILE | grep $device | cut -d' ' -f1`
# else
INTERFACES=`grep ".*=.*$device" -i $WAN_CONF | cut -d' ' -f1 2> /dev/null`
# fi
# BASH INTERFACES=${INTERFACES// /}
INTERFACES=${INTERFACES%% }
if [ -z "$INTERFACES" ]; then
error "No interface definitions found in $WAN_CONF"
return 1
fi
echo -n "Configuring interfaces: "
for i in $INTERFACES
do
int_file=${i%%=*}
#Not every system has egrep. Egrep uses the regular expression matching.
check_command_exist egrep
if [ $? -eq 0 ]; then
API=`egrep "$int_file[[:space:]]*=" -i $WAN_CONF | cut -d',' -f3 2> /dev/null`
else
API=`grep "$int_file =" -i $WAN_CONF | cut -d',' -f3 2> /dev/null`
fi
#If the card is in backup mode, it will be used to monitor
#the primary link. We don't want IP information, thus
#we set the API field. This will cause the interface to
#come up without IP information.
eval "grep \"BACKUP.*=.*YES\" -i $WAN_CONF > /dev/null"
if [ $? -eq 0 ]; then
API=API
fi
#Substitution and replacement are no supported
#on bash versions lower than 2.0
#if the card is configured as API, bring up all
#interfaces without IP information.
if [ ! -z $API ]; then
#Remove all white spaces
if [ "$AWK_SUPPORT" = YES ]; then
API=`echo $API | awk '{ gsub(" ", "") ; print }'`
elif [ "$BASH_SUPPORT" -gt 1 ]; then
# BASH API=${API// /}
API=${API%% }
fi
if [ "$API" = "API" ] || [ "$API" = "TDM_API" ] || [ "$API" = "API_LEGACY" ] ; then
echo -n "$int_file "
ifconfig $int_file up
continue
fi
if [ "$API" = "TDM_VOICE_API" ] || [ "$API" = "TDM_SPAN_VOICE_API" ] || [ "$API" = "TDM_CHAN_VOICE_API" ]; then
echo -n "$int_file "
ifconfig $int_file up
continue
fi
if [ "$API" = "DATA_API" ]; then
echo -n "$int_file "
ifconfig $int_file up
continue
fi
if [ "$API" = TTY ]; then
continue
fi
#brings up (for example wp1_fr16 and wp1_fr16e)
#with IP addresses 0.0.0.0
if [ $API = "BRIDGE" ] || [ $API = "XMTP2_API" ];then
# Bring up BRIDGE interface
echo -n "$int_file "
ifconfig $int_file up
continue
fi
if [ $API = "TRUNK" ];then
# Bring up Trunk interface
echo -n "$int_file "
ifconfig $int_file up
continue
fi
if [ $API = "SWITCH" ];then
# Bring up SWITCH interface
echo -n "$int_file "
ifconfig $int_file up
continue
fi
if [ $API = "ANNEXG" ];then
# Bring up SWITCH interface
echo -n "$int_file "
ifconfig $int_file up
continue
fi
if [ $API = "VoIP" ] || [ $API = "TDM_VOICE" ] || [ $API = "TDM_VOICE_API" ] ;then
# Bring up VoIP interface
echo -n "$int_file "
ifconfig $int_file up
voip_flag=1
continue
fi
if [ $API = "PPPoE" ] || [ $API = "STACK" ];then
# Bring up SWITCH interface
echo -n "$int_file "
ifconfig $int_file up
continue
fi
fi
if [ $NEW_IF_TYPE = YES ]; then
if_file=ifcfg-$int_file;
else
if_file=$int_file;
fi
if [ ! -d "$WAN_INTR_DIR" ]; then
error "Directory $WAN_INTR_DIR not found"
return 1
fi
cd $WAN_INTR_DIR
if [ -s $if_file ]; then
echo -n "$int_file "
interface_up $int_file || {
error "Failed to configure interface $int_file"
continue
}
else
echo "Error Interface File $int_file not found"
return 1;
fi
done
echo -e "\ndone."
return 0
}
# ----------------------------------------------------------------------------
# Stop WAN router.
# o shut down interfaces
# o unload WAN drivers
# o remove lock file
# ----------------------------------------------------------------------------
interf_down()
{
local device=$1
local WAN_CONF=$2
local int_file
local INTERFACES
# Shut down network interfaces.
#if [ ! -d "$WAN_INTR_DIR" ]; then
# return;
#}
INTERFACES=`grep ".*=.*$device" -i $WAN_CONF | cut -d' ' -f1 2> /dev/null`
for i in $INTERFACES
do
int_file=${i%%=*}
wanrouter_script stop $device $int_file #excutes interface stop script
echo "Shutting down $device interface: $int_file"
ifconfig $int_file down
done
}
# ----------------------------------------------------------------------------
# Configure devices (all or single).
# ----------------------------------------------------------------------------
config_devices()
{
# bASH local devices=$*
local devices="$*"
for dev in $devices; do
if [ $OSYSTEM = "Linux" ] && [ ! -e "$ROUTER_PROC/$dev" ]; then
echo -e "Error: Device $dev is not supported by kernel\n"
continue
fi
WAN_CONF=$WAN_CONF_DIR/$dev.conf
check_file $WAN_CONF || cleanup 1
check_exists $dev
if [ $? -ne 0 ]; then
echo "Error: Device $dev does not exist/not allocated."
echo " Check the messages log for the number of probed "
echo " devices."
echo
continue
fi
check_dev_running $dev
if [ $? -eq 0 ]; then
echo "Error: Device $dev is already running"
echo -e " Run 'wanrouter stop $dev' first\n"
continue
fi
#Since we changed the name of dev above,
#we must check if we are running ft1 device,
#output a correct message
if [ $ft1_or_wanpipe -gt 0 ]; then
echo "Starting up device: $dev, FT1 config mode"
echo "Starting up device: $dev, FT1 config mode" >> $WAN_LOG
else
echo "Starting up device: $dev"
echo "Starting up device: $dev" >> $WAN_LOG
fi
router_config $WAN_CONF $dev
#NC: Jul 22 2003
#Just because one card
#fails to load do not stop
#other cards from loading
if [ $? -ne 0 ]; then
g_rc=1;
# #echo "Exiting rc = 3"
# cleanup 3
fi
done
return 0
}
# ----------------------------------------------------------------------------
# Unconfigure devices (all or single).
# ----------------------------------------------------------------------------
unconfig_devices()
{
# bASH local devices=$*
local devices="$*"
#Stop all routers but check if device
#is running first
for dev in $devices; do
WAN_CONF=$WAN_CONF_DIR/$dev.conf
#If we are starting ft1 device there are no
#interfaces.
wanrouter_script stop $dev
if [ $ft1_or_wanpipe -gt 0 ]; then
echo "Shutting down device: $dev, FT1 config mode"
echo "Shutting down device: $dev, FT1 config mode" >> $WAN_LOG
else
echo "Shutting down device: $dev"
echo "Shutting down device: $dev" >> $WAN_LOG
fi
router_unconfig $WAN_CONF $dev
done
#Check if any devices are still running
# If YES: don't unload the modules, just printout
# the list of active devices
# If NO: unload modules
check_and_print_still_running && cleanup 0
cd $WAN_HOME
echo -e "No devices running, Unloading Modules"
unload_module
remove_cdev
for dev in $devices; do
WAN_CONF=$WAN_CONF_DIR/$dev.conf
INTERFACES=`grep ".*=.*$dev" -i $WAN_CONF | cut -d' ' -f1 2> /dev/null`
for ifname in $INTERFACES; do
ifname=${ifname%%=*}
done
done
return 0
}
# ----------------------------------------------------------------------------
# Configure wan interfaces (all or single).
# ----------------------------------------------------------------------------
config_interfaces()
{
# bASH local devices=$*
local devices="$*"
for dev in $devices; do
WAN_CONF=$WAN_CONF_DIR/$dev.conf
check_file $WAN_CONF || cleanup 1
interf_config $dev $WAN_CONF
#NC: Jul 22 2003
#Just because one interface
#fails to load, do not stop all
#other interfaces.
# if [ $? -ne 0 ]; then
# cleanup 4
# fi
done
for dev in $devices; do
WAN_CONF=$WAN_CONF_DIR/$dev.conf
INTERFACES=`grep ".*=.*$dev" -i $WAN_CONF | cut -d' ' -f1 2> /dev/null`
for ifname in $INTERFACES; do
ifname=${ifname%%=*}
wanrouter_script start $dev $ifname
done
wanrouter_script start $dev
done
return 0
}
# ----------------------------------------------------------------------------
# unconfigure interface (all or single).
# ----------------------------------------------------------------------------
unconfig_interfaces()
{
# bASH local devices=$*
local devices="$*"
#Stop all interfaces, but check whether
#device is running first
for dev in $devices; do
if [ "$dev" = "" ]; then
continue;
fi
WAN_CONF=$WAN_CONF_DIR/$dev.conf
#Check that all configuration files exist
check_file $WAN_CONF || cleanup 1
check_exists $dev
if [ $? -eq 0 ]; then
check_dev_running $dev
if [ $? -eq 0 ]; then
WAN_CONF=$WAN_CONF_DIR/$dev.conf
interf_down $dev $WAN_CONF
fi
fi
done
return 0
}
router_unconfig()
{
if [ $OSYSTEM != "Linux" ]; then
[ -e "$CDEV_WANROUTER" ] || {
return
}
fi
if [ "$WAN_DYN_WANCONFIG" = YES ]; then
eval "/usr/sbin/wanconfig_client cmd=stop,card=$2"
else
wanconfig -v -d $1 -a $WAN_ADSL_LIST >> $WAN_LOG
fi
# Unload WAN drivers.
}
#----------------------------------------------------------------------------
# Remove character device /dev/wanrouter
#----------------------------------------------------------------------------
remove_cdev()
{
if [ $OSYSTEM = "FreeBSD" ]; then
[ -e "$CDEV_WANROUTER" ] && {
rm $CDEV_WANROUTER
}
fi
}
unload_module()
{
cd $WAN_HOME
rm -f $WANPIPE_IS_RUNNING
if [ $RUGGEDCOM = "Yes" ]; then
sleep 2
if lsof | grep '/proc/net/wanrouter' -q; then
echo "/proc/net/wanrouter still busy! Failed to make ledtask release..."
touch $WANPIPE_IS_RUNNING
return 0
fi
fi
if [ -z $FLAG_UNLOAD_NO_CHECK ]
then
check_and_print_still_running && cleanup 1
fi
if [ $OSYSTEM = "Linux" ]; then
wansock_config UNLOAD
annexg_config UNLOAD
elif [ $OSYSTEM = "OpenBSD" ]; then
if [ $SECURELEVEL -gt 0 ]; then
echo "Error: Your securelevel does not allow to load kernel modules!"
return 1
fi
fi
wanec_config UNLOAD
lip_config UNLOAD
if [ $DEPMOD = YES ]; then
for i in $WAN_DRIVERS
do $MODULE_STAT | grep -q $i && {
unload_driver $i
}
done
else
for i in $UMODULES
do
unload_driver $i
done
fi
wan_force_unload_modules
}
wanec_config ()
{
local opt=$1
if [ "$WANEC_LOAD" != "YES" ]; then
return 0
fi
if [ $OSYSTEM != "FreeBSD" -a $OSYSTEM != "Linux" ]; then
return 0
fi
file_exist $MOD10
if [ $? -ne 0 ]; then
return 0
fi
if [ $opt = UNLOAD ]; then
lsmods=`$MODULE_STAT`
for i in $WANEC_UNLOAD_DRIVERS
do
echo "$lsmods" | grep -q "$i" && {
get_mod_name $WANEC_MOD_DIR $i
if ! unload_driver $module_name
then
return 1
fi
}
done
else
for i in $WANEC_LOAD_DRIVERS
do
$MODULE_STAT | grep -q $i && continue
get_mod_name $WANEC_MOD_DIR $i
if ! load_driver $module_name
then
return 1
fi
done
fi
return 0
}
lip_config ()
{
local opt=$1
if [ "$WAN_LIP_LOAD" != "YES" ]; then
return 0
fi
if [ $OSYSTEM != "FreeBSD" -a $OSYSTEM != "Linux" ]; then
return 0
fi
file_exist $MOD9
if [ $? -ne 0 ]; then
return 0
fi
if [ $opt = UNLOAD ]; then
lsmods=`$MODULE_STAT`
for i in $LIP_UNLOAD_DRIVERS
do
echo "$lsmods" | grep -q "$i" && {
get_mod_name $WANPIPE_LIP_MOD_DIR $i
if ! unload_driver $module_name
then
return 1
fi
}
done
else
for i in $LIP_LOAD_DRIVERS
do
$MODULE_STAT | grep -q $i && continue
get_mod_name $WANPIPE_LIP_MOD_DIR $i
if ! load_driver $module_name
then
return 1
fi
done
fi
return 0
}
mod_error()
{
echo -e "\n"
error "Wanpipe Module: $1 not found !!!"
if [ $OSYSTEM = "Linux" ]; then
echo -e " WANPIPE drivers must be compiled as modules"
echo -e " Check kernel configuration in /usr/src/linux/.config: "
echo -e " CONFIG_WAN_ROUTER=m"
echo -e " CONFIG_VENDOR_SANGOMA=m\n"
else
echo -e "WANPIPE drivers are modules files. "
echo -e "Try to re-compile WANPIPE drivers."
fi
}
get_distrib()
{
grep -i "red *hat" "/etc/issue" > /dev/null
if [ $? -eq 0 ]
then
return 1; #RedHat Found
else
return 0;
fi
}
check_config()
{
for dev in $WAN_DEVICES; do
check_file "$WAN_CONF_DIR/$dev.conf" || {
return 1;
}
done
return 0;
}
check_file()
{
local file=$1
[ ! -f "$file" ] && {
if [ ! -z $file ];
then
echo -e "ERROR: Wanpipe configuration file not found:"
echo -e " $file\n"
else
echo -e "ERROR: Wanpipe configuration file not found in $WAN_CONF_DIR\n"
fi
return 1;
}
return 0;
}
print_active_devices()
{
local ac_list;
local ac_wan;
local rc=0;
local silent=${1:-0}
local devices
echo "Devices currently active:"
echo -n " "
if [ $OSYSTEM = "Linux" ]; then
#If /proc directory doesn't exist nothing
#to print, thus exit
[ ! -d "$ROUTER_PROC" ] && return 0
devices=`cat $ROUTER_PROC/status | cut -d' ' -f1 | grep wanpipe | sort`
else
check_module
if [ $? -ne 0 ]; then
return 0
fi
devices=`wanconfig status | cut -d' ' -f1 | grep wanpipe | sort`
fi
if [ ! -z "$devices" ]; then
if [ $silent -ne 0 ]; then
echo $devices
fi
rc=1;
fi
echo -e "\n"
return $rc
}
check_exists () {
local device=$1
if [ $OSYSTEM = "Linux" ]; then
[ ! -d "$ROUTER_PROC" ] && return 1 #Device not running
if [ ! -f $ROUTER_PROC/$device ]; then
echo "Error: Device $device does not exist/not allocated."
echo " Check the messages log for the number of probed devices."
echo
return 1
fi
fi
# Device exists
return 0
}
check_dev_running ()
{
local device=$1
local res
if [ $OSYSTEM = "Linux" ]; then
[ ! -d "$ROUTER_PROC" ] && return 1 #Device not running
res=`cat $ROUTER_PROC/status | grep "$device "`
else
check_module
if [ $? -ne 0 ]; then
return 1
fi
res=`wanconfig status | grep "$device "`
fi
[ ! -z "$res" ] && {
#Device running
return 0
}
#Device not running
return 1;
}
check_and_print_still_running ()
{
local devices
if [ $OSYSTEM = "Linux" ]; then
if [ ! -d $ROUTER_PROC ]; then
return 1
fi
devices=`cat $ROUTER_PROC/status | cut -d' ' -f1 | grep wanpipe | sort`
else
check_module
if [ $? -ne 0 ]; then
return 1
fi
devices=`wanconfig status | cut -d' ' -f1 | grep wanpipe | sort`
fi
if [ ! -z "$devices" ]; then
echo "Devices Still Running:"
# BASH echo -en "\t"
echo -n " "
echo $devices
echo
return 0
fi
return 1
}
create_ft1_conf () {
local dev=$1
local res
wandev=`grep "wanpipe.*=" $WAN_CONF_DIR/$dev.conf 2> /dev/null`
res=$?
if [ $res -eq 0 ]; then
wandev=${wandev%%=*}
if [ $AWK_SUPPORT = YES ]; then
eval "wandev=`echo $wandev | awk '{ gsub(" ", "") ; print }'`"
elif [ $BASH_SUPPORT -gt 1 ]; then
# BASH wandev=${wandev// /}
wandev=${wandev%% }
fi
else
echo -e "Error: Device name not found in $WAN_CONF_DIR/$dev.conf\n"
cleanup 1
fi
wancard=`grep "CARD_TYPE.*=.*" -i $WAN_CONF_DIR/$dev.conf 2> /dev/null`
wancpu=`grep "S514CPU.*=.*" -i $WAN_CONF_DIR/$dev.conf 2> /dev/null`
wanslot_auto=`grep "AUTO_PCISLOT.*=.*" -i $WAN_CONF_DIR/$dev.conf 2> /dev/null`
wanslot=`grep "PCISLOT.*=.*" -i $WAN_CONF_DIR/$dev.conf 2> /dev/null`
wanbus=`grep "PCIBUS.*=.*" -i $WAN_CONF_DIR/$dev.conf 2> /dev/null`
wanio=`grep "IOPORT.*=.*" -i $WAN_CONF_DIR/$dev.conf 2> /dev/null`
wanirq=`grep "IRQ.*=.*" -i $WAN_CONF_DIR/$dev.conf 2> /dev/null`
if [ -z "$wancard" ]; then
echo -e "Error: Missing fileds in $WAN_CONF_DIR/$dev.conf"
echo -e " configuraton file, in [$wandev] section.\n "
cleanup 1
fi
if [ -z "$wancpu" -o -z "$wanslot" ]; then
if [ -z "$wanio" -o -z "$wanirq" ]; then
echo -e "Error: Missing fileds in $WAN_CONF_DIR/$dev.conf"
echo -e " configuraton file, in [$wandev] section.\n "
cleanup 1
fi
fi
cat <<EOM > $WAN_CONF_DIR/$FT1_CONF
#FT1 Configuration File
#
# Note: This file was automatically generated by wanrouter
# script.
# DO NOT CHANGE IT
#
# CHDLC Protocol is used since, its firmware is the
# only one with FT1 configuration functions.
[devices]
$wandev = WAN_CHDLC, Cisco HDLC Firmware
[$wandev]
$wancard
$wancpu
$wanslot_auto
$wanslot
$wanbus
$wanio
$wanirq
Firmware = $WAN_HOME/firmware/cdual514.sfm # adapter firmware
#--------------------- END OF FT1 CONFIGURATION ------------------------
EOM
}
check_config_opt ()
{
local dev=$1
local opt=$2
case $dev in
ft1_wanpipe*)
#Strip off 'ft1_' from 'ft1_wanpipe#'
dev=${dev##ft1_}
#Check if wanpipe#.conf file exists
check_file "$WAN_CONF_DIR/$dev.conf"
if [ $? -gt 0 ]; then
cleanup 1
fi
#If we are starting the router up, create
#the ft1.conf file in $WAN_CONF_DIR directory
if [ $opt -eq 0 ]; then
create_ft1_conf $dev
fi
#Return string ft1
result "ft1"
#Get the wanpipe device number, and return it
#as a return code. This indicates that we want
#to setup ft1 device
dev=${dev##wanpipe}
if [ $AWK_SUPPORT = YES ]; then
dev=`echo $dev | awk '{ gsub(" ", "") ; print }'`
elif [ $BASH_SUPPORT -gt 1 ]; then
# BASH dev=${dev// /}
dev=${dev%% }
fi
return $dev
;;
wanpipe*)
#Check if wanpipe#.conf file exists
check_file "$WAN_CONF_DIR/$dev.conf"
if [ $? -gt 0 ]; then
cleanup 1
fi
#return string wanpipe#
result $dev
#return zero which indicates that we
#want to startup reglar wanpipe device
#not ft1 device
return 0
;;
*)
#Illegal syntax obtained
echo "Error: Incorrect device name syntax !"
cleanup 1
;;
esac
}
check_ft1_config ()
{
local ft1=$1
if [ $ft1 = ft1 ]; then
return 0
else
return 1
fi
}
result () {
echo $1 > $RC
}
check_osystem () {
if [ $OSYSTEM = "Linux" ]; then
if [ -d $WAN_LOCK_DIR ]; then
return 0
else
echo
echo "Warning: WAN_LOCK_DIR = $WAN_LOCK_DIR does not exist!"
echo "Please update the WAN_LOCK_DIR in /etc/wanpipe/wanrouter.rc"
echo
fi
if [ -d /var/lock/subsys ]; then
WAN_LOCK_DIR=/var/lock/subsys
elif [ -d /var/lock ]; then
WAN_LOCK_DIR=/var/lock
else
WAN_LOCK_DIR=$WAN_CONF_DIR
fi
fi
}
wansock_config ()
{
local opt=$1
if [ $OSYSTEM != "Linux" ]; then
return 0
fi
file_exist $MOD5
if [ $? -ne 0 ]; then
return 0
fi
if [ $DEPMOD != YES ]; then
return 0
fi
if [ $opt = UNLOAD ]; then
$MODULE_STAT | grep -q "$AF_WANPIPE_DRIVERS" && {
unload_driver $AF_WANPIPE_DRIVERS
}
else
load_driver $AF_WANPIPE_DRIVERS
fi
return 0
}
annexg_config ()
{
local opt=$1
if [ $OSYSTEM != "Linux" ]; then
return 0
fi
if [ "$WAN_ANNEXG_LOAD" != "YES" ]; then
return 0
fi
file_exist $MOD6
if [ $? -ne 0 ]; then
return 0
fi
file_exist $MOD7
if [ $? -ne 0 ]; then
return 0
fi
file_exist $MOD8
if [ $? -ne 0 ]; then
return 0
fi
if [ $DEPMOD != YES ]; then
return 0
fi
if [ $opt = UNLOAD ]; then
lsmods=`$MODULE_STAT`
for i in $ANNEXG_UNLOAD_DRIVERS
do
echo "$lsmods" | grep -q "$i" && {
unload_driver $i
}
done
else
for i in $ANNEXG_LOAD_DRIVERS
do
load_driver $i
done
fi
return 0
}
print_wanpipe_config () {
echo -e "Wanpipe Config:\n"
if [ $OSYSTEM = "Linux" ]; then
cat /proc/net/wanrouter/config
else
wanconfig config
fi
}
print_wanrouter_status () {
echo -e "\nWanrouter Status:\n"
if [ $OSYSTEM = "Linux" ]; then
cat /proc/net/wanrouter/status
else
wanconfig status
fi
}
print_config_summary ()
{
local pfiles;
local pfile;
local pdev;
local id=$(id -u)
PROC_FILE=~/proc_output.$$
if [ -e /dev/shm ] && [ $id -eq 0 ]; then
PROC_FILE=/dev/shm/proc_output.$$
fi
cd $WAN_HOME
pfiles=`ls wanpipe*\.conf 2> /dev/null`
if [ $? -ne 0 ]; then
echo "No Wanpipe configuration files found in $WAN_HOME";
return;
fi
echo -e "Configuration File Summary in : $WAN_HOME/\n"
echo -e "Device\t\tProtocol\tType Cpu/Io Slot/Irq Bus\tState"
echo -e "------------------------------------------------------------------------"
for pfile in $pfiles
do
#Test for invalid file: wanpipe1.conf.tmp"
echo $pfile | grep ".*\..*\..*" > /dev/null 2> /dev/null
if [ $? -eq 0 ]; then
continue
fi
pdev=`grep "^wanpipe*=*" $pfile | cut -d'=' -f1 | cut -d' ' -f1 2> /dev/null`
if [ $? -ne 0 ]; then
continue
fi
if [ -z "$pdev" ]; then
continue
fi
echo -n "$pdev "
pprot=`grep "^wanpiped*=*" $pfile | cut -d'=' -f2 | awk '{ gsub(" ", "") ; print }' | cut -d',' -f1`
if [ $? -ne 0 ]; then
continue
fi
if [ -z $pprot ]; then
continue
fi
if [ $pprot = WAN_X25 ] || [ $pprot = WAN_PPP ] || [ $pprot = WAN_FR ] || [ $pprot = WAN_MFR ] || [ $pprot = WAN_BSC ] || [ $pprot = WAN_AFT ] || [ $pprot = WAN_SS7 ] || [ $pprot = WAN_POS ] || [ $pprot = WAN_ATM ]; then
#echo -e -n "$pprot\t\t"
echo -n "$pprot "
else
echo -n "$pprot "
fi
phw=`grep "^S514CPU*" $pfile`
if [ $? -eq 0 ]; then
echo -n "PCI "
pcpu=`grep -i "^S514CPU*" $pfile | cut -d'=' -f2 | awk '{ gsub(" ", "") ; print }' | cut -d',' -f1`
echo -n "$pcpu "
pslot=`grep -i "^PCISLOT*" $pfile | cut -d'=' -f2 | awk '{ gsub(" ", "") ; print }' | cut -d',' -f1`
echo -n "$pslot "
pbus=`grep -i "^PCIBUS*" $pfile | cut -d'=' -f2 | awk '{ gsub(" ", "") ; print }' | cut -d',' -f1`
if [ -z $pbus ]; then
echo -n "0 "
else
echo -n "$pbus "
fi
else
if [ $pprot = WAN_ADSL ]; then
echo -n "PCI "
echo -n "N/A "
pslot=`grep -i "^PCISLOT*" $pfile | cut -d'=' -f2 | awk '{ gsub(" ", "") ; print }' | cut -d',' -f1`
echo -n "$pslot "
pbus=`grep -i "^PCIBUS*" $pfile | cut -d'=' -f2 | awk '{ gsub(" ", "") ; print }' | cut -d',' -f1`
if [ -z $pbus ]; then
echo -n "0 "
else
echo -n "$pbus "
fi
else
echo -n "ISA "
pport=`grep -i "^IOPORT*" $pfile | cut -d'=' -f2 | awk '{ gsub(" ", "") ; print }' | cut -d',' -f1`
echo -n "$pport "
pport=`grep -i "^IRQ*" $pfile | cut -d'=' -f2 | awk '{ gsub(" ", "") ; print }' | cut -d',' -f1`
echo -n "$pport "
echo -n "n/a "
fi
fi
if [ $OSYSTEM = "Linux" ]; then
if [ -e /proc/net/wanrouter ]; then
if [ ! -e $PROC_FILE ]; then
cat /proc/net/wanrouter/status > $PROC_FILE
fi
pstate=`cat $PROC_FILE | grep "$pdev " | cut -d'|' -f4 | awk '{ gsub(" ", "") ; print }'`
else
pstate=""
fi
else
check_module
if [ $? -eq 0 ]; then
pstate=`wanconfig status | grep $pdev | cut -d'|' -f4 | awk '{ gsub(" ", "") ; print }'`
else
pstate=""
fi
fi
if [ "$pstate" = "" ]; then
echo -n "Inactive"
else
echo -n "$pstate"
fi
echo
done
if [ -e $PROC_FILE ]; then
rm -f $PROC_FILE
fi
}
wanrouter_if_debug()
{
echo
echo "Debug Info for $1"
echo
echo "WANPIPE Release: $ROUTER_VERSION"
echo
echo
eval "$IFCONFIG_LIST | grep -w $1 >> /dev/null 2>>/dev/null"
if [ $? -ne 0 ]; then
check_dev_running $1
if [ $? -eq 0 ]; then
wanconfig -D $1
return;
fi
echo
echo "Error: Interface $1 does not exist!"
echo
cleanup 1
return;
fi
if [ ! -f /usr/sbin/wanpipemon ]; then
echo
echo "Error: /usr/sbin/wanpipemon not found"
echo "Solution: Re-install latest wanpipe release"
echo
return;
fi
eval "/usr/sbin/wanpipemon -i $1 -c xm 2>> /dev/null"
if [ $? -ne 0 ]; then
echo
echo "Error: /usr/sbin/wanpipemon failed!"
echo " Make sure $1 is a valid wanpipe interface"
echo " Otherwise call Sangoma Tech Support"
echo
return
fi
sleep 3
eval "/usr/sbin/wanpipemon -i $1 -c sc"
if [ $? -ne 0 ]; then
echo
echo "Error: /usr/sbin/wanpipemon failed!"
echo " Make sure $1 is a valid wanpipe interface"
echo " Otherwise call Sangoma Tech Support"
echo
return
fi
sleep 2
eval "/usr/sbin/wanpipemon -i $1 -c sc"
if [ $? -ne 0 ]; then
echo
echo "Error: /usr/sbin/wanpipemon failed!"
echo " Make sure $1 is a valid wanpipe interface"
echo " Otherwise call Sangoma Tech Support"
echo
return
fi
sleep 5
echo "Start WANPIPE /var/log/messages"
echo
if [ $OSYSTEM = "Linux" ]; then
eval "tail -n 200 /var/log/messages | grep -i \"[wanpipe|sdladrv]\" "
else
eval "tail -n 200 /var/log/messages | grep -i \"wanpipe\|sdladrv\" "
fi
echo
echo "End of WANPIPE /var/log/messages"
echo
sleep 5
echo
echo "---------- Starting Trace [ PRESS ENTER TO STOP ] ---------"
echo
sleep 3
eval "/usr/sbin/wanpipemon -i $1 -c tr"
if [ $? -ne 0 ]; then
echo
echo "Error: /usr/sbin/wanpipemon failed!"
echo " Make sure $1 is a valid wanpipe interface"
echo " Otherwise call Sangoma Tech Support"
echo
fi
}
pci_parity_ctrl ()
{
local parity_cmd;
local pdev;
local IDS;
local verbosity=${2:-1}
if [ $OSYSTEM != "Linux" ]; then
echo "Error: PCI Parity Ctrl only available on Linux"
echo
return
fi
IDS=`lspci | cut -d' ' -f1`
if [ -z $1 ]; then
echo "Displaying System PCI Parity Configuration";
echo "=========================================="
echo
lspci -vvv | grep Parity
echo
echo "=========================================="
return
fi
parity_cmd=${1:-"off"}
if [ $parity_cmd != "on" ]; then
parity_cmd="off";
fi
eval "type setpci 2> /dev/null > /dev/null"
if [ $? -ne 0 ]; then
echo "Parity Set Error: setpci utility not found!"
return
fi
if [ $verbosity -gt 0 ]; then
echo "Setting PCI Parity to $parity_cmd";
fi
for pdev in $IDS
do
if [ "$parity_cmd" = "on" ]; then
eval "setpci -s $pdev 3e.b=0x7"
else
eval "setpci -s $pdev 3e.b=0x4"
fi
done
return
}
wanrouter_pre_start()
{
if [ "$WAN_PCI_PARITY" = "OFF" ]; then
echo "Wanrouter: Disabling PCI Parity on Start!" >> $WAN_LOG;
pci_parity_ctrl "off" 0
elif [ "$WAN_PCI_PARITY" = "ON" ]; then
echo "Wanrouter: Enabling PCI Parity on Start!" >> $WAN_LOG;
pci_parity_ctrl "on" 0
fi
}
wanrouter_debug ()
{
local err=0
echo
if [ ! -d $WAN_HOME ]; then
echo "Error: $WAN_HOME not found"
echo "Reason: Wanpipe not installed properly"
echo "Solution: Re-install wanpipe"
return
fi
check_module
if [ $? -ne 0 ]; then
load_module
if [ $? -ne 0 ]; then
if [ $OSYSTEM = "Linux" ]; then
echo "Error: /proc/net/wanrouter not found"
fi
echo "Reason: Wanpipe kernel modules failed to load"
echo "Solution: Run 'wanrouter hwprobe' or 'wanrouter start'"
echo " Contact Sangoma Tech Support"
echo
return
fi
unload_module
fi
if [ ! -f $WAN_HOME/wanpipe1.conf ]; then
echo "Warning: wanpipe1.conf configuration file not found"
echo "Reason: did not run /usr/sbin/wancfg to create it"
echo "Solution: run /usr/sbin/wancfg :)"
echo
err=1
fi
eval "grep -i invalid $WAN_LOG"
if [ $? -eq 0 ]; then
echo
echo "Error: Configuration file syntax error in $WAN_LOG"
echo "Reason: Miss-configuration: run 'wanrouter conflog'"
echo "Solution: Re-run /usr/sbin/wancfg and configure all variables "
echo
err=1
fi
eval "tail -n 20 /var/log/messages | grep -i \"wanpipe.*error[,:]\" "
if [ $? -eq 0 ]; then
echo "------------------------------------------"
echo "Error: Error occured during wanrouter startup/shutdown"
echo "Reason: Check /var/log/messages file: run 'wanrouter messages'"
echo "Solution: Review /var/log/messages and contact Sangoma Tech Support"
echo
err=1
else
eval "tail -n 20 /var/log/messages | grep -i \"sdladrv.*invalid[,:]\""
if [ $? -eq 0 ]; then
echo "------------------------------------------"
echo "Error: Config error occured during wanrouter startup/shutdown"
echo "Reason: Check /var/log/messages file: run 'wanrouter messages'"
echo "Solution: Review /var/log/messages and contact Sangoma Tech Support"
echo
err=1
else
eval "tail -n 20 /var/log/messages | grep -i \"wanpipe.*warning\" "
if [ $? -eq 0 ]; then
echo "------------------------------------------"
echo "Warning: Warning occured during wanrouter startup/shutdown"
echo "Reason: Check /var/log/messages file"
echo "Solution: Review /var/log/messages and contact Sangoma Tech Support"
echo
err=1
fi
fi
fi
if [ $err -eq 0 ]; then
echo "Wanpipe environment/utilites/modules/operation OK"
fi
echo
}
check_command_exist ()
{
local cmd=$1
local cmd_rc
if [ $OSYSTEM = "Linux" ]; then
eval "type $1 > /dev/null 2> /dev/null"
else
eval "which $1 > /dev/null 2> /dev/null"
fi
cmd_rc=$?
return $cmd_rc
}
init_meta_conf ()
{
ROUTER_BOOT=
WANPIPE_CONF_DIR=
WANPIPE_INTR_DIR=
ROUTER_LOG=
ROUTER_LOCK=
ROUTER_IP_FORWARD=
NEW_IF_TYPE=
WANCFG_LIB=
WAN_DEVICES=
ROUTER_BOOT=
WAN_CONF_DIR=
WAN_INTR_DIR=
WAN_LOG=
WAN_LOCK=
WAN_LOCK_DIR=
WAN_IP_FORWARD=
NEW_IF_TYPE=
WAN_LIB_DIR=
WAN_ADSL_LIST=
WAN_DEVICES=
}
read_meta_conf ()
{
if [ $OSYSTEM = "Linux" ]; then
WAN_HOME=/etc/wanpipe
elif [ $OSYSTEM = "FreeBSD" -o $OSYSTEM = "OpenBSD" ]; then
WAN_HOME=/usr/local/etc/wanpipe
wanrouter_rc_file=""
if [ -r /etc/rc.conf ]; then
. /etc/rc.conf
fi
if [ -n "$wanrouter_rc_file" ]; then
WAN_HOME=${wanrouter_rc_file%/*}
fi
fi
WAN_CONF_DIR=$WAN_HOME
META_CONF=$WAN_HOME/wanrouter.rc
WAN_INTR_DIR=$WAN_HOME/interfaces
# Read meta-configuration file.
if [ -f $META_CONF ]
then . $META_CONF
else
return 1
fi
if [ -f $WAN_HOME/global.conf ]; then
. $WAN_HOME/global.conf
fi
return 0
}
meta_conf_compatiblity ()
{
WAN_CONF_DIR=$WANPIPE_CONF_DIR
WAN_INTR_DIR=$WANPIPE_INTR_DIR
WAN_LOG=$ROUTER_LOG
WAN_LOCK=$ROUTER_LOCK
WAN_LOCK_DIR=${ROUTER_LOCK%/*}
WAN_IP_FORWARD=$ROUTER_IP_FORWARD
WAN_LIB_DIR=$WANCFG_LIB
WAN_ADSL_LIST=$WANPIPE_CONF_DIR/wan_adsl.list
}
wanrouter_script()
{
local cmd=$1
local dev=$2
local ifname=$3
#echo "Starting Script: $WAN_SCRIPTS_DIR/$dev-$ifname-$cmd"
if [ "$ifname" != "" ]; then
#Interface name exists
if [ -f "$WAN_SCRIPTS_DIR/$dev-$ifname-$cmd" ]; then
eval "sh $WAN_SCRIPTS_DIR/$dev-$ifname-$cmd $dev $ifname"
fi
elif [ "$dev" != "" ]; then
#Device name exists
if [ -f "$WAN_SCRIPTS_DIR/$dev-$cmd" ]; then
eval "sh $WAN_SCRIPTS_DIR/$dev-$cmd $dev"
fi
else
#Global Cmd
if [ -f "$WAN_SCRIPTS_DIR/$cmd" ]; then
eval "sh $WAN_SCRIPTS_DIR/$cmd"
fi
fi
}
generate_adsl_list()
{
local vci=0;
local vpi=0;
echo "35 0" > $WAN_ADSL_LIST
echo "35 8" >> $WAN_ADSL_LIST
vci=30
vpi=0
while [ 1 ]; do
while [ 1 ]; do
echo "$vci $vpi" >> $WAN_ADSL_LIST
vpi=$((vpi+1))
if [ $vpi = 10 ]; then
vpi=0
break;
fi
done
vci=$((vci+1))
if [ $vci -eq 40 ]; then
vci=30
break;
fi
done
}
# FIXME: Add code for BSD
wan_force_unload_modules()
{
if [ $OSYSTEM = "Linux" ]; then
if [ -e "$ROUTER_PROC" ] && [ -e "$ROUTER_PROC/status" ]; then
wp_list=`cat $ROUTER_PROC/status | cut -d' ' -f1 | grep wanpipe | sort -r`
if [ -z $wp_list ]; then
mod_list=`cat /proc/modules | grep wan | cut -d ' ' -f1 | xargs`
for tmp_mod in $mod_list
do
eval "rmmod $tmp_mod >> /dev/null 2>> /dev/null"
done
fi
fi
fi
}
# FIXME: Add code for BSD
stop_running_wanpipes ()
{
if [ $OSYSTEM = "Linux" ]; then
if [ -e "$ROUTER_PROC/status" ]; then
wp_list=`cat $ROUTER_PROC/status | cut -d' ' -f1 | grep wanpipe | sort -r`
for list in $wp_list
do
# BASH list=${list// /};
list=${list%% };
if [ ! -z $list ]; then
eval "rm -f $WAN_PROG_LOCK 2> /dev/null > /dev/null"
wanrouter stop $list
fi
done
wan_force_unload_modules
fi
fi
}
config_wanrouter_rc ()
{
local sequence
local num
local val
cat << EOM
WANPIPE STARTUP CONFIG
Current Wanpipe devices configured
to start on bootup:
$WAN_DEVICES
Please specify new startup string:
eg: wanpipe1 wanpipe2 ...
Note: Single space must exist between
device names.
EOM
echo -n "Enter Wanpipe Startup Sequence: "
read sequence
if [ -z "$sequence" ]; then
echo
echo "Error: startup sequence must contain at least one device name"
echo " eg: wanpipe1"
echo
return
fi
eval "echo $sequence | grep \"wanpipe\d*\" > /dev/null 2> /dev/null"
if [ $? -ne 0 ]; then
echo
echo "Error: startup sequence must contain at least one device name"
echo " eg: wanpipe1"
echo
return
fi
echo
echo "New Sequence is: $sequence"
echo
getyn "Is the above sequence correct ?"
if [ $? -eq 0 ]; then
echo
echo "Setting wanpipe startup sequence to: $sequence"
echo
cat $META_CONF | grep "WAN_DEVICES=" -v > $WAN_HOME/tmp.$$
echo "WAN_DEVICES=\"$sequence\"" >> $WAN_HOME/tmp.$$
cat $WAN_HOME/tmp.$$ > $META_CONF
fi
}
init_global_params()
{
if [ $OSYSTEM = "Linux" ]; then
ROUTER_VERSION=7.0.27
IFCONFIG_LIST=ifconfig
MODULE_STAT=lsmod
WAN_DRIVERS="wanpipe"
AF_WANPIPE_DRIVERS=af_wanpipe
ANNEXG_LOAD_DRIVERS="wanpipe_lapb wanpipe_x25 wanpipe_dsp"
ANNEXG_UNLOAD_DRIVERS="wanpipe_dsp wanpipe_x25 wanpipe_lapb"
LIP_LOAD_DRIVERS="wanpipe_lip"
LIP_UNLOAD_DRIVERS="wanpipe_lip"
WANEC_LOAD_DRIVERS="wanec"
WANEC_UNLOAD_DRIVERS="wanec"
MODULE_LOAD=modprobe
MODULE_UNLOAD="modprobe -r"
MODULE_EXT=".ko"
DEPMOD=YES
check_command_exist modprobe
if [ $? -ne 0 ]; then
check_command_exist insmod
if [ $? -eq 0 ]; then
DEPMOD=NO
MODULE_LOAD=insmod
MODULE_UNLOAD=rmmod
fi
fi
MOD1=/lib/modules/sdladrv
MOD2=/lib/modules/wanrouter
MOD3=/lib/modules/wanpipe_syncppp
MOD4=/lib/modules/wanpipe
MOD5=/lib/modules/af_wanpipe
if [ -d /lib/modules/$(uname -r) ]; then
uname -r | grep "^2.4.*" > /dev/null
if [ $? -eq 0 ]; then
MODULE_EXT=".o"
if [ -d /lib/modules/$(uname -r)/kernel ]; then
MOD1=/lib/modules/$(uname -r)/kernel/drivers/net/wan/sdladrv
MOD2=/lib/modules/$(uname -r)/kernel/net/wanrouter/wanrouter
MOD3=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe_syncppp
MOD4=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe
MOD5=/lib/modules/$(uname -r)/kernel/net/wanrouter/af_wanpipe
MOD6=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe_lapb
MOD7=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe_x25
MOD8=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe_dsp
MOD9=/lib/modules/$(uname -r)/kernel/net/wanrouter/wanpipe_lip
WANPIPE_LIP_MOD_DIR=/lib/modules/$(uname -r)/kernel/net/wanrouter
MOD10=/lib/modules/$(uname -r)/kernel/net/wanrouter/wanec
WANEC_MOD_DIR=/lib/modules/$(uname -r)/kernel/net/wanrouter
fi
else
uname -r | grep "^2.6.*" > /dev/null
if [ $? -eq 0 ]; then
if [ -d /lib/modules/$(uname -r)/kernel ]; then
MOD1=/lib/modules/$(uname -r)/kernel/drivers/net/wan/sdladrv
MOD2=/lib/modules/$(uname -r)/kernel/net/wanrouter/wanrouter
MOD3=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe_syncppp
MOD4=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe
MOD5=/lib/modules/$(uname -r)/kernel/net/wanrouter/af_wanpipe
MOD6=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe_lapb
MOD7=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe_x25
MOD8=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe_dsp
MOD9=/lib/modules/$(uname -r)/kernel/net/wanrouter/wanpipe_lip
WANPIPE_LIP_MOD_DIR=/lib/modules/$(uname -r)/kernel/net/wanrouter
MOD10=/lib/modules/$(uname -r)/kernel/net/wanrouter/wanec
WANEC_MOD_DIR=/lib/modules/$(uname -r)/kernel/net/wanrouter
fi
else
#Kernels 3 and above
MOD1=/lib/modules/$(uname -r)/kernel/drivers/net/wan/sdladrv
MOD2=/lib/modules/$(uname -r)/kernel/net/wanrouter/wanrouter
MOD3=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe_syncppp
MOD4=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe
MOD5=/lib/modules/$(uname -r)/kernel/net/wanrouter/af_wanpipe
MOD6=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe_lapb
MOD7=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe_x25
MOD8=/lib/modules/$(uname -r)/kernel/drivers/net/wan/wanpipe_dsp
MOD9=/lib/modules/$(uname -r)/kernel/net/wanrouter/wanpipe_lip
WANPIPE_LIP_MOD_DIR=/lib/modules/$(uname -r)/kernel/net/wanrouter
MOD10=/lib/modules/$(uname -r)/kernel/net/wanrouter/wanec
WANEC_MOD_DIR=/lib/modules/$(uname -r)/kernel/net/wanrouter
fi
fi
fi
MODULES="$MOD1 $MOD2 $MOD3 $MOD4 $MOD5"
OPT_MODULES="$MOD3 $MOD5"
UMODULES="af_wanpipe wanpipe wanpipe_syncppp wanrouter sdladrv"
elif [ $OSYSTEM = "FreeBSD" ]; then
SYSCTL=/sbin/sysctl
AWK=/usr/bin/awk
PKGINFO=/usr/sbin/pkg_info
major_ver=${RELEASE%%.*}
ROUTER_VERSION=`$PKGINFO | $AWK '$1~/wanpipe/ {print $1}'`
ROUTER_VERSION=${ROUTER_VERSION#wanpipe-}
IFCONFIG_LIST=ifconfig
CDEV_WANROUTER=/dev/$SCRIPT
CDEV_MAJOR=139
CDEV_MINOR=0
MODULE_STAT=kldstat
MODULE_LOAD=kldload
MODULE_UNLOAD=kldunload
MODULE_EXT=".ko"
DEPMOD=YES
if [ "$major_ver" = "5" -o "$major_ver" = "6" ]; then
MODULE_DIR=/boot/modules
else
MODULE_DIR=/modules
fi
if [ -z ${WAN_MODULE_DIR} ]; then
WAN_MODULE_DIR=${MODULE_DIR}
fi
dir=`kldconfig -r |grep $WAN_MODULE_DIR 2>/dev/null`
if [ -z $dir ]; then
kldconfig -m $WAN_MODULE_DIR 2>/dev/null
fi
usymbol=`nm $WAN_MODULE_DIR/wanpipe.ko | grep " U zt_register" > /dev/null`
if [ -n $usymbol ]; then
kldconfig -m /usr/local/lib/zaptel 2>/dev/null
fi
MOD9="${WAN_MODULE_DIR}/wanpipe_lip"
WANPIPE_LIP_MOD_DIR=${WAN_MODULE_DIR}
MOD10="${WAN_MODULE_DIR}/wanec"
WANEC_MOD_DIR=${WAN_MODULE_DIR}
MODULES="${WAN_MODULE_DIR}/sdladrv ${WAN_MODULE_DIR}/wanrouter ${WAN_MODULE_DIR}/wanpipe"
UMODULES="wanpipe_lip wanec wanpipe wanrouter sdladrv"
WAN_DRIVERS="wanpipe"
LIP_LOAD_DRIVERS="wanpipe_lip"
LIP_UNLOAD_DRIVERS="wanpipe_lip"
WANEC_LOAD_DRIVERS="wanec"
WANEC_UNLOAD_DRIVERS="wanec"
elif [ $OSYSTEM = "OpenBSD" ]; then
SYSCTL=/sbin/sysctl
AWK=/usr/bin/awk
PKGINFO=/usr/sbin/pkg_info
SECURELEVEL=`$SYSCTL -n kern.securelevel`
ROUTER_VERSION=`$PKGINFO | $AWK '$1~/wanpipe/ {$1=""; print }'`
IFCONFIG_LIST="ifconfig -a"
CDEV_WANROUTER=/dev/$SCRIPT
CDEV_MAJOR=139
CDEV_MINOR=0
POSTINSTALL=create_cdev
MODULE_STAT=modstat
MODULE_LOAD=modload
MODULE_UNLOAD=modunload
MODULE_DIR=/usr/lkm
DEPMOD=YES
if [ -z ${WAN_MODULE_DIR} ]; then
WAN_MODULE_DIR=${MODULE_DIR}
else
if [ "${WAN_MODULE_DIR}" != ${MODULE_DIR} ]; then
DEPMOD=NO
fi
fi
MODULE_EXT=".o"
MODULES="${WAN_MODULE_DIR}/wanpipe"
UMODULES="wanpipe"
WAN_DRIVERS="wanpipe"
elif [ $OSYSTEM = "NetBSD" ]; then
SYSCTL=/sbin/sysctl
AWK=/usr/bin/awk
PKGINFO=/usr/sbin/pkg_info
SECURELEVEL=`$SYSCTL -n kern.securelevel`
ROUTER_VERSION=`$PKGINFO | $AWK '$1~/wanpipe/ {$1=""; print }'`
IFCONFIG_LIST="ifconfig -a"
CDEV_WANROUTER=/dev/$SCRIPT
CDEV_MAJOR=139
CDEV_MINOR=0
POSTINSTALL=create_cdev
MODULE_STAT=modstat
MODULE_LOAD=modload
MODULE_UNLOAD=modunload
MODULE_DIR=/usr/lkm
DEPMOD=YES
if [ -z ${WAN_MODULE_DIR} ]; then
WAN_MODULE_DIR=${MODULE_DIR}
else
if [ "${WAN_MODULE_DIR}" != ${MODULE_DIR} ]; then
DEPMOD=NO
fi
fi
MODULE_EXT=".o"
MODULES="${WAN_MODULE_DIR}/wanpipe"
UMODULES="wanpipe"
WAN_DRIVERS="wanpipe"
fi
return 0
}
####### MAIN #################################################################
# set -x
RCDLINKS="0,K10 1,K10 2,S20 3,S20 4,S20 5,S20 6,K10"
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/loca/bin:/usr/local/sbin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
OSYSTEM=`uname -s`
RELEASE=`uname -r`
PROD=wanpipe
SCRIPT=wanrouter
REDHAT=/usr/src/redhat
ROUTER_PROC=/proc/net/wanrouter
WAN_PROG_LOCK=/var/lock/wanrouter_lock
DEPMOD=YES
LINEPROBE_PATH=/usr/sbin/lineprobe
WANPIPE_IS_RUNNING=/var/run/wanpipe_is_running
g_rc=0;
RUGGEDCOM=No
check_bash
check_awk
# Return code
RC=$(pwd)/return_code
GET_RC="cat $RC"
FT1_CONF=ft1.conf
# Ignore interrupt signals.
trap '' 2
init_meta_conf
read_meta_conf
if [ $? -ne 0 ]; then
echo "$SCRIPT: Error: $META_CONF not found!"
exit 1;
fi
if [ "$WANPIPE_CONF_DIR" != "" -a "$WAN_CONF_DIR" = "" ] || [ "$WAN_ADSL_LIST" = "" ]; then
meta_conf_compatiblity
fi
init_global_params
WAN_LIP_LOAD=YES
WANEC_LOAD=YES
WAN_ANNEXG_LOAD=${WAN_ANNEXG_LOAD:-NO}
WAN_DYN_WANCONFIG=${WAN_DYN_WANCONFIG:-NO}
NEW_IF_TYPE=${NEW_IF_TYPE:-NO}
WAN_INTR_DIR=$WAN_INTR_DIR
LINUX_DISTR=unknown
if [ -f $WAN_PROG_LOCK ]; then
echo -e "\nERROR: wanrouter script already running!\n";
cleanup 0;
fi
touch $WAN_PROG_LOCK
check_osystem
#Check osystem confirms the WAN_LOCK directory
WAN_LOCK=$WAN_LOCK_DIR/wanrouter
if [ ! -f $WAN_ADSL_LIST ]; then
generate_adsl_list
fi
if [ $OSYSTEM = "Linux" ]; then
eval "grep \"Debian\" -i /etc/issue > /dev/null"
if [ $? -eq 0 ]; then
LINUX_DISTR=debian
fi
eval "grep \"Red *Hat\" -i /etc/issue > /dev/null"
if [ $? -eq 0 ]; then
LINUX_DISTR=redhat
fi
eval "grep \"Mandrake\" -i /etc/issue > /dev/null"
if [ $? -eq 0 ]; then
LINUX_DISTR=redhat
fi
if [ "$WAN_DYN_WANCONFIG" = "YES" ]; then
if [ ! -e "/etc/wanpipe/wanconfig_socket" ]; then
echo "Starting wanconfig dameon"
eval "/usr/sbin/wanconfig -x >> $WAN_LOG 2>> $WAN_LOG &"
if [ $? -ne 0 ]; then
echo "Failed to start wanconfig daemon!"
cleanup 0;
fi
else
if [ ! -e "/var/run/wanconfig.pid" ]; then
echo "Starting wanconfig dameon"
\rm -f /etc/wanpipe/wanconfig_socket
eval "/usr/sbin/wanconfig -x >> $WAN_LOG 2>> $WAN_LOG &"
if [ $? -ne 0 ]; then
echo "Failed to start wanconfig daemon!"
cleanup 0;
fi
else
kill -USR1 $(cat /var/run/wanconfig.pid) >> /dev/null 2>> /dev/null
if [ $? -ne 0 ]; then
echo "Starting wanconfig dameon"
\rm -f /etc/wanpipe/wanconfig_socket
eval "/usr/sbin/wanconfig -x >> $WAN_LOG 2>> $WAN_LOG &"
if [ $? -ne 0 ]; then
echo "Failed to start wanconfig daemon!"
cleanup 0;
fi
fi
fi
fi
else
if [ -e "/etc/wanpipe/wanconfig_socket" ]; then
if [ -f /var/run/wanconfig.pid ]; then
eval "kill -TERM $(cat /var/run/wanconfig.pid)"
echo "Killing wanconfig daemon"
fi
fi
fi
fi
echo
# If modules doesn't loaded remove all lock file from WAN_LOCK_DIR.
check_module
ft1_or_wanpipe=0
# See how we were called.
case "$1" in
start)
# WANROUTER START
if [ -z $2 ]; then
if [ "$WANPIPE_GLOBAL_CFG" = "DAHDI" ]; then
echo "Executing DAHDI config $WANPIPE_GLOBAL_FE_MEDIA"
if [ -z $WANPIPE_GLOBAL_FE_MEDIA ]; then
WANPIPE_GLOBAL_FE_MEDIA=T1
fi
eval "rm -f $WAN_PROG_LOCK 2> /dev/null > /dev/null"
WANCFG_HW_DTMF_OPTION=
if [ "$WANPIPE_GLOBAL_HW_DTMF" != "" ]; then
WANCFG_EXTRA_OPTION="$WANCFG_EXTRA_OPTION --hw_dtmf=$WANPIPE_GLOBAL_HW_DTMF"
fi
WANPIPE_FE_CLOCK=
if [ "$WANPIPE_GLOBAL_FE_CLOCK" != "" ]; then
WANCFG_EXTRA_OPTION="$WANCFG_EXTRA_OPTION --fe_clock=$WANPIPE_GLOBAL_FE_CLOCK"
fi
if [ "$WANPIPE_GLOBAL_FE_TE_SIG" != "" ]; then
WANCFG_EXTRA_OPTION="$WANCFG_EXTRA_OPTION --fe_te_sig=$WANPIPE_GLOBAL_FE_TE_SIG"
fi
if [ "$WANPIPE_GLOBAL_FE_LCODE" != "" ]; then
WANCFG_EXTRA_OPTION="$WANCFG_EXTRA_OPTION --fe_lcode=$WANPIPE_GLOBAL_FE_LCODE"
fi
if [ "$WANPIPE_GLOBAL_FE_FRAME" != "" ]; then
WANCFG_EXTRA_OPTION="$WANCFG_EXTRA_OPTION --fe_frame=$WANPIPE_GLOBAL_FE_FRAME"
fi
if [ "$WANPIPE_GLOBAL_FAKE_POLARITY" != "" ]; then
WANCFG_EXTRA_OPTION="$WANCFG_EXTRA_OPTION --fake_polarity=$WANPIPE_GLOBAL_FAKE_POLARITY"
fi
if [ "$WANPIPE_GLOBAL_FAKE_POLARITY_THRESHOLD" != "" ]; then
WANCFG_EXTRA_OPTION="$WANCFG_EXTRA_OPTION --fake_polarity_thres=$WANPIPE_GLOBAL_FAKE_POLARITY_THRESHOLD"
fi
if [ "$WANPIPE_GLOBAL_FAKE_POLARITY_CIDTIMER" != "" ]; then
WANCFG_EXTRA_OPTION="$WANCFG_EXTRA_OPTION --fake_polarity_cidtimer=$WANPIPE_GLOBAL_FAKE_POLARITY_CIDTIMER"
fi
if [ "$WANPIPE_GLOBAL_FAKE_POLARITY_CIDTIMEOUT" != "" ]; then
WANCFG_EXTRA_OPTION="$WANCFG_EXTRA_OPTION --fake_polarity_cidtimeout=$WANPIPE_GLOBAL_FAKE_POLARITY_CIDTIMEOUT"
fi
if [ "$WANPIPE_GLOBAL_RING_DEBOUNCE" != "" ]; then
WANCFG_EXTRA_OPTION="$WANCFG_EXTRA_OPTION --ring_debounce=$WANPIPE_GLOBAL_RING_DEBOUNCE"
fi
eval "wancfg_dahdi --no-dahdi --no-chan-dahdi --silent --fe_media=$WANPIPE_GLOBAL_FE_MEDIA $WANCFG_EXTRA_OPTION"
#echo "wancfg_dahdi --no-dahdi --no-chan-dahdi --silent --fe_media=$WANPIPE_GLOBAL_FE_MEDIA $WANCFG_EXTRA_OPTION"
if [ "$WANPIPE_WITH_DIGIUM" = "TRUE" ]; then
eval "cp $WAN_CONF_DIR/wancfg_zaptel/templates/dahdi_cfg_script_with_digium $WAN_CONF_DIR/scripts/start"
fi
fi
check_config || cleanup 1
load_module
if [ $? -ne 0 ]; then
cleanup 2
fi
wanrouter_pre_start;
config_devices $WAN_DEVICES
config_interfaces $WAN_DEVICES
wanrouter_script start
elif [ -z $3 ]; then
#ROUTER START WANPIPE
[ -f $WAN_CONF_DIR/$FT1_CONF ] && rm -f $WAN_CONF_DIR/$FT1_CONF
dev=$2
#Parse the dev name, and if it starts with
#ft1 than it means we should load the ft1
#driver.
check_config_opt $dev 0
ft1_or_wanpipe=$?
dev=$($GET_RC)
rm -f $RC
WAN_CONF=$WAN_CONF_DIR/$dev.conf
check_file $WAN_CONF || cleanup 1
load_module
if [ $? -ne 0 ]; then
cleanup 2
fi
#If we are starting FT1 driver, we have to check
#wether the actual wanpipe# device is running or
#not, thus name dev has to be changed to 'wanpipe#'
if [ $ft1_or_wanpipe -gt 0 ]; then
dev="wanpipe$ft1_or_wanpipe"
fi
wanrouter_pre_start;
config_devices $dev
if [ $? -ne 0 ]; then
cleanup 3
fi
#When loading ft1 device there are not interfaces
if [ $ft1_or_wanpipe -eq 0 ]; then
config_interfaces $dev
if [ $? -ne 0 ]; then
cleanup 4
fi
fi
else
#ROUTER START WANPIPE INTERFACE
if [ $OSYSTEM != "Linux" ]; then
echo " This option doesn't supported yet!"
cleanup 0
fi
dev=$2
if_name=$3
#Parse the dev name, and if it starts with
#ft1 than it means we should load the ft1
#driver.
check_config_opt $dev 0
ft1_or_wanpipe=$?
dev=$($GET_RC)
rm -f $RC
WAN_CONF=$WAN_CONF_DIR/$dev.conf
check_file $WAN_CONF || cleanup 1
load_module
if [ $? -ne 0 ]; then
cleanup 2
fi
eval "$IFCONFIG_LIST | grep -w $if_name > /dev/null 2> /dev/null"
if [ $? -eq 0 ]; then
echo -e "\nInterface $if_name is already up!\n"
cleanup 1
fi
wanrouter_pre_start;
echo "Configuring interface: $if_name"
if [ "$WAN_DYN_WANCONFIG" = YES ]; then
eval "/usr/sbin/wanconfig_client cmd=start,card=$dev,dev=$if_name"
else
eval "/usr/sbin/wanconfig -v card $dev dev $if_name up >> $WAN_LOG"
fi
#Regardles of config try to bring up the interface
#Interface up command will fail on its own
#if [ $? -ne 0 ]; then
# cleanup 1
#fi
interface_up $if_name
if [ $? -ne 0 ]; then
echo -e "\nInterface $if_name start error: ip setup failure!\n"
cleanup 1
else
echo "Interface $if_name up."
fi
wanrouter_script start $dev $if_name
fi
;;
stop)
#WANROUTER STOP
if [ -z $2 ]; then
check_module
if [ $? -ne 0 ]; then
unload_module
remove_cdev
echo -e "Router is already stopped !\n"
cleanup 1
fi
#Check that all wanpipe#.conf file defined in
# WAN_DEVICES exist
check_config || {
unload_module
remove_cdev
echo -e "No devices running, Unloading Modules"
cleanup 1
}
if [ "$WAN_DEVICES_REV_STOP_ORDER" = "YES" ]; then
tmp_dev_list=
for dev in $WAN_DEVICES; do
tmp_dev_list="$dev ""$tmp_dev_list"
done
WAN_DEVICES=$tmp_dev_list
fi
wanrouter_script stop
unconfig_interfaces $WAN_DEVICES
unconfig_devices $WAN_DEVICES
elif [ -z $3 ]; then
#WANROUTER STOP WANPIPE
dev=$2
if [ "$dev" = "all" ]; then
stop_running_wanpipes
cleanup 0
fi
if [ "$dev" = "force" ]; then
check_module
if [ $? -ne 0 ]; then
unload_module
echo -e "Router is already stopped !\n";
cleanup 1;
fi
wanif_list_shutdown=`grep w $ROUTER_PROC/interfaces | cut -d' ' -f1 | sort -r`
if [ ! -z "$wanif_list_shutdown" ]
then
echo -e "Interfaces to shutdown: \n$wanif_list_shutdown\n"
for ifshutdown in $wanif_list_shutdown
do
ifconfig $ifshutdown down
if [ $? -ne 0 ]
then
echo -ne "failed to shutdown iface $ifshutdown, trying to continue ..."
fi
done
fi
wancard_list_shutdown=`cat $ROUTER_PROC/status | cut -d' ' -f1 | grep wanpipe | sort -r`
for cardshutdown in $wancard_list_shutdown
do
wanconfig card $cardshutdown stop
done
unload_module
cleanup 0
fi
check_config_opt $dev 1
ft1_or_wanpipe=$?
dev=$($GET_RC)
rm -f $RC
#Check that modules are up and running
check_module
if [ $? -ne 0 ]; then
unload_module
echo -e "Router is already stopped !\n";
cleanup 1;
fi
#If we are stopping FT1 driver, we have to check
#whether the actual wanpipe# device is running or
#not, thus name dev has to be changed to 'wanpipe#'
if [ $ft1_or_wanpipe -gt 0 ]; then
dev="wanpipe$ft1_or_wanpipe"
fi
if [ $ft1_or_wanpipe -eq 0 ]; then
unconfig_interfaces $dev
fi
unconfig_devices $dev
[ -f $WAN_CONF_DIR/$FT1_CONF ] && rm -f $WAN_CONF_DIR/$FT1_CONF
else
if [ $OSYSTEM != "Linux" ]; then
echo " This option doesn't supported yet!"
cleanup 0
fi
dev=$2
if_name=$3
#Parse the dev name, and if it starts with
#ft1 than it means we should load the ft1
#driver.
check_config_opt $dev 0
ft1_or_wanpipe=$?
dev=$($GET_RC)
rm -f $RC
WAN_CONF=$WAN_CONF_DIR/$dev.conf
check_file $WAN_CONF || cleanup 1
wanrouter_script stop $dev $if_name
eval "$IFCONFIG_LIST | grep -w $if_name > /dev/null 2> /dev/null"
if [ $? -eq 0 ]; then
echo "Interface $if_name down"
eval "ifconfig $if_name down"
fi
echo "Unconfiguring interface: $if_name"
if [ "$WAN_DYN_WANCONFIG" = YES ]; then
eval "/usr/sbin/wanconfig_client cmd=stop,card=$dev,dev=$if_name"
else
eval "/usr/sbin/wanconfig -v card $dev dev $if_name down >> $WAN_LOG"
fi
if [ $? -ne 0 ]; then
cleanup 1
fi
check_and_print_still_running && cleanup 0
cd $WAN_HOME
echo -e "No devices running, Unloading Modules"
unload_module
fi
;;
start_dev)
if [ -z $2 ]; then
# WANROUTER START_DEV
check_config || cleanup 1
load_module
if [ $? -ne 0 ]; then
cleanup 2
fi
config_devices $WAN_DEVICES
elif [ -z $3 ]; then
#ROUTER START_DEV WANPIPE
dev=$2
load_module
if [ $? -ne 0 ]; then
cleanup 2
fi
config_devices $dev
if [ $? -ne 0 ]; then
cleanup 3
fi
fi
;;
stop_dev)
if [ -z $2 ]; then
#WANROUTER STOP_DEV
check_module
if [ $? -ne 0 ]; then
unload_module
remove_cdev
echo -e "Router is already stopped !\n"
cleanup 1
fi
#Check that all wanpipe#.conf file defined in
# WAN_DEVICES exist
check_config || {
unload_module
remove_cdev
echo -e "No devices running, Unloading Modules"
cleanup 1
}
if [ "$WAN_DEVICES_REV_STOP_ORDER" = "YES" ]; then
tmp_dev_list=
for dev in $WAN_DEVICES; do
tmp_dev_list="$dev ""$tmp_dev_list"
done
WAN_DEVICES=$tmp_dev_list
fi
unconfig_devices $WAN_DEVICES
elif [ -z $3 ]; then
#WANROUTER STOP_DEV WANPIPE
dev=$2
if [ "$dev" = "all" ]; then
stop_running_wanpipes
cleanup 0
fi
#Check that modules are up and running
check_module
if [ $? -ne 0 ]; then
unload_module
echo -e "Router is already stopped !\n";
cleanup 1;
fi
unconfig_devices $dev
fi
;;
start_ip)
if [ -z $2 ]; then
# WANROUTER START_IP
check_config || cleanup 1
config_interfaces $WAN_DEVICES
wanrouter_script start
elif [ -z $3 ]; then
#ROUTER START_IP WANPIPE
config_interfaces $2
fi
;;
stop_ip)
if [ -z $2 ]; then
#WANROUTER STOP_IP
unconfig_interfaces $WAN_DEVICES
elif [ -z $3 ]; then
#WANROUTER STOP_IP WANPIPE
unconfig_interfaces $2
fi
;;
script)
#Debug Statement, used to test the script option
#echo "WAN_ACTION=$WAN_ACTION WAN_DEVICE=$WAN_DEVICE WAN_INTERFACE=$WAN_INTERFACE" >> /var/log/messages
#wanrouter script
if [ ! -z $WAN_ACTION ]; then
if [ ! -z $WAN_INTERFACE ]; then
wanrouter_script $WAN_ACTION $WAN_DEVICE $WAN_INTERFACE
elif [ ! -z $WAN_DEVICE ]; then
wanrouter_script $WAN_ACTION $WAN_DEVICE
else
wanrouter_script $WAN_ACTION
fi
fi
;;
list)
check_module
if [ $? -ne 0 ]; then
echo -e "Router is stopped !\n";
cleanup 0;
fi
print_active_devices 1;
cleanup 0;
;;
restart)
eval "rm -f $WAN_PROG_LOCK 2> /dev/null > /dev/null"
if [ "$2" = "" ]; then
$0 stop;
$0 start;
elif [ "$3" = "" ]; then
$0 stop $2;
$0 start $2;
else
$0 stop $2 $3;
$0 start $2 $3;
fi
cleanup 0;
;;
restart_dev)
eval "rm -f $WAN_PROG_LOCK 2> /dev/null > /dev/null"
if [ "$2" = "" ]; then
$0 stop_dev;
$0 start_dev;
elif [ "$3" = "" ]; then
$0 stop_dev $2;
$0 start_dev $2;
fi
cleanup 0;
;;
restart_ip)
eval "rm -f $WAN_PROG_LOCK 2> /dev/null > /dev/null"
if [ "$2" = "" ]; then
$0 stop_ip;
$0 start_ip;
elif [ "$3" = "" ]; then
$0 stop_ip $2;
$0 start_ip $2;
fi
cleanup 0;
;;
modules)
if [ $OSYSTEM = "Linux" ]; then
cat /proc/modules | grep wan;
else
$MODULE_STAT | grep -i "wan\|sdla";
#$MODULE_STAT | grep sdla;
fi
cleanup 0;
;;
status)
check_module
if [ $? -ne 0 ]; then
echo -e "Router is stopped !\n";
cleanup 0;
fi
print_active_devices 1;
print_wanpipe_config
print_wanrouter_status
echo ""
cleanup 0;
;;
summary)
print_config_summary;
cleanup 0;
;;
hwprobe)
load_module silent
if [ $? -ne 0 ]; then
cleanup 1
fi
if [ "$2" = "verbose" ]; then
if [ $OSYSTEM = "Linux" ]; then
cat /proc/net/wanrouter/hwprobe_verbose
else
wanconfig hwprobe verbose
fi
elif [ "$2" = "dump" ]; then
if [ $OSYSTEM = "Linux" ]; then
cat /proc/net/wanrouter/hwprobe_dump
else
wanconfig hwprobe verbose
fi
elif [ "$2" = "legacy" ]; then
if [ $OSYSTEM = "Linux" ]; then
cat /proc/net/wanrouter/hwprobe_legacy
else
wanconfig hwprobe legacy
fi
else
if [ $OSYSTEM = "Linux" ]; then
cat /proc/net/wanrouter/hwprobe
else
wanconfig hwprobe
fi
fi
echo
cleanup 0;
;;
debug)
if [ -z $2 ]; then
wanrouter_debug;
else
wanrouter_if_debug $2;
fi
cleanup 0;
;;
parity)
pci_parity_ctrl $2
;;
wanrc)
config_wanrouter_rc
cleanup 0;
;;
messages)
echo
echo "Start WANPIPE /var/log/messages"
echo
if [ $OSYSTEM = "Linux" ]; then
eval "tail -n 200 /var/log/messages | grep -i \"[wanpipe|sdladrv]\" "
else
eval "tail -n 200 /var/log/messages | grep -i \"wanpipe\|sdladrv\" "
fi
echo
echo "End of WANPIPE /var/log/messages"
echo
cleanup 0;
;;
conflog)
echo
echo "Start WANPIPE $WAN_LOG"
echo
eval "cat $WAN_LOG"
echo
echo "End of WANPIPE $WAN_LOG"
echo
cleanup 0;
;;
version)
echo "WANPIPE Release: $ROUTER_VERSION"
;;
lineprobe)
if [ $OSYSTEM != "Linux" ]; then
echo -e "The 'lineprobe' option supported on Linux OS only.\n"
cleanup 1;
fi
echo -e "Starting the lineprobe ...\n"
#The lineprobe calls wanrouter internally.
#This instance of wanrouter will prevent the other from starting.
#Remove the lock.
eval "rm -f $WAN_PROG_LOCK 2> /dev/null > /dev/null"
#Remove name of the program from command line.
shift 1
#Pass rest of the arguments to lineprobe.
if [ -e $LINEPROBE_PATH ]; then
eval "lineprobe" "$@"
else
echo -e "File $LINEPROBE_PATH does not exist!"
echo -e "Please check 'lineprobe' was successfully compiled.\n"
fi
;;
*) echo -e "\nWANPIPE: WAN Router startup script\n"
echo -e "Usage: $SCRIPT: {options} <wanpipe#> <interface>\n"
echo -e " wanrouter start : Starts all devices specified in"
echo -e " $WAN_CONF_DIR/wanrouter.rc WAN_DEVICES\n"
echo -e " wanrouter stop : Stops all devices specified in"
echo -e " $WAN_CONF_DIR/wanrouter.rc WAN_DEVICES\n"
echo -e " wanrouter start wanpipe# : Start a single device\n"
echo -e " wanrouter stop wanpipe# : Stops a single device"
echo -e " (# can range from 1 to 16)\n"
if [ $OSYSTEM = "Linux" ]; then
echo -e " wanrouter start wanpipe# if_name : Start a single interface on device\n"
echo -e " wanrouter stop wanpipe# if_name : Stops a single interface on device"
echo -e " (# can range from 1 to 16)\n"
fi
echo -e " wanrouter restart : Restart all devices specified in"
echo -e " $WAN_CONF_DIR/wanrouter.rc WAN_DEVICES\n"
echo -e " wanrouter restart wanpipe# : Restart a single device"
echo -e " (# can range from 1 to 16)\n"
echo
if [ $OSYSTEM = "Linux" ]; then
echo -e " wanrouter restart wanpipe# if_name : Restart a single interface on device"
echo -e " (# can range from 1 to 16)\n"
echo
fi
echo -e " wanrouter list : List all active devices\n"
echo -e " wanrouter modules : Show wanpipe kernel modules\n"
echo -e " wanrouter status : Display status for all active devices\n"
echo -e " wanrouter summary : Summary of config files in $WAN_HOME\n"
echo -e " wanrouter hwprobe : Display wanpipe hardware probe info.\n"
echo -e " wanrouter debug : Check current wanpipe environment."
echo -e " After a startup error run this command to"
echo -e " get a possible solution"
echo -e " i.e. wanrouter start; wanrouter debug;\n"
if [ $OSYSTEM = "Linux" ]; then
echo -e " wanrouter debug if_name : Display common debugging statistics"
echo -e " In case of line problems save to file,"
echo -e " wait 2-5mi and send to Sangoma Tech Support"
echo -e " i.e. wanrouter debug wp1fr16 > debug_file;\n"
fi
echo -e " wanrouter messages : Display wanpipe kernel event messages"
echo -e " i.e. /var/log/messages\n"
echo -e " wanrouter conflog : Display wanpipe configuration parsing messages"
echo -e " i.e. $WAN_LOG\n"
echo -e " wanrouter wanrc : Configure the wanpipe boot startup order"
echo -e " in $META_CONF\n"
echo -e " wanrouter version : wanpipe version information.\n"
if [ $OSYSTEM = "Linux" ]; then
echo -e " wanrouter lineprobe [-c wanpipe#] [options] "
echo -e " : Monitor/Debug a line connected to an"
echo -e " automatically detected or preconfigured card."
echo -e " i.e.: wanrouter lineprobe; or"
echo -e " : wanrouter lineprobe -c wanpipe1;"
echo -e " Type 'wanrouter lineprobe -help' to get the"
echo -e " list of 'lineprobe' options."
fi
cleanup 0
;;
esac
echo
cleanup 0
exit 0