[PATCH] initscripts for OpenIPMI

Matt Domsch Matt_Domsch at dell.com
Fri Jun 17 17:13:38 UTC 2005


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 at dell.com>
+#               Chris Poblete <Chris_Poblete at dell.com>
+#
+# 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




More information about the fedora-devel-list mailing list