#! /bin/sh
#
# qlnxremote       Start/Stop RPC QLogic Command and Control Agent
#
# description: The portmapper manages RPC connections, which are used by \
#
# processname: qlnxremote
### BEGIN INIT INFO
# Provides: qlnxremote
# Required-Start: $network $remote_fs $syslog portmap
# Required-Stop:  $remote_fs $syslog 
# Default-Start:  3 5
# Default-Stop:   0 1 2 6
# Description:    Start/Stop RPC QLogic NX HBA Command and Control Agent
### END INIT INFO

SERVICE='qlnxremote'
QLMAPI_PCI_LOCATION=/usr/local/bin
export QLMAPI_PCI_LOCATION

if [ -f /etc/redhat-release ] ; then

	# Redhat 
        # Source function library.
        . /etc/rc.d/init.d/functions
 
        [ -f /usr/local/bin/qlnxremote ] || exit 0
 
        RETVAL=0
 
        # See how we were called.
        case "$1" in
          start)
		process=`pidof $SERVICE`
		if [ "$process" != "" ];
		then
    			echo "$SERVICE service is already running"
		else
                	echo "Starting qlnxremote agent service"
	                /usr/local/bin/qlnxremote > /dev/null 2>&1 &
		fi

                ;;
          stop)
		process=`pidof $SERVICE`
		if [ "$process" != "" ];
		then
                    echo "Stopping qlnxremote agent services"
                    kill -USR1 $process  > /dev/null 2>&1
		else
		    echo "$SERVICE is not running"
		fi
                ;;
          status)
                status qlnxremote
                ;;
          restart|reload)
                $0 stop
                $0 start
                ;;
          *)
                echo "Usage: qlnxremote {start|stop|status|restart|reload}"
                exit 1
        esac
 
        exit $RETVAL

elif [ -f /etc/SuSE-release ] || [ -f /etc/SUSE-brand ] ; then

	#   SuSE

        # Source SuSE config
        #. /etc/rc.config
 
        QLNXREMOTE=/usr/local/bin/qlnxremote
        test -x $QLNXREMOTE || exit 5
 
        # Shell functions sourced from /etc/rc.status:
        #      rc_check         check and set local and overall rc status
        #      rc_status        check and set local and overall rc status
        #      rc_status -v     ditto but be verbose in local rc status
        #      rc_status -v -r  ditto and clear the local rc status
        #      rc_failed        set local and overall rc status to failed
        #      rc_failed <num>  set local and overall rc status to <num><num>
        #      rc_reset         clear local rc status (overall remains)
        #      rc_exit          exit appropriate to overall rc status
        . /etc/rc.status
 
        # First reset status of this service
        rc_reset
 
        # Return values acc. to LSB for all commands but status:
        # 0 - success
        # 1 - generic or unspecified error
        # 2 - invalid or excess argument(s)
        # 3 - unimplemented feature (e.g. "reload")
        # 4 - insufficient privilege
        # 5 - program is not installed
        # 6 - program is not configured
        # 7 - program is not running
        #
        # Note that starting an already running service, stopping
        # or restarting a not-running service as well as the restart
        # with force-reload (in case signalling is not supported) are
        # considered a success.
 
        case "$1" in
            start)
                echo -n "Starting qlnxremote agent service"
                ## Start daemon with startproc(8). If this fails
                ## the echo return value is set appropriate.
 
                # NOTE: startproc return 0, even if service is
                # already running to match LSB spec.
                startproc -q $QLNXREMOTE
 
                # Remember status and be verbose
                rc_status -v
                ;;
            stop)
                echo -n "Shutting down qlnxremote agent service"
                ## Stop daemon with killproc(8) and if this fails
                ## set echo the echo return value.
 
                killproc -TERM $QLNXREMOTE
 
                # Remember status and be verbose
                rc_status -v
                ;;
            try-restart)
                ## Stop the service and if this succeeds (i.e. the
                ## service was running before), start it again.
                ## Note: try-restart is not (yet) part of LSB (as of 0.7.5)
                $0 status >/dev/null &&  $0 restart
 
                # Remember status and be quiet
                rc_status
                ;;
            restart)
                ## Stop the service and regardless of whether it was
                ## running or not, start it again.
                $0 stop
                $0 start
 
                # Remember status and be quiet
                rc_status
                ;;
            force-reload)
                ## Signal the daemon to reload its config. Most daemons
                ## do this on signal 1 (SIGHUP).
                ## If it does not support it, restart.
 
                echo -n "Reload qlnxremote agent service"
                ## if it supports it:
                # killproc -HUP $QLNXREMOTE
                # touch /var/run/FOO.pid
                # rc_status -v
 
                ## Otherwise:
                $0 stop  &&  $0 start
                rc_status
                ;;
            reload)
                ## Like force-reload, but if daemon does not support
                ## signalling, do nothing (!)
 
                # If it supports signalling:
                # echo -n "Reload qlnxremote agent service"
                # killproc -HUP $QLNXREMOTE
                #touch /var/run/FOO.pid
                # rc_status -v
 
                ## Otherwise if it does not support reload:
                rc_failed 3
                rc_status -v
                ;;
            status)
                echo -n "Checking for qlnxremote agent service: "
                ## Check status with checkproc(8), if process is running
                ## checkproc will return with exit status 0.
 
                # Status has a slightly different for the status command:
                # 0 - service running
                # 1 - service dead, but /var/run/  pid  file exists
                # 2 - service dead, but /var/lock/ lock file exists
                # 3 - service not running
 
                # NOTE: checkproc returns LSB compliant status values.
                checkproc $QLNXREMOTE
                rc_status -v
                ;;
            *)
                echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload}"
                exit 1
                ;;
        esac

elif [ -f /etc/os-release ] ; then
	. /lib/lsb/init-functions

	# Redhat 
        # Source function library.
 
        [ -f /usr/local/bin/qlnxremote ] || exit 0
 
        RETVAL=0
 
        # See how we were called.
        case "$1" in
          start)
		process=`pidof $SERVICE`
		if [ "$process" != "" ];
		then
    			echo "$SERVICE service is already running"
		else
                	echo "Starting qlnxremote agent service"
	                /usr/local/bin/qlnxremote > /dev/null 2>&1 &
		fi

                ;;
          stop)
		process=`pidof $SERVICE`
		if [ "$process" != "" ];
		then
                    echo "Stopping qlnxremote agent services"
                    kill -USR1 $process  > /dev/null 2>&1
		else
		    echo "$SERVICE is not running"
		fi
                ;;
          status)
			status_of_proc /usr/local/bin/qlnxremote qlnxremote && exit 0 || exit $?
                ;;
           restart|reload)
                $0 stop
                $0 start
                ;;
          *)
                echo "Usage: qlnxremote {start|stop|status|restart|reload}"
                exit 1
        esac
 
        exit $RETVAL

fi

exit 0
