aboutsummaryrefslogtreecommitdiff
path: root/net/xorp
diff options
context:
space:
mode:
authorBruce M Simpson <bms@FreeBSD.org>2008-05-14 10:02:37 +0000
committerBruce M Simpson <bms@FreeBSD.org>2008-05-14 10:02:37 +0000
commit753bfb85eae7184901a5183227d1a36044c485b4 (patch)
tree5250500b19b5548747e5a84244c927eda19b6186 /net/xorp
parentff4ed9a36acdc6f5a6f5efb953709ae717b71af4 (diff)
downloadports-753bfb85eae7184901a5183227d1a36044c485b4.tar.gz
ports-753bfb85eae7184901a5183227d1a36044c485b4.zip
Notes
Diffstat (limited to 'net/xorp')
-rw-r--r--net/xorp/files/xorp.in75
1 files changed, 72 insertions, 3 deletions
diff --git a/net/xorp/files/xorp.in b/net/xorp/files/xorp.in
index 13a3f8acd1c1..76d9fe894b92 100644
--- a/net/xorp/files/xorp.in
+++ b/net/xorp/files/xorp.in
@@ -25,12 +25,81 @@ load_rc_config $name
: ${xorp_enable="NO"}
: ${xorp_config_boot="%%PREFIX%%/etc/xorp.conf"}
: ${xorp_flags=""}
+: ${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=%%PREFIX%%bin/xorp_rtrmgr
command_args="-b ${xorp_config_boot}"
pidfile=${xorp_rtrmgr_pidfile}
sig_stop=INT
-# XXX: This is not the correct fix.
-run_rc_command "$1" 2>&1 &
+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"