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

BASEDIR=/usr/local
PIDFILE=/var/run/iscsi.pid
ISCSIACTLUN=$BASEDIR/sbin/iscsilun
ISCSID=$BASEDIR/sbin/iscsid

PATH="/sbin:/bin:/usr/sbin:/usr/bin:$BASEDIR/sbin:$BASEDIR/bin:$PATH"

test -x $ISCSID || exit 0

case $1 in
 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 [ ! -f /etc/initiatorname.iscsi ] ; then
	    echo "InitiatorName file /etc/initiatorname.iscsi is missing!"
	    exit 1
	fi

	if lsmod | grep -q "^iscsi" ; then 
            echo "The iSCSI driver is already loaded"
	    exit 1
        fi


	# cycle the old log, since we can't guarantee anything is managing
	# it, and in any case it's now primarily used for debugging info.
	if [ -e /var/log/iscsi.log ] ; then
	    rm -f /var/log/iscsi.log.old
	    mv /var/log/iscsi.log /var/log/iscsi.log.old
	    echo "" > /var/log/iscsi.log
        fi

	# see if we need to generate a unique iSCSI InitiatorName
	if grep -q "^GenerateName=yes" /etc/initiatorname.iscsi ; then
	    echo "Generating a unique iSCSI InitiatorName" >> /var/log/iscsi.log
	    printf "InitiatorName=%s\n" `$BASEDIR/sbin/iscsi-iname` > /etc/initiatorname.iscsi
        fi

	# start
	echo -n "Starting iSCSI: iscsi"

	if ! modprobe iscsi >> /var/log/iscsi.log 2>&1; then
		echo
		echo "Couldn't load module iscsi"
	   	echo "See error log in /var/log/iscsi.log"
		exit 1
	fi

	echo -n " iscsid"
	$ISCSID >> /var/log/iscsi.log 2>&1

	echo -n " iscsilun"
	$ISCSIACTLUN boot >> /var/log/iscsi.log 2>&1

	# if we have an iSCSI fstab, process it
	if [ -f /etc/fstab.iscsi ] ; then
	    echo -n " fsck/mount"
	    sleep 6
	    iscsi-mountall
	fi

	echo ""

	;;
 stop)
	echo -n "Stopping iSCSI:"

	echo -n " sync"
	sync

	# unmount all filesystems on iSCSI devices
	echo -n " umount"
	$BASEDIR/sbin/iscsi-umountall -t -k

	echo -n " sync"
	sync
	sleep 3

	if [ -x /usr/bin/killall ]; then
	    echo -n " iscsilun"
	    killall iscsilun > /dev/null 2>&1
	fi

	echo -n " iscsid"
	if [ -f $PIDFILE ] ; then
	    kill -TERM `head -1 $PIDFILE`
	    killall $BASEDIR/sbin/iscsid > /dev/null 2>&1
	    killall iscsid > /dev/null 2>&1
	    sleep 1
	    rm -f $PIDFILE
	fi

	echo -n " iscsi"
	if lsmod | grep -q "^iscsi" ; then 
	    if ! rmmod iscsi ; then 
		echo "The iSCSI module could not be unloaded."
		exit 1;
	    fi
	fi

	echo
	;;
 restart)
	cd `pwd`
	$0 stop
	$0 start
	;;
 *)
	echo "Unknown request $1"
	;;
esac

