mchristi 6425a35
#!/bin/sh
mchristi 6425a35
#
dgregor 2628f30
# iscsid iSCSI daemon
dgregor 2628f30
#
mchristi 6425a35
# chkconfig: 345 7 89
mchristi 6425a35
# description: Starts and stops the iSCSI daemon.
mchristi 6425a35
#
mchristi 6425a35
# processname: iscsid
mchristi 6425a35
# pidfile: /var/run/iscsid.pid
mchristi 6425a35
# config:  /etc/iscsi/iscsid.conf
mchristi 6425a35
dgregor 2628f30
### BEGIN INIT INFO
dgregor 2628f30
# Provides:          iscsid
dgregor 2628f30
# Default-Start: 3 4 5
dgregor 2628f30
# Default-Stop: 0 1 2 6
dgregor 2628f30
# Short-Description: Starts and stops login iSCSI daemon.
dgregor 2628f30
# Description: iscsid provides the iSCSI session and connection state machine
dgregor 2628f30
#              for software iscsi/iser (iscsi_tcp/ib_iser) and partialy
dgregor 2628f30
#              offloaded hardware (bnx2i).
dgregor 2628f30
### END INIT INFO
dgregor 2628f30
mchristi 6425a35
# Source function library.
dgregor 2628f30
. /etc/rc.d/init.d/functions
dgregor 2628f30
dgregor 2628f30
exec=/sbin/iscsid
dgregor 2628f30
prog=iscsid
dgregor 2628f30
config=/etc/iscsi/iscsid.conf
dgregor 2628f30
lockfile=/var/lock/subsys/$prog
dgregor 2628f30
dgregor 2628f30
# FIXME this has a false positive for root on nfs
dgregor 2628f30
root_is_iscsi() {
dgregor 2628f30
    rootopts=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $4; }}' /etc/mtab)
dgregor 2628f30
    [[ "$rootopts" =~ "_netdev" ]]
dgregor 2628f30
}
dgregor 2628f30
dgregor 2628f30
force_start() {
dgregor 2628f30
    echo -n $"Starting $prog: "
dgregor 2628f30
    modprobe -q iscsi_tcp
dgregor 2628f30
    modprobe -q ib_iser
mchristi 05db5ec
    modprobe -q cxgb3i
mchristi 05db5ec
    modprobe -q bnx2i
mchristi 4bd6b84
    modprobe -q be2iscsi
mchristi 05db5ec
    daemon brcm_iscsiuio
dgregor 2628f30
    daemon $prog
dgregor 2628f30
    retval=$?
dgregor 2628f30
    echo
dgregor 2628f30
    [ $retval -eq 0 ] && touch $lockfile
dgregor 2628f30
    return $retval
dgregor 2628f30
}
dgregor 2628f30
mchristi e81a583
use_discoveryd() {
mchristi f8d692d
    grep -qrs "discovery.sendtargets.use_discoveryd = Yes" /var/lib/iscsi/send_targets
mchristi f8d692d
    if [ $? -eq 0 ] ; then
mchristi f8d692d
 	return 0
mchristi e81a583
    fi
mchristi e81a583
mchristi f8d692d
    grep -qrs "discovery.isns.use_discoveryd = Yes" /var/lib/iscsi/isns
mchristi f8d692d
    if [ $? -eq 0 ] ; then
mchristi f8d692d
 	return 0
mchristi f8d692d
    fi
mchristi f8d692d
mchristi f8d692d
    return 1
mchristi e81a583
}
mchristi e81a583
dgregor 2628f30
start() {
dgregor 2628f30
    [ -x $exec ] || exit 5
dgregor 2628f30
    [ -f $config ] || exit 6
dgregor 2628f30
mchristi e81a583
    # only start if nodes are setup to startup automatically, root is iscsi,
mchristi e81a583
    # or if iscsid is managing the sessions.
dgregor 2628f30
    grep -qrs "node.startup = automatic" /var/lib/iscsi/nodes
mchristi e81a583
    if [ $? -eq 0 ] || root_is_iscsi || use_discoveryd ; then
dgregor 2628f30
        force_start
dgregor 2628f30
        return $?
dgregor 2628f30
    fi
dgregor 2628f30
dgregor 2628f30
    return 0
mchristi 6425a35
}
mchristi 6425a35
dgregor 2628f30
stop() {
mchristi e81a583
    if use_discoveryd ; then
mchristi e81a583
	iscsiadm -k 0 2>/dev/null
mchristi e81a583
    fi
mchristi e81a583
mchristi e81a583
    declare -a iparams=( $(iscsiadm -m session 2>/dev/null | egrep "tcp|iser|bnx2i|cxgb3i|be2iscsi") )
dgregor 2628f30
    if [[ -n "${iparams[*]}" ]]; then
dgregor 2628f30
        # We have active sessions, so don't stop iscsid!!
dgregor 2628f30
        echo -n $"Not stopping $prog: iscsi sessions still active"
dgregor 2628f30
        warning $"Not stopping $prog: iscsi sessions still active"
dgregor 2628f30
        echo
dgregor 2628f30
        return 0
dgregor 2628f30
    fi
dgregor 2628f30
dgregor 2628f30
    echo -n $"Stopping $prog: "
mchristi 4bd6b84
 
mchristi e81a583
    iscsiadm -k 0 2>/dev/null
dgregor 2628f30
    echo
dgregor 2628f30
mchristi 4bd6b84
    killproc brcm_iscsiuio
mchristi 4bd6b84
    rm -f /var/run/brcm_iscsiuio.pid
mchristi 4bd6b84
mchristi 4bd6b84
    # only remove the iscsi drivers when offload is used
mchristi 4bd6b84
    rmmod bnx2i 2>/dev/null
mchristi 4bd6b84
    rmmod cnic 2>/dev/null
mchristi 4bd6b84
mchristi 4bd6b84
    rmmod cxgb3i 2>/dev/null
mchristi 4bd6b84
mchristi 4bd6b84
    modprobe -r be2iscsi 2>/dev/null
mchristi 4bd6b84
dgregor 2628f30
    modprobe -r ib_iser 2>/dev/null
dgregor 2628f30
    modprobe -r iscsi_tcp 2>/dev/null
dgregor 2628f30
mchristi e81a583
    rm -f $lockfile
mchristi e81a583
    return 0
mchristi e81a583
}
mchristi e81a583
mchristi e81a583
rh_status_q() {
mchristi e81a583
    rh_status >/dev/null 2>&1
mchristi 6425a35
}
mchristi 6425a35
dgregor 2628f30
restart() {
mchristi e81a583
    rh_status_q
mchristi e81a583
    use_force_start=$?
mchristi e81a583
dgregor 2628f30
    stop
mchristi e81a583
    # if iscsid was running then make sure it starts up
mchristi e81a583
    if [ "$use_force_start" -eq 0 ] ; then
mchristi e81a583
	force_start
mchristi e81a583
    else
mchristi e81a583
	start
mchristi e81a583
    fi
mchristi 6425a35
}
mchristi 6425a35
dgregor 2628f30
reload() {
dgregor 2628f30
    return 3
dgregor 2628f30
}
dgregor 2628f30
dgregor 2628f30
force_reload() {
dgregor 2628f30
    restart
dgregor 2628f30
}
dgregor 2628f30
dgregor 2628f30
rh_status() {
dgregor 2628f30
    status $prog
dgregor 2628f30
}
dgregor 2628f30
mchristi 6425a35
case "$1" in
dgregor 2628f30
    start)
dgregor 2628f30
        rh_status_q && exit 0
dgregor 2628f30
        $1
dgregor 2628f30
        ;;
dgregor 2628f30
    force-start)
dgregor 2628f30
        force_start
dgregor 2628f30
        ;;
dgregor 2628f30
    stop)
dgregor 2628f30
        rh_status_q || exit 0
dgregor 2628f30
        $1
dgregor 2628f30
        ;;
dgregor 2628f30
    restart)
dgregor 2628f30
        $1
dgregor 2628f30
        ;;
dgregor 2628f30
    reload)
dgregor 2628f30
        rh_status_q || exit 7
dgregor 2628f30
        $1
dgregor 2628f30
        ;;
dgregor 2628f30
    force-reload)
dgregor 2628f30
        force_reload
dgregor 2628f30
        ;;
dgregor 2628f30
    status)
dgregor 2628f30
        rh_status
dgregor 2628f30
        ;;
dgregor 2628f30
    condrestart|try-restart)
dgregor 2628f30
        rh_status_q || exit 0
dgregor 2628f30
        restart
dgregor 2628f30
        ;;
dgregor 2628f30
    *)
dgregor 2628f30
        echo $"Usage: $0
dgregor 2628f30
{start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
dgregor 2628f30
        exit 2
mchristi 6425a35
esac
dgregor 2628f30
exit $?