Blame scripts/redhat-opensm.init.in

Packit 13e616
#!/bin/bash
Packit 13e616
#
Packit 13e616
# Bring up/down opensm
Packit 13e616
#
Packit 13e616
# chkconfig: - 15 85
Packit 13e616
# description: Activates/Deactivates InfiniBand Subnet Manager
Packit 13e616
#
Packit 13e616
### BEGIN INIT INFO
Packit 13e616
# Provides:       opensm
Packit 13e616
# Required-Start: $syslog @RDMA_SERVICE@
Packit 13e616
# Required-Stop: $syslog @RDMA_SERVICE@
Packit 13e616
# Default-Start: @DEFAULT_START@
Packit 13e616
# Default-Stop: @DEFAULT_STOP@
Packit 13e616
# Description:  Manage OpenSM
Packit 13e616
### END INIT INFO
Packit 13e616
#
Packit 13e616
# Copyright (c) 2008 Voltaire, Inc. All rights reserved.
Packit 13e616
# Copyright (c) 2006 Mellanox Technologies. All rights reserved.
Packit 13e616
#
Packit 13e616
# This Software is licensed under one of the following licenses:
Packit 13e616
#
Packit 13e616
# 1) under the terms of the "Common Public License 1.0" a copy of which is
Packit 13e616
#    available from the Open Source Initiative, see
Packit 13e616
#    http://www.opensource.org/licenses/cpl.php.
Packit 13e616
#
Packit 13e616
# 2) under the terms of the "The BSD License" a copy of which is
Packit 13e616
#    available from the Open Source Initiative, see
Packit 13e616
#    http://www.opensource.org/licenses/bsd-license.php.
Packit 13e616
#
Packit 13e616
# 3) under the terms of the "GNU General Public License (GPL) Version 2" a
Packit 13e616
#    copy of which is available from the Open Source Initiative, see
Packit 13e616
#    http://www.opensource.org/licenses/gpl-license.php.
Packit 13e616
#
Packit 13e616
# Licensee has the right to choose one of the above licenses.
Packit 13e616
#
Packit 13e616
# Redistributions of source code must retain the above copyright
Packit 13e616
# notice and one of the license notices.
Packit 13e616
#
Packit 13e616
# Redistributions in binary form must reproduce both the above copyright
Packit 13e616
# notice, one of the license notices in the documentation
Packit 13e616
# and/or other materials provided with the distribution.
Packit 13e616
#
Packit 13e616
#
Packit 13e616
#  $Id: openib-1.0-opensm.init,v 1.5 2006/08/02 18:18:23 dledford Exp $
Packit 13e616
#
Packit 13e616
# processname: @sbindir@/opensm
Packit 13e616
# config: @sysconfdir@/sysconfig/opensm
Packit 13e616
# pidfile: /var/run/opensm.pid
Packit 13e616
Packit 13e616
prefix=@prefix@
Packit 13e616
exec_prefix=@exec_prefix@
Packit 13e616
Packit 13e616
. /etc/rc.d/init.d/functions
Packit 13e616
Packit 13e616
CONFIG=@sysconfdir@/sysconfig/opensm
Packit 13e616
if [ -f $CONFIG ]; then
Packit 13e616
    . $CONFIG
Packit 13e616
fi
Packit 13e616
Packit 13e616
prog=@sbindir@/opensm
Packit 13e616
bin=${prog##*/}
Packit 13e616
Packit 13e616
# Handover daemon for updating guid2lid cache file
Packit 13e616
sldd_prog=@sbindir@/sldd.sh
Packit 13e616
sldd_bin=${sldd_prog##*/}
Packit 13e616
sldd_pid_file=/var/run/sldd.pid
Packit 13e616
Packit 13e616
ACTION=$1
Packit 13e616
Packit 13e616
# Setting OpenSM start parameters
Packit 13e616
PID_FILE=/var/run/${bin}.pid
Packit 13e616
touch $PID_FILE
Packit 13e616
Packit 13e616
if [[ -n "${OSM_HOSTS}" && $(echo -n ${OSM_HOSTS} | wc -w | tr -d '[:space:]') -gt 1  ]]; then
Packit 13e616
    HONORE_GUID2LID="--honor_guid2lid"
Packit 13e616
fi
Packit 13e616
Packit 13e616
#########################################################################
Packit 13e616
Packit 13e616
start_sldd()
Packit 13e616
{
Packit 13e616
    if [ -f $sldd_pid_file ]; then
Packit 13e616
            local line p
Packit 13e616
            read line < $sldd_pid_file
Packit 13e616
            for p in $line ; do
Packit 13e616
                    [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && sldd_pid="$sldd_pid $p"
Packit 13e616
            done
Packit 13e616
    fi
Packit 13e616
Packit 13e616
    if [ -z "$sldd_pid" ]; then
Packit 13e616
        sldd_pid=`pidof -x $sldd_bin`
Packit 13e616
    fi
Packit 13e616
Packit 13e616
    if [ -n "${sldd_pid:-}" ] ; then
Packit 13e616
	kill -9 ${sldd_pid} > /dev/null 2>&1
Packit 13e616
    fi
Packit 13e616
Packit 13e616
    $sldd_prog > /dev/null 2>&1 &
Packit 13e616
    sldd_pid=$!
Packit 13e616
Packit 13e616
    echo ${sldd_pid} > $sldd_pid_file
Packit 13e616
    # Sleep is needed in order to update local gid2lid cache file before running opensm
Packit 13e616
    sleep 3
Packit 13e616
}
Packit 13e616
Packit 13e616
stop_sldd()
Packit 13e616
{
Packit 13e616
    if [ -f $sldd_pid_file ]; then
Packit 13e616
            local line p
Packit 13e616
            read line < $sldd_pid_file
Packit 13e616
            for p in $line ; do
Packit 13e616
                    [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && sldd_pid="$sldd_pid $p"
Packit 13e616
            done
Packit 13e616
    fi
Packit 13e616
Packit 13e616
    if [ -z "$sldd_pid" ]; then
Packit 13e616
        sldd_pid=`pidof -x $sldd_bin`
Packit 13e616
    fi
Packit 13e616
Packit 13e616
    if [ -n "${sldd_pid:-}" ] ; then
Packit 13e616
        kill -15 ${sldd_pid} > /dev/null 2>&1
Packit 13e616
    fi
Packit 13e616
Packit 13e616
}
Packit 13e616
Packit 13e616
start()
Packit 13e616
{
Packit 13e616
    local OSM_PID=
Packit 13e616
Packit 13e616
    pid=""
Packit 13e616
Packit 13e616
    if [ -f $PID_FILE ]; then
Packit 13e616
            local line p
Packit 13e616
            read line < $PID_FILE
Packit 13e616
            for p in $line ; do
Packit 13e616
                    [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p"
Packit 13e616
            done
Packit 13e616
    fi
Packit 13e616
Packit 13e616
    if [ -z "$pid" ]; then
Packit 13e616
        pid=`pidof -o $$ -o $PPID -o %PPID -x $bin`
Packit 13e616
    fi
Packit 13e616
Packit 13e616
    if [ -n "${pid:-}" ] ; then
Packit 13e616
        echo $"${bin} (pid $pid) is already running..."
Packit 13e616
    else
Packit 13e616
Packit 13e616
	if [ -n "${HONORE_GUID2LID}" ]; then
Packit 13e616
		# Run sldd daemod
Packit 13e616
		start_sldd
Packit 13e616
	fi
Packit 13e616
Packit 13e616
        # Start opensm
Packit 13e616
	echo -n "Starting IB Subnet Manager"
Packit 13e616
        $prog --daemon ${HONORE_GUID2LID} ${OPTIONS} > /dev/null
Packit 13e616
        cnt=0; alive=0
Packit 13e616
        while [ $cnt -lt 6 -a $alive -ne 1 ]; do
Packit 13e616
		echo -n ".";
Packit 13e616
		sleep 1
Packit 13e616
		alive=0
Packit 13e616
                OSM_PID=`pidof $prog`
Packit 13e616
                if [ "$OSM_PID" != "" ]; then
Packit 13e616
                        alive=1
Packit 13e616
                fi
Packit 13e616
		let cnt++;
Packit 13e616
	done
Packit 13e616
Packit 13e616
        echo $OSM_PID > $PID_FILE
Packit 13e616
        checkpid $OSM_PID
Packit 13e616
        RC=$?
Packit 13e616
        [ $RC -eq 0 ] && echo_success || echo_failure
Packit 13e616
        [ $RC -eq 0 ] && touch /var/lock/subsys/opensm
Packit 13e616
	echo
Packit 13e616
Packit 13e616
    fi
Packit 13e616
return $RC
Packit 13e616
}
Packit 13e616
Packit 13e616
stop()
Packit 13e616
{
Packit 13e616
    local pid=
Packit 13e616
    local pid1=
Packit 13e616
    local pid2=
Packit 13e616
Packit 13e616
    # Stop sldd daemon
Packit 13e616
    stop_sldd
Packit 13e616
Packit 13e616
    if [ -f $PID_FILE ]; then
Packit 13e616
            local line p
Packit 13e616
            read line < $PID_FILE
Packit 13e616
            for p in $line ; do
Packit 13e616
                    [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid1="$pid1 $p"
Packit 13e616
            done
Packit 13e616
    fi
Packit 13e616
Packit 13e616
    pid2=`pidof -o $$ -o $PPID -o %PPID -x $bin`
Packit 13e616
Packit 13e616
    pid=`echo "$pid1 $pid2" | sed -e 's/\ /\n/g' | sort -n | uniq | sed -e 's/\n/\ /g'`
Packit 13e616
Packit 13e616
    if [ -n "${pid:-}" ] ; then
Packit 13e616
        # Kill opensm
Packit 13e616
	echo -n "Stopping IB Subnet Manager."
Packit 13e616
        kill -15 $pid > /dev/null 2>&1
Packit 13e616
		cnt=0; alive=1
Packit 13e616
        while [ $cnt -lt 6 -a $alive -ne 0 ]; do
Packit 13e616
		echo -n ".";
Packit 13e616
		alive=0
Packit 13e616
		for p in $pid; do
Packit 13e616
			if checkpid $p ; then alive=1; echo -n "-"; fi
Packit 13e616
		done
Packit 13e616
		let cnt++;
Packit 13e616
		sleep $alive
Packit 13e616
	done
Packit 13e616
Packit 13e616
        for p in $pid
Packit 13e616
        do
Packit 13e616
            while checkpid $p ; do
Packit 13e616
                kill -KILL $p > /dev/null 2>&1
Packit 13e616
                echo -n "+"
Packit 13e616
                sleep 1
Packit 13e616
            done
Packit 13e616
        done
Packit 13e616
        checkpid $pid
Packit 13e616
        RC=$?
Packit 13e616
        [ $RC -eq 0 ] && echo_failure || echo_success
Packit 13e616
	echo
Packit 13e616
        RC=$((! $RC))
Packit 13e616
    else
Packit 13e616
	echo -n "Stopping IB Subnet Manager."
Packit 13e616
        echo_failure
Packit 13e616
	echo
Packit 13e616
        RC=1
Packit 13e616
    fi
Packit 13e616
Packit 13e616
    # Remove pid file if any.
Packit 13e616
    rm -f $PID_FILE
Packit 13e616
    rm -f /var/lock/subsys/opensm
Packit 13e616
    return $RC
Packit 13e616
}
Packit 13e616
Packit 13e616
status()
Packit 13e616
{
Packit 13e616
    local pid
Packit 13e616
Packit 13e616
    # First try "pidof"
Packit 13e616
    pid=`pidof -o $$ -o $PPID -o %PPID -x ${bin}`
Packit 13e616
    if [ -n "$pid" ]; then
Packit 13e616
            echo $"${bin} (pid $pid) is running..."
Packit 13e616
            return 0
Packit 13e616
    fi
Packit 13e616
Packit 13e616
     # Next try "/var/run/opensm.pid" files
Packit 13e616
     if [ -f $PID_FILE ] ; then
Packit 13e616
             read pid < $PID_FILE
Packit 13e616
             if [ -n "$pid" ]; then
Packit 13e616
                     echo $"${bin} dead but pid file $PID_FILE exists"
Packit 13e616
                     return 1
Packit 13e616
             fi
Packit 13e616
     fi
Packit 13e616
     echo $"${bin} is stopped"
Packit 13e616
     return 3
Packit 13e616
}
Packit 13e616
Packit 13e616
Packit 13e616
Packit 13e616
case $ACTION in
Packit 13e616
	start)
Packit 13e616
                start
Packit 13e616
		;;
Packit 13e616
	stop)
Packit 13e616
		stop
Packit 13e616
		;;
Packit 13e616
	restart)
Packit 13e616
		stop
Packit 13e616
                start
Packit 13e616
		;;
Packit 13e616
	status)
Packit 13e616
		status
Packit 13e616
		;;
Packit 13e616
	condrestart)
Packit 13e616
		pid=`pidof -o $$ -o $PPID -o %PPID -x $bin`
Packit 13e616
		if [ -n "$pid" ]; then
Packit 13e616
			stop
Packit 13e616
			sleep 1
Packit 13e616
			start
Packit 13e616
		fi
Packit 13e616
		;;
Packit 13e616
	*)
Packit 13e616
		echo
Packit 13e616
		echo "Usage: `basename $0` {start|stop|restart|status}"
Packit 13e616
		echo
Packit 13e616
		exit 1
Packit 13e616
		;;
Packit 13e616
esac
Packit 13e616
Packit 13e616
RC=$?
Packit 13e616
exit $RC