OpenIPMI/openipmi.initscript

249 lines
6.0 KiB
Bash

#!/bin/sh
#############################################################################
#
# ipmi: OpenIPMI Driver init script
#
# Authors: Matt Domsch <Matt_Domsch@dell.com>
# Chris Poblete <Chris_Poblete@dell.com>
#
# chkconfig: - 04 96
# description: OpenIPMI Driver init script
#
### BEGIN INIT INFO
# Provides: ipmidrv
# Required-Start: $localfs $remotefs $syslog
# Required-Stop: $localfs $remotefs $syslog
# Default-Start:
# Default-Stop:
# Short-Description: OpenIPMI Driver init script
# Description: OpenIPMI Driver init script
### END INIT INFO
#
#############################################################################
# for log_success_msg and friends
[ -r /lib/lsb/init-functions ] && . /lib/lsb/init-functions
# source config info
[ -r /etc/sysconfig/ipmi ] && . /etc/sysconfig/ipmi
#############################################################################
# GLOBALS
#############################################################################
MODULE_NAME="ipmi"
INTF_NUM=0
IPMI_SMB_MODULE_NAME="ipmi_smb"
IPMI_SI_MODULE_NAME="ipmi_si"
kernel=`uname -r | cut -d. -f1-2`
if [ "${kernel}" == "2.4" ]; then
IPMI_SMB_MODULE_NAME="ipmi_smb_intf"
IPMI_SI_MODULE_NAME="ipmi_si_drv"
fi
MODULES_INTERFACES="ipmi_imb ipmi_devintf"
MODULES_FEATURES="ipmi_watchdog ipmi_poweroff"
MODULES_HW="${IPMI_SMB_MODULE_NAME} ${IPMI_SI_MODULE_NAME}"
MODULES_BASE="ipmi_msghandler"
MODULES="${MODULES_INTERFACES} ${MODULES_FEATURES} ${MODULES_HW} ${MODULES_BASE}"
RETVAL=0
LOCKFILE=/var/lock/subsys/ipmi
#############################################################################
load_si()
{
if [ "${IPMI_SI}" = "1" ]; then
modprobe ${IPMI_SI_MODULE_NAME} || RETVAL=1
fi
}
load_smb()
{
if [ "${IPMI_SMB}" = "1" ]; then
modprobe ${IPMI_SMB_MODULE_NAME} || RETVAL=1
fi
}
load_hw_modules()
{
load_si
load_smb
}
start_watchdog()
{
if [ "${IPMI_WATCHDOG}" = "1" ]; then
load_hw_modules
modprobe ipmi_watchdog ${IPMI_WATCHDOG_OPTIONS} || RETVAL=2
if [ ! -x /sbin/udev -a ! -e /dev/watchdog ]; then
mknod -m 0600 /dev/watchdog 10 130 || RETVAL=2
fi
fi
}
stop_watchdog()
{
modprobe -q -r ipmi_watchdog
[ ! -x /sbin/udev ] && rm /dev/watchdog
}
start_powercontrol()
{
local poweroff_opts=""
if [ "${IPMI_POWEROFF}" = "1" ]; then
load_hw_modules
[ "${IPMI_POWERCYCLE}" == "1" ] && poweroff_opts="poweroff_control=2"
modprobe ipmi_poweroff "${poweroff_opts}" || RETVAL=2
fi
}
stop_powercontrol()
{
modprobe -q -r ipmi_poweroff
}
#############################################################################
unload_all_ipmi_modules()
{
[ ! -x /sbin/udev ] && rm -f "/dev/ipmi${INTF_NUM}"
stop_watchdog
for m in ${MODULES}; do
modprobe -q -r ${m}
done
}
unload_ipmi_modules_leave_features()
{
[ ! -x /sbin/udev ] && rm -f "/dev/ipmi${INTF_NUM}"
for m in ${MODULES_INTERFACES}; do
modprobe -q -r ${m}
done
lsmod | egrep -q "ipmi_poweroff|ipmi_watchdog"
if [ "$?" -ne "0" ]; then
stop_watchdog
for m in ${MODULES}; do
modprobe -q -r ${m}
done
fi
}
#############################################################################
load_ipmi_modules ()
{
modprobe ipmi_msghandler || RETVAL=1
load_hw_modules
[ "${RETVAL}" = "1" ] && unload_all_ipmi_modules && return
start_watchdog
start_powercontrol
if [ "${DEV_IPMI}" = "1" ]; then
modprobe ipmi_devintf || RETVAL=2
if [ "${RETVAL}" != "2" ]; then
if [ ! -x /sbin/udev ]; then
DEVMAJOR=`cat /proc/devices | awk '/ipmidev/{print $1}'`
mknod -m 0600 /dev/ipmi${INTF_NUM} c ${DEVMAJOR} 0 || RETVAL=2
fi
fi
fi
if [ "${IPMI_IMB}" = "1" ]; then
modprobe ipmi_imb || RETVAL=2
if [ "${RETVAL}" != "2" ]; then
DEVMAJOR=`cat /proc/devices | awk '/imb/{print $1}'`
mknod -m 0600 /dev/imb c ${DEVMAJOR} 0 || RETVAL=2
fi
fi
# Per Corey Minyard, essentially no one uses ipmi_radisys
# and we don't want to encourage its further use
# so it won't be handled here.
return
}
#############################################################################
start()
{
echo -n $"Starting ${MODULE_NAME} drivers: "
load_ipmi_modules
[ "${RETVAL}" = "1" ] && log_failure_msg && return
[ "${RETVAL}" = "2" ] && touch ${LOCKFILE} && log_warning_msg
[ "${RETVAL}" = "0" ] && touch ${LOCKFILE} && log_success_msg
}
#############################################################################
stop()
{
echo -n $"Stopping ${MODULE_NAME} drivers: "
unload_ipmi_modules_leave_features
rm -f ${LOCKFILE}
log_success_msg
}
stop_all()
{
echo -n $"Stopping ${MODULE_NAME} drivers: "
unload_all_ipmi_modules
rm -f ${LOCKFILE}
log_success_msg
}
#############################################################################
restart()
{
stop_all
start
}
#############################################################################
status ()
{
for m in ${MODULES}; do
if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then
echo "$m module loaded"
else
echo "$m module not loaded"
fi
done
}
usage ()
{
echo $"Usage: $0 {start|stop|status|restart|condrestart|" 1>&2
echo $" start-watchdog|stop-watchdog|" 1>&2
echo $" start-powercontrol|stop-powercontrol|" 1>&2
echo $" stop-all}" 1>&2
RETVAL=1
}
condrestart ()
{
[ -e ${LOCKFILE} ] && restart
}
#############################################################################
# MAIN
#############################################################################
case "$1" in
start) start ;;
stop) stop ;;
restart) restart ;;
status) status ;;
condrestart) condrestart ;;
start-watchdog) start_watchdog ;;
stop-watchdog) stop_watchdog ;;
start-powercontrol) start_powercontrol ;;
stop-powercontrol) stop_powercontrol ;;
stop-all) stop_all ;;
*) usage ;;
esac
exit ${RETVAL}
#############################################################################
# end of file
#############################################################################