#!/bin/sh
#
# $NetBSD: sysctl,v 1.12 2002/04/29 12:10:23 lukem Exp $
# $FreeBSD: src/etc/rc.d/sysctl,v 1.12 2003/04/24 08:20:47 mtm Exp $
#

# PROVIDE: sysctl
# REQUIRE: FILESYSTEMS
# REQUIRE: modules
# BEFORE:  NETWORKING

. /etc/rc.subr

name="sysctl"
required_files="/etc/sysctl.conf"
stop_cmd=":"
start_cmd="sysctl_start"
reload_cmd="sysctl_start"
lastload_cmd="sysctl_start last"
extra_commands="reload lastload"

sysctl_start()
{
	local config extra mib val old_val output

	if [ ! -f "/etc/sysctl.conf" ]; then
		return
	fi

	# NOTE: Do not miss the last line when it does not end with a LF.
	while read config extra || [ -n "${config}" ]; do
		case ${config} in
		\#*|'')
			continue
			;;
		*[^=]=[^=]*)
			mib=${config%=*}
			val=${config#*=}
			;;
		*)
			warn "invalid syntax: ${config}"
			continue
			;;
		esac

		if old_val=$(${SYSCTL_N} -q ${mib}); then
			debug "sysctl '${mib}': '${old_val}' -> '${val}'"
			if [ "${old_val}" != "${val}" ]; then
				output=$(${SYSCTL_W} ${mib}=${val})
				echo ${output}
			fi
		elif [ "$1" = "last" ]; then
			warn "sysctl '${mib}' does not exist."
		fi
	done < /etc/sysctl.conf
}

load_rc_config $name
run_rc_command "$1"
