1#!/bin/sh
2#
3# $FreeBSD$
4#
5
6# PROVIDE: initrandom
7# REQUIRE: dumpon ddb
8# BEFORE: disks
9# KEYWORD: nojail
10
11. /etc/rc.subr
12
13name="initrandom"
14start_cmd="initrandom_start"
15stop_cmd=":"
16
17feed_dev_random()
18{
19	if [ -f "${1}" -a -r "${1}" -a -s "${1}" ]; then
20		cat "${1}" | dd of=/dev/random bs=8k 2>/dev/null
21	fi
22}
23
24initrandom_start()
25{
26	soft_random_generator=`sysctl kern.random 2>/dev/null`
27
28	echo -n 'Entropy harvesting:'
29
30	if [ \! -z "${soft_random_generator}" ] ; then
31
32		if [ -w /dev/random ]; then
33			if checkyesno harvest_interrupt; then
34				${SYSCTL} kern.random.sys.harvest.interrupt=1 >/dev/null
35				echo -n ' interrupts'
36			else
37				${SYSCTL} kern.random.sys.harvest.interrupt=0 >/dev/null
38			fi
39
40			if checkyesno harvest_ethernet; then
41				${SYSCTL} kern.random.sys.harvest.ethernet=1 >/dev/null
42				echo -n ' ethernet'
43			else
44				${SYSCTL} kern.random.sys.harvest.ethernet=0 >/dev/null
45			fi
46
47			if checkyesno harvest_p_to_p; then
48				${SYSCTL} kern.random.sys.harvest.point_to_point=1 >/dev/null
49				echo -n ' point_to_point'
50			else
51				${SYSCTL} kern.random.sys.harvest.point_to_point=0 >/dev/null
52			fi
53		fi
54
55		# XXX temporary until we can improve the entropy
56		# harvesting rate.
57		# Entropy below is not great, but better than nothing.
58		# This unblocks the generator at startup
59		( ps -fauxww; sysctl -a; date; df -ib; dmesg; ps -fauxww ) \
60		    | dd of=/dev/random bs=8k 2>/dev/null
61		cat /bin/ls | dd of=/dev/random bs=8k 2>/dev/null
62
63		# First pass at reseeding /dev/random.
64		#
65		case ${entropy_file} in
66		[Nn][Oo] | '')
67			;;
68		*)
69			if [ -w /dev/random ]; then
70				feed_dev_random "${entropy_file}"
71			fi
72			;;
73		esac
74
75		echo -n ' kickstart'
76	fi
77
78	echo '.'
79}
80
81load_rc_config random
82run_rc_command "$1"
83