summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--solaris/ChangeLog34
-rw-r--r--solaris/depend.smf.in1
-rw-r--r--solaris/prototype.smf.in2
-rwxr-xr-xsolaris/quagga.init.in130
-rw-r--r--solaris/quagga.xml.in695
5 files changed, 590 insertions, 272 deletions
diff --git a/solaris/ChangeLog b/solaris/ChangeLog
index 13862147..4185d92e 100644
--- a/solaris/ChangeLog
+++ b/solaris/ChangeLog
@@ -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>
* depend.*: renamed to depend.*.in.
diff --git a/solaris/depend.smf.in b/solaris/depend.smf.in
index d078ea8e..6d928d2d 100644
--- a/solaris/depend.smf.in
+++ b/solaris/depend.smf.in
@@ -2,6 +2,7 @@ P QUAGGAdaemons Quagga daemons
@PACKAGE_VERSION@,REV=@CONFDATE@
P SUNWcsu Core Solaris, (Usr)
P SUNWcsr Core Solaris Libraries (Root)
+P SUNWroute Network Routing daemons/commands (Usr)
I SUNWzebrar
I SUNWzebrau
I CSWzebra
diff --git a/solaris/prototype.smf.in b/solaris/prototype.smf.in
index 3c80f39b..399a8d2d 100644
--- a/solaris/prototype.smf.in
+++ b/solaris/prototype.smf.in
@@ -3,6 +3,6 @@ i depend=$abs_builddir/depend.smf
i copying=$abs_top_srcdir/COPYING
i i.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 lib/svc/method/quagga=$abs_builddir/quagga.init 0755 root bin
diff --git a/solaris/quagga.init.in b/solaris/quagga.init.in
index 1fa98765..9fc2fe74 100755
--- a/solaris/quagga.init.in
+++ b/solaris/quagga.init.in
@@ -1,94 +1,104 @@
#!/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.
#
-# $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
+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
. "$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
+
+# if there's no SMF, set some default DAEMON_ARGS
+smf_present || DAEMON_ARGS=""
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
'help' | 'usage')
- usage
- ;;
+ usage
+ exit SMF_EXIT_OK
+ ;;
esac
-# fmri and instance must be given.
-FMRI="$2"
-INSTANCE="$3"
-if [ -z "$FMRI" -o -z "$INSTANCE" ]; then
- usage
- exit $SMF_EXIT_ERR_CONFIG
+if smf_present ; then
+ QUAGGA_METHOD="start"
+else
+ QUAGGA_METHOD="$1"
+ shift;
fi
-# fmri must exist
-svcs ${FMRI} > /dev/null 2>&1 || exit $SMF_EXIT_ERR_CONFIG
+DAEMON="$1"
+shift
+DAEMON_ARGS="$@"
-case ${INSTANCE} in
- zebra | bgpd )
+# daemon path must be given
+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 )
- /usr/sbin/svcadm enable zebra
+ quagga_is_globalzone || exit $SMF_EXIT_OK
;;
*)
- usage
- exit $SMF_EXIT_ERR_CONFIG;
+ usage
+ exit $SMF_EXIT_ERR_CONFIG;
;;
esac
-svcprop -q -p @PACKAGE_TARNAME@/config_file ${FMRI} && \
- 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.
+# we need @quagga_statedir@ to exist, it probably is on tmpfs.
if [ ! -d @quagga_statedir@ ] ; then
mkdir -p @quagga_statedir@
chown @enable_user@:@enable_group@ @quagga_statedir@
chmod 751 @quagga_statedir@
fi
+PIDFILE="@quagga_statedir@/${DAEMON}.pid"
+
start () {
- @sbindir@/${INSTANCE} ${ARGS} &
+ $DAEMON_PATH/$DAEMON $DAEMON_ARGS --pid_file ${PIDFILE} &
}
stop () {
@@ -97,17 +107,17 @@ stop () {
fi
}
-case $1 in
+case "$QUAGGA_METHOD" in
'start')
- start ${2}
+ start
;;
'stop')
- stop ${2}
+ stop
;;
*)
usage
- exit 1
+ exit SMF_EXIT_ERR_FATAL
;;
esac
diff --git a/solaris/quagga.xml.in b/solaris/quagga.xml.in
index 5ce4aceb..45fa2148 100644
--- a/solaris/quagga.xml.in
+++ b/solaris/quagga.xml.in
@@ -8,15 +8,13 @@
-->
<service_bundle type='manifest' name='QUAGGAdaemons:quagga'>
-
<service
- name='network/routing/quagga'
+ name='network/routing/zebra'
type='service'
version='1'>
- <!--
- common service-level dependencies, inherited by each instance
- -->
+ <instance name='quagga' enabled='false'>
+
<dependency name='fs'
grouping='require_all'
restart_on='none'
@@ -24,33 +22,44 @@
<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/loopback' />
+ <service_fmri value='svc:/network/initial' />
</dependency>
- <!--
- we define exec methods at the top level, and the
- instance name is substituted for the %i on calling.
- See smf_method(1M) for more switches.
- -->
+ <dependency name='config_data'
+ grouping='require_all'
+ restart_on='restart'
+ type='path'>
+ <service_fmri
+ value='file://localhost/@sysconfdir@/zebra.conf' />
+ </dependency>
+
<exec_method
type='method'
name='start'
- exec='/lib/svc/method/quagga start %f %i'
- timeout_seconds='60'/>
+ exec='/lib/svc/method/quagga zebra %{routing/daemon-args}'
+ 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
type='method'
name='stop'
- exec='/lib/svc/method/quagga stop %f %i'
- timeout_seconds='60' />
+ exec=':kill'
+ timeout_seconds='60'>
+ </exec_method>
- <!--
- if we define these properties at the service level, each instance
- inherits them, and it can override with desired values.
+ <!-- if we define these properties at the service level, each
+ instance inherits them, and it can override with
+ desired values.
-->
<property_group name='startd'
type='framework'>
@@ -58,231 +67,495 @@
<propval name='ignore_error'
type='astring' value='core,signal' />
</property_group>
- <property_group name='quagga' type='application'>
- <!-- Options common to Quagga daemons -->
- <propval name='vty_addr' type='astring' value='127.1' />
- <propval name='vty_port' type='integer' value='0'/>
- <propval name='user' type='astring' value='@enable_user@' />
- <propval name='group' type='astring' value='@enable_group@' />
- <propval name='retain' type='boolean' value='false'/>
+
+ <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>
- <instance name='zebra' enabled='false'>
- <!--
- now define it's own dependencies/properties etc here, it'll
- inherit the rest...
- -->
- <dependency name='config_data'
- grouping='require_all'
- restart_on='restart'
- type='path'>
- <service_fmri
- value='file://localhost/@sysconfdir@/zebra.conf' />
- </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>
+ <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: 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>
- <instance name='bgpd' enabled='false'>
- <!--
- now define it's own dependencies/properties etc here, it'll
- inherit the rest...
- -->
- <dependency name='zebra'
- grouping='optional_all'
- restart_on='restart'
- type='service'>
- <service_fmri value='svc:/network/routing/quagga:zebra' />
- </dependency>
- <dependency name='config_data'
+ <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='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>
+ 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@/ripd.conf' />
+ </dependency>
+
+ <exec_method
+ type='method'
+ name='start'
+ exec='/lib/svc/method/quagga ripd %{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: 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>
- <instance name='ospf6d' enabled='false'>
- <!--
- now define it's own dependencies/properties etc here, it'll
- inherit the rest...
- -->
- <dependency name='zebra'
+ <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/quagga:zebra' />
- </dependency>
- <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>
+ <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'>
- <instance name='ospfd' enabled='false'>
- <!--
- now define it's own dependencies/properties etc here, it'll
- inherit the rest...
- -->
- <dependency name='zebra'
+ <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/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>
+ <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>
- <instance name='ripd' enabled='false'>
- <!--
- now define it's own dependencies/properties etc here, it'll
- inherit the rest...
- -->
- <dependency name='zebra'
+ <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>
+ <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>
- <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'
+
+<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'
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>
+ <service_fmri value='svc:/network/routing/zebra:quagga' />
+ </dependency>
- </instance>
+ <dependency name='config_data'
+ grouping='require_all'
+ restart_on='restart'
+ type='path'>
+ <service_fmri
+ value='file://localhost/@sysconfdir@/bgpd.conf' />
+ </dependency>
+
+ <exec_method
+ type='method'
+ name='start'
+ exec='/lib/svc/method/quagga bgpd %{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>
- <stability value='Evolving' />
+ <exec_method
+ type='method'
+ name='stop'
+ exec=':kill'
+ timeout_seconds='60' >
+ </exec_method>
-</service>
+ <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>
+ <stability value='Evolving' />
+</service>
</service_bundle>