#!/sbin/openrc-run

description="An experiment in scalable routing as an encrypted IPv6 overlay network."

CONFFILE="/etc/yggdrasil.conf"
pidfile="/run/${RC_SVCNAME}.pid"

command="/usr/bin/yggdrasil"
extra_started_commands="reload"

depend() {
	use net dns logger
}

start_pre() {
	if [ ! -f "${CONFFILE}" ]; then
		ebegin "Generating new configuration file into ${CONFFILE}"
		if ! eval ${command} -genconf > ${CONFFILE}; then
			eerror "Failed to generate configuration file"
			exit 1
		fi
	fi

	if [ ! -e /dev/net/tun ]; then
		ebegin "Inserting TUN module"
		if ! modprobe tun;  then
			eerror "Failed to insert TUN kernel module"
			exit 1
		fi
	fi
}

start() {
	ebegin "Starting ${RC_SVCNAME}"
	start-stop-daemon --start --quiet \
		--pidfile "${pidfile}" \
		--make-pidfile \
		--background \
		--stdout /var/log/yggdrasil.stdout.log \
		--stderr /var/log/yggdrasil.stderr.log \
		--exec "${command}" -- -useconffile "${CONFFILE}"
	eend $?
}

reload() {
	ebegin "Reloading ${RC_SVCNAME}"
	start-stop-daemon --signal HUP --pidfile "${pidfile}"
	eend $?
}

stop() {
	ebegin "Stopping ${RC_SVCNAME}"
	start-stop-daemon --stop --pidfile "${pidfile}" --exec "${command}"
	eend $?
}