#!/bin/sh
# chkconfig: 235 83 20
# description: iSCSI daemon

# Source function library.
[ -f /etc/init.d/functions ] || exit 0
. /etc/init.d/functions

# Source function library.
[ -f /etc/init.d/functions ] || exit 0
. /etc/init.d/functions

BASEDIR=/

MODULE_REGEXP="iscsi\b"
DRIVER_NAME="iSCSI driver"
DRIVER_MODULE=iscsi
PIDFILE=/var/run/iscsid.pid

ISCSID=$BASEDIR/sbin/iscsid
ISCSIACTLUN=$BASEDIR/sbin/iscsilun
PATH="/sbin:/bin:/usr/sbin:/usr/bin:$PATH"

test -x $ISCSID || exit 0
RETVAL=0

start() {
	# Do sanity checks before we start..
	if [ ! -f /etc/iscsi.conf ]; then
		echo $"Could not find /etc/iscsi.conf!"
		exit 1
	elif [ -f $PIDFILE ] && kill -0 `head -1 $PIDFILE` >/dev/null ; then
		echo $"iscsi daemon already running"
		exit 1
	fi

	if ( lsmod | grep -q "^$DRIVER_MODULE" ) ; then 
		:
	elif ! modprobe $DRIVER_MODULE >> /var/log/iscsi.log 2>&1; then
		echo
		echo $"Couldn't load module $DRIVER_MODULE"
		echo $"See error log in /var/log/iscsi.log"
		return 1
	fi

	echo -n $"Starting iSCSI iscsilun: "
	$ISCSIACTLUN boot >> /var/log/iscsi.log 2>&1 && success "iscsilun startup" || { failure "iscsilun startup" ; RETVAL=1 ; }
	echo

	[ $RETVAL -eq 0 ] && touch /var/lock/subsys/iscsi
	return $RETVAL
}

stop() {
	RETVAL=0
	echo -n $"Stopping iSCSI: iscsilun"

	# unmount all filesystems on iSCSI devices
	$BASEDIR/sbin/iscsi-umountall -t -k
	sync

	killproc iscsilun > /dev/null 2>&1
	echo

	if [ -n "$(pidofproc iscsid)" ] ; then
		echo -n $"Stopping iSCSI: iscsid"
		killproc iscsid
		RETVAL=$?
		echo
	fi
	rm -f $PIDFILE

	if ( lsmod | grep -q "^$DRIVER_MODULE" ) ; then 
	    rmmod $DRIVER_MODULE >/dev/null 2>&1
	fi

	[ $RETVAL -eq 0 ]  && rm -f /var/lock/subsys/iscsi
	return $RETVAL
}

rhstatus() {
	status iscsilun
	status iscsid
}

restart () {
	stop
	start
}

case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  status)
	rhstatus
	;;
  restart|reload)
	restart
	;;
  *)
    echo $"Usage: $0 {start|stop|status|restart}"
    exit 1
esac

exit $?

