network_tools/etc/init.d/rx3-vpn

201 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
#
# Init file for Rx3 network setup
#
# chkconfig: 2345 55 25
# description: Rx3 VPN supervisor
#
### BEGIN INIT INFO
# Provides: rx3-vpn
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Short-Description: Rx3 VPN supervisor
# Description: Rx3 VPN supervisor
### END INIT INFO
# source function library
. /etc/rc.d/init.d/functions
[ -e /etc/sysconfig/rx3-vpn ] && . /etc/sysconfig/rx3-vpn
RETVAL=0
prog="rx3-vpn"
LOCK_FILE=/var/lock/subsys/rx3-vpn
PID_FILE=/var/run/rx3-vpn.pid
LOG_FILE=/var/log/rx3-vpn.log
STATUS_FILE=/var/log/rx3-vpn.status
unset LC_PAPER LC_ADDRESS LC_MONETARY LC_NUMERIC LC_TELEPHONE LC_MESSAGES LC_IDENTIFICATION LC_COLLATE LANG LC_MEASUREMENT LANGUAGE LC_CTYPE LC_TIME LC_NAME
rx3_vpn_supervisor()
{
job_id=0
for blk in ${VPN_EXT_LIST}
do
OIFS=${IFS}
IFS=:
set $blk
dev=$1
conf=$2
table=$3
name=$4
IFS=${OIFS}
case ${dev}
in
"eth"*)
;;
"tun"*)
config_file=/etc/openvpn/ext-client-${dev}.conf
template_file=/etc/openvpn/template/ext-client-tunx.conf
mng_port=$((2330+$(echo ${dev} | sed -e "s/tun//")))
job_pid[${job_id}]="0"
# job_cmd[${job_id}]="/usr/sbin/openvpn --config /etc/openvpn/${conf}-client.conf --dev ${dev} --daemon"
job_cmd[${job_id}]="/usr/sbin/openvpn --config ${config_file} --dev ${dev} --daemon"
/bin/rm -f ${config_file} 2>/dev/null
sed -e "s/TARGET-CFG/${conf}-client.conf/" -e "s/VPN-DEVICE/${dev}/" -e "s/MNG-PORT/${mng_port}/" <${template_file} >${config_file}
echo >>${LOG_FILE} $(date) "Loading config: VPN[${job_id}] Name: [${name}] Cmd: [${job_cmd[${job_id}]}]"
job_id=$((${job_id} + 1))
;;
"ppp"*)
host=$(grep "Server IP:" /etc/ppp/peers/${conf} | cut -d ' ' -f 4-4)
unit=$(echo ${dev} | sed "s/ppp//")
job_pid[${job_id}]="0"
job_cmd[${job_id}]="/usr/sbin/pptp --debug ${host} call ${conf} unit ${unit}"
echo >>${LOG_FILE} $(date) "Loading config: VPN[${job_id}] Name: [${name}] Cmd: [${job_cmd[${job_id}]}]"
job_id=$((${job_id} + 1))
;;
esac
done
job_nb=${job_id}
job_id=0
while [[ 1 ]]
do
kill -0 ${job_pid[${job_id}]} 2>/dev/null
rc=$?
if [[ ${job_pid[${job_id}]} == 0 ]] || [[ $rc != 0 ]]
then
echo >> ${LOG_FILE} $(date) "Restarting command: [${job_cmd[${job_id}]}]..."
eval ${job_cmd[${job_id}]}
job_pid[${job_id}]=$( ps aux | grep "${job_cmd[${job_id}]}" | grep -v grep | head -1 | awk '{print $2}')
job_date[${job_id}]="$(date)"
echo >> ${LOG_FILE} $(date) "PId: [${job_pid[${job_id}]}] !"
fi
job_id=$((${job_id} + 1))
if [[ ${job_id} -ge ${job_nb} ]]
then
job_id=0
>${STATUS_FILE}
while [[ ${job_id} -lt ${job_nb} ]]
do
echo >>${STATUS_FILE} "PId: [${job_pid[${job_id}]}] Date: [${job_date[${job_id}]}] Cmd: [${job_cmd[${job_id}]}]"
job_id=$((${job_id} + 1))
done
job_id=0
sleep 30
fi
done
}
start()
{
gprintf "Starting %s:" "$prog"
if [ -r ${LOCK_FILE} ]
then
success "already started"
RETVAL=0
else
rx3_vpn_supervisor &
echo "$!" >${PID_FILE}
RETVAL=$?
[ "$RETVAL" = 0 ] && success "startup" || failure "startup"
[ "$RETVAL" = 0 ] && touch ${LOCK_FILE}
fi
echo
}
stop()
{
gprintf "Stopping %s:" "$prog"
if [ -r ${LOCK_FILE} ]
then
echo >> ${LOG_FILE} $(date) "Killing daemon: [$(cat ${PID_FILE})]..."
kill -15 $(cat ${PID_FILE})
while read stat
do
echo >> ${LOG_FILE} $(date) "Killing VPN: [$stat] [$(echo "$stat" | sed -e 's/PId: \[//' -e 's/\].*//')]..."
kill -15 $(echo "$stat" | sed -e 's/PId: \[//' -e 's/\].*//') 2>/dev/null 2>&1
done <${STATUS_FILE}
# RETVAL=$?
RETVAL=0
[ "$RETVAL" = 0 ] && success "stop" || failure "stop"
else
success "already stopped"
RETVAL=0
fi
[ "$RETVAL" = 0 ] && rm -f ${LOCK_FILE} && rm -f ${PID_FILE} && rm -f ${STATUS_FILE}
echo
}
status()
{
if [ -f ${STATUS_FILE} ]; then
cat ${STATUS_FILE}
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 1
start
;;
status)
status
;;
*)
gprintf "Usage: %s {start|stop|restart|status}\n" "$0"
RETVAL=1
esac
exit $RETVAL