isdn4k-utils/eurofile/scripts/eftd.sh.in

359 lines
10 KiB
Bash

#!/bin/sh
# @configure_input@
### BEGIN INIT INFO
# Provides: isdneurofile
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
#
# generated from $Id: eftd.sh.in,v 1.8 2002/01/31 18:54:38 paul Exp $
#
# Henner Eisen 1998
#
# Enhancements by Matthias Stolte (MSDatec@msdatec.de)
#
# Debian "restart" and "force-reload" options added
# by Paul Slootman <paul@debian.org>
#
#
# This starts or stops eurofile service.
#
# Usage: eftd.sh start|stop
#
# This script can be called from sysvinit, but be sure that the common
# isdn setup below is done before.
#
#
# READ and EDIT this script before using it!
#
# For this script to work, the basic setup for the isdn and x25
# drivers must be done. The following three modules must be loaded
# (or compiled into the kernel) before calling this script:
#
# "x25" (insmod x25)
# "isdn" (insmod isdn)
# At least one isdn HL driver which supports l2_prot x75i
# (i.e. insmod HiSax ...)
#
#
#*****************************
#
# Parameters to be configured by the user of this script
#
#******************************
# Location of a recent isdnctrl binary that supports the x25 features
#
ISDNCTRL=isdnctrl
# Location of the loopctrl binary from the isdn4k-util package
#
LOOPCTRL=loopctrl
INSMOD=insmod
EFTD_BIN=eftd
# Where to put the eftd-pid-file? Default is /var/run/eftd.pid.
EFTD_PIDFILE=@RUNDIR@/eftd.pid
X25TRACE_PIDFILE=@RUNDIR@/x25trace.pid
X25TRACE=x25trace
X25ROUTE=x25route
# The MSN (without your local area code) where eftd shall listen for
# connections.
EFT_SERVER_MSN=xxxxx
# It is possible to put several, blank-separated, MSNs in this variable
# which are assigned cyclically to the isdn interfaces below. This might be
# useful if you want to accept connections from several S0_intrafaces that
# cannot be configured for the same MSNs. In that case, use something like
# (i.e when 3 MSN shall be assigned)
# EFT_SERVER_MSN="xxxx yyyy zzzz"
# Names of ISDN interfaces to be configured and used for incoming
# EUROFILE connections.
ISDNIF_IN="isdneftd"
# For experimenting with multiple (i.e. 4) simultaneous connections,
# use somthing like
#ISDNIF_IN="isdneft0 isdneft1 isdneft2 isdneft3"
# and set the -m option when starting eftd (and maybe several MSNs above)
# Should the interface automagically disconnect after a while of
# no transmission? If do so, set ISDNIF_HUPTIMEOUT to the number of seconds.
# This timeout ist set to all interfaces that are defined in ISDNIF_IN.
ISDNIF_HUPTIMEOUT=180
# The name of the EFT server. If you don't put something in here or in
# the RCFILE (see below), the default "<host>.<domain>" will be used.
# EFT_SERVER_NAME="eftd.sh v@I4LVERSION@"
# If you want all your clients having access to your server, you can
# redirect wrong or non existent usernames to standard guest account,
# e.g. user "ftp". It's only recommended if you have public file offers
# and may be a security risk.
# MAP_UNKNOWN_USER_TO="ftp"
# If you want eftd to check the ACCESSFILE, uncomment the following line.
# See eftaccess(5) for more info.
# EFTD_ACCESS_TO_FILE="yes"
# If you don't use the default ACCESSFILE, set the next variable to the
# name of that file:
# EFTD_ACCESS_FILE=""
# Probably you want to log some server events.
# Define the log level
# EFTD_LOG_OPTIONS="-l 3 "
# Where shell EFTD put it? The default is like
# EFTD_LOG_FILE="/var/log/eftd.log"
# Define the debug (stderr) log level:
# EFTD_DEBUG_OPTIONS="-D -1", if you want really all...
# and where to put debug log information?
# EFTD_DEBUG_FILENAME=/var/log/eftd.dbg
# If set, this will additionally set up an outgoing interface on top
# of the ISDN loop drivers for local testing. The x25 connections using
# x25 address "1" as destination address will be routed through this
# interface.
# EFTD_WITH_LOOP=y
# rc file, might contain parameters to overide those in this file
RCFILE=@I4LCONFDIR@/eft.conf
# time between terminating x25 applications and ifconfig'ing down interface
# or between ifconfig'ing down interface and deleting interface.
# Should not be necessary at all but for paranoia reasons (old kernel bugs)
#
# Try higher values if terminating fails or lower values if you are bored.
EFTD_IF_SLEEP="sleep 2"
#
# You can even add arbitrary other option here (or in your
# @I4LCONFDIR@/eft.conf file) by something like
# EFTD_OPTIONS="$EFTD_OPTIONS -X"
#
#**********************************************
#
# End of user variable configuration section
#
#**********************************************
if [ -f $RCFILE ]; then
. $RCFILE
fi
case "$1" in
start)
# another eftd alreay running?
if test -f $EFTD_PIDFILE ; then
echo "There seems to be an eft daemon already running. Multiple"
echo "EFT-daemons are not supported."
echo "Try \"$0 stop\" to terminate the running EFT-daemon."
exit 1
fi
if test -z $EFT_SERVER_MSN; then
echo $'\a'"Error: You must define an MSN/EAZ in @I4LCONFDIR@/eft.conf"
exit 1
fi
set -- $EFT_SERVER_MSN
if [ x$EFTD_WITH_LOOP != x ]; then
# for local testing of x.25 connections we load the isdnloop driver
$INSMOD -m isdnloop isdnloop_id=eft_loop -o eft_loop> /var/modules/isdnloop.map
$LOOPCTRL -d eft_loop start dss1 00000 $EFT_CLIENT_MSN $EFT_SERVER_MSN
sleep 1
# A local outgoing interface operating on top of (bound to) the
# isdnloop driver. X.25 call requests the X.25 address "1"
# will be routed through the outgoing interface eft_lout. That call
# request will be looped back to our own machine (and received at the
# incoming interface created for the eft daemon).
$ISDNCTRL addif eft_lout
$ISDNCTRL eaz eft_lout $EFT_CLIENT_MSN
$ISDNCTRL secure eft_lout on
$ISDNCTRL addphone eft_lout out $1
$ISDNCTRL l2_prot eft_lout x75i
$ISDNCTRL encap eft_lout x25iface
$ISDNCTRL huptimeout eft_lout 0
$ISDNCTRL dialmode eft_lout auto
$ISDNCTRL bind eft_lout eft_loop,0
ifconfig eft_lout up
$X25ROUTE add 1/1 eft_lout
# we also need to tell eftd to also listen on the second x25 address
EFTD_OPTIONS="$EFTD_OPTIONS -x 1 -x \"\" "
fi
for i in $ISDNIF_IN; do
# interface alreay defined?
if { cat /proc/net/dev | grep $i > /dev/null; } ; then
echo "Interface \"$i\" already exists."
else
$ISDNCTRL addif $i
fi
$ISDNCTRL verbose 1
$ISDNCTRL eaz $i $1
$ISDNCTRL l2_prot $i x75i
$ISDNCTRL encap $i x25iface
if [ ! -z "$ISDNIF_HUPTIMEOUT" ]; then
$ISDNCTRL huptimeout $i $ISDNIF_HUPTIMEOUT
fi
# for disabling auto-hangup:
# $ISDNCTRL ihup $i off
ifconfig $i up
#cyclically assign the next MSN to $1
shift
if [ -z "$1" ]; then
set -- $EFT_SERVER_MSN
fi
done
if [ x$EFTD_X25TRACE = x1 ]; then
# this will log all x25 traffic received from network interfaces to stderr
$X25TRACE -h 1>&2 &
echo $! > $X25TRACE_PIDFILE
fi
# Prepare options for EFTD start
if [ "$EFTD_ACCESS_TO_FILE" = "yes" ]; then
EFTD_OPTIONS="$EFTD_OPTIONS -a"
if [ ! -z "$EFTD_ACCESS_FILE" ]; then
EFTD_OPTIONS="$EFTD_OPTIONS \"$EFTD_ACCESS_FILE\""
fi
fi
if [ ! -z "$EFT_SERVER_NAME" ]; then
EFTD_OPTIONS="$EFTD_OPTIONS -n \"$EFT_SERVER_NAME\""
fi
if [ ! -z "$MAP_UNKNOWN_USER_TO" ] ; then
EFTD_OPTIONS="$EFTD_OPTIONS -U \"$MAP_UNKNOWN_USER_TO\""
fi
if [ ! -z "$EFTD_DEBUG_OPTIONS" ]; then
EFTD_OPTIONS="$EFTD_OPTIONS $EFTD_DEBUG_OPTIONS"
fi
if [ ! -z "$EFTD_LOG_OPTIONS" ]; then
EFTD_OPTIONS="$EFTD_OPTIONS $EFTD_LOG_OPTIONS"
fi
if [ ! -z "$EFTD_LOG_FILENAME" ]; then
EFTD_OPTIONS="$EFTD_OPTIONS -b $EFTD_LOG_FILENAME"
fi
if [ x"$EFTD_DEBUG" = "x1" ] ; then
echo "Starting EUROFile daemon under gdb."
# remove a possibly present '-m' option
EFTD_OPTIONS_WITHOUT_M=`echo "$EFTD_OPTIONS"|sed 's/ -m//'`
echo "type \"run $EFTD_OPTIONS_WITHOUT_M -s\" from the gdb prompt."
gdb $EFTD_BIN
else
if [ ! -z "$EFTD_DEBUG_FILENAME" ]; then
stderr_redirect="2>> $EFTD_DEBUG_FILENAME"
fi
if [ ! -z "$EFTD_LOG_FILENAME" ]; then
stdout_redirect=">> $EFTD_LOG_FILENAME"
fi
eval $EFTD_BIN $EFTD_OPTIONS $stderr_redirect "&"
td_pid=$!
echo $td_pid > $EFTD_PIDFILE
echo "EUROFile daemon started, pid=$td_pid"
fi
;;
restart|force-reload)
# I know, trivial, but debian policy demands it
$0 stop || true
$1 start
;;
stop)
ISDNIF_FOUND=""
if { cat /proc/net/dev | grep eft_lout > /dev/null; } ; then
$X25ROUTE del 1/1 eft_lout
ISDNIF_FOUND=eft_lout
fi
if test -f $EFTD_PIDFILE ; then
echo 'Shutting down eft daemon...'
kill `cat $EFTD_PIDFILE`
rm -f $EFTD_PIDFILE
else
echo "eft daemon not running?"
fi
if test -f $X25TRACE_PIDFILE; then
echo 'Shutting down x25trace ...'
kill `cat /var/run/x25trace.pid`
rm -f /var/run/x25trace.pid
fi
for i in $ISDNIF_IN; do
if { cat /proc/net/dev | grep $i > /dev/null; } ; then
ISDNIF_FOUND="$ISDNIF_FOUND $i"
fi
done
if [ -z "$ISDNIF_FOUND" ]; then
echo "No interfaces to shut down found"
else
for i in $ISDNIF_FOUND; do
# hangup is done from eftd, but for paranoia reasons again ...
isdnctrl hangup $i >/dev/null 2>&1
done
echo -n "ifconfig'ing interfaces down:"
$EFTD_IF_SLEEP
for i in $ISDNIF_FOUND; do
echo -n " $i"
ifconfig $i down
done
echo ""
$EFTD_IF_SLEEP
echo "deleting isdn interfaces:"
for i in $ISDNIF_FOUND; do
# echo -n " $i"
$ISDNCTRL delif $i
done
echo ""
if { cat /proc/modules | grep eft_loop > /dev/null; } ; then
echo 'removing isdnloop module "eft_loop"'
rmmod eft_loop
fi
fi
;;
*)
echo "usage: $0 start start EUROFILE server/service"
echo " $0 stop stop EUROFILE server/service"
esac