#!/bin/sh
#
# chkconfig: - 91 35
# description: Starts and stops the tgtd iSCSI target daemon
#
# pidfile: /var/run/tgtd.pid


# Source function library.
if [ -f /etc/init.d/functions ] ; then
  . /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
  . /etc/rc.d/init.d/functions
else
  exit 1
fi

# Avoid using root's TMPDIR
unset TMPDIR

. /etc/sysconfig/tgtd

DAEMON=tgtd
ADM=tgtadm
ADMIN=tgt-admin
PIDFILE=/var/run/$DAEMON.pid
LOCKFILE=/var/lock/subsys/$DAEMON

RETVAL=0
NAME="iSCSI target"

daemon_status() {
	ps -C $DAEMON -o cmd= | grep -v defunct > /dev/null
	return $?
}

start() {
	START_OPTIONS1="-f $TGTD_OPTS"
	START_OPTIONS2="--op update --mode sys --name State -v offline"
	START_OPTIONS3="--update ALL -c $TGTD_CONFIG"
	START_OPTIONS4="--op update --mode sys --name State -v ready"
	daemon_status
	RETVAL=$?
	if [ $RETVAL -eq 0 ]; then
		msg_already_running "$NAME"
		passed
		echo
		return 1
	fi
	start_daemon --make-pidfile --pidfile $PIDFILE --displayname "$NAME" $DAEMON $START_OPTIONS1
	RETVAL=$?
	[ $RETVAL -eq 0 ] && touch $LOCKFILE || return 1
	$ADM $START_OPTIONS2
	RETVAL=$?
	[ ! $RETVAL -eq 0 ] && return $RETVAL
	$ADMIN $START_OPTIONS3
	RETVAL=$?
	[ ! $RETVAL -eq 0 ] && return $RETVAL
	$ADM $START_OPTIONS4
	RETVAL=$?
	return $RETVAL
}

stop() {
	STOP_OPTIONS1="--op update --mode sys --name State -v offline"
	STOP_OPTIONS2="--update ALL -c /dev/null"
	STOP_OPTIONS3="--op delete --mode system"
	daemon_status
	RETVAL=$?
	if [ $RETVAL -eq 1 ]; then
		msg_not_running "$NAME"
		passed
		echo
		return 1
	fi
	msg_stopping "$NAME"
	$ADM $STOP_OPTIONS1
	RETVAL=$?
	[ ! $RETVAL -eq 0 ] && failure && return $RETVAL
	$ADMIN $STOP_OPTIONS2
	RETVAL=$?
	[ ! $RETVAL -eq 0 ] && failure && return $RETVAL
	$ADM $STOP_OPTIONS3
	RETVAL=$?
	if [ $RETVAL -eq 0 ]; then
		success
	else
		failure
	fi
	echo
	[ $RETVAL -eq 0 ] && rm -f $LOCKFILE && rm -f $PIDFILE
	return $RETVAL
}

reload() {
	daemon_status
	RETVAL=$?
	if [ $RETVAL -eq 1 ]; then
		msg_not_running "$NAME"
		passed
		echo
		return 1
	fi
	msg_reloading "$NAME"
	$ADMIN --update ALL -c $TGTD_CONFIG
	RETVAL=$?
	if [ $RETVAL -eq 0 ]; then
		success
	else
		failure
	fi
	echo
	return $RETVAL
}

restart() {
	stop
	start
}

status() {
	daemon_status
	RETVAL=$?
	if [ $RETVAL -eq 0 ]; then
		msg_already_running "$NAME"
	else
		msg_not_running "$NAME"
	fi
	echo
	return $RETVAL
}

case "$1" in
start)
	start
	;;
stop)
	stop
	;;
restart)
	restart
	;;
reload)
	reload
	;;
status)
	status
	;;
condrestart)
	[ -f $LOCKFILE ] && restart || :
	;;
condstop)
	[ -f $LOCKFILE ] && stop || :
	;;
*)
	echo $"Usage: $0 {start|stop|restart|reload|status|condrestart|condstop}"
	exit 2
esac

exit $?
