From ddf957034aa464d072f2f5ef83beaa6171f25742 Mon Sep 17 00:00:00 2001 From: orange-snn Date: Sat, 7 Mar 2020 15:03:39 +0800 Subject: [PATCH] change openipmi-helper fielformat --- OpenIPMI.spec | 8 +- openipmi-helper | 1026 +++++++++++++++++++++++------------------------ 2 files changed, 520 insertions(+), 514 deletions(-) diff --git a/OpenIPMI.spec b/OpenIPMI.spec index 92ab37e..368b789 100644 --- a/OpenIPMI.spec +++ b/OpenIPMI.spec @@ -1,6 +1,6 @@ Name: OpenIPMI Version: 2.0.27 -Release: 4 +Release: 5 Summary: IPMI (Intelligent Platform Management Interface) library and tools License: LGPLv2+ and GPLv2+ or BSD URL: https://sourceforge.net/projects/openipmi/ @@ -139,6 +139,12 @@ echo ".so man1/openipmish.1" > %{buildroot}%{_mandir}/man1/ipmish.1 %exclude %{_mandir}/man1/openipmigui.1 %changelog +* Sat Mar 7 2020 openEuler Buildteam - 2.0.27-5 +- Type:enhancement +- ID:NA +- SUG:NA +- DESC: change openipmi-helper fileformat + * Mon Mar 2 2020 openEuler Buildteam - 2.0.27-4 - Type:enhancement - ID:NA diff --git a/openipmi-helper b/openipmi-helper index 4a36203..5082caa 100644 --- a/openipmi-helper +++ b/openipmi-helper @@ -1,513 +1,513 @@ -#!/bin/sh -############################################################################# -# -# ipmi: OpenIPMI Driver helper script -# -# Authors: Jan Safranek -# -# Based on IPMI init script by: -# Matt Domsch -# Chris Poblete -# -# Status return code bits -# no bits set = no errors -# bit 0 set = minimum modules aren't loaded -# bit 1 set = requested feature module isn't loaded -# bit 2 set = /dev/ipmi0 (or /dev/imb if using that instead) doesn't exist -# bit 3 set = /dev/watchdog doesn't exist -# bit 4 set = lockfile doesn't exist -# bit 5 set = modules are loaded even when asked to be unloaded - -CONFIGFILE=/etc/sysconfig/ipmi -# source config info -[ -r ${CONFIGFILE} ] && . ${CONFIGFILE} - -############################################################################# -# 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="" -[ "${DEV_IPMI}" = "yes" ] && MODULES_INTERFACES="${MODULES_INTERFACES} ipmi_devintf" -[ "${IPMI_IMB}" = "yes" ] && MODULES_INTERFACES="${MODULES_INTERFACES} ipmi_imb" - -MODULES_FEATURES="" -[ "${IPMI_WATCHDOG}" = "yes" ] && MODULES_FEATURES="${MODULES_FEATURES} ipmi_watchdog" -[ "${IPMI_POWEROFF}" = "yes" ] && MODULES_FEATURES="${MODULES_FEATURES} ipmi_poweroff" - -MODULES_HW="" -[ "${IPMI_SI}" = "yes" ] && MODULES_HW="${MODULES_HW} ${IPMI_SI_MODULE_NAME}" -[ "${IPMI_SMB}" = "yes" ] && MODULES_HW="${MODULES_HW} ${IPMI_SMB_MODULE_NAME}" - -MODULES_BASE="ipmi_msghandler" -MODULES="${MODULES_INTERFACES} ${MODULES_FEATURES} ${MODULES_HW} ${MODULES_BASE}" - -RETVAL=0 -LOCKFILE=/var/lock/subsys/ipmi -DEV_IPMI_TIMEOUT=150 - -UDEV_EXISTS=0 -if [ -e /sbin/udev -o -e /sbin/udevd ]; then - UDEV_EXISTS=1 -fi - -############################################################################# -# NOTES: -# * /dev/ipmi0 is unconditionally deleted here on ipmi_devintf unload, -# because SLES9 and RHEL4 kernels don't send a message for udev to delete -# it for us. -# -############################################################################# - -modules_loaded_verbose() -{ - OnePlusLoaded=0 - OnePlusUnloaded=0 - for m in $@; do - if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then - echo "$m module loaded." - OnePlusLoaded=1 - else - echo "$m module not loaded." - OnePlusUnloaded=1 - fi - done -} - -modules_loaded() -{ - OnePlusLoaded=0 - OnePlusUnloaded=0 - for m in $@; do - if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then - OnePlusLoaded=1 - else - OnePlusUnloaded=1 - fi - done -} - -device_node_exists () -{ - if [ -e "$1" ]; then - echo "$1 exists." - return 1 - fi - echo "$1 does not exist." - return 0 -} - -minimum_modules_loaded() -{ - rc_base=1 - rc_hw=1 - modules_loaded_verbose "${MODULES_BASE}" - [ ${OnePlusLoaded} -eq 0 ] && rc_base=0 - - modules_loaded_verbose "${MODULES_HW}" - [ ${OnePlusLoaded} -eq 0 ] && rc_hw=0 - - return $((rc_base && rc_hw)) -} - -############################################################################# - -load_si() -{ - if [ "${IPMI_SI}" = "yes" ]; then - modprobe ${IPMI_SI_MODULE_NAME} > /dev/null 2>&1 - modules_loaded ${IPMI_SI_MODULE_NAME} - [ ${OnePlusLoaded} -ne 1 ] && RETVAL=$((RETVAL | 1)) - fi -} - -load_smb() -{ - if [ "${IPMI_SMB}" = "yes" ]; then - modprobe ${IPMI_SMB_MODULE_NAME} > /dev/null 2>&1 - modules_loaded ${IPMI_SMB_MODULE_NAME} - [ ${OnePlusLoaded} -ne 1 ] && RETVAL=$((RETVAL | 1)) - fi -} - -load_hw_modules() -{ - load_si - load_smb -} - -start_watchdog_common() -{ - load_hw_modules - modprobe ipmi_watchdog ${IPMI_WATCHDOG_OPTIONS} > /dev/null 2>&1 - modules_loaded ipmi_watchdog - [ ${OnePlusUnloaded} -ne 0 ] && - RETVAL=$((RETVAL | 2)) && - echo "Watchdog startup failed: cannot load ipmi_watchdog module" && - return - if [ ${UDEV_EXISTS} -eq 0 -a ! -e /dev/watchdog ]; then - mknod -m 0600 /dev/watchdog c 10 130 - [ $? -ne 0 ] && - RETVAL=$((RETVAL | 8)) && - echo "Watchdog startup failed: cannot create /dev/watchdog" && - return - fi -} - -start_watchdog_quiet() -{ - [ "${IPMI_WATCHDOG}" != "yes" ] && - return - start_watchdog_common -} - -start_watchdog() -{ - [ "${IPMI_WATCHDOG}" != "yes" ] && - RETVAL=$((RETVAL | 2)) && - echo "Watchdog not configured" && - return - start_watchdog_common -} - -stop_watchdog() -{ - modprobe -q -r ipmi_watchdog > /dev/null 2>&1 - modules_loaded ipmi_watchdog - if [ ${OnePlusLoaded} -ne 0 ]; then - RETVAL=$((RETVAL | 32)) - echo "Watchog shutdown failed: cannot unload ipmi_watchdog module" - else - if [ "${IPMI_WATCHDOG}" = "yes" ]; then - [ ${UDEV_EXISTS} -eq 0 ] && rm -f /dev/watchdog - fi - fi -} - -stop_watchdog_quiet() -{ - modprobe -q -r ipmi_watchdog > /dev/null 2>&1 - modules_loaded ipmi_watchdog - if [ ${OnePlusLoaded} -ne 0 ]; then - RETVAL=$((RETVAL | 32)) - else - if [ "${IPMI_WATCHDOG}" = "yes" ]; then - [ ${UDEV_EXISTS} -eq 0 ] && rm -f /dev/watchdog - fi - fi -} - -start_powercontrol_common() -{ - local poweroff_opts="" - load_hw_modules - if [ "${IPMI_POWERCYCLE}" == "yes" ]; then - modinfo ipmi_poweroff 2>/dev/null | grep poweroff_control > /dev/null 2>&1 && \ - poweroff_opts="poweroff_control=2" - modinfo ipmi_poweroff 2>/dev/null | grep poweroff_powercycle > /dev/null 2>&1 && \ - poweroff_opts="poweroff_powercycle=1" - fi - modprobe ipmi_poweroff "${poweroff_opts}" > /dev/null 2>&1 - modules_loaded ipmi_poweroff - [ ${OnePlusUnloaded} -ne 0 ] && - RETVAL=$((RETVAL | 2)) && - echo "Powercontroll startup failed: cannot load ipmi_poweroff module" && - return -} - -start_powercontrol_quiet() -{ - [ "${IPMI_POWEROFF}" != "yes" ] && - return - start_powercontrol_common -} - -start_powercontrol() -{ - [ "${IPMI_POWEROFF}" != "yes" ] && - RETVAL=$((RETVAL | 2)) && - echo "Powercontroll not configured" && - return - start_powercontrol_common -} - -stop_powercontrol() -{ - modprobe -q -r ipmi_poweroff > /dev/null 2>&1 - modules_loaded ipmi_poweroff - if [ ${OnePlusLoaded} -ne 0 ]; then - RETVAL=$((RETVAL | 32)) - echo "Powercontroll shutdown failed: cannot unload ipmi_poweroff module" - fi -} - -stop_powercontrol_quiet() -{ - modprobe -q -r ipmi_poweroff > /dev/null 2>&1 - modules_loaded ipmi_poweroff - [ ${OnePlusLoaded} -ne 0 ] && RETVAL=$((RETVAL | 32)) -} - -############################################################################# -unload_all_ipmi_modules() -{ - stop_watchdog_quiet - stop_powercontrol_quiet - for m in ${MODULES}; do - modprobe -q -r ${m} > /dev/null 2>&1 - done - # delete interface node ONLY if ipmi_devintf is unloaded - [ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] && - rm -f "/dev/ipmi${INTF_NUM}" -} - -unload_ipmi_modules_leave_features() -{ - for m in ${MODULES_INTERFACES}; do - modprobe -q -r ${m} > /dev/null 2>&1 - done - # delete interface node ONLY if ipmi_devintf is unloaded - [ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] && - rm -f "/dev/ipmi${INTF_NUM}" - lsmod | egrep -q "ipmi_(poweroff|watchdog)" > /dev/null 2>&1 - if [ "$?" -ne "0" ]; then - stop_watchdog_quiet - stop_powercontrol_quiet - for m in ${MODULES}; do - modprobe -q -r ${m} > /dev/null 2>&1 - done - fi -} - -############################################################################# -load_ipmi_modules () -{ - local locdelay - modprobe ipmi_msghandler > /dev/null 2>&1 - modules_loaded ipmi_msghandler - [ ${OnePlusLoaded} -ne 1 ] && unload_all_ipmi_modules && RETVAL=$((RETVAL | 1)) && return - load_hw_modules - [ $((RETVAL & 1)) -eq 1 ] && unload_all_ipmi_modules && RETVAL=$((RETVAL | 1)) && return - - if [ "${DEV_IPMI}" = "yes" ]; then - modprobe ipmi_devintf > /dev/null 2>&1 - modules_loaded ipmi_devintf - RETVAL=$((RETVAL & ~2)) - [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) - if [ ${OnePlusLoaded} -eq 1 ]; then - if [ ${UDEV_EXISTS} -eq 0 ]; then - DEVMAJOR=`cat /proc/devices | awk '/ipmidev/{print $1}'` - rm -f /dev/ipmi${INTF_NUM} - mknod -m 0600 /dev/ipmi${INTF_NUM} c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4)) - fi - - # udev can take several seconds to create /dev/ipmi0, - # but it happens asynchronously, so delay here - locdelay=${DEV_IPMI_TIMEOUT} - while [ ! -e /dev/ipmi${INTF_NUM} -a ${locdelay} -gt 0 ]; do - locdelay=$((locdelay - 1)) - sleep 0.1 - done - fi - fi - - if [ "${IPMI_IMB}" = "yes" ]; then - modprobe ipmi_imb > /dev/null 2>&1 - modules_loaded ipmi_imb - RETVAL=$((RETVAL & ~2)) - [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) - if [ ${OnePlusLoaded} -eq 1 ]; then - DEVMAJOR=`cat /proc/devices | awk '/imb/{print $1}'` - rm -f /dev/imb - mknod -m 0600 /dev/imb c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4)) - 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() -{ - load_ipmi_modules - if [ ${RETVAL} -eq 0 ]; then - touch ${LOCKFILE} - else - if [ $((RETVAL & 1)) -eq 1 ]; then - echo "Startup failed." - else - touch ${LOCKFILE} && echo "Warning!?" - fi - fi - start_watchdog_quiet - start_powercontrol_quiet -} - -############################################################################# -stop() -{ - unload_ipmi_modules_leave_features - modules_loaded ${MODULES_INTERFACES} - if [ ${OnePlusLoaded} -ne 0 ]; then - RETVAL=$((RETVAL | 32)) - echo "Shutdown failed, something may be in use" - else - rm -f ${LOCKFILE} - fi -} - -stop_all() -{ - unload_all_ipmi_modules - modules_loaded ${MODULES} - if [ ${OnePlusLoaded} -ne 0 ]; then - RETVAL=$((RETVAL | 32)) - echo "Shutdown failed, something may be in use" - else - rm -f ${LOCKFILE} - fi -} - -############################################################################# -restart() -{ - stop_all - RETVAL=0 - start -} - -############################################################################# - -reload() -{ - stop_all - RETVAL=0 - start -} - -############################################################################# - -status_all() -{ - minimum_modules_loaded - [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) - - modules_loaded_verbose ${MODULES_FEATURES} ${MODULES_INTERFACES} - [ ${OnePlusUnloaded} -ne 0 ] && RETVAL=$((RETVAL | 2)) - - if [ "${DEV_IPMI}" = "yes" ]; then - device_node_exists /dev/ipmi${INTF_NUM} - [ $? -eq 0 ] && RETVAL=$((RETVAL | 4)) - fi - - if [ "${IPMI_IMB}" = "yes" ]; then - device_node_exists /dev/imb - [ $? -eq 0 ] && RETVAL=$((RETVAL | 4)) - fi - - if [ "${IPMI_WATCHDOG}" = "yes" ]; then - device_node_exists /dev/watchdog - [ $? -eq 0 ] && RETVAL=$((RETVAL | 8)) - fi - - [ ! -e ${LOCKFILE} ] && RETVAL=$((RETVAL | 16)) -} - -status() -{ - minimum_modules_loaded - [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) - - if [ "${DEV_IPMI}" = "yes" ]; then - modules_loaded_verbose ipmi_devintf - [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) - - device_node_exists /dev/ipmi${INTF_NUM} - [ $? -eq 0 ] && RETVAL=$((RETVAL | 4)) - fi - - if [ "${IPMI_IMB}" = "yes" ]; then - device_node_exists /dev/imb - [ $? -eq 0 ] && RETVAL=$((RETVAL | 4)) - fi -} - -status_watchdog() -{ - minimum_modules_loaded - [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) - - modules_loaded_verbose ipmi_watchdog - [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) - - device_node_exists /dev/watchdog - [ $? -eq 0 ] && RETVAL=$((RETVAL | 8)) -} - -status_powercontrol() -{ - minimum_modules_loaded - [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) - - modules_loaded_verbose ipmi_powercontrol - [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) -} - -############################################################################# -usage () -{ - echo $"Usage: $0 {start|stop|status" 1>&2 - echo $" restart|condrestart|try-restart|reload|force-reload" 1>&2 - echo $" start-watchdog|stop-watchdog|status-watchdog" 1>&2 - echo $" start-powercontrol|stop-powercontrol|status-powercontrol" 1>&2 - echo $" stop-all|status-all}" 1>&2 - RETVAL=2 -} - -condrestart () -{ - [ -e ${LOCKFILE} ] && restart -} - -############################################################################# -# MAIN -############################################################################# -case "$1" in - start) start ;; - stop) stop ;; - restart) restart ;; - force-reload) reload ;; - reload) reload ;; - status) status ;; - status-all) status_all ;; - condrestart) condrestart ;; - try-restart) condrestart ;; - start-watchdog) start_watchdog ;; - stop-watchdog) stop_watchdog ;; - status-watchdog) status_watchdog ;; - start-powercontrol) start_powercontrol ;; - stop-powercontrol) stop_powercontrol ;; - status-powercontrol) status_powercontrol ;; - stop-all) stop_all ;; - *) usage ;; -esac - -exit ${RETVAL} - -############################################################################# -# end of file -############################################################################# - - +#!/bin/sh +############################################################################# +# +# ipmi: OpenIPMI Driver helper script +# +# Authors: Jan Safranek +# +# Based on IPMI init script by: +# Matt Domsch +# Chris Poblete +# +# Status return code bits +# no bits set = no errors +# bit 0 set = minimum modules aren't loaded +# bit 1 set = requested feature module isn't loaded +# bit 2 set = /dev/ipmi0 (or /dev/imb if using that instead) doesn't exist +# bit 3 set = /dev/watchdog doesn't exist +# bit 4 set = lockfile doesn't exist +# bit 5 set = modules are loaded even when asked to be unloaded + +CONFIGFILE=/etc/sysconfig/ipmi +# source config info +[ -r ${CONFIGFILE} ] && . ${CONFIGFILE} + +############################################################################# +# 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="" +[ "${DEV_IPMI}" = "yes" ] && MODULES_INTERFACES="${MODULES_INTERFACES} ipmi_devintf" +[ "${IPMI_IMB}" = "yes" ] && MODULES_INTERFACES="${MODULES_INTERFACES} ipmi_imb" + +MODULES_FEATURES="" +[ "${IPMI_WATCHDOG}" = "yes" ] && MODULES_FEATURES="${MODULES_FEATURES} ipmi_watchdog" +[ "${IPMI_POWEROFF}" = "yes" ] && MODULES_FEATURES="${MODULES_FEATURES} ipmi_poweroff" + +MODULES_HW="" +[ "${IPMI_SI}" = "yes" ] && MODULES_HW="${MODULES_HW} ${IPMI_SI_MODULE_NAME}" +[ "${IPMI_SMB}" = "yes" ] && MODULES_HW="${MODULES_HW} ${IPMI_SMB_MODULE_NAME}" + +MODULES_BASE="ipmi_msghandler" +MODULES="${MODULES_INTERFACES} ${MODULES_FEATURES} ${MODULES_HW} ${MODULES_BASE}" + +RETVAL=0 +LOCKFILE=/var/lock/subsys/ipmi +DEV_IPMI_TIMEOUT=150 + +UDEV_EXISTS=0 +if [ -e /sbin/udev -o -e /sbin/udevd ]; then + UDEV_EXISTS=1 +fi + +############################################################################# +# NOTES: +# * /dev/ipmi0 is unconditionally deleted here on ipmi_devintf unload, +# because SLES9 and RHEL4 kernels don't send a message for udev to delete +# it for us. +# +############################################################################# + +modules_loaded_verbose() +{ + OnePlusLoaded=0 + OnePlusUnloaded=0 + for m in $@; do + if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then + echo "$m module loaded." + OnePlusLoaded=1 + else + echo "$m module not loaded." + OnePlusUnloaded=1 + fi + done +} + +modules_loaded() +{ + OnePlusLoaded=0 + OnePlusUnloaded=0 + for m in $@; do + if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then + OnePlusLoaded=1 + else + OnePlusUnloaded=1 + fi + done +} + +device_node_exists () +{ + if [ -e "$1" ]; then + echo "$1 exists." + return 1 + fi + echo "$1 does not exist." + return 0 +} + +minimum_modules_loaded() +{ + rc_base=1 + rc_hw=1 + modules_loaded_verbose "${MODULES_BASE}" + [ ${OnePlusLoaded} -eq 0 ] && rc_base=0 + + modules_loaded_verbose "${MODULES_HW}" + [ ${OnePlusLoaded} -eq 0 ] && rc_hw=0 + + return $((rc_base && rc_hw)) +} + +############################################################################# + +load_si() +{ + if [ "${IPMI_SI}" = "yes" ]; then + modprobe ${IPMI_SI_MODULE_NAME} > /dev/null 2>&1 + modules_loaded ${IPMI_SI_MODULE_NAME} + [ ${OnePlusLoaded} -ne 1 ] && RETVAL=$((RETVAL | 1)) + fi +} + +load_smb() +{ + if [ "${IPMI_SMB}" = "yes" ]; then + modprobe ${IPMI_SMB_MODULE_NAME} > /dev/null 2>&1 + modules_loaded ${IPMI_SMB_MODULE_NAME} + [ ${OnePlusLoaded} -ne 1 ] && RETVAL=$((RETVAL | 1)) + fi +} + +load_hw_modules() +{ + load_si + load_smb +} + +start_watchdog_common() +{ + load_hw_modules + modprobe ipmi_watchdog ${IPMI_WATCHDOG_OPTIONS} > /dev/null 2>&1 + modules_loaded ipmi_watchdog + [ ${OnePlusUnloaded} -ne 0 ] && + RETVAL=$((RETVAL | 2)) && + echo "Watchdog startup failed: cannot load ipmi_watchdog module" && + return + if [ ${UDEV_EXISTS} -eq 0 -a ! -e /dev/watchdog ]; then + mknod -m 0600 /dev/watchdog c 10 130 + [ $? -ne 0 ] && + RETVAL=$((RETVAL | 8)) && + echo "Watchdog startup failed: cannot create /dev/watchdog" && + return + fi +} + +start_watchdog_quiet() +{ + [ "${IPMI_WATCHDOG}" != "yes" ] && + return + start_watchdog_common +} + +start_watchdog() +{ + [ "${IPMI_WATCHDOG}" != "yes" ] && + RETVAL=$((RETVAL | 2)) && + echo "Watchdog not configured" && + return + start_watchdog_common +} + +stop_watchdog() +{ + modprobe -q -r ipmi_watchdog > /dev/null 2>&1 + modules_loaded ipmi_watchdog + if [ ${OnePlusLoaded} -ne 0 ]; then + RETVAL=$((RETVAL | 32)) + echo "Watchog shutdown failed: cannot unload ipmi_watchdog module" + else + if [ "${IPMI_WATCHDOG}" = "yes" ]; then + [ ${UDEV_EXISTS} -eq 0 ] && rm -f /dev/watchdog + fi + fi +} + +stop_watchdog_quiet() +{ + modprobe -q -r ipmi_watchdog > /dev/null 2>&1 + modules_loaded ipmi_watchdog + if [ ${OnePlusLoaded} -ne 0 ]; then + RETVAL=$((RETVAL | 32)) + else + if [ "${IPMI_WATCHDOG}" = "yes" ]; then + [ ${UDEV_EXISTS} -eq 0 ] && rm -f /dev/watchdog + fi + fi +} + +start_powercontrol_common() +{ + local poweroff_opts="" + load_hw_modules + if [ "${IPMI_POWERCYCLE}" == "yes" ]; then + modinfo ipmi_poweroff 2>/dev/null | grep poweroff_control > /dev/null 2>&1 && \ + poweroff_opts="poweroff_control=2" + modinfo ipmi_poweroff 2>/dev/null | grep poweroff_powercycle > /dev/null 2>&1 && \ + poweroff_opts="poweroff_powercycle=1" + fi + modprobe ipmi_poweroff "${poweroff_opts}" > /dev/null 2>&1 + modules_loaded ipmi_poweroff + [ ${OnePlusUnloaded} -ne 0 ] && + RETVAL=$((RETVAL | 2)) && + echo "Powercontroll startup failed: cannot load ipmi_poweroff module" && + return +} + +start_powercontrol_quiet() +{ + [ "${IPMI_POWEROFF}" != "yes" ] && + return + start_powercontrol_common +} + +start_powercontrol() +{ + [ "${IPMI_POWEROFF}" != "yes" ] && + RETVAL=$((RETVAL | 2)) && + echo "Powercontroll not configured" && + return + start_powercontrol_common +} + +stop_powercontrol() +{ + modprobe -q -r ipmi_poweroff > /dev/null 2>&1 + modules_loaded ipmi_poweroff + if [ ${OnePlusLoaded} -ne 0 ]; then + RETVAL=$((RETVAL | 32)) + echo "Powercontroll shutdown failed: cannot unload ipmi_poweroff module" + fi +} + +stop_powercontrol_quiet() +{ + modprobe -q -r ipmi_poweroff > /dev/null 2>&1 + modules_loaded ipmi_poweroff + [ ${OnePlusLoaded} -ne 0 ] && RETVAL=$((RETVAL | 32)) +} + +############################################################################# +unload_all_ipmi_modules() +{ + stop_watchdog_quiet + stop_powercontrol_quiet + for m in ${MODULES}; do + modprobe -q -r ${m} > /dev/null 2>&1 + done + # delete interface node ONLY if ipmi_devintf is unloaded + [ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] && + rm -f "/dev/ipmi${INTF_NUM}" +} + +unload_ipmi_modules_leave_features() +{ + for m in ${MODULES_INTERFACES}; do + modprobe -q -r ${m} > /dev/null 2>&1 + done + # delete interface node ONLY if ipmi_devintf is unloaded + [ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] && + rm -f "/dev/ipmi${INTF_NUM}" + lsmod | egrep -q "ipmi_(poweroff|watchdog)" > /dev/null 2>&1 + if [ "$?" -ne "0" ]; then + stop_watchdog_quiet + stop_powercontrol_quiet + for m in ${MODULES}; do + modprobe -q -r ${m} > /dev/null 2>&1 + done + fi +} + +############################################################################# +load_ipmi_modules () +{ + local locdelay + modprobe ipmi_msghandler > /dev/null 2>&1 + modules_loaded ipmi_msghandler + [ ${OnePlusLoaded} -ne 1 ] && unload_all_ipmi_modules && RETVAL=$((RETVAL | 1)) && return + load_hw_modules + [ $((RETVAL & 1)) -eq 1 ] && unload_all_ipmi_modules && RETVAL=$((RETVAL | 1)) && return + + if [ "${DEV_IPMI}" = "yes" ]; then + modprobe ipmi_devintf > /dev/null 2>&1 + modules_loaded ipmi_devintf + RETVAL=$((RETVAL & ~2)) + [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) + if [ ${OnePlusLoaded} -eq 1 ]; then + if [ ${UDEV_EXISTS} -eq 0 ]; then + DEVMAJOR=`cat /proc/devices | awk '/ipmidev/{print $1}'` + rm -f /dev/ipmi${INTF_NUM} + mknod -m 0600 /dev/ipmi${INTF_NUM} c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4)) + fi + + # udev can take several seconds to create /dev/ipmi0, + # but it happens asynchronously, so delay here + locdelay=${DEV_IPMI_TIMEOUT} + while [ ! -e /dev/ipmi${INTF_NUM} -a ${locdelay} -gt 0 ]; do + locdelay=$((locdelay - 1)) + sleep 0.1 + done + fi + fi + + if [ "${IPMI_IMB}" = "yes" ]; then + modprobe ipmi_imb > /dev/null 2>&1 + modules_loaded ipmi_imb + RETVAL=$((RETVAL & ~2)) + [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) + if [ ${OnePlusLoaded} -eq 1 ]; then + DEVMAJOR=`cat /proc/devices | awk '/imb/{print $1}'` + rm -f /dev/imb + mknod -m 0600 /dev/imb c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4)) + 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() +{ + load_ipmi_modules + if [ ${RETVAL} -eq 0 ]; then + touch ${LOCKFILE} + else + if [ $((RETVAL & 1)) -eq 1 ]; then + echo "Startup failed." + else + touch ${LOCKFILE} && echo "Warning!?" + fi + fi + start_watchdog_quiet + start_powercontrol_quiet +} + +############################################################################# +stop() +{ + unload_ipmi_modules_leave_features + modules_loaded ${MODULES_INTERFACES} + if [ ${OnePlusLoaded} -ne 0 ]; then + RETVAL=$((RETVAL | 32)) + echo "Shutdown failed, something may be in use" + else + rm -f ${LOCKFILE} + fi +} + +stop_all() +{ + unload_all_ipmi_modules + modules_loaded ${MODULES} + if [ ${OnePlusLoaded} -ne 0 ]; then + RETVAL=$((RETVAL | 32)) + echo "Shutdown failed, something may be in use" + else + rm -f ${LOCKFILE} + fi +} + +############################################################################# +restart() +{ + stop_all + RETVAL=0 + start +} + +############################################################################# + +reload() +{ + stop_all + RETVAL=0 + start +} + +############################################################################# + +status_all() +{ + minimum_modules_loaded + [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) + + modules_loaded_verbose ${MODULES_FEATURES} ${MODULES_INTERFACES} + [ ${OnePlusUnloaded} -ne 0 ] && RETVAL=$((RETVAL | 2)) + + if [ "${DEV_IPMI}" = "yes" ]; then + device_node_exists /dev/ipmi${INTF_NUM} + [ $? -eq 0 ] && RETVAL=$((RETVAL | 4)) + fi + + if [ "${IPMI_IMB}" = "yes" ]; then + device_node_exists /dev/imb + [ $? -eq 0 ] && RETVAL=$((RETVAL | 4)) + fi + + if [ "${IPMI_WATCHDOG}" = "yes" ]; then + device_node_exists /dev/watchdog + [ $? -eq 0 ] && RETVAL=$((RETVAL | 8)) + fi + + [ ! -e ${LOCKFILE} ] && RETVAL=$((RETVAL | 16)) +} + +status() +{ + minimum_modules_loaded + [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) + + if [ "${DEV_IPMI}" = "yes" ]; then + modules_loaded_verbose ipmi_devintf + [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) + + device_node_exists /dev/ipmi${INTF_NUM} + [ $? -eq 0 ] && RETVAL=$((RETVAL | 4)) + fi + + if [ "${IPMI_IMB}" = "yes" ]; then + device_node_exists /dev/imb + [ $? -eq 0 ] && RETVAL=$((RETVAL | 4)) + fi +} + +status_watchdog() +{ + minimum_modules_loaded + [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) + + modules_loaded_verbose ipmi_watchdog + [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) + + device_node_exists /dev/watchdog + [ $? -eq 0 ] && RETVAL=$((RETVAL | 8)) +} + +status_powercontrol() +{ + minimum_modules_loaded + [ $? -eq 0 ] && RETVAL=$((RETVAL | 1)) + + modules_loaded_verbose ipmi_powercontrol + [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2)) +} + +############################################################################# +usage () +{ + echo $"Usage: $0 {start|stop|status" 1>&2 + echo $" restart|condrestart|try-restart|reload|force-reload" 1>&2 + echo $" start-watchdog|stop-watchdog|status-watchdog" 1>&2 + echo $" start-powercontrol|stop-powercontrol|status-powercontrol" 1>&2 + echo $" stop-all|status-all}" 1>&2 + RETVAL=2 +} + +condrestart () +{ + [ -e ${LOCKFILE} ] && restart +} + +############################################################################# +# MAIN +############################################################################# +case "$1" in + start) start ;; + stop) stop ;; + restart) restart ;; + force-reload) reload ;; + reload) reload ;; + status) status ;; + status-all) status_all ;; + condrestart) condrestart ;; + try-restart) condrestart ;; + start-watchdog) start_watchdog ;; + stop-watchdog) stop_watchdog ;; + status-watchdog) status_watchdog ;; + start-powercontrol) start_powercontrol ;; + stop-powercontrol) stop_powercontrol ;; + status-powercontrol) status_powercontrol ;; + stop-all) stop_all ;; + *) usage ;; +esac + +exit ${RETVAL} + +############################################################################# +# end of file +############################################################################# + + -- Gitee