#!/bin/bash
#
# /etc/init.d/iscsi
#
### BEGIN INIT INFO
# Provides:          iscsi
# Required-Start:    $network
# Should-Start:
# Required-Stop:     
# Should-Stop:
# Default-Start:     3 5
# Default-Stop:      
# Short-Description: Starts and stops the iSCSI client initiator
#                    
### END INIT INFO

PID_FILE=/var/run/iscsi.pid
CONFIG_FILE=/etc/iscsid.conf
DAEMON=/sbin/iscsid
ADMIN=/sbin/iscsiadm
ARGS="-c $CONFIG_FILE -p $PID_FILE"

# Source LSB init functions
. /etc/rc.status

. /etc/sysconfig/iscsi

# Reset status of this service
rc_reset

iscsi_discovery()
{
    $ADMIN -m discovery --type=$ISCSI_DISCOVERY --portal=$ISCSI_PORTAL > /dev/null
}

iscsi_login_all_nodes()
{
    TARGETS=$($ADMIN -m node | sed 's@\[\(.*\)\] .*@\1@g')
    for rec in $TARGETS; do
	$ADMIN -m node --record $rec --login
    done
}

iscsi_logout_all_nodes()
{
    TARGETS=$($ADMIN -m node | sed 's@\[\(.*\)\] .*@\1@g')
    for rec in $TARGETS; do
	$ADMIN -m node --record $rec --logout
    done
}

case "$1" in
    start)
	[ ! -d /var/lib/iscsi ] && mkdir -p /var/lib/iscsi
	echo -n "Starting iSCSI initiator service: "
	if [ -z "$ISCSI_PORTAL" ]; then
	    rc_failed 6
	else
	    modprobe scsi_transport_iscsi
	    modprobe iscsi_tcp
	    startproc $DAEMON $ARGS
	    RETVAL=$?
	    if [ "$RETVAL" == "0" ]; then
		iscsi_discovery
		iscsi_login_all_nodes
	    fi
	fi
	rc_status -v
	;;
    stop)
	echo -n "Stopping iSCSI initiator service: "
	iscsi_logout_all_nodes
	sleep 1
	killproc -TERM $DAEMON
	RETVAL=$?
	if [ "$RETVAL" == "0" ]; then
	    rmmod iscsi_tcp
	    rmmod scsi_transport_iscsi
	    rc_failed 0
	else
	    rc_failed 1
	fi
	rm -f $PID_FILE
	rc_status -v
	;;
    status)
	echo -n "Checking for iSCSI initiator service: "
	checkproc $DAEMON
	rc_status -v
	;;
    restart)
	$0 stop
	sleep 1
	$0 start
	;;
    *)
	echo "Usage: $0 {start|stop|status|restart}"
	exit 1
	;;
esac
rc_exit

