[solaris] Sync SMF bits with OpenSolaris SFW

2008-07-03 Paul Jakma <paul.jakma@sun.com>

	* quagga.{xml,init}.in: Sync with OpenSolaris SFW. This changes the
	  SMF schema used, from the SMF schema supplied initially with
	  Quagga, to the version which was approved by the Sun PSARC for
	  inclusion into Solaris. This change is incompatible. Settings,
	  such as vty_port, etc. will not transfer over. The Sun schema is
	  however supported by Sun, and supports running Quagga in a zone
	  with IP instances, and configuration via the routeadm utility.
This commit is contained in:
Paul Jakma 2008-07-03 20:41:08 +00:00
parent 10895fd6c8
commit c2be59ba2a
3 changed files with 571 additions and 160 deletions

View File

@ -1,3 +1,13 @@
2008-07-03 Paul Jakma <paul.jakma@sun.com>
* quagga.{xml,init}.in: Sync with OpenSolaris SFW. This changes the
SMF schema used, from the SMF schema supplied initially with
Quagga, to the version which was approved by the Sun PSARC for
inclusion into Solaris. This change is incompatible. Settings,
such as vty_port, etc. will not transfer over. The Sun schema is
however supported by Sun, and supports running Quagga in a zone
with IP instances, and configuration via the routeadm utility.
2008-01-13 Paul Jakma <paul.jakma@sun.com>
* Makefile.am: pkg target should depend on the 'depend.%' files.

View File

@ -1,6 +1,6 @@
#!/sbin/sh
#
# Copyright 2001,2003 Sun Microsystems, Inc. All rights reserved.
# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# This file is part of Quagga.
@ -25,13 +25,151 @@
# Starts/stops the given daemon
SMFINCLUDE=/lib/svc/share/smf_include.sh
ROUTEADMINCLUDE=/lib/svc/share/routing_include.sh
GLOBAL_OPTIONS="PAfiug"
DAEMON_PATH=@sbindir@
USER=@enable_user@
GROUP=@enable_group@
# handle upgrade of daemon-args SMF property to new routeadm properties
# used during upgrade too by routeadm.
# relevant to S10U4+ only.
handle_routeadm_upgrade () {
GLOBAL_OPTIONS="PAfiug"
daemon_args=`get_daemon_args $SMF_FMRI`
if [ -n "$daemon_args" ]; then
set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
"$GLOBAL_OPTIONS" "P" vty_port 0
set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
"$GLOBAL_OPTIONS" "A" vty_address
set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
"$GLOBAL_OPTIONS" "f" config_file
set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
"$GLOBAL_OPTIONS" "i" pid_file
set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
"$GLOBAL_OPTIONS" "u" user
set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
"$GLOBAL_OPTIONS" "g" group
case "$1" in
zebra)
set_daemon_boolean_property "$SMF_FMRI" "$daemon_args" \
"${GLOBAL_OPTIONS}b" "b" batch true false
;;
ripd|ripngd)
set_daemon_boolean_property "$SMF_FMRI" "$daemon_args" \
"${GLOBAL_OPTIONS}r" "r" retain true false
;;
bgpd)
set_daemon_boolean_property "$SMF_FMRI" "$daemon_args" \
"${GLOBAL_OPTIONS}rnp" "r" retain true false
set_daemon_boolean_property "$SMF_FMRI" "$daemon_args" \
"${GLOBAL_OPTIONS}rnp" "n" no_kernel true false
set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
"${GLOBAL_OPTIONS}rnp" "p" bgp_port
esac
clear_daemon_args $SMF_FMRI
fi
}
upgrade_config () {
DAEMON=$1
# handle upgrade of SUNWzebra to Quagga
if [ -d "/etc/quagga" -a ! -f "/etc/quagga/${DAEMON}.conf" ] ; then
if [ -f "/etc/sfw/zebra/${DAEMON}.conf" ] ; then
cp "/etc/sfw/zebra/${DAEMON}.conf" \
"/etc/quagga/${DAEMON}.conf.upgrade" \
|| exit $SMF_EXIT_ERR_FATAL
chown "${USER}:${GROUP}" "/etc/quagga/${DAEMON}.conf.upgrade" \
|| exit $SMF_EXIT_ERR_FATAL
chmod 0600 "/etc/quagga/${DAEMON}.conf.upgrade" \
|| exit $SMF_EXIT_ERR_FATAL
mv "/etc/quagga/${DAEMON}.conf.upgrade" "/etc/quagga/${DAEMON}.conf" \
|| exit $SMF_EXIT_ERR_FATAL
fi
fi
if [ ! -f "/etc/quagga/${DAEMON}.conf" ] ; then
touch "/etc/quagga/${DAEMON}.conf.new" \
|| exit $SMF_EXIT_ERR_FATAL
chown "${USER}:${GROUP}" "/etc/quagga/${DAEMON}.conf.new" \
|| exit $SMF_EXIT_ERR_FATAL
chmod 0600 "/etc/quagga/${DAEMON}.conf.new" \
|| exit $SMF_EXIT_ERR_FATAL
mv "/etc/quagga/${DAEMON}.conf.new" "/etc/quagga/${DAEMON}.conf" \
|| exit $SMF_EXIT_ERR_FATAL
fi
}
# Relevant to S10+
quagga_is_globalzone () {
if [ "${QUAGGA_INIT_ZONENAME:=`/sbin/zonename`}" != "global" ]; then
return 1
else
if [ "${QUAGGA_INIT_ZONENAME:=`/sbin/zonename`}" = "global" \
-o `/sbin/zonename -t` = "exclusive" ]; then
return 0
else
return 1
fi
}
routeadm_daemon_args () {
# globals
args="`get_daemon_option_from_property $SMF_FMRI config_file f`"
args="${args} `get_daemon_option_from_property $SMF_FMRI vty_port P`"
args="${args} `get_daemon_option_from_property $SMF_FMRI vty_address A`"
args="${args} `get_daemon_option_from_property $SMF_FMRI pid_file i`"
# user and group we need for config file upgrade..
SMF_USER=`get_routeadm_property $SMF_FMRI user`
SMF_GROUP=`get_routeadm_property()$SMF_FMRI group`
if [ "${SMF_USER}" ] ; then
USER="${SMF_USER}"
args="${args} -u ${SMF_USER}"
fi
if [ "${SMF_GROUP}" ] ; then
GROUP="${SMF_GROUP}"
args="${args} -g ${SMF_GROUP}"
fi
case $1 in
zebra)
args="${args} `get_daemon_option_from_boolean_property $SMF_FMRI batch -b true`"
;;
ripd|ripngd)
args="${args} `get_daemon_option_from_boolean_property $SMF_FMRI retain -r true`"
;;
bgpd)
args="${args} `get_daemon_option_from_boolean_property $SMF_FMRI retain -r true`"
args="${args} `get_daemon_option_from_boolean_property $SMF_FMRI no_kernel -n true`"
args="${args} `get_daemon_option_from_property $SMF_FMRI bgp_port p 179`"
;;
esac
echo ${args}
}
# certain daemons need zebra
routeadm_zebra_enable () {
if [ "$DAEMON" = "zebra" ]; then
return
fi
enable_zebra=`/usr/bin/svcprop -p \
routing/enable_zebra $SMF_FMRI 2> /dev/null`
if [ "$enable_zebra" != "false" ]; then
zenabled=`/usr/bin/svcprop -p general/enabled zebra:quagga`
zenabledt=`/usr/bin/svcprop -p general_ovr/enabled zebra:quagga`
if [ "$zenabled" = "true" -o "$zenabledt" = "true" ]; then
/usr/sbin/svcadm disable zebra:quagga
/usr/sbin/svcadm enable -st zebra:quagga
else
/usr/sbin/svcadm enable -st zebra:quagga
fi
if [ "$?" != "0" ]; then
echo "Could not enable zebra:quagga"
exit $SMF_EXIT_ERR_FATAL
fi
fi
}
@ -39,6 +177,11 @@ quagga_is_globalzone () {
# there is no SMF. Should allow this script to work pre-S10.
if [ -f "$SMFINCLUDE" ] ; then
. "$SMFINCLUDE";
# source the SMF-routeadm include if present..
if [ -f "$ROUTEADMINCLUDE" ] ; then
. "$ROUTEADMINCLUDE"
fi
else
# pre-SMF system, fake up any functions and exit codes
# which SMFINCLUDE usually provides.
@ -55,7 +198,7 @@ smf_present || DAEMON_ARGS=""
usage () {
if smf_present ; then
echo "Usage: $0 <daemon> <daemon arguments>";
echo "Usage: $0 <daemon>";
else
echo "Usage: $0 <stop|start> <daemon> <daemon arguments>";
fi
@ -67,7 +210,7 @@ usage () {
case $1 in
'help' | 'usage')
usage
exit SMF_EXIT_OK
exit $SMF_EXIT_OK
;;
esac
@ -79,8 +222,6 @@ else
fi
DAEMON="$1"
shift
DAEMON_ARGS="$@"
# daemon path must be given
if [ -z "$DAEMON_PATH/$DAEMON" ]; then
@ -91,12 +232,9 @@ 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 )
zebra | ospfd | ospf6d | ripd | ripngd )
quagga_is_globalzone || exit $SMF_EXIT_OK
;;
*)
@ -105,6 +243,27 @@ case "${DAEMON}" in
;;
esac
# Older Quagga SMF packages pass daemon args on the commandline
# Newer SMF routeadm model uses properties for each argument
# so we must handle that.
if [ smf_present -a -f "$ROUTEADMINCLUDE" ]; then
handle_routeadm_upgrade $DAEMON;
DAEMON_ARGS=`routeadm_daemon_args`;
routeadm_zebra_enable $DAEMON;
else
if [ $# -gt 0 ] ; then
shift
DAEMON_ARGS="$@"
fi
fi
upgrade_config "$DAEMON"
if [ ! -f "@sysconfdir@/${DAEMON}.conf" ] ; then
echo "Could not find config file, @sysconfdir@/${DAEMON}.conf"
exit $SMF_EXIT_ERR_CONFIG
fi
# we need @quagga_statedir@ to exist, it probably is on tmpfs.
if [ ! -d @quagga_statedir@ ] ; then
mkdir -p @quagga_statedir@
@ -115,7 +274,11 @@ fi
PIDFILE="@quagga_statedir@/${DAEMON}.pid"
start () {
$DAEMON_PATH/$DAEMON $DAEMON_ARGS --pid_file ${PIDFILE} &
if [ ! -x "$DAEMON_PATH/$DAEMON" ] ; then
echo "Error, could not find daemon, $DAEMON_PATH/$DAEMON"
exit $SMF_EXIT_ERR_FATAL
fi
eval exec $DAEMON_PATH/$DAEMON $DAEMON_ARGS --pid_file ${PIDFILE} &
}
stop () {
@ -134,7 +297,7 @@ case "$QUAGGA_METHOD" in
*)
usage
exit SMF_EXIT_ERR_FATAL
exit $SMF_EXIT_ERR_FATAL
;;
esac

View File

@ -18,18 +18,20 @@
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
Copyright 2005 Sun Microsystems, Inc. All rights reserved.
Copyright 2007 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
ident "@(#)quagga.xml 1.0 05/03/15 SMI"
-->
<service_bundle type='manifest' name='QUAGGAdaemons:quagga'>
<service_bundle type='manifest' name='SUNWquagga-daemons:quagga'>
<service
name='network/routing/zebra'
type='service'
version='1'>
<single_instance />
<instance name='quagga' enabled='false'>
<dependency name='fs'
@ -46,24 +48,24 @@
type='service'>
<service_fmri value='svc:/network/initial' />
</dependency>
<dependency name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/zebra.conf' />
</dependency>
<!-- do not not run unless routing-setup has run -->
<dependency
name='network_routing_setup'
grouping='require_all'
restart_on='refresh'
type='service'>
<service_fmri value='svc:/network/routing-setup' />
</dependency>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/quagga zebra %{routing/daemon-args}'
exec='/lib/svc/method/quagga zebra'
timeout_seconds='60'>
<method_context>
<method_credential
user='root' group='root'
privileges='basic,net_icmpaccess,net_rawaccess,sys_admin,sys_net_config'/>
user='root' group='root'/>
</method_context>
</exec_method>
@ -84,17 +86,55 @@
<propval name='ignore_error'
type='astring' value='core,signal' />
</property_group>
<!-- Properties in this group are used by routeadm (1M) -->
<property_group name='routeadm' type='application'>
<stability value='Unstable' />
<!-- Identifies service as a routing service -->
<propval name='daemon' type='astring'
value='@sbindir@/zebra' />
<propval name='value_authorization' type='astring'
value='solaris.smf.value.routing' />
<!-- zebra should not contribute to ipv4/ipv6 routing state -->
<propval name='protocol' type='astring' value='zebra' />
</property_group>
<!-- Properties in this group are modifiable via routeadm (1M) -->
<property_group name='routing' type='application'>
<stability value='Evolving' />
<propval name='value_authorization' type='astring'
value='solaris.smf.modify.routing' />
<propval name='daemon-args' type='astring' value='-P 0'/>
value='solaris.smf.value.routing' />
<!-- Options common to Quagga daemons
Property names are equivalent to the long
option name, consult Quagga documentation -->
<!-- The config file to use, if not the default -->
<propval name='config_file' type='astring' value=''/>
<!-- The vty_port to listen on if not the default.
0 to disable -->
<propval name='vty_port' type='integer' value='0' />
<!-- The address to bind the VTY interface to, if not any. -->
<propval name='vty_address' type='astring' value='' />
<!-- The user to switch to after startup, if not the default -->
<propval name='user' type='astring' value='' />
<!-- The group to switch to, if not the default.
If user is specified, this defaults to a group with
same name as user -->
<propval name='group' type='astring' value='' />
<!-- The pidfile to use, if not the default of
@quagga_statedir@ -->
<propval name='pid_file' type='astring' value='' />
<!-- Options specific to zebra -->
<propval name='batch' type='boolean' value='false' />
</property_group>
<property_group name='general' type='framework'>
<!-- to start stop routing services -->
<propval name='action_authorization' type='astring'
value='solaris.smf.manage.routing' />
<propval name='value_authorization' type='astring'
value='solaris.smf.manage.routing' />
</property_group>
<template>
@ -111,7 +151,7 @@
</documentation>
</template>
</instance>
<stability value='Evolving' />
<stability value='Unstable' />
</service>
<service
@ -129,39 +169,40 @@
value='svc:/system/filesystem/usr:default' />
</dependency>
<!-- Depends on Work-In-Progress, not yet in SNV
<dependency name='net'
grouping='require_all'
restart_on='none'
<dependency
name='ipv4-forwarding'
grouping='optional_all'
restart_on='refresh'
type='service'>
<service_fmri value='svc:/network/routing/ipv4-routing' />
<service_fmri value='svc:/network/ipv4-forwarding' />
</dependency>
-->
<dependency name='zebra'
grouping='require_all'
restart_on='restart'
type='service'>
<service_fmri value='svc:/network/routing/zebra:quagga' />
<!-- do not not run unless routing-setup has run -->
<dependency
name='network_routing_setup'
grouping='require_all'
restart_on='refresh'
type='service'>
<service_fmri value='svc:/network/routing-setup' />
</dependency>
<!-- ensure that restart of zebra is propogated to daemon -->
<dependency
name='zebra'
grouping='optional_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@/ripd.conf' />
</dependency>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/quagga ripd %{routing/daemon-args}'
exec='/lib/svc/method/quagga ripd'
timeout_seconds='60'>
<method_context>
<method_credential
user='root' group='root'
privileges='basic,net_icmpaccess,net_privaddr,net_rawaccess'/>
user='root' group='root'/>
</method_context>
</exec_method>
@ -179,16 +220,52 @@
type='astring' value='core,signal' />
</property_group>
<!-- Properties in this group are used by routeadm (1M) -->
<property_group name='routeadm' type='application'>
<stability value='Unstable' />
<!-- Identifies service as a routing service -->
<propval name='daemon' type='astring'
value='@sbindir@/ripd' />
<propval name='legacy-daemon' type='astring'
value='/usr/sfw/sbin/ripdstart' />
<propval name='value_authorization' type='astring'
value='solaris.smf.value.routing' />
<propval name='protocol' type='astring' value='ipv4' />
</property_group>
<!-- Properties in this group are modifiable via routeadm (1M) -->
<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'/>
value='solaris.smf.value.routing' />
<!-- Options common to Quagga daemons -->
<!-- The config file to use, if not the default -->
<propval name='config_file' type='astring' value=''/>
<!-- The vty_port to listen on if not the default.
0 to disable -->
<propval name='vty_port' type='integer' value='0' />
<!-- The address to bind the VTY interface to, if not any. -->
<propval name='vty_address' type='astring' value='' />
<!-- The user to switch to after startup, if not the default -->
<propval name='user' type='astring' value='' />
<!-- The group to switch to, if not the default.
If user is specified, this defaults to a group with
same name as user -->
<propval name='group' type='astring' value='' />
<!-- The pidfile to use, if not the default of
@quagga_statedir@ -->
<propval name='pid_file' type='astring' value='' />
<!-- Options specific to ripd -->
<propval name='retain' type='boolean' value='false' />
</property_group>
<property_group name='general' type='framework'>
<!-- to start stop routing services -->
<propval name='action_authorization' type='astring'
value='solaris.smf.manage.routing' />
<propval name='value_authorization' type='astring'
value='solaris.smf.manage.routing' />
</property_group>
<template>
@ -205,7 +282,7 @@
</documentation>
</template>
</instance>
<stability value='Evolving' />
<stability value='Unstable' />
</service>
<service
@ -223,39 +300,40 @@
value='svc:/system/filesystem/usr:default' />
</dependency>
<!-- Depends on WIP, not yet in SNV
<dependency name='net'
grouping='require_all'
restart_on='none'
<dependency
name='ipv6-forwarding'
grouping='optional_all'
restart_on='refresh'
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' />
<service_fmri value='svc:/network/ipv6-forwarding' />
</dependency>
<dependency name='config_data'
<!-- do not not run unless routing-setup has run -->
<dependency
name='network_routing_setup'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/ripngd.conf' />
restart_on='refresh'
type='service'>
<service_fmri value='svc:/network/routing-setup' />
</dependency>
<!-- ensure that restart of zebra is propogated to daemon -->
<dependency
name='zebra'
grouping='optional_all'
restart_on='restart'
type='service'>
<service_fmri value='svc:/network/routing/zebra:quagga' />
</dependency>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/quagga ripngd %{routing/daemon-args}'
exec='/lib/svc/method/quagga ripngd'
timeout_seconds='60'>
<method_context>
<method_credential
user='root' group='root'
privileges='basic,net_icmpaccess,net_privaddr,net_rawaccess'/>
user='root' group='root'/>
</method_context>
</exec_method>
@ -273,16 +351,50 @@
type='astring' value='core,signal' />
</property_group>
<!-- Properties in this group are used by routeadm (1M) -->
<property_group name='routeadm' type='application'>
<stability value='Unstable' />
<!-- Identifies service as a routing service -->
<propval name='daemon' type='astring'
value='@sbindir@/ripngd' />
<propval name='value_authorization' type='astring'
value='solaris.smf.value.routing' />
<propval name='protocol' type='astring' value='ipv6'/>
</property_group>
<!-- Properties in this group are modifiable via routeadm (1M) -->
<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'/>
value='solaris.smf.value.routing' />
<!-- Options common to Quagga daemons -->
<!-- The config file to use, if not the default -->
<propval name='config_file' type='astring' value=''/>
<!-- The vty_port to listen on if not the default.
0 to disable -->
<propval name='vty_port' type='integer' value='0' />
<!-- The address to bind the VTY interface to, if not any. -->
<propval name='vty_address' type='astring' value='' />
<!-- The user to switch to after startup, if not the default -->
<propval name='user' type='astring' value='' />
<!-- The group to switch to, if not the default.
If user is specified, this defaults to a group with
same name as user -->
<propval name='group' type='astring' value='' />
<!-- The pidfile to use, if not the default of
@quagga_statedir@ -->
<propval name='pid_file' type='astring' value='' />
<!-- Options specific to ripngd -->
<propval name='retain' type='boolean' value='false' />
</property_group>
<property_group name='general' type='framework'>
<!-- to start stop routing services -->
<propval name='action_authorization' type='astring'
value='solaris.smf.manage.routing' />
<propval name='value_authorization' type='astring'
value='solaris.smf.manage.routing' />
</property_group>
<template>
@ -299,7 +411,7 @@
</documentation>
</template>
</instance>
<stability value='Evolving' />
<stability value='Unstable' />
</service>
<service
@ -317,47 +429,51 @@
value='svc:/system/filesystem/usr:default' />
</dependency>
<!-- Depends on WIP, not yet in SNV
<dependency name='net'
grouping='require_all'
restart_on='none'
<dependency
name='ipv4-forwarding'
grouping='optional_all'
restart_on='refresh'
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' />
<service_fmri value='svc:/network/ipv4-forwarding' />
</dependency>
<dependency name='config_data'
<!-- do not not run unless routing-setup has run -->
<dependency
name='network_routing_setup'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/ospfd.conf' />
restart_on='refresh'
type='service'>
<service_fmri value='svc:/network/routing-setup' />
</dependency>
<!-- ensure that restart of zebra is propogated to daemon -->
<dependency
name='zebra'
grouping='optional_all'
restart_on='restart'
type='service'>
<service_fmri value='svc:/network/routing/zebra:quagga' />
</dependency>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/quagga ospfd %{routing/daemon-args}'
exec='/lib/svc/method/quagga ospfd'
timeout_seconds='60'>
<method_context>
<method_credential
user='root' group='root'
privileges='basic,net_icmpaccess,net_privaddr,net_rawaccess,sys_net_config'/>
user='root' group='root'/>
</method_context>
</exec_method>
<!-- ospfd can take a long time to shutdown, due to graceful
shutdown
-->
<exec_method
type='method'
name='stop'
exec=':kill'
timeout_seconds='60'>
timeout_seconds='600'>
</exec_method>
<property_group name='startd'
@ -367,16 +483,49 @@
type='astring' value='core,signal' />
</property_group>
<!-- Properties in this group are used by routeadm (1M) -->
<property_group name='routeadm' type='application'>
<stability value='Unstable' />
<!-- Identifies service as a routing service -->
<propval name='daemon' type='astring'
value='@sbindir@/ospfd' />
<propval name='legacy-daemon' type='astring'
value='/usr/sfw/sbin/ospfdstart' />
<propval name='value_authorization' type='astring'
value='solaris.smf.value.routing' />
<propval name='protocol' type='astring' value='ipv4'/>
</property_group>
<!-- Properties in this group are modifiable via routeadm (1M) -->
<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'/>
value='solaris.smf.value.routing' />
<!-- Options common to Quagga daemons -->
<!-- The config file to use, if not the default -->
<propval name='config_file' type='astring' value=''/>
<!-- The vty_port to listen on if not the default.
0 to disable -->
<propval name='vty_port' type='integer' value='0' />
<!-- The address to bind the VTY interface to, if not any. -->
<propval name='vty_address' type='astring' value='' />
<!-- The user to switch to after startup, if not the default -->
<propval name='user' type='astring' value='' />
<!-- The group to switch to, if not the default.
If user is specified, this defaults to a group with
same name as user -->
<propval name='group' type='astring' value='' />
<!-- The pidfile to use, if not the default of
@quagga_statedir@ -->
<propval name='pid_file' type='astring' value='' />
</property_group>
<property_group name='general' type='framework'>
<!-- to start stop routing services -->
<propval name='action_authorization' type='astring'
value='solaris.smf.manage.routing' />
<propval name='value_authorization' type='astring'
value='solaris.smf.manage.routing' />
</property_group>
<template>
@ -393,7 +542,7 @@
</documentation>
</template>
</instance>
<stability value='Evolving' />
<stability value='Unstable' />
</service>
<service
@ -411,39 +560,40 @@
value='svc:/system/filesystem/usr:default' />
</dependency>
<!-- Depends on WIP, not yet in SNV
<dependency name='net'
grouping='require_all'
restart_on='none'
<dependency
name='ipv6-forwarding'
grouping='optional_all'
restart_on='refresh'
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' />
<service_fmri value='svc:/network/ipv6-forwarding' />
</dependency>
<dependency name='config_data'
<!-- do not not run unless routing-setup has run -->
<dependency
name='network_routing_setup'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/ospf6d.conf' />
restart_on='refresh'
type='service'>
<service_fmri value='svc:/network/routing-setup' />
</dependency>
<!-- ensure that restart of zebra is propogated to daemon -->
<dependency
name='zebra'
grouping='optional_all'
restart_on='restart'
type='service'>
<service_fmri value='svc:/network/routing/zebra:quagga' />
</dependency>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/quagga ospf6d %{routing/daemon-args}'
exec='/lib/svc/method/quagga ospf6d'
timeout_seconds='60'>
<method_context>
<method_credential
user='root' group='root'
privileges='basic,net_icmpaccess,net_privaddr,net_rawaccess'/>
user='root' group='root'/>
</method_context>
</exec_method>
@ -461,22 +611,53 @@
type='astring' value='core,signal' />
</property_group>
<!-- Properties in this group are used by routeadm (1M) -->
<property_group name='routeadm' type='application'>
<stability value='Unstable' />
<!-- Identifies service as a routing service -->
<propval name='daemon' type='astring'
value='@sbindir@/ospf6d' />
<propval name='value_authorization' type='astring'
value='solaris.smf.value.routing' />
<propval name='protocol' type='astring' value='ipv6'/>
</property_group>
<!-- Properties in this group are modifiable via routeadm (1M) -->
<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'/>
value='solaris.smf.value.routing' />
<!-- Options common to Quagga daemons -->
<!-- The config file to use, if not the default -->
<propval name='config_file' type='astring' value=''/>
<!-- The vty_port to listen on if not the default.
0 to disable -->
<propval name='vty_port' type='integer' value='0' />
<!-- The address to bind the VTY interface to, if not any. -->
<propval name='vty_address' type='astring' value='' />
<!-- The user to switch to after startup, if not the default -->
<propval name='user' type='astring' value='' />
<!-- The group to switch to, if not the default.
If user is specified, this defaults to a group with
same name as user -->
<propval name='group' type='astring' value='' />
<!-- The pidfile to use, if not the default of
@quagga_statedir@ -->
<propval name='pid_file' type='astring' value='' />
</property_group>
<property_group name='general' type='framework'>
<!-- to start stop routing services -->
<propval name='action_authorization' type='astring'
value='solaris.smf.manage.routing' />
<propval name='value_authorization' type='astring'
value='solaris.smf.manage.routing' />
</property_group>
<template>
<common_name>
<loctext xml:lang='C'>
Quagga: ospf6d, OSPFv3 IPv6 routing protocol daemon.
Quagga: ospf6d, OSPFv3 IPv6 routing protocol daemon.
</loctext>
</common_name>
<documentation>
@ -487,7 +668,7 @@
</documentation>
</template>
</instance>
<stability value='Evolving' />
<stability value='Unstable' />
</service>
@ -506,40 +687,48 @@
value='svc:/system/filesystem/usr:default' />
</dependency>
<!-- Depends on WIP, not yet in SNV
<dependency name='net'
grouping='require_any'
restart_on='none'
<dependency
name='ipv6-forwarding'
grouping='optional_all'
restart_on='refresh'
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/zebra:quagga' />
<service_fmri value='svc:/network/ipv6-forwarding' />
</dependency>
<dependency name='config_data'
grouping='require_all'
restart_on='restart'
type='path'>
<service_fmri
value='file://localhost/@sysconfdir@/bgpd.conf' />
<dependency
name='ipv4-forwarding'
grouping='optional_all'
restart_on='refresh'
type='service'>
<service_fmri value='svc:/network/ipv4-forwarding' />
</dependency>
<!-- do not not run unless routing-setup has run -->
<dependency
name='network_routing_setup'
grouping='require_all'
restart_on='refresh'
type='service'>
<service_fmri value='svc:/network/routing-setup' />
</dependency>
<!-- ensure that restart of zebra is propogated to daemon -->
<dependency
name='zebra'
grouping='optional_all'
restart_on='restart'
type='service'>
<service_fmri value='svc:/network/routing/zebra:quagga' />
</dependency>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/quagga bgpd %{routing/daemon-args}'
exec='/lib/svc/method/quagga bgpd'
timeout_seconds='60'>
<method_context>
<method_credential
user='root' group='root'
privileges='basic,net_icmpaccess,net_privaddr,net_rawaccess'/>
user='root' group='root'/>
</method_context>
</exec_method>
@ -557,16 +746,65 @@
type='astring' value='core,signal' />
</property_group>
<!-- Properties in this group are used by routeadm (1M) -->
<property_group name='routeadm' type='application'>
<stability value='Unstable' />
<!-- Identifies service as a routing service -->
<propval name='daemon' type='astring'
value='@sbindir@/bgpd' />
<propval name='legacy-daemon' type='astring'
value='/usr/sfw/sbin/bgpdstart' />
<propval name='value_authorization' type='astring'
value='solaris.smf.value.routing' />
<property name='protocol' type='astring'>
<astring_list>
<value_node value='ipv4'/>
<value_node value='ipv6'/>
</astring_list>
</property>
</property_group>
<!-- Properties in this group are modifiable via routeadm (1M) -->
<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'/>
value='solaris.smf.value.routing' />
<!-- Options common to Quagga daemons. -->
<!-- The config file to use, if not the default -->
<propval name='config_file' type='astring' value=''/>
<!-- The vty_port to listen on if not the default.
0 to disable -->
<propval name='vty_port' type='integer' value='0' />
<!-- The address to bind the VTY interface to, if not any. -->
<propval name='vty_address' type='astring' value='' />
<!-- The user to switch to after startup, if not the default -->
<propval name='user' type='astring' value='' />
<!-- The group to switch to, if not the default.
If user is specified, this defaults to a group with
same name as user -->
<propval name='group' type='astring' value='' />
<!-- The pidfile to use, if not the default of
@quagga_statedir@ -->
<propval name='pid_file' type='astring' value='' />
<!-- Options specific to bgpd -->
<propval name='retain' type='boolean' value='false' />
<propval name='no_kernel' type='boolean' value='false' />
<propval name='bgp_port' type='astring' value='' />
<!--
If enable_zebra is false, it will not be switched
on by the start method.
-->
<propval name='enable_zebra' type='boolean' value='true' />
</property_group>
<property_group name='general' type='framework'>
<!-- to start stop routing services -->
<propval name='action_authorization' type='astring'
value='solaris.smf.manage.routing' />
<propval name='value_authorization' type='astring'
value='solaris.smf.manage.routing' />
</property_group>
<template>
@ -583,6 +821,6 @@
</documentation>
</template>
</instance>
<stability value='Evolving' />
<stability value='Unstable' />
</service>
</service_bundle>