[solaris] SMF manifest, method and depend updates.

2006-03-13 Alan Maguire <alan.maguire@sun.com>

	* quagga.xml.in: Change the naming of services and instances.
	  network/routing/quagga:<daemon> may be neat and tidy, but
	  it's at odds with SMF convention elsewhere that demands
	  the service be named for what it does, and the instance name
	  describe the implementation (e.g. network/smtp:sendmail).
	  Remove call to method script for 'stop', SMF can do that
	  itself.
	  Enumerate the privileges required in the SMF manifest, with the
	  method_credential element.
	  Dont try provide seperate properties for each argument, it's
	  just tedious, particularly when they can no longer be
	  inherited from a common quagga service - use a single
	  "daemon-args" property, defaulting to -P 0.
	  Specify authorisation for the 'routeadm' utility and for
	  RBAC.

2006-03-13 Paul Jakma <paul.jakma@sun.com>

	* quagga.init.in: Update to match SMF manifest changes.
	  If run from an SMF environment, assume method is start.
	  Offer a more tradition init script interface for pre-SMF.
	  Enable zebra for the link-state daemons.
	  Don't allow daemons to start in non-global zones, except
	  for bgpd - it doesn't have to care about underlying
	  networking much.
	  Remove all the svcprop calls, SMF or the user will supply any
	  arguments on the command-line.
	* depend.smf.in: Add dependency on SUNWroute, which provides
	  routeadm, which provides /var/svc/manifest/network/routing
	* prototype.smf.in: Install manifest to
	  var/svc/manifest/network/routing.
This commit is contained in:
Paul Jakma 2006-03-30 13:38:28 +00:00
parent e6d7d054d9
commit 75db03ebb1
5 changed files with 609 additions and 291 deletions

View File

@ -1,3 +1,37 @@
2006-03-13 Alan Maguire <alan.maguire@sun.com>
* quagga.xml.in: Change the naming of services and instances.
network/routing/quagga:<daemon> may be neat and tidy, but
it's at odds with SMF convention elsewhere that demands
the service be named for what it does, and the instance name
describe the implementation (e.g. network/smtp:sendmail).
Remove call to method script for 'stop', SMF can do that
itself.
Enumerate the privileges required in the SMF manifest, with the
method_credential element.
Dont try provide seperate properties for each argument, it's
just tedious, particularly when they can no longer be
inherited from a common quagga service - use a single
"daemon-args" property, defaulting to -P 0.
Specify authorisation for the 'routeadm' utility and for
RBAC.
2006-03-13 Paul Jakma <paul.jakma@sun.com>
* quagga.init.in: Update to match SMF manifest changes.
If run from an SMF environment, assume method is start.
Offer a more tradition init script interface for pre-SMF.
Enable zebra for the link-state daemons.
Don't allow daemons to start in non-global zones, except
for bgpd - it doesn't have to care about underlying
networking much.
Remove all the svcprop calls, SMF or the user will supply any
arguments on the command-line.
* depend.smf.in: Add dependency on SUNWroute, which provides
routeadm, which provides /var/svc/manifest/network/routing
* prototype.smf.in: Install manifest to
var/svc/manifest/network/routing.
2006-02-19 Paul Jakma <paul.jakma@sun.com> 2006-02-19 Paul Jakma <paul.jakma@sun.com>
* depend.*: renamed to depend.*.in. * depend.*: renamed to depend.*.in.

View File

@ -2,6 +2,7 @@ P QUAGGAdaemons Quagga daemons
@PACKAGE_VERSION@,REV=@CONFDATE@ @PACKAGE_VERSION@,REV=@CONFDATE@
P SUNWcsu Core Solaris, (Usr) P SUNWcsu Core Solaris, (Usr)
P SUNWcsr Core Solaris Libraries (Root) P SUNWcsr Core Solaris Libraries (Root)
P SUNWroute Network Routing daemons/commands (Usr)
I SUNWzebrar I SUNWzebrar
I SUNWzebrau I SUNWzebrau
I CSWzebra I CSWzebra

View File

@ -3,6 +3,6 @@ i depend=$abs_builddir/depend.smf
i copying=$abs_top_srcdir/COPYING i copying=$abs_top_srcdir/COPYING
i i.manifest i i.manifest
i r.manifest i r.manifest
f manifest var/svc/manifest/network/quagga.xml 0444 root bin f manifest var/svc/manifest/network/routing/quagga.xml 0444 root bin
#f none var/svc/profile/@PACKAGE_TARNAME@_options.xml=$abs_builddir/options.xml 0755 root sys #f none var/svc/profile/@PACKAGE_TARNAME@_options.xml=$abs_builddir/options.xml 0755 root sys
f none lib/svc/method/quagga=$abs_builddir/quagga.init 0755 root bin f none lib/svc/method/quagga=$abs_builddir/quagga.init 0755 root bin

View File

@ -1,94 +1,104 @@
#!/sbin/sh #!/sbin/sh
# #
# Copyright 2001,2003 Sun Microsystems, Inc. All rights reserved. # Copyright 2001,2003 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms. # Use is subject to license terms.
# #
# $Id: quagga.init.in,v 1.5 2006/02/19 18:59:26 paul Exp $ # $Id: quagga.init.in,v 1.6 2006/03/30 13:38:28 paul Exp $
# #
# Starts/stops the appropriate daemon # Starts/stops the given daemon
SMFINCLUDE=/lib/svc/share/smf_include.sh SMFINCLUDE=/lib/svc/share/smf_include.sh
DAEMON_PATH=@sbindir@
quagga_is_globalzone () {
if [ "${QUAGGA_INIT_ZONENAME:=`/sbin/zonename`}" != "global" ]; then
return 1
else
return 0
fi
}
# Include smf functions, if available. If not, define smf_present to indicate
# there is no SMF. Should allow this script to work pre-S10.
if [ -f "$SMFINCLUDE" ] ; then if [ -f "$SMFINCLUDE" ] ; then
. "$SMFINCLUDE"; . "$SMFINCLUDE";
else
# pre-SMF system, fake up any functions and exit codes
# which SMFINCLUDE usually provides.
smf_present () {
return 1
}
SMF_EXIT_OK=0;
SMF_EXIT_ERR_CONFIG=96;
SMF_EXIT_ERR_FATAL=95;
fi fi
# if there's no SMF, set some default DAEMON_ARGS
smf_present || DAEMON_ARGS=""
usage () { usage () {
echo "Usage: $0 (start|stop) <fmri> <instance>"; if smf_present ; then
} echo "Usage: $0 <daemon> <daemon arguments>";
else
echo "Usage: $0 <stop|start> <daemon> <daemon arguments>";
fi
echo "The --pid_file argument is implied";
echo "This help message: $0 <help|usage>";
}
# parse arguments, different according to SMF or not.
case $1 in case $1 in
'help' | 'usage') 'help' | 'usage')
usage usage
;; exit SMF_EXIT_OK
;;
esac esac
# fmri and instance must be given. if smf_present ; then
FMRI="$2" QUAGGA_METHOD="start"
INSTANCE="$3" else
if [ -z "$FMRI" -o -z "$INSTANCE" ]; then QUAGGA_METHOD="$1"
usage shift;
exit $SMF_EXIT_ERR_CONFIG
fi fi
# fmri must exist DAEMON="$1"
svcs ${FMRI} > /dev/null 2>&1 || exit $SMF_EXIT_ERR_CONFIG shift
DAEMON_ARGS="$@"
case ${INSTANCE} in # daemon path must be given
zebra | bgpd ) if [ -z "$DAEMON_PATH/$DAEMON" ]; then
usage
exit $SMF_EXIT_ERR_FATAL
fi
# only bgpd is suitable for running in a non-global zone, at this
# time.
case "${DAEMON}" in
zebra)
quagga_is_globalzone || exit $SMF_EXIT_OK
;;
bgpd)
;; ;;
ospfd | ospf6d | ripd | ripngd ) ospfd | ospf6d | ripd | ripngd )
/usr/sbin/svcadm enable zebra quagga_is_globalzone || exit $SMF_EXIT_OK
;; ;;
*) *)
usage usage
exit $SMF_EXIT_ERR_CONFIG; exit $SMF_EXIT_ERR_CONFIG;
;; ;;
esac esac
svcprop -q -p @PACKAGE_TARNAME@/config_file ${FMRI} && \ # we need @quagga_statedir@ to exist, it probably is on tmpfs.
CONFFILE=`svcprop -p @PACKAGE_TARNAME@/config_file ${FMRI}`
svcprop -q -p @PACKAGE_TARNAME@/pid_file ${FMRI} && \
PIDFILE=`svcprop -p @PACKAGE_TARNAME@/pid_file ${FMRI}`
svcprop -q -p @PACKAGE_TARNAME@/user ${FMRI} && \
USER=`svcprop -p @PACKAGE_TARNAME@/user ${FMRI}`
svcprop -q -p @PACKAGE_TARNAME@/group ${FMRI} && \
GROUP=`svcprop -p @PACKAGE_TARNAME@/group ${FMRI}`
svcprop -q -p @PACKAGE_TARNAME@/vty_addr ${FMRI} && \
VTYADDR=`svcprop -p @PACKAGE_TARNAME@/vty_addr ${FMRI}`
svcprop -q -p @PACKAGE_TARNAME@/vty_port ${FMRI} && \
VTYPORT=`svcprop -p @PACKAGE_TARNAME@/vty_port ${FMRI}`
[ -n "${CONFFILE}" ] && ARGS=" -f ${CONFFILE}"
[ -n "${PIDFILE}" ] && ARGS="${ARGS} --pid_file ${PIDFILE}"
[ -n "${USER}" ] && ARGS="${ARGS} --user ${USER}"
[ -n "${GROUP}" ] && ARGS="${ARGS} --group ${GROUP}"
# vty should default to disabled, ie port == 0
[ -z "${VTYPORT}" ] && VTYPORT=0
ARGS="${ARGS} --vty_port ${VTYPORT}"
# default listen address should be localhost
[ -z "${VTYADDR}" ] && VTYADDR=127.1
ARGS="${ARGS} --vty_addr ${VTYADDR}"
# have to have a pid file for script to work
# we can assume it otherwise
if [ -z "${PIDFILE}" ]; then
PIDFILE="@quagga_statedir@/${INSTANCE}.pid"
else
ARGS="${ARGS} --pid_file ${PIDFILE}"
fi
# we need @quagga_statedir@ to exist, it might be on tmpfs.
if [ ! -d @quagga_statedir@ ] ; then if [ ! -d @quagga_statedir@ ] ; then
mkdir -p @quagga_statedir@ mkdir -p @quagga_statedir@
chown @enable_user@:@enable_group@ @quagga_statedir@ chown @enable_user@:@enable_group@ @quagga_statedir@
chmod 751 @quagga_statedir@ chmod 751 @quagga_statedir@
fi fi
PIDFILE="@quagga_statedir@/${DAEMON}.pid"
start () { start () {
@sbindir@/${INSTANCE} ${ARGS} & $DAEMON_PATH/$DAEMON $DAEMON_ARGS --pid_file ${PIDFILE} &
} }
stop () { stop () {
@ -97,17 +107,17 @@ stop () {
fi fi
} }
case $1 in case "$QUAGGA_METHOD" in
'start') 'start')
start ${2} start
;; ;;
'stop') 'stop')
stop ${2} stop
;; ;;
*) *)
usage usage
exit 1 exit SMF_EXIT_ERR_FATAL
;; ;;
esac esac

View File

@ -8,15 +8,13 @@
--> -->
<service_bundle type='manifest' name='QUAGGAdaemons:quagga'> <service_bundle type='manifest' name='QUAGGAdaemons:quagga'>
<service <service
name='network/routing/quagga' name='network/routing/zebra'
type='service' type='service'
version='1'> version='1'>
<!-- <instance name='quagga' enabled='false'>
common service-level dependencies, inherited by each instance
-->
<dependency name='fs' <dependency name='fs'
grouping='require_all' grouping='require_all'
restart_on='none' restart_on='none'
@ -24,33 +22,44 @@
<service_fmri <service_fmri
value='svc:/system/filesystem/usr:default' /> value='svc:/system/filesystem/usr:default' />
</dependency> </dependency>
<dependency name='net' <dependency name='net'
grouping='require_all' grouping='require_all'
restart_on='none' restart_on='none'
type='service'> type='service'>
<service_fmri value='svc:/network/loopback' /> <service_fmri value='svc:/network/initial' />
</dependency> </dependency>
<!-- <dependency name='config_data'
we define exec methods at the top level, and the grouping='require_all'
instance name is substituted for the %i on calling. restart_on='restart'
See smf_method(1M) for more switches. type='path'>
--> <service_fmri
value='file://localhost/@sysconfdir@/zebra.conf' />
</dependency>
<exec_method <exec_method
type='method' type='method'
name='start' name='start'
exec='/lib/svc/method/quagga start %f %i' exec='/lib/svc/method/quagga zebra %{routing/daemon-args}'
timeout_seconds='60'/> timeout_seconds='60'>
<method_context>
<method_credential
user='root' group='root'
privileges='basic,net_icmpaccess,net_rawaccess,sys_admin,sys_net_config'/>
</method_context>
</exec_method>
<exec_method <exec_method
type='method' type='method'
name='stop' name='stop'
exec='/lib/svc/method/quagga stop %f %i' exec=':kill'
timeout_seconds='60' /> timeout_seconds='60'>
</exec_method>
<!-- <!-- if we define these properties at the service level, each
if we define these properties at the service level, each instance instance inherits them, and it can override with
inherits them, and it can override with desired values. desired values.
--> -->
<property_group name='startd' <property_group name='startd'
type='framework'> type='framework'>
@ -58,231 +67,495 @@
<propval name='ignore_error' <propval name='ignore_error'
type='astring' value='core,signal' /> type='astring' value='core,signal' />
</property_group> </property_group>
<property_group name='quagga' type='application'>
<!-- Options common to Quagga daemons --> <property_group name='routing' type='application'>
<propval name='vty_addr' type='astring' value='127.1' /> <propval name='value_authorization' type='astring'
<propval name='vty_port' type='integer' value='0'/> value='solaris.smf.modify.routing' />
<propval name='user' type='astring' value='@enable_user@' /> <propval name='daemon-args' type='astring' value='-P 0'/>
<propval name='group' type='astring' value='@enable_group@' />
<propval name='retain' type='boolean' value='false'/>
</property_group> </property_group>
<instance name='zebra' enabled='false'> <property_group name='general' type='framework'>
<!-- <!-- to start stop routing services -->
now define it's own dependencies/properties etc here, it'll <propval name='action_authorization' type='astring'
inherit the rest... value='solaris.smf.manage.routing' />
--> </property_group>
<dependency name='config_data'
<template>
<common_name>
<loctext xml:lang='C'>
Quagga: zebra, RIB, kernel intermediary and misc daemon
</loctext>
</common_name>
<documentation>
<manpage title='zebra' section='1M'
manpath='@mandir@' />
<doc_link name='quagga.net'
uri='http://www.quagga.net/' />
</documentation>
</template>
</instance>
<stability value='Evolving' />
</service>
<service
name='network/routing/rip'
type='service'
version='1'>
<instance name='quagga' enabled='false'>
<dependency name='fs'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri
value='svc:/system/filesystem/usr:default' />
</dependency>
<dependency name='net'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/network/routing/ipv4-routing' />
</dependency>
<dependency name='zebra'
grouping='require_all' grouping='require_all'
restart_on='restart' restart_on='restart'
type='path'> type='service'>
<service_fmri <service_fmri value='svc:/network/routing/zebra:quagga' />
value='file://localhost/@sysconfdir@/zebra.conf' /> </dependency>
</dependency>
<property_group name='quagga' type='application'>
<propval name='keep_kernel' type='boolean'
value='false'/>
</property_group>
<template>
<common_name>
<loctext xml:lang='C'>
Quagga: zebra, RIB, kernel intermediary and misc daemon
</loctext>
</common_name>
<documentation>
<manpage title='zebra' section='1M'
manpath='@mandir@' />
</documentation>
</template>
</instance> <dependency name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/ripd.conf' />
</dependency>
<instance name='bgpd' enabled='false'> <exec_method
<!-- type='method'
now define it's own dependencies/properties etc here, it'll name='start'
inherit the rest... exec='/lib/svc/method/quagga ripd %{routing/daemon-args}'
--> timeout_seconds='60'>
<dependency name='zebra' <method_context>
<method_credential
user='root' group='root'
privileges='basic,net_icmpaccess,net_privaddr,net_rawaccess'/>
</method_context>
</exec_method>
<exec_method
type='method'
name='stop'
exec=':kill'
timeout_seconds='60'>
</exec_method>
<property_group name='startd'
type='framework'>
<!-- sub-process core dumps shouldn't restart session -->
<propval name='ignore_error'
type='astring' value='core,signal' />
</property_group>
<property_group name='routing' type='application'>
<propval name='value_authorization' type='astring'
value='solaris.smf.modify.routing' />
<propval name='daemon-args' type='astring' value='-P 0'/>
</property_group>
<property_group name='general' type='framework'>
<!-- to start stop routing services -->
<propval name='action_authorization' type='astring'
value='solaris.smf.manage.routing' />
</property_group>
<template>
<common_name>
<loctext xml:lang='C'>
Quagga: ripd, RIPv1/2 IPv4 routing protocol daemon.
</loctext>
</common_name>
<documentation>
<manpage title='ripd' section='1M'
manpath='@mandir@' />
<doc_link name='quagga.net'
uri='http://www.quagga.net/' />
</documentation>
</template>
</instance>
<stability value='Evolving' />
</service>
<service
name='network/routing/ripng'
type='service'
version='1'>
<instance name='quagga' enabled='false'>
<dependency name='fs'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri
value='svc:/system/filesystem/usr:default' />
</dependency>
<dependency name='net'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/network/routing/ipv6-routing' />
</dependency>
<dependency name='zebra'
grouping='require_all'
restart_on='restart'
type='service'>
<service_fmri value='svc:/network/routing/zebra:quagga' />
</dependency>
<dependency name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/ripngd.conf' />
</dependency>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/quagga ripngd %{routing/daemon-args}'
timeout_seconds='60'>
<method_context>
<method_credential
user='root' group='root'
privileges='basic,net_icmpaccess,net_privaddr,net_rawaccess'/>
</method_context>
</exec_method>
<exec_method
type='method'
name='stop'
exec=':kill'
timeout_seconds='60' >
</exec_method>
<property_group name='startd'
type='framework'>
<!-- sub-process core dumps shouldn't restart session -->
<propval name='ignore_error'
type='astring' value='core,signal' />
</property_group>
<property_group name='routing' type='application'>
<propval name='value_authorization' type='astring'
value='solaris.smf.modify.routing' />
<propval name='daemon-args' type='astring' value='-P 0'/>
</property_group>
<property_group name='general' type='framework'>
<!-- to start stop routing services -->
<propval name='action_authorization' type='astring'
value='solaris.smf.manage.routing' />
</property_group>
<template>
<common_name>
<loctext xml:lang='C'>
Quagga: ripngd, RIPng IPv6 routing protocol daemon.
</loctext>
</common_name>
<documentation>
<manpage title='ripngd' section='1M'
manpath='@mandir@' />
<doc_link name='quagga.net'
uri='http://www.quagga.net/' />
</documentation>
</template>
</instance>
<stability value='Evolving' />
</service>
<service
name='network/routing/ospf'
type='service'
version='1'>
<instance name='quagga' enabled='false'>
<dependency name='fs'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri
value='svc:/system/filesystem/usr:default' />
</dependency>
<dependency name='net'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/network/routing/ipv4-routing' />
</dependency>
<dependency name='zebra'
grouping='require_all'
restart_on='restart'
type='service'>
<service_fmri value='svc:/network/routing/zebra:quagga' />
</dependency>
<dependency name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/ospfd.conf' />
</dependency>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/quagga ospfd %{routing/daemon-args}'
timeout_seconds='60'>
<method_context>
<method_credential
user='root' group='root'
privileges='basic,net_icmpaccess,net_privaddr,net_rawaccess,sys_net_config'/>
</method_context>
</exec_method>
<exec_method
type='method'
name='stop'
exec=':kill'
timeout_seconds='60'>
</exec_method>
<property_group name='startd'
type='framework'>
<!-- sub-process core dumps shouldn't restart session -->
<propval name='ignore_error'
type='astring' value='core,signal' />
</property_group>
<property_group name='routing' type='application'>
<propval name='value_authorization' type='astring'
value='solaris.smf.modify.routing' />
<propval name='daemon-args' type='astring' value='-P 0'/>
</property_group>
<property_group name='general' type='framework'>
<!-- to start stop routing services -->
<propval name='action_authorization' type='astring'
value='solaris.smf.manage.routing' />
</property_group>
<template>
<common_name>
<loctext xml:lang='C'>
Quagga: ospfd, OSPFv2 IPv4 routing protocol daemon.
</loctext>
</common_name>
<documentation>
<manpage title='ospfd' section='1M'
manpath='@mandir@' />
<doc_link name='quagga.net'
uri='http://www.quagga.net/' />
</documentation>
</template>
</instance>
<stability value='Evolving' />
</service>
<service
name='network/routing/ospf6'
type='service'
version='1'>
<instance name='quagga' enabled='false'>
<dependency name='fs'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri
value='svc:/system/filesystem/usr:default' />
</dependency>
<dependency name='net'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri value='svc:/network/routing/ipv6-routing' />
</dependency>
<dependency name='zebra'
grouping='require_all'
restart_on='restart'
type='service'>
<service_fmri value='svc:/network/routing/zebra:quagga' />
</dependency>
<dependency name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/ospf6d.conf' />
</dependency>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/quagga ospf6d %{routing/daemon-args}'
timeout_seconds='60'>
<method_context>
<method_credential
user='root' group='root'
privileges='basic,net_icmpaccess,net_privaddr,net_rawaccess'/>
</method_context>
</exec_method>
<exec_method
type='method'
name='stop'
exec=':kill'
timeout_seconds='60'>
</exec_method>
<property_group name='startd'
type='framework'>
<!-- sub-process core dumps shouldn't restart session -->
<propval name='ignore_error'
type='astring' value='core,signal' />
</property_group>
<property_group name='routing' type='application'>
<propval name='value_authorization' type='astring'
value='solaris.smf.modify.routing' />
<propval name='daemon-args' type='astring' value='-P 0'/>
</property_group>
<property_group name='general' type='framework'>
<!-- to start stop routing services -->
<propval name='action_authorization' type='astring'
value='solaris.smf.manage.routing' />
</property_group>
<template>
<common_name>
<loctext xml:lang='C'>
Quagga: ospf6d, OSPFv3 IPv6 routing protocol daemon.
</loctext>
</common_name>
<documentation>
<manpage title='ospf6d' section='1M'
manpath='@mandir@' />
<doc_link name='quagga.net'
uri='http://www.quagga.net/' />
</documentation>
</template>
</instance>
<stability value='Evolving' />
</service>
<service
name='network/routing/bgp'
type='service'
version='1'>
<instance name='quagga' enabled='false'>
<dependency name='fs'
grouping='require_all'
restart_on='none'
type='service'>
<service_fmri
value='svc:/system/filesystem/usr:default' />
</dependency>
<dependency name='net'
grouping='require_any'
restart_on='none'
type='service'>
<service_fmri value='svc:/network/routing/ipv6-routing' />
<service_fmri value='svc:/network/routing/ipv4-routing' />
</dependency>
<dependency name='zebra'
grouping='optional_all' grouping='optional_all'
restart_on='restart' restart_on='restart'
type='service'> type='service'>
<service_fmri value='svc:/network/routing/quagga:zebra' /> <service_fmri value='svc:/network/routing/zebra:quagga' />
</dependency> </dependency>
<dependency name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/bgpd.conf' />
</dependency>
<property_group name='quagga' type='application'>
<propval name='no_kernel' type='boolean'
value='false'/>
</property_group>
<template>
<common_name>
<loctext xml:lang='C'>
Quagga: bgpd, BGP routing protocol daemon.
</loctext>
</common_name>
<documentation>
<manpage title='bgpd' section='1M'
manpath='@mandir@' />
<doc_link name='quagga.net'
uri='http://www.quagga.net/' />
</documentation>
</template>
</instance> <dependency name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/bgpd.conf' />
</dependency>
<instance name='ospf6d' enabled='false'> <exec_method
<!-- type='method'
now define it's own dependencies/properties etc here, it'll name='start'
inherit the rest... exec='/lib/svc/method/quagga bgpd %{routing/daemon-args}'
--> timeout_seconds='60'>
<dependency name='zebra' <method_context>
grouping='require_all' <method_credential
restart_on='restart' user='root' group='root'
type='service'> privileges='basic,net_icmpaccess,net_privaddr,net_rawaccess'/>
<service_fmri value='svc:/network/routing/quagga:zebra' /> </method_context>
</dependency> </exec_method>
<dependency name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/ospf6d.conf' />
</dependency>
<template>
<common_name>
<loctext xml:lang='C'>
Quagga: ospf6d, OSPFv3 IPv6 routing protocol daemon.
</loctext>
</common_name>
<documentation>
<manpage title='ospf6d' section='1M'
manpath='@mandir@' />
<doc_link name='quagga.net'
uri='http://www.quagga.net/' />
</documentation>
</template>
<exec_method
type='method'
name='stop'
exec=':kill'
timeout_seconds='60' >
</exec_method>
<property_group name='startd'
type='framework'>
<!-- sub-process core dumps shouldn't restart session -->
<propval name='ignore_error'
type='astring' value='core,signal' />
</property_group>
<property_group name='routing' type='application'>
<propval name='value_authorization' type='astring'
value='solaris.smf.modify.routing' />
<propval name='daemon-args' type='astring' value='-P 0'/>
</property_group>
<property_group name='general' type='framework'>
<!-- to start stop routing services -->
<propval name='action_authorization' type='astring'
value='solaris.smf.manage.routing' />
</property_group>
<template>
<common_name>
<loctext xml:lang='C'>
Quagga: bgpd, BGP routing protocol daemon.
</loctext>
</common_name>
<documentation>
<manpage title='bgpd' section='1M'
manpath='@mandir@' />
<doc_link name='quagga.net'
uri='http://www.quagga.net/' />
</documentation>
</template>
</instance> </instance>
<instance name='ospfd' enabled='false'>
<!--
now define it's own dependencies/properties etc here, it'll
inherit the rest...
-->
<dependency name='zebra'
grouping='require_all'
restart_on='restart'
type='service'>
<service_fmri value='svc:/network/routing/quagga:zebra' />
</dependency>
<dependency name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/ospfd.conf' />
</dependency>
<property_group name='quagga' type='application'>
<propval name='retain_routes' type='boolean' value='false'/>
</property_group>
<template>
<common_name>
<loctext xml:lang='C'>
Quagga: ospfd, OSPFv2 IPv4 routing protocol daemon.
</loctext>
</common_name>
<documentation>
<manpage title='ospfd' section='1M'
manpath='@mandir@' />
<doc_link name='quagga.net'
uri='http://www.quagga.net/' />
</documentation>
</template>
</instance>
<instance name='ripd' enabled='false'>
<!--
now define it's own dependencies/properties etc here, it'll
inherit the rest...
-->
<dependency name='zebra'
grouping='require_all'
restart_on='restart'
type='service'>
<service_fmri value='svc:/network/routing/quagga:zebra' />
</dependency>
<dependency name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/ripd.conf' />
</dependency>
<property_group name='quagga' type='application'>
<propval name='retain_routes' type='boolean' value='false'/>
</property_group>
<template>
<common_name>
<loctext xml:lang='C'>
Quagga: ripd, RIPv1/2 IPv4 routing protocol daemon.
</loctext>
</common_name>
<documentation>
<manpage title='ripd' section='1M'
manpath='@mandir@' />
<doc_link name='quagga.net'
uri='http://www.quagga.net/' />
</documentation>
</template>
</instance>
<instance name='ripngd' enabled='false'>
<!--
now define it's own dependencies/properties etc here, it'll
inherit the rest...
-->
<dependency name='zebra'
grouping='require_all'
restart_on='restart'
type='service'>
<service_fmri value='svc:/network/routing/quagga:zebra' />
</dependency>
<dependency name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/ripngd.conf' />
</dependency>
<property_group name='quagga' type='application'>
<propval name='retain_routes' type='boolean'
value='false'/>
</property_group>
<template>
<common_name>
<loctext xml:lang='C'>
Quagga: ripngd, RIPng IPv6 routing protocol daemon.
</loctext>
</common_name>
<documentation>
<manpage title='ripngd' section='1M'
manpath='@mandir@' />
<doc_link name='quagga.net'
uri='http://www.quagga.net/' />
</documentation>
</template>
</instance>
<stability value='Evolving' /> <stability value='Evolving' />
</service> </service>
</service_bundle> </service_bundle>