/[pkgs]/devel/OpenIPMI/openipmi.initscript
ViewVC logotype

Contents of /devel/OpenIPMI/openipmi.initscript

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.12 - (show annotations) (download)
Wed Dec 10 13:56:38 2008 UTC (11 months, 2 weeks ago) by jsafrane
Branch: MAIN
CVS Tags: F-12-split, OpenIPMI-2_0_14-10_fc11, OpenIPMI-2_0_14-11_fc11, OpenIPMI-2_0_14-8_fc11, OpenIPMI-2_0_14-9_fc11, F-11-split, OpenIPMI-2_0_16-3_fc12, OpenIPMI-2_0_16-1_fc11, OpenIPMI-2_0_16-5_fc13, OpenIPMI-2_0_16-4_fc12, OpenIPMI-2_0_16-2_fc12, OpenIPMI-2_0_16-2_fc11, HEAD
Changes since 1.11: +2 -2 lines
shorter probe interval is used in init script, making the service startup quicker in most situations
Resolves: #475101
1 #!/bin/sh
2 #############################################################################
3 #
4 # ipmi: OpenIPMI Driver init script
5 #
6 # Authors: Matt Domsch <Matt_Domsch@dell.com>
7 # Chris Poblete <Chris_Poblete@dell.com>
8 #
9 # chkconfig: - 13 87
10 # description: OpenIPMI Driver init script
11 #
12 ### BEGIN INIT INFO
13 # Provides: ipmidrv
14 # Required-Start: $local_fs $remote_fs $syslog
15 # Required-Stop: $local_fs $remote_fs $syslog
16 # Default-Start:
17 # Default-Stop:
18 # Short-Description: OpenIPMI Driver init script
19 # Description: OpenIPMI Driver init script
20 ### END INIT INFO
21 #
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
30
31 #
32 #############################################################################
33 # for log_success_msg and friends
34 if [ -r /lib/lsb/init-functions ]; then
35 # LSB, SLES, ...
36 . /lib/lsb/init-functions
37 elif [ -r /etc/init.d/functions ]; then
38 # Red Hat / VMware
39 . /etc/init.d/functions
40 my_log_message()
41 {
42 ACTION=$1
43 shift
44
45 case "$ACTION" in
46 success)
47 echo -n $*
48 success "$*"
49 echo
50 ;;
51 failure)
52 echo -n $*
53 failure "$*"
54 echo
55 ;;
56 warning)
57 echo -n $*
58 warning "$*"
59 echo
60 ;;
61 *)
62 ;;
63 esac
64 }
65 log_success_msg()
66 {
67 my_log_message success "$*"
68 }
69 log_failure_msg()
70 {
71 my_log_message failure "$*"
72 }
73 log_warning_msg()
74 {
75 my_log_message warning "$*"
76 }
77 fi
78
79 CONFIGFILE=/etc/sysconfig/ipmi
80 # source config info
81 [ -r ${CONFIGFILE} ] && . ${CONFIGFILE}
82
83 #############################################################################
84 # GLOBALS
85 #############################################################################
86 MODULE_NAME="ipmi"
87 INTF_NUM=0
88
89 IPMI_SMB_MODULE_NAME="ipmi_smb"
90 IPMI_SI_MODULE_NAME="ipmi_si"
91 kernel=`uname -r | cut -d. -f1-2`
92 if [ "${kernel}" == "2.4" ]; then
93 IPMI_SMB_MODULE_NAME="ipmi_smb_intf"
94 IPMI_SI_MODULE_NAME="ipmi_si_drv"
95 fi
96
97 MODULES_INTERFACES=""
98 [ "${DEV_IPMI}" = "yes" ] && MODULES_INTERFACES="${MODULES_INTERFACES} ipmi_devintf"
99 [ "${IPMI_IMB}" = "yes" ] && MODULES_INTERFACES="${MODULES_INTERFACES} ipmi_imb"
100
101 MODULES_FEATURES=""
102 [ "${IPMI_WATCHDOG}" = "yes" ] && MODULES_FEATURES="${MODULES_FEATURES} ipmi_watchdog"
103 [ "${IPMI_POWEROFF}" = "yes" ] && MODULES_FEATURES="${MODULES_FEATURES} ipmi_poweroff"
104
105 MODULES_HW=""
106 [ "${IPMI_SI}" = "yes" ] && MODULES_HW="${MODULES_HW} ${IPMI_SI_MODULE_NAME}"
107 [ "${IPMI_SMB}" = "yes" ] && MODULES_HW="${MODULES_HW} ${IPMI_SMB_MODULE_NAME}"
108
109 MODULES_BASE="ipmi_msghandler"
110 MODULES="${MODULES_INTERFACES} ${MODULES_FEATURES} ${MODULES_HW} ${MODULES_BASE}"
111
112 RETVAL=0
113 LOCKFILE=/var/lock/subsys/ipmi
114 DEV_IPMI_TIMEOUT=150
115
116 UDEV_EXISTS=0
117 if [ -e /sbin/udev -o -e /sbin/udevd ]; then
118 UDEV_EXISTS=1
119 fi
120
121 #############################################################################
122 # NOTES:
123 # * /dev/ipmi0 is unconditionally deleted here on ipmi_devintf unload,
124 # because SLES9 and RHEL4 kernels don't send a message for udev to delete
125 # it for us.
126 #
127 #############################################################################
128
129 modules_loaded_verbose()
130 {
131 OnePlusLoaded=0
132 OnePlusUnloaded=0
133 for m in $@; do
134 if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then
135 echo "$m module loaded."
136 OnePlusLoaded=1
137 else
138 echo "$m module not loaded."
139 OnePlusUnloaded=1
140 fi
141 done
142 }
143
144 modules_loaded()
145 {
146 OnePlusLoaded=0
147 OnePlusUnloaded=0
148 for m in $@; do
149 if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then
150 OnePlusLoaded=1
151 else
152 OnePlusUnloaded=1
153 fi
154 done
155 }
156
157 device_node_exists ()
158 {
159 if [ -e "$1" ]; then
160 echo "$1 exists."
161 return 1
162 fi
163 echo "$1 does not exist."
164 return 0
165 }
166
167 minimum_modules_loaded()
168 {
169 rc_base=1
170 rc_hw=1
171 modules_loaded_verbose "${MODULES_BASE}"
172 [ ${OnePlusLoaded} -eq 0 ] && rc_base=0
173
174 modules_loaded_verbose "${MODULES_HW}"
175 [ ${OnePlusLoaded} -eq 0 ] && rc_hw=0
176
177 return $((rc_base && rc_hw))
178 }
179
180 #############################################################################
181
182 load_si()
183 {
184 if [ "${IPMI_SI}" = "yes" ]; then
185 modprobe ${IPMI_SI_MODULE_NAME} > /dev/null 2>&1
186 modules_loaded ${IPMI_SI_MODULE_NAME}
187 [ ${OnePlusLoaded} -ne 1 ] && RETVAL=$((RETVAL | 1))
188 fi
189 }
190
191 load_smb()
192 {
193 if [ "${IPMI_SMB}" = "yes" ]; then
194 modprobe ${IPMI_SMB_MODULE_NAME} > /dev/null 2>&1
195 modules_loaded ${IPMI_SMB_MODULE_NAME}
196 [ ${OnePlusLoaded} -ne 1 ] && RETVAL=$((RETVAL | 1))
197 fi
198 }
199
200 load_hw_modules()
201 {
202 load_si
203 load_smb
204 }
205
206 start_watchdog_common()
207 {
208 load_hw_modules
209 modprobe ipmi_watchdog ${IPMI_WATCHDOG_OPTIONS} > /dev/null 2>&1
210 modules_loaded ipmi_watchdog
211 [ ${OnePlusUnloaded} -ne 0 ] &&
212 RETVAL=$((RETVAL | 2)) &&
213 log_failure_msg &&
214 return
215 if [ ${UDEV_EXISTS} -eq 0 -a ! -e /dev/watchdog ]; then
216 mknod -m 0600 /dev/watchdog c 10 130
217 [ $? -ne 0 ] &&
218 RETVAL=$((RETVAL | 8)) &&
219 log_failure_msg &&
220 return
221 fi
222 log_success_msg
223 }
224
225 start_watchdog_quiet()
226 {
227 [ "${IPMI_WATCHDOG}" != "yes" ] &&
228 return
229 echo -n $"Starting ipmi_watchdog driver: "
230 start_watchdog_common
231 }
232
233 start_watchdog()
234 {
235 echo -n $"Starting ipmi_watchdog driver: "
236 [ "${IPMI_WATCHDOG}" != "yes" ] &&
237 RETVAL=$((RETVAL | 2)) &&
238 log_failure_msg "not configured" &&
239 return
240 start_watchdog_common
241 }
242
243 stop_watchdog()
244 {
245 echo -n $"Stopping ipmi_watchdog driver: "
246 modprobe -q -r ipmi_watchdog > /dev/null 2>&1
247 modules_loaded ipmi_watchdog
248 if [ ${OnePlusLoaded} -ne 0 ]; then
249 RETVAL=$((RETVAL | 32))
250 log_failure_msg
251 else
252 if [ "${IPMI_WATCHDOG}" = "yes" ]; then
253 [ ${UDEV_EXISTS} -eq 0 ] && rm -f /dev/watchdog
254 fi
255 log_success_msg
256 fi
257 }
258
259 stop_watchdog_quiet()
260 {
261 modprobe -q -r ipmi_watchdog > /dev/null 2>&1
262 modules_loaded ipmi_watchdog
263 if [ ${OnePlusLoaded} -ne 0 ]; then
264 RETVAL=$((RETVAL | 32))
265 else
266 if [ "${IPMI_WATCHDOG}" = "yes" ]; then
267 [ ${UDEV_EXISTS} -eq 0 ] && rm -f /dev/watchdog
268 fi
269 fi
270 }
271
272 start_powercontrol_common()
273 {
274 local poweroff_opts=""
275 load_hw_modules
276 if [ "${IPMI_POWERCYCLE}" == "yes" ]; then
277 modinfo ipmi_poweroff 2>/dev/null | grep poweroff_control > /dev/null 2>&1 && \
278 poweroff_opts="poweroff_control=2"
279 modinfo ipmi_poweroff 2>/dev/null | grep poweroff_powercycle > /dev/null 2>&1 && \
280 poweroff_opts="poweroff_powercycle=1"
281 fi
282 modprobe ipmi_poweroff "${poweroff_opts}" > /dev/null 2>&1
283 modules_loaded ipmi_poweroff
284 [ ${OnePlusUnloaded} -ne 0 ] &&
285 RETVAL=$((RETVAL | 2)) &&
286 log_failure_msg &&
287 return
288 log_success_msg
289 }
290
291 start_powercontrol_quiet()
292 {
293 [ "${IPMI_POWEROFF}" != "yes" ] &&
294 return
295 echo -n $"Starting ipmi_poweroff driver: "
296 start_powercontrol_common
297 }
298
299 start_powercontrol()
300 {
301 echo -n $"Starting ipmi_poweroff driver: "
302 [ "${IPMI_POWEROFF}" != "yes" ] &&
303 RETVAL=$((RETVAL | 2)) &&
304 log_failure_msg "not configured" &&
305 return
306 start_powercontrol_common
307 }
308
309 stop_powercontrol()
310 {
311 echo -n $"Stopping ipmi_poweroff driver: "
312 modprobe -q -r ipmi_poweroff > /dev/null 2>&1
313 modules_loaded ipmi_poweroff
314 if [ ${OnePlusLoaded} -ne 0 ]; then
315 RETVAL=$((RETVAL | 32))
316 log_failure_msg
317 else
318 log_success_msg
319 fi
320 }
321
322 stop_powercontrol_quiet()
323 {
324 modprobe -q -r ipmi_poweroff > /dev/null 2>&1
325 modules_loaded ipmi_poweroff
326 [ ${OnePlusLoaded} -ne 0 ] && RETVAL=$((RETVAL | 32))
327 }
328
329 #############################################################################
330 unload_all_ipmi_modules()
331 {
332 stop_watchdog_quiet
333 stop_powercontrol_quiet
334 for m in ${MODULES}; do
335 modprobe -q -r ${m} > /dev/null 2>&1
336 done
337 # delete interface node ONLY if ipmi_devintf is unloaded
338 [ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] &&
339 rm -f "/dev/ipmi${INTF_NUM}"
340 }
341
342 unload_ipmi_modules_leave_features()
343 {
344 for m in ${MODULES_INTERFACES}; do
345 modprobe -q -r ${m} > /dev/null 2>&1
346 done
347 # delete interface node ONLY if ipmi_devintf is unloaded
348 [ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] &&
349 rm -f "/dev/ipmi${INTF_NUM}"
350 lsmod | egrep -q "ipmi_(poweroff|watchdog)" > /dev/null 2>&1
351 if [ "$?" -ne "0" ]; then
352 stop_watchdog_quiet
353 stop_powercontrol_quiet
354 for m in ${MODULES}; do
355 modprobe -q -r ${m} > /dev/null 2>&1
356 done
357 fi
358 }
359
360 #############################################################################
361 load_ipmi_modules ()
362 {
363 local locdelay
364 modprobe ipmi_msghandler > /dev/null 2>&1
365 modules_loaded ipmi_msghandler
366 [ ${OnePlusLoaded} -ne 1 ] && unload_all_ipmi_modules && RETVAL=$((RETVAL | 1)) && return
367 load_hw_modules
368 [ $((RETVAL & 1)) -eq 1 ] && unload_all_ipmi_modules && RETVAL=$((RETVAL | 1)) && return
369
370 if [ "${DEV_IPMI}" = "yes" ]; then
371 modprobe ipmi_devintf > /dev/null 2>&1
372 modules_loaded ipmi_devintf
373 RETVAL=$((RETVAL & ~2))
374 [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
375 if [ ${OnePlusLoaded} -eq 1 ]; then
376 if [ ${UDEV_EXISTS} -eq 0 ]; then
377 DEVMAJOR=`cat /proc/devices | awk '/ipmidev/{print $1}'`
378 rm -f /dev/ipmi${INTF_NUM}
379 mknod -m 0600 /dev/ipmi${INTF_NUM} c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4))
380 fi
381
382 # udev can take several seconds to create /dev/ipmi0,
383 # but it happens asynchronously, so delay here
384 locdelay=${DEV_IPMI_TIMEOUT}
385 while [ ! -e /dev/ipmi${INTF_NUM} -a ${locdelay} -gt 0 ]; do
386 locdelay=$((locdelay - 1))
387 sleep 0.1
388 done
389 fi
390 fi
391
392 if [ "${IPMI_IMB}" = "yes" ]; then
393 modprobe ipmi_imb > /dev/null 2>&1
394 modules_loaded ipmi_imb
395 RETVAL=$((RETVAL & ~2))
396 [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
397 if [ ${OnePlusLoaded} -eq 1 ]; then
398 DEVMAJOR=`cat /proc/devices | awk '/imb/{print $1}'`
399 rm -f /dev/imb
400 mknod -m 0600 /dev/imb c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4))
401 fi
402 fi
403
404 # Per Corey Minyard, essentially no one uses ipmi_radisys
405 # and we don't want to encourage its further use
406 # so it won't be handled here.
407 return
408 }
409
410 #############################################################################
411 start()
412 {
413 echo -n "Starting ${MODULE_NAME} drivers: "
414 load_ipmi_modules
415 if [ ${RETVAL} -eq 0 ]; then
416 touch ${LOCKFILE} && log_success_msg
417 else
418 if [ $((RETVAL & 1)) -eq 1 ]; then
419 log_failure_msg
420 else
421 touch ${LOCKFILE} && log_warning_msg
422 fi
423 fi
424 start_watchdog_quiet
425 start_powercontrol_quiet
426 }
427
428 #############################################################################
429 stop()
430 {
431 echo -n "Stopping ${MODULE_NAME} drivers: "
432 unload_ipmi_modules_leave_features
433 modules_loaded ${MODULES_INTERFACES}
434 if [ ${OnePlusLoaded} -ne 0 ]; then
435 RETVAL=$((RETVAL | 32))
436 log_failure_msg "may be in use"
437 else
438 rm -f ${LOCKFILE}
439 log_success_msg
440 fi
441 }
442
443 stop_all()
444 {
445 echo -n $"Stopping all ${MODULE_NAME} drivers: "
446 unload_all_ipmi_modules
447 modules_loaded ${MODULES}
448 if [ ${OnePlusLoaded} -ne 0 ]; then
449 RETVAL=$((RETVAL | 32))
450 log_failure_msg "may be in use"
451 else
452 rm -f ${LOCKFILE}
453 log_success_msg
454 fi
455 }
456
457 #############################################################################
458 restart()
459 {
460 stop_all
461 RETVAL=0
462 start
463 }
464
465 #############################################################################
466
467 reload()
468 {
469 stop_all
470 RETVAL=0
471 start
472 }
473
474 #############################################################################
475
476 status_all()
477 {
478 minimum_modules_loaded
479 [ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
480
481 modules_loaded_verbose ${MODULES_FEATURES} ${MODULES_INTERFACES}
482 [ ${OnePlusUnloaded} -ne 0 ] && RETVAL=$((RETVAL | 2))
483
484 if [ "${DEV_IPMI}" = "yes" ]; then
485 device_node_exists /dev/ipmi${INTF_NUM}
486 [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
487 fi
488
489 if [ "${IPMI_IMB}" = "yes" ]; then
490 device_node_exists /dev/imb
491 [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
492 fi
493
494 if [ "${IPMI_WATCHDOG}" = "yes" ]; then
495 device_node_exists /dev/watchdog
496 [ $? -eq 0 ] && RETVAL=$((RETVAL | 8))
497 fi
498
499 [ ! -e ${LOCKFILE} ] && RETVAL=$((RETVAL | 16))
500 }
501
502 status()
503 {
504 minimum_modules_loaded
505 [ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
506
507 if [ "${DEV_IPMI}" = "yes" ]; then
508 modules_loaded_verbose ipmi_devintf
509 [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
510
511 device_node_exists /dev/ipmi${INTF_NUM}
512 [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
513 fi
514
515 if [ "${IPMI_IMB}" = "yes" ]; then
516 device_node_exists /dev/imb
517 [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
518 fi
519 }
520
521 status_watchdog()
522 {
523 minimum_modules_loaded
524 [ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
525
526 modules_loaded_verbose ipmi_watchdog
527 [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
528
529 device_node_exists /dev/watchdog
530 [ $? -eq 0 ] && RETVAL=$((RETVAL | 8))
531 }
532
533 status_powercontrol()
534 {
535 minimum_modules_loaded
536 [ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
537
538 modules_loaded_verbose ipmi_powercontrol
539 [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
540 }
541
542 #############################################################################
543 usage ()
544 {
545 echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart" 1>&2
546 echo $" start-watchdog|stop-watchdog|status-watchdog" 1>&2
547 echo $" start-powercontrol|stop-powercontrol|status-powercontrol" 1>&2
548 echo $" stop-all|status-all}" 1>&2
549 RETVAL=1
550 }
551
552 condrestart ()
553 {
554 [ -e ${LOCKFILE} ] && restart
555 }
556
557 #############################################################################
558 # MAIN
559 #############################################################################
560 case "$1" in
561 start) start ;;
562 stop) stop ;;
563 restart) restart ;;
564 reload) reload ;;
565 status) status ;;
566 status-all) status_all ;;
567 condrestart) condrestart ;;
568 try-restart) condrestart ;;
569 start-watchdog) start_watchdog ;;
570 stop-watchdog) stop_watchdog ;;
571 status-watchdog) status_watchdog ;;
572 start-powercontrol) start_powercontrol ;;
573 stop-powercontrol) stop_powercontrol ;;
574 status-powercontrol) status_powercontrol ;;
575 stop-all) stop_all ;;
576 *) usage ;;
577 esac
578
579 exit ${RETVAL}
580
581 #############################################################################
582 # end of file
583 #############################################################################
584

admin@fedoraproject.org
ViewVC Help
Powered by ViewVC 1.1.2