diff options
Diffstat (limited to 'net/xorp/files/xorp.in')
-rw-r--r-- | net/xorp/files/xorp.in | 100 |
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 |