#!/bin/sh

# $FreeBSD: head/security/tinc/files/tincd.in 406095 2016-01-14 06:02:05Z dinoex $
#
# PROVIDE: tincd
# REQUIRE: ipfilter FILESYSTEMS sysctl netif
# BEFORE:  SERVERS routing
# KEYWORD: nojail
#
# Define these tincd_* variables in one of these files:
#	/etc/rc.conf
#	/etc/rc.conf.local
#	/etc/rc.conf.d/tincd
#
# tincd_enable (bool):	Set to "NO" by default.
#			Set it to "YES" to enable tincd.
# tincd_cfg (str):	Set to "" by default.
#			Set it to NETNAMEs to use (ex.: "vpn1 vpn2").
# tincd_flags (str):	Set to "" by default.
#			Set it to flags to use (ex.: "-d 1 --logfile").
#
# DO NOT CHANGE THESE DEFAULT VALUES HERE

tincd_enable=${tincd_enable:-"NO"}

. /etc/rc.subr

name="tincd"
rcvar="tincd_enable"
command="/usr/local/sbin/tincd"
start_cmd="tincd_start"
stop_cmd="tincd_stop"
reload_cmd="tincd_reload"
extra_commands="reload"
procname=${command:-tincd}
ldconfig_command="/sbin/ldconfig"

load_rc_config $name

tincd_start()
{
	local setfib
	setfib=/usr/sbin/setfib
	${ldconfig_command} -elf -m /usr/local/lib
	if test -z "${tincd_cfg}"
	then
		eval tincd_fib=\$${name}_fib
		if [ -n "${tincd_fib}" ]
		then
			procname="${command}"
			echo "Starting tincd"
			$setfib -F ${tincd_fib} $command ${command_args}
		else
			echo "Starting tincd"
			$command ${command_args}
		fi
	else
		for cfg in ${tincd_cfg}
		do
			eval tincd_fib=\$${name}_${cfg}_fib
			command_args="-n $cfg"
			if [ -n "${tincd_fib}" ]
			then
				procname="${command}"
				echo "Starting tincd"
				$setfib -F ${tincd_fib} $command ${command_args}
			else
				echo "Starting tincd for: ${cfg}"
				$command ${command_args}
			fi
		done
	fi
# code deliberately borrowed from /etc/rc.d/netif
	if [ -f /etc/rc.d/ipfilter ] ; then
		# Resync ipfilter
		/etc/rc.d/ipfilter quietresync
	fi
}
tincd_stop()
{
	if test -z "${tincd_cfg}"
	then
		echo "Stopping tincd"
		$command -k
	else
		for cfg in $tincd_cfg
		do
			echo "Stopping tincd for: ${cfg}"
			$command -n $cfg -k
		done
	fi
}
tincd_reload()
{
	if test -z "${tincd_cfg}"
	then
		echo "Sending HUP to tincd"
		$command --kill=HUP
	else
		for cfg in $tincd_cfg
		do
			echo "Sending HUP to tincd for: ${cfg}"
			$command -n $cfg --kill=HUP
		done
	fi
}

run_rc_command "$1"
# eof
