Merge pull request #103 from gsomlo/quagga_startup
daemon: streamline Quagga startup
This commit is contained in:
commit
b4c8be9e23
1 changed files with 23 additions and 44 deletions
|
@ -170,21 +170,6 @@ confcheck()
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
waitforvtyfiles()
|
|
||||||
{
|
|
||||||
for f in "$@"; do
|
|
||||||
count=1
|
|
||||||
until [ -e $QUAGGA_STATE_DIR/$f ]; do
|
|
||||||
if [ $count -eq 10 ]; then
|
|
||||||
echo "ERROR: vty file not found: $QUAGGA_STATE_DIR/$f" >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
sleep 0.1
|
|
||||||
count=$(($count + 1))
|
|
||||||
done
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
bootdaemon()
|
bootdaemon()
|
||||||
{
|
{
|
||||||
QUAGGA_SBIN_DIR=$(searchforprog $1 $QUAGGA_SBIN_SEARCH)
|
QUAGGA_SBIN_DIR=$(searchforprog $1 $QUAGGA_SBIN_SEARCH)
|
||||||
|
@ -196,53 +181,47 @@ bootdaemon()
|
||||||
|
|
||||||
flags=""
|
flags=""
|
||||||
|
|
||||||
if [ "$1" != "zebra" ]; then
|
|
||||||
waitforvtyfiles zebra.vty
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$1" = "xpimd" ] && \\
|
if [ "$1" = "xpimd" ] && \\
|
||||||
grep -E -q '^[[:space:]]*router[[:space:]]+pim6[[:space:]]*$' $QUAGGA_CONF; then
|
grep -E -q '^[[:space:]]*router[[:space:]]+pim6[[:space:]]*$' $QUAGGA_CONF; then
|
||||||
flags="$flags -6"
|
flags="$flags -6"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$QUAGGA_SBIN_DIR/$1 $flags -u $QUAGGA_USER -g $QUAGGA_GROUP -d
|
$QUAGGA_SBIN_DIR/$1 $flags -u $QUAGGA_USER -g $QUAGGA_GROUP -d
|
||||||
|
if [ "$?" != "0" ]; then
|
||||||
|
echo "ERROR: Quagga's '$1' daemon failed to start!:"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
bootvtysh()
|
bootquagga()
|
||||||
{
|
{
|
||||||
QUAGGA_BIN_DIR=$(searchforprog $1 $QUAGGA_BIN_SEARCH)
|
QUAGGA_BIN_DIR=$(searchforprog 'vtysh' $QUAGGA_BIN_SEARCH)
|
||||||
if [ "z$QUAGGA_BIN_DIR" = "z" ]; then
|
if [ "z$QUAGGA_BIN_DIR" = "z" ]; then
|
||||||
echo "ERROR: Quagga's '$1' daemon not found in search path:"
|
echo "ERROR: Quagga's 'vtysh' program not found in search path:"
|
||||||
echo " $QUAGGA_SBIN_SEARCH"
|
echo " $QUAGGA_BIN_SEARCH"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
vtyfiles="zebra.vty"
|
bootdaemon "zebra"
|
||||||
for r in rip ripng ospf6 ospf bgp babel; do
|
for r in rip ripng ospf6 ospf bgp babel; do
|
||||||
if grep -q "^router \<${r}\>" $QUAGGA_CONF; then
|
if grep -q "^router \<${r}\>" $QUAGGA_CONF; then
|
||||||
vtyfiles="$vtyfiles ${r}d.vty"
|
bootdaemon "${r}d"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if grep -E -q '^[[:space:]]*router[[:space:]]+pim6?[[:space:]]*$' $QUAGGA_CONF; then
|
if grep -E -q '^[[:space:]]*router[[:space:]]+pim6?[[:space:]]*$' $QUAGGA_CONF; then
|
||||||
vtyfiles="$vtyfiles xpimd.vty"
|
bootdaemon "xpimd"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# wait for Quagga daemon vty files to appear before invoking vtysh
|
|
||||||
waitforvtyfiles $vtyfiles
|
|
||||||
|
|
||||||
$QUAGGA_BIN_DIR/vtysh -b
|
$QUAGGA_BIN_DIR/vtysh -b
|
||||||
}
|
}
|
||||||
|
|
||||||
confcheck
|
if [ "$1" != "zebra" ]; then
|
||||||
if [ "x$1" = "x" ]; then
|
echo "WARNING: '$1': all Quagga daemons are launched by the 'zebra' service!"
|
||||||
echo "ERROR: missing the name of the Quagga daemon to boot"
|
|
||||||
exit 1
|
exit 1
|
||||||
elif [ "$1" = "vtysh" ]; then
|
|
||||||
bootvtysh $1
|
|
||||||
else
|
|
||||||
bootdaemon $1
|
|
||||||
fi
|
fi
|
||||||
|
confcheck
|
||||||
|
bootquagga
|
||||||
""" % (cls._configs[0], quagga_sbin_search, quagga_bin_search, \
|
""" % (cls._configs[0], quagga_sbin_search, quagga_bin_search, \
|
||||||
QUAGGA_STATE_DIR, QUAGGA_USER, QUAGGA_GROUP)
|
QUAGGA_STATE_DIR, QUAGGA_USER, QUAGGA_GROUP)
|
||||||
|
|
||||||
|
@ -311,7 +290,7 @@ class Ospfv2(QuaggaService):
|
||||||
unified Quagga.conf file.
|
unified Quagga.conf file.
|
||||||
'''
|
'''
|
||||||
_name = "OSPFv2"
|
_name = "OSPFv2"
|
||||||
_startup = ("sh quaggaboot.sh ospfd",)
|
_startup = ()
|
||||||
_shutdown = ("killall ospfd", )
|
_shutdown = ("killall ospfd", )
|
||||||
_validate = ("pidof ospfd", )
|
_validate = ("pidof ospfd", )
|
||||||
_ipv4_routing = True
|
_ipv4_routing = True
|
||||||
|
@ -382,7 +361,7 @@ class Ospfv3(QuaggaService):
|
||||||
unified Quagga.conf file.
|
unified Quagga.conf file.
|
||||||
'''
|
'''
|
||||||
_name = "OSPFv3"
|
_name = "OSPFv3"
|
||||||
_startup = ("sh quaggaboot.sh ospf6d",)
|
_startup = ()
|
||||||
_shutdown = ("killall ospf6d", )
|
_shutdown = ("killall ospf6d", )
|
||||||
_validate = ("pidof ospf6d", )
|
_validate = ("pidof ospf6d", )
|
||||||
_ipv4_routing = True
|
_ipv4_routing = True
|
||||||
|
@ -486,7 +465,7 @@ class Bgp(QuaggaService):
|
||||||
having the same AS number.
|
having the same AS number.
|
||||||
'''
|
'''
|
||||||
_name = "BGP"
|
_name = "BGP"
|
||||||
_startup = ("sh quaggaboot.sh bgpd",)
|
_startup = ()
|
||||||
_shutdown = ("killall bgpd", )
|
_shutdown = ("killall bgpd", )
|
||||||
_validate = ("pidof bgpd", )
|
_validate = ("pidof bgpd", )
|
||||||
_custom_needed = True
|
_custom_needed = True
|
||||||
|
@ -511,7 +490,7 @@ class Rip(QuaggaService):
|
||||||
''' The RIP service provides IPv4 routing for wired networks.
|
''' The RIP service provides IPv4 routing for wired networks.
|
||||||
'''
|
'''
|
||||||
_name = "RIP"
|
_name = "RIP"
|
||||||
_startup = ("sh quaggaboot.sh ripd",)
|
_startup = ()
|
||||||
_shutdown = ("killall ripd", )
|
_shutdown = ("killall ripd", )
|
||||||
_validate = ("pidof ripd", )
|
_validate = ("pidof ripd", )
|
||||||
_ipv4_routing = True
|
_ipv4_routing = True
|
||||||
|
@ -534,7 +513,7 @@ class Ripng(QuaggaService):
|
||||||
''' The RIP NG service provides IPv6 routing for wired networks.
|
''' The RIP NG service provides IPv6 routing for wired networks.
|
||||||
'''
|
'''
|
||||||
_name = "RIPNG"
|
_name = "RIPNG"
|
||||||
_startup = ("sh quaggaboot.sh ripngd",)
|
_startup = ()
|
||||||
_shutdown = ("killall ripngd", )
|
_shutdown = ("killall ripngd", )
|
||||||
_validate = ("pidof ripngd", )
|
_validate = ("pidof ripngd", )
|
||||||
_ipv6_routing = True
|
_ipv6_routing = True
|
||||||
|
@ -558,7 +537,7 @@ class Babel(QuaggaService):
|
||||||
protocol for IPv6 and IPv4 with fast convergence properties.
|
protocol for IPv6 and IPv4 with fast convergence properties.
|
||||||
'''
|
'''
|
||||||
_name = "Babel"
|
_name = "Babel"
|
||||||
_startup = ("sh quaggaboot.sh babeld",)
|
_startup = ()
|
||||||
_shutdown = ("killall babeld", )
|
_shutdown = ("killall babeld", )
|
||||||
_validate = ("pidof babeld", )
|
_validate = ("pidof babeld", )
|
||||||
_ipv6_routing = True
|
_ipv6_routing = True
|
||||||
|
@ -588,7 +567,7 @@ class Xpimd(QuaggaService):
|
||||||
PIM multicast routing based on XORP.
|
PIM multicast routing based on XORP.
|
||||||
'''
|
'''
|
||||||
_name = 'Xpimd'
|
_name = 'Xpimd'
|
||||||
_startup = ('sh quaggaboot.sh xpimd',)
|
_startup = ()
|
||||||
_shutdown = ('killall xpimd', )
|
_shutdown = ('killall xpimd', )
|
||||||
_validate = ('pidof xpimd', )
|
_validate = ('pidof xpimd', )
|
||||||
_ipv4_routing = True
|
_ipv4_routing = True
|
||||||
|
@ -622,7 +601,7 @@ class Vtysh(CoreService):
|
||||||
_name = "vtysh"
|
_name = "vtysh"
|
||||||
_group = "Quagga"
|
_group = "Quagga"
|
||||||
_startindex = 45
|
_startindex = 45
|
||||||
_startup = ("sh quaggaboot.sh vtysh",)
|
_startup = ()
|
||||||
_shutdown = ()
|
_shutdown = ()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
Loading…
Add table
Reference in a new issue