#!/bin/bash . /etc/rc.conf . /etc/rc.d/functions CONFDIR="/etc/openvpn" PIDDIR="/var/run/openvpn" OPENVPN="/usr/sbin/openvpn" case "$1" in start) TAP=0 ls $CONFDIR|grep 'conf$'|while read CONFIG; do TUNORTAP=`grep ^dev ${CONFDIR}/${CONFIG}|awk '{ print $2 }'` NAME=`basename $CONFIG|sed 's/\.conf$//'` PID=`cat ${PIDDIR}/${NAME}.pid 2> /dev/null` stat_busy "Starting OpenVPN $NAME" if [ "$TUNORTAP" = "tun" ]; then /sbin/modprobe tun >/dev/null 2>&1 fi [ -z "$PID" ] && $OPENVPN --daemon --writepid ${PIDDIR}/${NAME}.pid --cd ${CONFDIR} --config ${NAME}.conf if [ $? -gt 0 ]; then stat_fail else if [ "$TUNORTAP" = "tap" ]; then $OPENVPN --mktun --dev tap${TAP} TAP=$(($TAP + 1)) fi add_daemon openvpn stat_done fi done ;; stop) TAP=0 ls $PIDDIR|while read PIDFILE; do PID=`cat $PIDDIR/$PIDFILE` NAME=`basename $PIDFILE|sed 's/\.pid$//'` TUNORTAP=`grep ^dev ${CONFDIR}/${NAME}.conf|awk '{ print $2 }'` stat_busy "Stopping OpenVPN $NAME pid $PID" [ ! -z "$PID" ] && kill $PID &> /dev/null if [ $? -gt 0 ]; then stat_fail else if [ "$TUNORTAP" = "tap" ]; then /sbin/ifconfig tap${TAP} down $OPENVPN --rmtun --dev tap${TAP} if [ $? -gt 0 ]; then stat_fail fi TAP=$(($TAP + 1)) fi rm_daemon openvpn stat_done sleep 2 fi [ -z "`ps -p $PID --no-header`" ] && rm -f $PIDDIR/$PIDFILE done ;; restart) $0 stop sleep 1 $0 start ;; *) echo "usage: $0 {start|stop|restart}" ;; esac exit 0