#! /bin/sh 
 | 
### BEGIN INIT INFO 
 | 
# Provides: 
 | 
# Required-Start: 
 | 
# Required-Stop: 
 | 
# Default-Start: 
 | 
# Default-Stop: 
 | 
# Short-Description: Starts and stops the iSCSI initiator services and logins to default targets 
 | 
### END INIT INFO 
 | 
#set -x 
 | 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
 | 
DAEMON=/usr/sbin/iscsid 
 | 
ADM=/usr/sbin/iscsiadm 
 | 
PIDFILE=/var/run/iscsid.pid 
 | 
  
 | 
[ -x "$DAEMON" ] || exit 0 
 | 
  
 | 
if [ ! -d /sys/class/ ]; then 
 | 
  echo "Failure:" "iSCSI requires a mounted sysfs, not started." 
 | 
  exit 1 
 | 
fi 
 | 
  
 | 
nodestartup_re='s/^node\.conn\[0]\.startup[     ]*=[     ]*//p' 
 | 
  
 | 
RETVAL=0 
 | 
  
 | 
start() { 
 | 
    echo "Starting iSCSI initiator service" "iscsid" 
 | 
    modprobe -q iscsi_tcp 2>/dev/null || : 
 | 
    modprobe -q ib_iser 2>/dev/null || : 
 | 
    if [ ! -f /etc/iscsi/initiatorname.iscsi ]; then 
 | 
        INITIATORNAME=$(iscsi-iname) 
 | 
        cat >/etc/iscsi/initiatorname.iscsi <<EOF 
 | 
## DO NOT EDIT OR REMOVE THIS FILE! 
 | 
## If you remove this file, the iSCSI daemon will not start. 
 | 
## If you change the InitiatorName, existing access control lists 
 | 
## may reject this initiator.  The InitiatorName must be unique 
 | 
## for each iSCSI initiator.  Do NOT duplicate iSCSI InitiatorNames. 
 | 
InitiatorName=$INITIATORNAME 
 | 
EOF 
 | 
    fi 
 | 
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON 
 | 
    RETVAL=$? 
 | 
    starttargets 
 | 
} 
 | 
  
 | 
starttargets() { 
 | 
    echo "Setting up iSCSI targets" 
 | 
    $ADM -m node --loginall=automatic 
 | 
} 
 | 
  
 | 
stoptargets() { 
 | 
    echo "Disconnecting iSCSI targets" 
 | 
    sync 
 | 
    $ADM -m node --logoutall=all 
 | 
    RETVAL=$? 
 | 
    #if RETVAL is 21, means no active sessions, consider ok 
 | 
    if [ "$RETVAL" = "21" ]; then 
 | 
        RETVAL=0 
 | 
    fi 
 | 
} 
 | 
  
 | 
stop() { 
 | 
    stoptargets 
 | 
    if [ $RETVAL -ne 0 ]; then 
 | 
        echo "Failure:" "Could not stop all targets, try again later" 
 | 
        return $RETVAL 
 | 
    fi 
 | 
  
 | 
    echo "Stopping iSCSI initiator service" 
 | 
    start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON 
 | 
    rm -f $PIDFILE 
 | 
    status=0 
 | 
    modprobe -r ib_iser 2>/dev/null 
 | 
    if [ "$?" -ne "0" -a "$?" -ne "1" ]; then 
 | 
        status=1 
 | 
    fi 
 | 
    modprobe -r iscsi_tcp 2>/dev/null 
 | 
    if [ "$?" -ne "0" -a "$?" -ne "1" ]; then 
 | 
        status=1 
 | 
    fi 
 | 
} 
 | 
  
 | 
restart() { 
 | 
    stop 
 | 
    if [ $RETVAL -ne 0 ]; then 
 | 
        echo "Failure:" "Stopping iSCSI initiator service failed, not starting" 
 | 
        return $RETVAL 
 | 
    fi 
 | 
    start 
 | 
} 
 | 
  
 | 
restarttargets() { 
 | 
    stoptargets 
 | 
    if [ $RETVAL -ne 0 ]; then 
 | 
        echo "Failure:" "Could not stop all targets, try again later" 
 | 
        return $RETVAL 
 | 
    fi 
 | 
    starttargets 
 | 
} 
 | 
  
 | 
status() { 
 | 
    #XXX FIXME: what to do here? 
 | 
    #status iscsid 
 | 
    # list active sessions 
 | 
    echo Current active iSCSI sessions: 
 | 
    $ADM -m session 
 | 
} 
 | 
  
 | 
case "$1" in 
 | 
    start|starttargets|stop|stoptargets|restart|restarttargets|status) 
 | 
        $1 
 | 
        ;; 
 | 
    *) 
 | 
        echo "Usage: $0 {start|stop|restart|status}" 
 | 
        exit 1 
 | 
        ;; 
 | 
esac 
 | 
exit $RETVAL 
 |