#!/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 \
                --output /var/log/yggdrasil.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 $?
}
