initrandom revision 98184
1#!/bin/sh
2#
3# $FreeBSD: head/etc/rc.d/initrandom 98184 2002-06-13 22:14:37Z gordon $
4#
5
6# PROVIDE: initrandom
7# REQUIRE: initdiskless
8# BEFORE: disks
9# KEYWORD: FreeBSD
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	echo -n 'Entropy harvesting:'
27
28	if checkyesno harvest_interrupt; then
29		if [ -w /dev/random ]; then
30			${SYSCTL_W} kern.random.sys.harvest.interrupt=1 >/dev/null
31			echo -n ' interrupts'
32		fi
33	fi
34
35	if checkyesno harvest_ethernet; then
36		if [ -w /dev/random ]; then
37			${SYSCTL_W} kern.random.sys.harvest.ethernet=1 >/dev/null
38			echo -n ' ethernet'
39		fi
40	fi
41
42	if checkyesno harvest_p_to_p; then
43		if [ -w /dev/random ]; then
44		${SYSCTL_W} kern.random.sys.harvest.point_to_point=1 >/dev/null
45			echo -n ' point_to_point'
46		fi
47	fi
48
49	echo '.'
50
51	# First pass at reseeding /dev/random.
52	#
53	case ${entropy_file} in
54	[Nn][Oo] | '')
55		;;
56	*)
57		if [ -w /dev/random ]; then
58			feed_dev_random "${entropy_file}"
59		fi
60		;;
61	esac
62
63	# XXX temporary until we can get the entropy
64	# harvesting rate up
65	# Entropy below is not great,
66	# but better than nothing.
67	( ps -fauxww; sysctl -a; date; df -ib; dmesg; ps -fauxww; ) \
68	    | dd of=/dev/random bs=8k 2>/dev/null
69	cat /bin/ls | dd of=/dev/random bs=8k 2>/dev/null
70}
71
72load_rc_config random
73run_rc_command "$1"
74