1#!/bin/sh
2#
3# $FreeBSD$
4#
5
6# PROVIDE: dumpon
7# BEFORE: disks
8# KEYWORD: nojail
9
10. /etc/rc.subr
11
12name="dumpon"
13desc="Dump kernel corefiles from swap to disk"
14start_cmd="dumpon_start"
15stop_cmd="dumpon_stop"
16
17dumpon_try()
18{
19	if /sbin/dumpon "${1}" ; then
20		# Make a symlink in devfs for savecore
21		ln -fs "${1}" /dev/dumpdev
22		return 0
23	fi
24	warn "unable to specify $1 as a dump device"
25	return 1
26}
27
28dumpon_start()
29{
30	# Enable dumpdev so that savecore can see it. Enable it
31	# early so a crash early in the boot process can be caught.
32	#
33	case ${dumpdev} in
34	[Nn][Oo] | '')
35		;;
36	[Aa][Uu][Tt][Oo])
37		dev=$(/bin/kenv -q dumpdev)
38		if [ -n "${dev}" ] ; then
39			dumpon_try "${dev}"
40			return $?
41		fi
42		while read dev mp type more ; do
43			[ "${type}" = "swap" ] || continue
44			[ -c "${dev}" ] || continue
45			dumpon_try "${dev}" 2>/dev/null && return 0
46		done </etc/fstab
47		echo "No suitable dump device was found." 1>&2
48		return 1
49		;;
50	*)
51		dumpon_try "${dumpdev}"
52		;;
53	esac
54}
55
56dumpon_stop()
57{
58	case ${dumpdev} in
59	[Nn][Oo] | '')
60		;;
61	*)
62		rm -f /dev/dumpdev
63		/sbin/dumpon -v off
64		;;
65	esac
66}
67
68load_rc_config $name
69run_rc_command "$1"
70