#!/bin/sh
#
# osmo-ggsn     This shell script takes care of starting and stopping
#               osmo-ggsn.
#
# chkconfig: - 65 35
# description: osmo-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/osmo-ggsn ]; then
        . /etc/sysconfig/osmo-ggsn
fi

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

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

RETVAL=0
prog="osmo-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/osmo-ggsn ]; then
	  mkdir /var/lib/osmo-ggsn
	fi

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


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

stop() {
	# Stop daemons.
	echo -n $"Shutting down $prog: "
	killproc osmo-ggsn
	RETVAL=$?
	echo
	[ $RETVAL = 0 ] && rm -f /var/lock/subsys/osmo-ggsn /var/run/osmo-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/osmo-ggsn ] ; then
	    stop
	    start
	    RETVAL=$?
	fi
	;;
  status)
	status osmo-ggsn
	RETVAL=$?
	;;
  *)
	echo $"Usage: $0 {start|stop|restart|condrestart|status}"
	exit 1
esac

exit $RETVAL

