#! /bin/sh
#
#        ipmiutil_asy init script
#
# chkconfig: - 91 59
# description: ipmiutil async bridge agent, listens for IPMI LAN client requests
#
# This starts a daemon that listens for asynchronous IPMI LAN soft-shutdown 
# requests from a remote ipmiutil reset (-o/-D).  It depends upon an imb or 
# openipmi driver.
#
### BEGIN INIT INFO
# Provides: ipmiutil_asy
# Required-Start: $local_fs $remote_fs $syslog
# Required-Stop: $local_fs $remote_fs $syslog
# Default-Start: 3 4 5 3 4 5 
# Default-Stop:  0 1 2 6  0 1 2 6 
# Short-Description: ipmiutil async bridge agent init script
# Description: Init script starts ipmiutil async bridge agent for remote reset
### END INIT INFO
#

#if [ -f /etc/init.d/functions ]; then
# Source function library.
#. /etc/init.d/functions
#fi

name="ipmiutil_asy"
dname="ipmiutil_asy bridge agent"
getevtlog=/var/log/${name}.log
lockfile=/var/lock/subsys/${name}
prog=/usr/bin/ipmiutil


getpid () {
    p=`ps -ef |grep "$1" |grep -v grep |awk '{print $2}'`
    echo $p
}

start()
{
	echo -n "Starting $dname: "
	driverok=0
	dtype=`ipmiutil cmd -k |grep "IPMI access" |cut -f2 -d'=' |awk '{ print $1 }'`
	if [ "x$dtype" = "xopen" ]; then
	   driverok=1
	fi
	if [ "x$dtype" = "ximb" ]; then
	   driverok=1
	fi
	if [ $driverok -eq 1 ]
	then
	   [ -x $prog ] || exit 5
	   $prog getevt -a -b >$getevtlog &
	   retval=$?
	   PID=$!
	   if [ $retval -eq 0 ]; then
		echo $PID >$lockfile
	   fi
	else
	   echo "No imb or ipmi driver loaded, aborting."
	   retval=1
        fi
	echo
	return $retval
}

stop()
{
	echo -n "Stopping $dname: "
        retval=1
        if [ -f $lockfile ]; then
           p=`cat $lockfile`
           if [ "x$p" = "x" ]; then
	        p=`getpid "$prog getevt -a"`
	   fi
           if [ "x$p" != "x" ]; then
                kill $p
                retval=$?
           fi
        fi
	echo
	[ $retval -eq 0 ] && rm -f $lockfile
	return $retval
}           

restart() {
  	stop
	start
}	


rh_status() {
    if [ -f $lockfile ]; then
    	p=`cat $lockfile`
	if [ "x$p" != "x" ]; then
	   pid=`getpid $p`
	   if [ "x$pid" != "x" ]; then
              echo "$dname (pid $pid) is running..."
	      retval=0
	   else
	      echo "$dname is dead but $lockfile exists"
	      retval=1
	   fi
	else
	   echo "$dname $lockfile exists but is empty"
	   retval=1
	fi
    else
	echo "$dname is stopped"
	retval=3
    fi
    return $retval
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

if [ ! -d /var/lock/subsys ]; then
   lockfile=/var/run/${name}.pid
fi

case "$1" in
    start)
        rh_status_q && exit 0
        start
        ;;
    stop)
        rh_status_q || exit 0
        stop
        ;;
    restart)
        restart
        ;;
    reload)
        rh_status_q || exit 7
        restart
        ;;
    force-reload)
        restart
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo "Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?