mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-25 00:51:21 +00:00
1d6b4b3f91
s#. %%RC_SUBR%%#. /etc/rc.subr#
105 lines
2.1 KiB
Bash
105 lines
2.1 KiB
Bash
#!/bin/sh
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
# A sample XORP startup script.
|
|
#
|
|
|
|
# PROVIDE: xorp
|
|
# REQUIRE: netif routing mountcritlocal
|
|
# BEFORE: NETWORKING
|
|
|
|
# Add the following lines to /etc/rc.conf to enable xorp:
|
|
#
|
|
# xorp_enable="YES"
|
|
# xorp_flags="<set as needed>"
|
|
# xorp_config_boot="%%PREFIX%%/etc/xorp.conf.sample"
|
|
|
|
. /etc/rc.subr
|
|
|
|
name="xorp"
|
|
rcvar=`set_rcvar`
|
|
|
|
load_rc_config $name
|
|
|
|
: ${xorp_enable="NO"}
|
|
: ${xorp_config_boot="%%PREFIX%%/etc/xorp.conf"}
|
|
: ${xorp_rtrmgr_pidfile="/var/run/xorp_rtrmgr.pid"}
|
|
: ${xorp_rtrmgr_logfile="/var/log/xorp_rtrmgr.log"}
|
|
: ${xorp_rtrmgr_poll_enable=true}
|
|
: ${xorp_rtrmgr_poll_timeout=90}
|
|
: ${xorp_hardkill_enable=false}
|
|
|
|
required_files=${xorp_config_boot}
|
|
command=%%PREFIX%%/bin/xorp_rtrmgr
|
|
command_args="-b ${xorp_config_boot}"
|
|
pidfile=${xorp_rtrmgr_pidfile}
|
|
sig_stop=INT
|
|
|
|
start_precmd="xorp_prestart"
|
|
start_cmd="xorp_start"
|
|
stop_postcmd="xorp_poststop"
|
|
|
|
xorp_prestart()
|
|
{
|
|
touch ${xorp_rtrmgr_logfile}
|
|
return 0
|
|
}
|
|
|
|
xorp_start()
|
|
{
|
|
pidfile=${xorp_rtrmgr_pidfile}
|
|
|
|
echo -n 'Starting XORP router processes:'
|
|
|
|
echo -n ' xorp_rtrmgr'
|
|
if ! daemon </dev/null >>${xorp_rtrmgr_logfile} 2>&1 -c -p ${pidfile} \
|
|
${command} ${command_args} ; then
|
|
warn 'could not bring up xorp_rtrmgr.'
|
|
return 1
|
|
fi
|
|
|
|
${xorp_rtrmgr_poll_enable} || return 0
|
|
|
|
# If startup polling is enabled, then poll xorp_rtrmgr every
|
|
# second to see if it died, or if it logged successful bringup.
|
|
# XXX This may be racy on very fast machines, but without
|
|
# daemonizing support from xorp_rtrmgr it's difficult not to race.
|
|
|
|
pid=$(cat ${xorp_rtrmgr_pidfile})
|
|
timeout=${xorp_rtrmgr_poll_timeout}
|
|
tick=0
|
|
fail=true
|
|
|
|
until [ $tick = $timeout ];
|
|
do
|
|
sleep 1 ; kill -0 ${pid} || break
|
|
if ( tail -5 ${xorp_rtrmgr_logfile} | \
|
|
grep 'No more tasks to run' > /dev/null 2>&1 ) ; then
|
|
fail=false
|
|
break
|
|
fi
|
|
tick=$((tick + 1))
|
|
done
|
|
|
|
if $fail ; then
|
|
warn 'xorp_rtrmgr failed to start'
|
|
return 1
|
|
fi
|
|
|
|
echo '.'
|
|
return 0
|
|
}
|
|
|
|
xorp_poststop()
|
|
{
|
|
rm -f ${xorp_rtrmgr_pidfile} >/dev/null 2>&1 || true
|
|
|
|
${xorp_hardkill_enable} || return 0
|
|
killall -9 -m xorp_\* || true
|
|
|
|
return 0
|
|
}
|
|
|
|
run_rc_command "$1"
|