#!/bin/sh ############################################################################# # # ipmi: OpenIPMI Driver init script # # Authors: Matt Domsch # Chris Poblete # # 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="ipmi_radisys ipmi_imb ipmi_poweroff ipmi_watchdog \ ipmi_devintf ${IPMI_SMB_MODULE_NAME} ${IPMI_SI_MODULE_NAME} \ ipmi_msghandler" RETVAL=0 LOCKFILE=/var/lock/subsys/ipmi ############################################################################# start_watchdog() { if [ "${IPMI_WATCHDOG}" = "1" ]; then modprobe ipmi_watchdog || RETVAL=2 fi } stop_watchdog() { modprobe -r ipmi_watchdog } start_powercontrol() { local poweroff_opts="" if [ "${IPMI_POWEROFF}" = "1" ]; then [ "${IPMI_POWERCYCLE}" == "1" ] && poweroff_opts="chassis_ctrl_cmd_param=2" modprobe ipmi_poweroff "${poweroff_opts}" || RETVAL=2 fi } stop_powercontrol() { modprobe -r ipmi_poweroff } ############################################################################# load_ipmi_modules () { modprobe ipmi_msghandler || RETVAL=1 if [ "${IPMI_SI}" = "1" ]; then modprobe ${IPMI_SI_MODULE_NAME} || RETVAL=1 fi if [ "${IPMI_SMB}" = "1" ]; then modprobe ${IPMI_SMB_MODULE_NAME} || RETVAL=1 fi [ "${RETVAL}" = "1" ] && return if [ "${DEV_IPMI}" = "1" ]; then modprobe ipmi_devintf || RETVAL=2 if [ "${RETVAL}" != "2" ]; then # Note, this really should be done by udev on 2.6 DEVMAJOR=`cat /proc/devices | awk '/ipmidev/{print $1}'` mknod -m 0600 /dev/ipmi${INTF_NUM} c ${DEVMAJOR} 0 || RETVAL=2 ln -sf /dev/ipmi${INTF_NUM} /dev/ipmi || RETVAL=2 fi fi start_watchdog start_powercontrol if [ "${IPMI_IMB}" = "1" ]; then modprobe ipmi_imb || RETVAL=2 # FIXME create canonical /dev/foo entry fi if [ "${IPMI_RADISYS}" = "1" ]; then modprobe ipmi_radisys || RETVAL=2 # FIXME create canonical /dev/foo entry fi return } ############################################################################# unload_ipmi_modules() { # Note, deleting these /dev files really should be done by udev # so this function will change soon as the driver changes # to allow such to happen automatically. rm -f "/dev/ipmi${INTF_NUM}" rm -f "/dev/ipmi" for m in ${MODULES}; do modprobe -q -r ${m} done } ############################################################################# 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 rm -f ${LOCKFILE} log_success_msg } ############################################################################# restart() { stop 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|" echo $" start-watchdog|stop-watchdog|start-powercontrol|stop-powercontrol}" 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 ;; *) usage ;; esac exit ${RETVAL} ############################################################################# # end of file #############################################################################