diff options
author | Bruce M Simpson <bms@FreeBSD.org> | 2009-12-08 10:53:10 +0000 |
---|---|---|
committer | Bruce M Simpson <bms@FreeBSD.org> | 2009-12-08 10:53:10 +0000 |
commit | 5274b14529bb0df941b03f436048dfb6f2224365 (patch) | |
tree | b692db583fedeef8d50065fa1e47fc4e694c40ef /net/xorp-devel/files/xorp.in | |
parent | 2b134cd887971e8ff40057b1b5916fccde65ee5e (diff) |
Notes
Diffstat (limited to 'net/xorp-devel/files/xorp.in')
-rw-r--r-- | net/xorp-devel/files/xorp.in | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/net/xorp-devel/files/xorp.in b/net/xorp-devel/files/xorp.in new file mode 100644 index 000000000000..32c4d04e61fd --- /dev/null +++ b/net/xorp-devel/files/xorp.in @@ -0,0 +1,108 @@ +#!/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_conf="%%PREFIX%%/etc/xorp.conf.sample" +# + +. %%RC_SUBR%% + +name="xorp" +rcvar=`set_rcvar` + +load_rc_config $name + +: ${xorp_enable="NO"} +: ${xorp_conf="%%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_conf} +command=%%PREFIX%%/sbin/xorp_rtrmgr +command_args="-c ${xorp_conf}" +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 +} + +# FIXME use XORP's built-in syslog capability + +xorp_start() +{ + pidfile=${xorp_rtrmgr_pidfile} + + echo -n 'Starting XORP router processes:' + + # FIXME use XORP's built-in daemonization + 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" |