#!/bin/sh
#
### BEGIN INIT INFO
# Provides: osafdtmd
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Should-Start: 
# Should-Stop: 
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts/stops the osafdtmd daemon
# Description: starts/stops the osafdtmd daemon
### END INIT INFO

osafdirfile=/etc/opensaf/osafdir.conf
osafprog="osaftransportd"
initscript=$(basename "$0")

# Source LSB functions library
. /lib/lsb/init-functions
 
if [ ! -r $osafdirfile ]; then
	logger -t $osafprog "can't read $osafdirfile, exiting."
	exit 6
else
	. $osafdirfile
	. $pkgsysconfdir/transportd.conf
	. $pkgsysconfdir/nid.conf
fi

NIDSERV=TRANSPORT
MANAGE_TIPC=${OPENSAF_MANAGE_TIPC:-"yes"}
RETVAL=0

binary=$pkglibdir/$osafprog
pidfile=$pkgpiddir/$osafprog.pid
lockfile=$lockdir/$initscript
sockfile=$pkglocalstatedir/osaf_log.sock

start() {
	[ -p $NIDFIFO ] || return 1
	if [ ! -x "$binary" ]; then
		echo "$NID_MAGIC:$NIDSERV:$DAEMON_NOT_FND" > "$NIDFIFO"
		exit 5
	fi
	if [ "$MDS_TRANSPORT" = "TIPC" ]; then
		$pkglibdir/configure_tipc start "$TIPC_ETH_IF" "$TIPC_NET_ID"
		if [ "$MANAGE_TIPC" = "yes" ]; then
			RETVAL=$? 
			if [ $RETVAL -ne 0 ]; then
				echo "$NID_MAGIC:$NIDSERV:$DAEMON_START_FAILED" > $NIDFIFO
				return $RETVAL 
			fi
		else
			lsmod | grep tipc
			RETVAL=$?
			if [ $RETVAL -ne 0 ]; then
				logger -t $osafprog -s "TIPC module not loaded  to OpenSAF requirements, returning..."
				echo "$NID_MAGIC:$NIDSERV:$DAEMON_START_FAILED" > $NIDFIFO
				return $RETVAL
			else
				ls $pkglocalstatedir/node_id
				RETVAL=$?
				if [ $RETVAL -ne 0 ]; then
					logger -t $osafprog -s "$pkglocalstatedir/node_id not available whic is OpenSAF requirements, returning..."
					echo "$NID_MAGIC:$NIDSERV:$DAEMON_START_FAILED" > $NIDFIFO
					return $RETVAL
				fi	 
			fi
		fi

		RETVAL=0
		echo "$NID_MAGIC:$NIDSERV:$DAEMON_STARTED" > $NIDFIFO

		start_daemon -p "$pidfile" "$binary" $args
		RETVAL=$?
		if [ "$RETVAL" -eq 0 ]; then
			touch "$lockfile"
		else
			echo "Unable to start running Permanent loop to clean MDS Logs..."
		fi

	else
		$pkgclcclidir/osaf-dtm start 
		RETVAL=$?
		if [ $RETVAL -ne 0 ]; then
			echo "$NID_MAGIC:$NIDSERV:$DAEMON_START_FAILED" > $NIDFIFO
		fi
		#Fot TCP osaftransportd start will be moved to osaf-dtm process to make this script restart on fault
		start_daemon -p "$pidfile" "$binary" $args
		RETVAL=$?
		if [ "$RETVAL" -eq 0 ]; then
			touch "$lockfile"
		else
			echo "Unable to start running Permanent loop to clean MDS Logs..."
		fi
	fi
	return "$RETVAL"
}

stop() {
	killproc -p "$pidfile" "$osafprog"
	RETVAL=$?
	if [ "$RETVAL" -eq 0 ] || [ "$RETVAL" -eq 7 ]; then
		rm -f "$sockfile"
		rm -f "$lockfile"
		RETVAL=0
	fi
	if [ ! "$MDS_TRANSPORT" = "TIPC" ]; then
		$pkgclcclidir/osaf-dtm stop
		if [ "$RETVAL" -eq 0 ]; then
			RETVAL=$?
		fi
	fi
	return $RETVAL
}

restart() {
	if [ ! "$MDS_TRANSPORT" = "TIPC" ]; then
		$pkgclcclidir/osaf-dtm stop
		$pkgclcclidir/osaf-dtm start
	fi
	RETVAL=$? 
	return $RETVAL
}

tryrestart() {
	if [ ! "$MDS_TRANSPORT" = "TIPC" ]; then
		$pkgclcclidir/osaf-dtm tryrestart
	fi
	RETVAL=$?
	return $RETVAL
}

reload() {
	if [ ! "$MDS_TRANSPORT" = "TIPC" ]; then
		$pkgclcclidir/osaf-dtm reload
	fi
	RETVAL=$?
	return $RETVAL
}

forcereload() {
	if [ ! "$MDS_TRANSPORT" = "TIPC" ]; then
		 $pkgclcclidir/osaf-dtm reload
		 $pkgclcclidir/osaf-dtm restart
	fi
	RETVAL=$?
	return $RETVAL
}

status() {
	if [ ! "$MDS_TRANSPORT" = "TIPC" ]; then
		 $pkgclcclidir/osaf-dtm status 
	fi
	RETVAL=$?
	return $RETVAL
}

case "$1" in
	start)
		start
		RETVAL=$?
	;;
	stop)
		stop
		RETVAL=$?
	;;
	restart)
		restart
		RETVAL=$?
	;;
	try-restart|condrestart)
		tryrestart
		RETVAL=$?
	;;
	reload)
		reload
		RETVAL=$?
	;;
	force-reload)
		forcereload
		RETVAL=$?
	;;
	status)
		status
		RETVAL=$?
	;;
	*)
		echo "Usage: $0 {start|stop|restart|try-restart|reload|force-reload|status}"
		RETVAL=2
esac

exit $RETVAL
