198184Sgordon#!/bin/sh
298184Sgordon#
398184Sgordon# $FreeBSD$
498184Sgordon#
598184Sgordon
698184Sgordon# PROVIDE: dumpon
7208307Sdougb# REQUIRE: zvol
8208307Sdougb# BEFORE: disks
9136224Smtm# KEYWORD: nojail
1098184Sgordon
1198184Sgordon. /etc/rc.subr
1298184Sgordon
1398184Sgordonname="dumpon"
1498184Sgordonstart_cmd="dumpon_start"
15125341Spjdstop_cmd="dumpon_stop"
1698184Sgordon
17147107Sdesdumpon_try()
18147107Sdes{
19179943Smtm	if /sbin/dumpon "${1}" ; then
20147107Sdes		# Make a symlink in devfs for savecore
21147107Sdes		ln -fs "${1}" /dev/dumpdev
22147107Sdes		return 0
23147107Sdes	fi
24179943Smtm	warn "unable to specify $1 as a dump device"
25147107Sdes	return 1
26147107Sdes}
27147107Sdes
2898184Sgordondumpon_start()
2998184Sgordon{
3098184Sgordon	# Enable dumpdev so that savecore can see it. Enable it
3198184Sgordon	# early so a crash early in the boot process can be caught.
3298184Sgordon	#
3398184Sgordon	case ${dumpdev} in
3498184Sgordon	[Nn][Oo] | '')
3598184Sgordon		;;
36135525Sdes	[Aa][Uu][Tt][Oo])
37150103Srwatson		dev=$(/bin/kenv -q dumpdev)
38147107Sdes		if [ -n "${dev}" ] ; then
39147107Sdes			dumpon_try "${dev}"
40147107Sdes			return $?
41147107Sdes		fi
42135525Sdes		while read dev mp type more ; do
43135525Sdes			[ "${type}" = "swap" ] || continue
44135525Sdes			[ -c "${dev}" ] || continue
45147107Sdes			dumpon_try "${dev}" 2>/dev/null && return 0
46135525Sdes		done </etc/fstab
47135525Sdes		echo "No suitable dump device was found." 1>&2
48135525Sdes		return 1
49135525Sdes		;;
5098184Sgordon	*)
51147107Sdes		dumpon_try "${dumpdev}"
5298184Sgordon		;;
5398184Sgordon	esac
5498184Sgordon}
5598184Sgordon
56125341Spjddumpon_stop()
57125341Spjd{
58125341Spjd	case ${dumpdev} in
59125341Spjd	[Nn][Oo] | '')
60125341Spjd		;;
61125341Spjd	*)
62136684Sthomas		rm -f /dev/dumpdev
63125341Spjd		/sbin/dumpon -v off
64125341Spjd		;;
65125341Spjd	esac
66125341Spjd}
67125341Spjd
6898184Sgordonload_rc_config $name
6998184Sgordonrun_rc_command "$1"
70