#! /bin/sh
#
# wdt          Enable & reset the IPMI watchdog timer via cron
#
# chkconfig: - 91 59
# description: wdt is a utility from ipmiutil.sf.net to configure the \
#              IPMI watchdog timer.
#
# It enables watchdog for 90 second timeout, reset every 1 min (60 sec).
# It uses the cron daemon which reads files from /etc/cron.d
# Note that the $crond_sh variable is different for RedHat & SuSE.
#
### BEGIN INIT INFO
# Provides: ipmiutil_wdt
# Required-Start: $localfs $remotefs $syslog
# Required-Stop: $localfs $remotefs $syslog
# Default-Start:
# Default-Stop:
# Short-Description: ipmiutil watchdog timer init script
# Description: Init script to enable and reset ipmiutil watchdog timer via cron
### END INIT INFO
#
#if [ -f /etc/init.d/functions ]; then
# Source function library.
#. /etc/init.d/functions
#fi

name=ipmiutil_wdt
prog="/usr/sbin/ipmiutil wdt"
wdtcron=/etc/cron.d/wdt
LOCKFILE=/var/lock/subsys/$name
wdtlog=/var/log/$name
#tmpcron=/tmp/wdtcron.$$
# tmpcron2=/tmp/wdtcron2.$$

start() {
	echo -n $"Starting $prog: "
	echo
	driverok=0
	if [ "`lsmod | grep "ipmi"`" != "" ]
	then 
	   driverok=1
	fi
	if [ "`lsmod | grep "^imb "`" != "" ]
	then
	   driverok=1
	fi
	if [ $driverok -eq 0 ]
	then
	   echo "No ipmi driver loaded, aborting."
	   RETVAL=1
	else
           # configure the watchdog for a 90 second timeout
	   $prog -e -t 90  >$wdtlog
	   RETVAL=$?
           if [ $RETVAL -eq 0 ]
	   then
             # restart the watchdog every 60 seconds via crontab (skip)
             # cat - <<%%% >$tmpcron
#* * * * * $prog -r 
#%%%
             # crontab $tmpcron
	     # RETVAL=$?
             # restart the watchdog every 60 seconds via /etc/cron.d
             cat - <<%%% >$wdtcron
* * * * *  root  $prog -r 
%%%
	     # make crond re-read the /etc/cron.d
	     $crond_sh restart  >>$wdtlog
	     touch $LOCKFILE
	   fi
        fi
	echo
	return $RETVAL
}

stop() {
	echo -n $"Stopping $prog: "
	echo
	# first disable the watchdog 
	$prog -d  >>$wdtlog
	RETVAL=$?
	# now remove the wdt cron job
        # crontab -l >$tmpcron
        # grep -v $prog $tmpcron |grep -v "^#" >$tmpcron2
        # crontab $tmpcron2
        rm -f $wdtcron
	# make crond re-read the /etc/cron.d
	$crond_sh restart >>$wdtlog
	rm -f ${LOCKFILE}
	echo
	return $RETVAL
}	

restart() {
  	stop
	start
}	

get_status() { 
    $prog
    if [ -f ${LOCKFILE} ]; then
        if [ -f $wdtcron ]; then
           echo "$name is running..."
           retval=0
	else
           echo "$name is not running but ${LOCKFILE} exists"
           retval=1
        fi
    else
        echo "$name is stopped"
        retval=3
    fi
    return $retval
}

# Begin mainline script here
if [ -f /etc/redhat-release ]
then
   crond_sh=/etc/init.d/crond
else
   # SuSE, MontaVista, etc.
   crond_sh=/etc/init.d/cron
fi
if [ ! -d /var/lock/subsys ]; then
   LOCKFILE=/var/run/$name.pid
fi

case "$1" in
  start)
  	start
	;;
  stop)
  	stop
	;;
  status)
  	get_status
	;;
  restart)
  	restart
	;;
  reload)
  	restart
	;;
  *)
	echo $"Usage: $0 {start|stop|status|restart|reload}"
	exit 1
esac
