#!/bin/sh

# PROVIDE: exabgp
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
# Add the following line(s) to /etc/rc.conf to enable exabgp:
#
# exabgp_enable="YES"

. /etc/rc.subr

name=exabgp
rcvar=exabgp_enable

load_rc_config $name

exabgp_enable=${exabgp_enable:-"NO"}
exabgp_conf=${exabgp_conf:-"/usr/local/etc/exabgp/exabgp.conf"}

pidfile=/var/run/${name}/${name}.pid

required_files=${exabgp_conf}

command="/usr/local/bin/python3.11"
command_args="-m exabgp --root /usr/local -e /usr/local/etc/exabgp/${name}.env ${exabgp_conf} 1>/dev/null"

configtest_cmd="exabgp_configtest"
start_precmd="exabgp_precmd"
reload_precmd="exabgp_configtest"
restart_precmd="exabgp_configtest"
reload_all_cmd="exabgp_reload_all"
reload_all_precmd="exabgp_configtest"
extra_commands="configtest reload reload_all"
sig_reload="USR1"

exabgp_reload_all()
{
    	echo "Reloading exabgp configuration and processes."
	kill -USR2 $rc_pid
}

exabgp_configtest()
{
	echo "Performing sanity check on ${name} configuration."
	result=$(env exabgp.log.configuration=true exabgp.daemon.daemonize=false exabgp.log.level=ERR exabgp.log.destination=stdout ${command} -m ${name} --root /usr/local --test ${exabgp_conf} 2>&1)
	if [ ! -z "${result}" ]; then
		echo "${result}"
		err 1 "Failed to validate configuration file, aborting."
	fi
}

exabgp_precmd()
{
	install -d -o _bgpd -g _bgpd -m 755 /var/run/${name}
	install -d -o _bgpd -g _bgpd -m 755 /var/log/${name}
	if [ ! -p /var/run/${name}/exabgp.in ]; then
		mkfifo -m 660 /var/run/${name}/exabgp.in
	fi
	if [ ! -p /var/run/${name}/exabgp.out ]; then
		mkfifo -m 660 /var/run/${name}/exabgp.out
	fi
	chown _bgpd:_bgpd /var/run/${name}/exabgp.in /var/run/${name}/exabgp.out
	exabgp_configtest
	rm -f ${pidfile}
}

run_rc_command "$1"
