#!/bin/sh
#
# ggsn          This shell script takes care of starting and stopping
#               ggsn.
#
# chkconfig: - 65 35
# description: ggsn is a Gateway GPRS Support Node.

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

if [ -f /etc/sysconfig/ggsn ]; then
        . /etc/sysconfig/ggsn
fi

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

[ -f /usr/bin/ggsn ] || exit 0
[ -f /etc/ggsn.conf ] || exit 0

RETVAL=0
prog="ggsn"

start() {
	# Start daemons.
	echo -n $"Starting $prog: "

	# Load tun module
	/sbin/modprobe tun >/dev/null 2>&1

	# Enable routing of packets: WARNING!!!
	# Users should enable this explicitly
	# echo 1 > /proc/sys/net/ipv4/ip_forward

	# Check for runtime directory of nonvolatile data
	if [ ! -d  /var/lib/ggsn ]; then
	  mkdir /var/lib/ggsn
	fi

	# Check for GTP restart counter
	if [ ! -d  /var/lib/ggsn/gsn_restart ]; then
	  echo 0 > /var/lib/ggsn/gsn_restart
	fi


	daemon /usr/bin/ggsn 
	RETVAL=$?
	echo
	[ $RETVAL -eq 0 ] && touch /var/lock/subsys/ggsn
	return $RETVAL
}

stop() {
	# Stop daemons.
	echo -n $"Shutting down $prog: "
	killproc ggsn
	RETVAL=$?
	echo
	[ $RETVAL = 0 ] && rm -f /var/lock/subsys/ggsn /var/run/ggsn.pid
	return $RETVAL
}

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart|reload)
	stop
	start
	RETVAL=$?
	;;
  condrestart)
	if [ -f /var/lock/subsys/ggsn ] ; then
	    stop
	    start
	    RETVAL=$?
	fi
	;;
  status)
	status ggsn
	RETVAL=$?
	;;
  *)
	echo $"Usage: $0 {start|stop|restart|condrestart|status}"
	exit 1
esac

exit $RETVAL

