249 lines
6.0 KiB
Bash
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
|
|
#############################################################################
|
|
|