2
#############################################################################
4
# ipmi: OpenIPMI Driver init script
6
# Authors: Matt Domsch <Matt_Domsch@dell.com>
7
# Chris Poblete <Chris_Poblete@dell.com>
10
# description: OpenIPMI Driver init script
14
# Required-Start: $local_fs $remote_fs $syslog
15
# Required-Stop: $local_fs $remote_fs $syslog
18
# Short-Description: OpenIPMI Driver init script
19
# Description: OpenIPMI Driver init script
22
# Status return code bits
23
# no bits set = no errors
24
# bit 0 set = minimum modules aren't loaded
25
# bit 1 set = requested feature module isn't loaded
26
# bit 2 set = /dev/ipmi0 (or /dev/imb if using that instead) doesn't exist
27
# bit 3 set = /dev/watchdog doesn't exist
28
# bit 4 set = lockfile doesn't exist
29
# bit 5 set = modules are loaded even when asked to be unloaded
32
#############################################################################
33
. /lib/lsb/init-functions
35
CONFIGFILE=/etc/default/openipmi
37
[ -r ${CONFIGFILE} ] && . ${CONFIGFILE}
39
#############################################################################
41
#############################################################################
45
IPMI_SMB_MODULE_NAME="ipmi_smb"
46
IPMI_SI_MODULE_NAME="ipmi_si"
47
kernel=`uname -r | cut -d. -f1-2`
48
if [ "${kernel}" == "2.4" ]; then
49
IPMI_SMB_MODULE_NAME="ipmi_smb_intf"
50
IPMI_SI_MODULE_NAME="ipmi_si_drv"
54
[ "${DEV_IPMI}" = "yes" ] && MODULES_INTERFACES="${MODULES_INTERFACES} ipmi_devintf"
55
[ "${IPMI_IMB}" = "yes" ] && MODULES_INTERFACES="${MODULES_INTERFACES} ipmi_imb"
58
[ "${IPMI_WATCHDOG}" = "yes" ] && MODULES_FEATURES="${MODULES_FEATURES} ipmi_watchdog"
59
[ "${IPMI_POWEROFF}" = "yes" ] && MODULES_FEATURES="${MODULES_FEATURES} ipmi_poweroff"
62
[ "${IPMI_SI}" = "yes" ] && MODULES_HW="${MODULES_HW} ${IPMI_SI_MODULE_NAME}"
63
[ "${IPMI_SMB}" = "yes" ] && MODULES_HW="${MODULES_HW} ${IPMI_SMB_MODULE_NAME}"
65
MODULES_BASE="ipmi_msghandler"
66
MODULES="${MODULES_INTERFACES} ${MODULES_FEATURES} ${MODULES_HW} ${MODULES_BASE}"
69
LOCKFILE=/var/lock/ipmi
73
if [ -e /sbin/udev -o -e /sbin/udevd ]; then
77
#############################################################################
79
# * /dev/ipmi0 is unconditionally deleted here on ipmi_devintf unload,
80
# because SLES9 and RHEL4 kernels don't send a message for udev to delete
83
#############################################################################
85
modules_loaded_verbose()
90
if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then
91
echo "$m module loaded."
93
elif [ -d "/sys/module/$m" ]; then
94
echo "$m module in kernel."
97
echo "$m module not loaded."
108
if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then
110
elif [ -d "/sys/module/$m" ]; then
118
device_node_exists ()
124
echo "$1 does not exist."
128
minimum_modules_loaded()
132
modules_loaded_verbose "${MODULES_BASE}"
133
[ ${OnePlusLoaded} -eq 0 ] && rc_base=0
135
modules_loaded_verbose "${MODULES_HW}"
136
[ ${OnePlusLoaded} -eq 0 ] && rc_hw=0
138
return $((rc_base && rc_hw))
141
#############################################################################
145
if [ "${IPMI_SI}" = "yes" ]; then
146
modprobe ${IPMI_SI_MODULE_NAME} > /dev/null 2>&1
147
modules_loaded ${IPMI_SI_MODULE_NAME}
148
[ ${OnePlusLoaded} -ne 1 ] && RETVAL=$((RETVAL | 1))
154
if [ "${IPMI_SMB}" = "yes" ]; then
155
modprobe ${IPMI_SMB_MODULE_NAME} > /dev/null 2>&1
156
modules_loaded ${IPMI_SMB_MODULE_NAME}
157
[ ${OnePlusLoaded} -ne 1 ] && RETVAL=$((RETVAL | 1))
167
start_watchdog_common()
170
modprobe ipmi_watchdog ${IPMI_WATCHDOG_OPTIONS} > /dev/null 2>&1
171
modules_loaded ipmi_watchdog
172
[ ${OnePlusUnloaded} -ne 0 ] &&
173
RETVAL=$((RETVAL | 2)) &&
176
if [ ${UDEV_EXISTS} -eq 0 -a ! -e /dev/watchdog ]; then
177
mknod -m 0600 /dev/watchdog c 10 130
179
RETVAL=$((RETVAL | 8)) &&
186
start_watchdog_quiet()
188
[ "${IPMI_WATCHDOG}" != "yes" ] &&
190
start_watchdog_common
195
log_begin_msg $"Starting ipmi_watchdog driver: "
196
[ "${IPMI_WATCHDOG}" != "yes" ] &&
197
RETVAL=$((RETVAL | 2)) &&
198
log_failure_msg "not configured" &&
200
start_watchdog_common
206
log_begin_msg $"Stopping ipmi_watchdog driver: "
207
modprobe -q -r ipmi_watchdog > /dev/null 2>&1
208
modules_loaded ipmi_watchdog
209
if [ ${OnePlusLoaded} -ne 0 ]; then
210
RETVAL=$((RETVAL | 32))
211
log_failure_msg "failed"
213
if [ "${IPMI_WATCHDOG}" = "yes" ]; then
214
[ ${UDEV_EXISTS} -eq 0 ] && rm -f /dev/watchdog
216
log_success_msg "success"
221
stop_watchdog_quiet()
223
modprobe -q -r ipmi_watchdog > /dev/null 2>&1
224
modules_loaded ipmi_watchdog
225
if [ ${OnePlusLoaded} -ne 0 ]; then
226
RETVAL=$((RETVAL | 32))
228
if [ "${IPMI_WATCHDOG}" = "yes" ]; then
229
[ ${UDEV_EXISTS} -eq 0 ] && rm -f /dev/watchdog
234
start_powercontrol_common()
236
local poweroff_opts=""
238
if [ "${IPMI_POWERCYCLE}" == "yes" ]; then
239
modinfo ipmi_poweroff 2>/dev/null | grep poweroff_control > /dev/null 2>&1 && \
240
poweroff_opts="poweroff_control=2"
241
modinfo ipmi_poweroff 2>/dev/null | grep poweroff_powercycle > /dev/null 2>&1 && \
242
poweroff_opts="poweroff_powercycle=1"
244
modprobe ipmi_poweroff "${poweroff_opts}" > /dev/null 2>&1
245
modules_loaded ipmi_poweroff
246
[ ${OnePlusUnloaded} -ne 0 ] &&
247
RETVAL=$((RETVAL | 2)) &&
253
start_powercontrol_quiet()
255
[ "${IPMI_POWEROFF}" != "yes" ] &&
257
log_begin_msg "Starting ipmi_poweroff driver: "
258
start_powercontrol_common
264
log_begin_msg "Starting ipmi_poweroff driver."
265
[ "${IPMI_POWEROFF}" != "yes" ] &&
266
RETVAL=$((RETVAL | 2)) &&
267
log_failure_msg "not configured" &&
269
start_powercontrol_common
275
log_being_msg "Stopping ipmi_poweroff driver."
276
modprobe -q -r ipmi_poweroff > /dev/null 2>&1
277
modules_loaded ipmi_poweroff
278
if [ ${OnePlusLoaded} -ne 0 ]; then
279
RETVAL=$((RETVAL | 32))
287
stop_powercontrol_quiet()
289
modprobe -q -r ipmi_poweroff > /dev/null 2>&1
290
modules_loaded ipmi_poweroff
291
[ ${OnePlusLoaded} -ne 0 ] && RETVAL=$((RETVAL | 32))
294
#############################################################################
295
unload_all_ipmi_modules()
298
stop_powercontrol_quiet
299
for m in ${MODULES}; do
300
modprobe -q -r ${m} > /dev/null 2>&1
302
# delete interface node ONLY if ipmi_devintf is unloaded
303
[ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] &&
304
rm -f "/dev/ipmi${INTF_NUM}"
307
unload_ipmi_modules_leave_features()
309
for m in ${MODULES_INTERFACES}; do
310
modprobe -q -r ${m} > /dev/null 2>&1
312
# delete interface node ONLY if ipmi_devintf is unloaded
313
[ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] &&
314
rm -f "/dev/ipmi${INTF_NUM}"
315
lsmod | egrep -q "ipmi_(poweroff|watchdog)" > /dev/null 2>&1
316
if [ "$?" -ne "0" ]; then
318
stop_powercontrol_quiet
319
for m in ${MODULES}; do
320
modprobe -q -r ${m} > /dev/null 2>&1
325
#############################################################################
329
modprobe ipmi_msghandler > /dev/null 2>&1
330
modules_loaded ipmi_msghandler
331
[ ${OnePlusLoaded} -ne 1 ] && unload_all_ipmi_modules && RETVAL=$((RETVAL | 1)) && return
333
[ $((RETVAL & 1)) -eq 1 ] && unload_all_ipmi_modules && RETVAL=$((RETVAL | 1)) && return
335
if [ "${DEV_IPMI}" = "yes" ]; then
336
modprobe ipmi_devintf > /dev/null 2>&1
337
modules_loaded ipmi_devintf
338
RETVAL=$((RETVAL & ~2))
339
[ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
340
if [ ${OnePlusLoaded} -eq 1 ]; then
341
if [ ${UDEV_EXISTS} -eq 0 ]; then
342
DEVMAJOR=`cat /proc/devices | awk '/ipmidev/{print $1}'`
343
rm -f /dev/ipmi${INTF_NUM}
344
mknod -m 0600 /dev/ipmi${INTF_NUM} c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4))
347
# udev can take several seconds to create /dev/ipmi0,
348
# but it happens asynchronously, so delay here
349
locdelay=${DEV_IPMI_TIMEOUT}
350
while [ ! -e /dev/ipmi${INTF_NUM} -a ${locdelay} -gt 0 ]; do
351
locdelay=$((locdelay - 1))
357
if [ "${IPMI_IMB}" = "yes" ]; then
358
modprobe ipmi_imb > /dev/null 2>&1
359
modules_loaded ipmi_imb
360
RETVAL=$((RETVAL & ~2))
361
[ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
362
if [ ${OnePlusLoaded} -eq 1 ]; then
363
DEVMAJOR=`cat /proc/devices | awk '/imb/{print $1}'`
365
mknod -m 0600 /dev/imb c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4))
369
# Per Corey Minyard, essentially no one uses ipmi_radisys
370
# and we don't want to encourage its further use
371
# so it won't be handled here.
375
#############################################################################
378
log_begin_msg "Starting ${MODULE_NAME} drivers" "${MODULE_NAME}"
380
if [ ${RETVAL} -eq 0 ]; then
383
if [ $((RETVAL & 1)) -eq 1 ]; then
390
start_powercontrol_quiet
394
#############################################################################
397
log_begin_msg "Stopping ${MODULE_NAME} drivers."
398
unload_ipmi_modules_leave_features
399
modules_loaded ${MODULES_INTERFACES}
400
if [ ${OnePlusLoaded} -ne 0 ]; then
401
RETVAL=$((RETVAL | 32))
402
log_failure_msg "may be in use"
411
log_begin_msg "Stopping ${MODULE_NAME} drivers."
412
unload_all_ipmi_modules
413
modules_loaded ${MODULES}
414
if [ ${OnePlusLoaded} -ne 0 ]; then
415
RETVAL=$((RETVAL | 32))
416
log_failure_msg "may be in use"
424
#############################################################################
432
#############################################################################
436
minimum_modules_loaded
437
[ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
439
modules_loaded_verbose ${MODULES_FEATURES} ${MODULES_INTERFACES}
440
[ ${OnePlusUnloaded} -ne 0 ] && RETVAL=$((RETVAL | 2))
442
if [ "${DEV_IPMI}" = "yes" ]; then
443
device_node_exists /dev/ipmi${INTF_NUM}
444
[ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
447
if [ "${IPMI_IMB}" = "yes" ]; then
448
device_node_exists /dev/imb
449
[ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
452
if [ "${IPMI_WATCHDOG}" = "yes" ]; then
453
device_node_exists /dev/watchdog
454
[ $? -eq 0 ] && RETVAL=$((RETVAL | 8))
457
[ ! -e ${LOCKFILE} ] && RETVAL=$((RETVAL | 16))
462
minimum_modules_loaded
463
[ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
465
if [ "${DEV_IPMI}" = "yes" ]; then
466
modules_loaded_verbose ipmi_devintf
467
[ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
469
device_node_exists /dev/ipmi${INTF_NUM}
470
[ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
473
if [ "${IPMI_IMB}" = "yes" ]; then
474
device_node_exists /dev/imb
475
[ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
481
minimum_modules_loaded
482
[ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
484
modules_loaded_verbose ipmi_watchdog
485
[ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
487
device_node_exists /dev/watchdog
488
[ $? -eq 0 ] && RETVAL=$((RETVAL | 8))
491
status_powercontrol()
493
minimum_modules_loaded
494
[ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
496
modules_loaded_verbose ipmi_powercontrol
497
[ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
500
#############################################################################
503
log_action_msg "Usage: $0 {start|stop|status|restart|condrestart|try-restart|start-watchdog|stop-watchdog|status-watchdog|start-powercontrol|stop-powercontrol|status-powercontrol|stop-all|status-all}"
509
[ -e ${LOCKFILE} ] && restart
512
#############################################################################
514
#############################################################################
520
status-all) status_all ;;
521
condrestart) condrestart ;;
522
try-restart) condrestart ;;
523
start-watchdog) start_watchdog ;;
524
stop-watchdog) stop_watchdog ;;
525
status-watchdog) status_watchdog ;;
526
start-powercontrol) start_powercontrol ;;
527
stop-powercontrol) stop_powercontrol ;;
528
status-powercontrol) status_powercontrol ;;
529
stop-all) stop_all ;;
535
#############################################################################
537
#############################################################################