summaryrefslogtreecommitdiff
path: root/net/xorp/files/xorp.in
diff options
context:
space:
mode:
Diffstat (limited to 'net/xorp/files/xorp.in')
-rw-r--r--net/xorp/files/xorp.in100
1 files changed, 36 insertions, 64 deletions
diff --git a/net/xorp/files/xorp.in b/net/xorp/files/xorp.in
index 8f037d3df567..38418281f9d6 100644
--- a/net/xorp/files/xorp.in
+++ b/net/xorp/files/xorp.in
@@ -6,96 +6,68 @@
#
# PROVIDE: xorp
-# REQUIRE: netif routing mountcritlocal
+# REQUIRE: netif routing mountcritlocal ldconfig
# BEFORE: NETWORKING
+# KEYWORD: shutdown
-# Add the following lines to /etc/rc.conf to enable xorp:
+# Add the following line to /etc/rc.conf to enable xorp:
#
# xorp_enable="YES"
-# xorp_flags="<set as needed>"
-# xorp_config_boot="%%PREFIX%%/etc/xorp.conf.sample"
+#
+# Note: You have to create a config file before you can start xorp!
+# Set ${xorp_conf} to its location, the default is defined below.
+#
+# Besides the xorp_* variables which you'll find below with their
+# default values, you can also define the following in rc.conf:
+#
+# xorp_rtprio=n
+#
+# This will run the xorp processes with realtime priority n, see rtprio(1).
. /etc/rc.subr
-name="xorp"
+name=xorp
rcvar=xorp_enable
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}"
+: ${xorp_enable:=NO}
+: ${xorp_conf=%%PREFIX%%/etc/xorp.conf}
+: ${xorp_rtrmgr_pidfile=/var/run/xorp_rtrmgr.pid}
+: ${xorp_rtrmgr_logfile=/var/log/xorp_rtrmgr.log}
+: ${xorp_flags=-l ${xorp_rtrmgr_logfile}}
+: ${xorp_hardkill_enable:=NO}
+
+required_files=${xorp_conf}
+
+command=%%PREFIX%%/sbin/xorp_rtrmgr
pidfile=${xorp_rtrmgr_pidfile}
+logfile=${xorp_rtrmgr_logfile}
+command_args="-d -c ${xorp_conf} -P ${pidfile}"
sig_stop=INT
-start_precmd="xorp_prestart"
-start_cmd="xorp_start"
-stop_postcmd="xorp_poststop"
+start_precmd=xorp_prestart
+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
+ [ -z ${logfile} ] || [ -f ${logfile} ] || touch ${logfile}
- ${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
+ # required for rtprio(1) until handled like nice(1) by rc.subr(8)
+ if [ -n "$xorp_rtprio" ] && [ "$xorp_rtprio" -ge 0 ]
+ then
+ rc_flags="$xorp_rtprio $command $xorp_flags"
+ command=/usr/sbin/rtprio
fi
- echo '.'
return 0
}
xorp_poststop()
{
- rm -f ${xorp_rtrmgr_pidfile} >/dev/null 2>&1 || true
+ rm -f ${pidfile} >/dev/null 2>&1 || true
- ${xorp_hardkill_enable} || return 0
+ checkyesno xorp_hardkill_enable || return 0
killall -9 -m xorp_\* || true
return 0