#!/bin/sh
#
# chkconfig: 345 13 89
# description: Starts and stops the iSCSI initiator
#
# processname: iscsid
# pidfile: /var/run/iscsid.pid
# config:  /etc/iscsi/iscsid.conf

# Source function library.
. /etc/init.d/functions

PATH=/sbin:/bin:/usr/sbin:/usr/bin

RETVAL=0

iqn_wait()
{
	TARGET_IQN=$1
	count=0
	while [ $count -lt 10 ]
	do
		if [ -d "/dev/iscsi/${TARGET_IQN}" ]; then
			count=10
		else
			count=`expr $count + 1`
			sleep 1
		fi
	done
}

start()
{
	echo -n $"Starting iSCSI initiator service: "
	modprobe -q iscsi_tcp
	modprobe -q ib_iser
	daemon iscsid
	RETVAL=$?
	success
	echo
	[ $RETVAL -eq 0 ] || return

	touch /var/lock/subsys/open-iscsi

	echo -n $"Setting up iSCSI targets: "
	iscsiadm -m node --loginall=automatic
	iscsiadm -m node | while read line;
	do
		target=`echo $line | cut -d" " -f2`
		ip=`echo $line | cut -d" " -f1`
		if `iscsiadm -m node -T $target -p $ip | grep "startup = automatic" >& /dev/null`; then
			iqn_wait $target $ip
		fi
	done
	success
	echo

}

stop()
{
	echo -n $"Stopping iSCSI initiator service: "
	sync
	status iscsid 2> /dev/null
	if [ $? == 0 ]; then
	    iscsiadm -m node --logoutall=all
	fi
	pkill -KILL iscsid
	rm -f /var/run/iscsid.pid
	#killproc iscsid
	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/open-iscsi
	modprobe -r iscsi_tcp 2>/dev/null
	modprobe -r ib_iser 2>/dev/null
	success
	echo

}

restart()
{
	stop
	start

}

case "$1" in
	start)
			start
			;;
	stop)
			stop
			;;
	restart)
			stop
			start
			;;
	status)
			status iscsid
			RETVAL=$?
			;;
	condrestart)
			[ -f /var/lock/subsys/open-iscsi ] && restart
			;;
	*)
			echo $"Usage: $0 {start|stop|restart|status|condrestart}"
			exit 1
esac

exit $RETVAL
