mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-29 01:13:08 +00:00
2b127afc27
This can be useful for mixed-environments running different routing daemons (like bird). Approved by: az@, sem@ (maintainer,implicit)
123 lines
2.5 KiB
Bash
123 lines
2.5 KiB
Bash
#!/bin/sh
|
|
|
|
# $FreeBSD$
|
|
#
|
|
# PROVIDE: quagga dynamicrouting
|
|
# REQUIRE: netif routing
|
|
# KEYWORD: nojail
|
|
|
|
#
|
|
# Add the following line to /etc/rc.conf to enable quagga:
|
|
#quagga_enable="YES"
|
|
#
|
|
# You may also wish to use the following variables to fine-tune startup:
|
|
# quagga_flags="-d"
|
|
# quagga_daemons="zebra ripd ripngd ospfd ospf6d bgpd isisd"
|
|
# Per daemon tuning may be done with daemon_name_flags
|
|
# zebra_flags="-dP 0"
|
|
# bgpd_flags="-dnrP 0" and so on
|
|
# If you want to give the routing deamons a chance to catchup before
|
|
# continueing, set quagga_wait_for to a "default" or certain prefix.
|
|
# quagga_wait_for="default"
|
|
#
|
|
# If the quagga daemons require additional shared libraries to start,
|
|
# use the following variable to run ldconfig(8) in advance:
|
|
#quagga_extralibs_path="/usr/local/lib ..."
|
|
#
|
|
|
|
. /etc/rc.subr
|
|
|
|
name="quagga"
|
|
rcvar=quagga_enable
|
|
|
|
start_postcmd=start_postcmd
|
|
stop_postcmd=stop_postcmd
|
|
|
|
start_postcmd()
|
|
{
|
|
# Wait only when last daemon has started.
|
|
if [ "${quagga_daemons}" = "${quagga_daemons% ${name}}" ]; then
|
|
return;
|
|
fi
|
|
if [ ${quagga_wait_for} ]; then
|
|
echo Waiting for ${quagga_wait_for} route...
|
|
while true; do
|
|
/sbin/route -n get ${quagga_wait_for} >/dev/null 2>&1 && break;
|
|
sleep 1;
|
|
done
|
|
fi
|
|
}
|
|
|
|
stop_postcmd()
|
|
{
|
|
rm -f $pidfile
|
|
}
|
|
|
|
do_cmd()
|
|
{
|
|
local ret
|
|
ret=0
|
|
for daemon in ${quagga_daemons}; do
|
|
command=%%PREFIX%%/sbin/${daemon}
|
|
required_files=%%SYSCONF_DIR%%/${daemon}.conf
|
|
pidfile=%%LOCALSTATE_DIR%%/${daemon}.pid
|
|
if [ ${quagga_cmd} = "start" -a ! -f ${required_files} ]; then
|
|
continue
|
|
fi
|
|
if [ ${quagga_cmd} = "stop" -a -z $(check_process ${command}) ]; then
|
|
continue
|
|
fi
|
|
eval flags=\$\{${daemon}_flags:-\"${quagga_flags}\"\}
|
|
name=${daemon}
|
|
_rc_restart_done=false
|
|
run_rc_command "$1" || ret=1
|
|
done
|
|
return ${ret}
|
|
}
|
|
|
|
# set defaults
|
|
|
|
load_rc_config $name
|
|
|
|
: ${quagga_enable="NO"}
|
|
: ${quagga_flags="-d"}
|
|
: ${quagga_daemons="zebra ripd ripngd ospfd ospf6d bgpd isisd"}
|
|
|
|
quagga_cmd=$1
|
|
|
|
case "$1" in
|
|
force*)
|
|
quagga_cmd=${quagga_cmd#force}
|
|
;;
|
|
fast*)
|
|
quagga_cmd=${quagga_cmd#fast}
|
|
;;
|
|
esac
|
|
shift
|
|
|
|
if [ $# -ge 1 ]; then
|
|
quagga_daemons="$*"
|
|
fi
|
|
|
|
case "${quagga_cmd}" in
|
|
start)
|
|
if [ ! -z ${quagga_extralibs_path} ]; then
|
|
/sbin/ldconfig -m ${quagga_extralibs_path}
|
|
fi
|
|
do_cmd "start"
|
|
;;
|
|
stop)
|
|
quagga_daemons=$(reverse_list ${quagga_daemons})
|
|
do_cmd "stop"
|
|
;;
|
|
restart)
|
|
quagga_daemons=$(reverse_list ${quagga_daemons})
|
|
do_cmd "stop"
|
|
quagga_daemons=$(reverse_list ${quagga_daemons})
|
|
do_cmd "start"
|
|
;;
|
|
*)
|
|
do_cmd "${quagga_cmd}"
|
|
;;
|
|
esac
|