More progress on the initscripts to automatically load the IPMI device drivers. initscript and config file included in this patch. Please review and incorporate into the OpenIPMI package. Thanks, Matt -- Matt Domsch Software Architect Dell Linux Solutions linux.dell.com & www.dell.com/linux Linux on Dell mailing lists @ http://lists.us.dell.com --- /dev/null Thu Apr 11 09:25:15 2002 +++ ipmi/ipmi.init Fri Jun 17 12:10:09 2005 @@ -0,0 +1,248 @@ +#!/bin/sh +############################################################################# +# +# ipmi: OpenIPMI Driver init script +# +# Authors: Matt Domsch <Matt_Domsch@xxxxxxxx> +# Chris Poblete <Chris_Poblete@xxxxxxxx> +# +# chkconfig: 2345 04 96 +# description: OpenIPMI Driver init script +# +### BEGIN INIT INFO +# Provides: ipmidrv +# Required-Start: $localfs $remotefs $syslog +# Required-Stop: $localfs $remotefs $syslog +# Default-Start: 2 3 4 5 +# 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 +############################################################################# + --- /dev/null Thu Apr 11 09:25:15 2002 +++ ipmi/ipmi.sysconf Fri Jun 17 12:10:15 2005 @@ -0,0 +1,36 @@ +# Enable standard hardware interfaces (KCS, BT, SMIC) +# You probably want this enabled. +IPMI_SI=1 + +# Enable nonstandard interfaces (SMB via i2c) +# IPMI_SMB=1 + +# Enable /dev/ipmi0 interface, used by ipmitool, ipmicmd, +# and other userspace IPMI-using applications. +# You probably want this enabled. +DEV_IPMI=1 + +# Enable IPMI_WATCHDOG if you want the IPMI watchdog +# to reboot the system if it hangs +# IPMI_WATCHDOG=1 +# +# Watchdog options - modinfo ipmi_watchdog for details +# watchdog timeout value in seconds +# as there is no userspace ping application that runs during shutdown, +# be sure to give it enough time for any device drivers to +# do their cleanup (e.g. megaraid cache flushes) +# without the watchdog triggering prematurely +IPMI_WATCHDOG_OPTIONS="timeout=60" + +# Enable IPMI_POWEROFF if you want the IPMI +# poweroff module to be loaded. +# IPMI_POWEROFF=1 + +# Enable IPMI_POWERCYCLE if you want the system to be power-cycled (power +# down, delay briefly, power on) rather than power off, on systems +# that support such. IPMI_POWEROFF=1 is also required. +# IPMI_POWERCYCLE=1 + +# Enable "legacy" interfaces for applications +# Intel IMB driver interface +# IPMI_IMB=1 -- fedora-devel-list mailing list fedora-devel-list@xxxxxxxxxx http://www.redhat.com/mailman/listinfo/fedora-devel-list