2005-06-15 Paul Jakma <paul.jakma@sun.com>
* quagga.xml.in: Pass the FMRI to the method, removing need for
daemon_name property and deducing the FMRI.
remove the empty config_file and pid_file definitions, they just
make things difficult in the method script, cause it then has to
deal with svcprop returning "" for defined empty properties.
Remove daemon_name everywhere.
* quagga.init.in: Take the FMRI as an argument
Remove deducing the FMRI from the defunct daemon_name property.
Use svcprop -q to test for presence of a property first.
Default vty_port to 0 and vty_addr to 127.1 if equivalent
SMF properties are not set.
Deduce the pid_file, we can infer it from @quagga_statedir@ I
think, it's probably not useful to allow it to be configurable
as a property anyway.
/var/run/ is on tmpfs on Solaris, so we probably will need
to create @quagga_statedir@ first run after boot.
Use @sbindir@, not /usr/local/sbin.
diff --git a/solaris/ChangeLog b/solaris/ChangeLog
index 0713a1f..ab0c618 100644
--- a/solaris/ChangeLog
+++ b/solaris/ChangeLog
@@ -1,3 +1,23 @@
+2005-06-15 Paul Jakma <paul.jakma@sun.com>
+
+ * quagga.xml.in: Pass the FMRI to the method, removing need for
+ daemon_name property and deducing the FMRI.
+ remove the empty config_file and pid_file definitions, they just
+ make things difficult in the method script, cause it then has to
+ deal with svcprop returning "" for defined empty properties.
+ Remove daemon_name everywhere.
+ * quagga.init.in: Take the FMRI as an argument
+ Remove deducing the FMRI from the defunct daemon_name property.
+ Use svcprop -q to test for presence of a property first.
+ Default vty_port to 0 and vty_addr to 127.1 if equivalent
+ SMF properties are not set.
+ Deduce the pid_file, we can infer it from @quagga_statedir@ I
+ think, it's probably not useful to allow it to be configurable
+ as a property anyway.
+ /var/run/ is on tmpfs on Solaris, so we probably will need
+ to create @quagga_statedir@ first run after boot.
+ Use @sbindir@, not /usr/local/sbin.
+
2005-06-02 Paul Jakma <paul.jakma@sun.com>
* quagga.xml.in: Fix mistake in bgpd definition. Change dependency
diff --git a/solaris/quagga.init.in b/solaris/quagga.init.in
index 1d3a5cd..ba3b484 100755
--- a/solaris/quagga.init.in
+++ b/solaris/quagga.init.in
@@ -3,7 +3,7 @@
# Copyright 2001,2003 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
-# $Id: quagga.init.in,v 1.3 2005/06/02 16:33:53 paul Exp $
+# $Id: quagga.init.in,v 1.4 2005/06/15 11:00:11 paul Exp $
#
# Starts/stops the appropriate daemon
@@ -14,7 +14,7 @@
fi
usage () {
- echo "Usage: $0 (start|stop) <fmri>";
+ echo "Usage: $0 (start|stop) <fmri> <instance>";
}
case $1 in
@@ -23,9 +23,10 @@
;;
esac
-# fmri must be given.
+# fmri and instance must be given.
FMRI="$2"
-if [ -z "$FMRI" ]; then
+INSTANCE="$3"
+if [ -z "$FMRI" -o -z "$INSTANCE" ]; then
usage
exit $SMF_EXIT_ERR_CONFIG
fi
@@ -33,10 +34,7 @@
# fmri must exist
svcs ${FMRI} > /dev/null 2>&1 || exit $SMF_EXIT_ERR_CONFIG
-DAEMON=`svcprop -p @PACKAGE_TARNAME@/daemon_name ${FMRI} 2> /dev/null`
-[ -z "${DAEMON}" ] && exit $SMF_EXIT_ERR_CONFIG
-
-case ${DAEMON} in
+case ${INSTANCE} in
zebra | ospfd | ospf6d | ripd | ripngd | bgpd )
;;
*)
@@ -45,28 +43,52 @@
;;
esac
-CONFFILE=`svcprop -p @PACKAGE_TARNAME@/config_file ${FMRI}`
-PIDFILE=`svcprop -p @PACKAGE_TARNAME@/pid_file ${FMRI}`
-USER=`svcprop -p @PACKAGE_TARNAME@/user ${FMRI}`
-GROUP=`svcprop -p @PACKAGE_TARNAME@/group ${FMRI}`
-VTYADDR=`svcprop -p @PACKAGE_TARNAME@/vty_addr ${FMRI}`
-VTYPORT=`svcprop -p @PACKAGE_TARNAME@/vty_port ${FMRI}`
+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}"
-[ -n "${VTYPORT}" ] && ARGS="${ARGS} --vty_port ${VTYPORT}"
-[ -n "${VTYADDR}" ] && ARGS="${ARGS} --vty_addr ${VTYADDR}"
+
+# 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
-[ -z "${PIDFILE}" ] && exit $SMF_EXIT_ERR_CONFIG
+# we can assume it otherwise
+if [ -z "${PIDFILE}" ]; then
+ PIDFILE="@quagga_statedir@/${INSTANCE}.pid"
+else
+ ARGS="${ARGS} --pid_file ${PIDFILE}"
+fi
# config file must exist
#[ ! -f "$CONFFILE" ] && exit $SMF_EXIT_ERR_CONFIG
+# we need @quagga_statedir@ to exist, it might be on tmpfs.
+if [ ! -d @quagga_statedir@ ] ; then
+ mkdir -p @quagga_statedir@
+ chown @enable_user@:@enable_group@ @quagga_statedir@
+ chmod 751 @quagga_statedir@
+fi
+
start () {
- /usr/local/quagga/sbin/${DAEMON} ${ARGS} &
+ @sbindir@/${INSTANCE} ${ARGS} &
}
stop () {
@@ -76,9 +98,9 @@
}
restart() {
- stop ${DAEMON}
+ stop ${INSTANCE}
sleep 1
- start ${DAEMON}
+ start ${INSTANCE}
}
case $1 in
diff --git a/solaris/quagga.xml.in b/solaris/quagga.xml.in
index 1de74ff..dfa2eb6 100644
--- a/solaris/quagga.xml.in
+++ b/solaris/quagga.xml.in
@@ -39,19 +39,19 @@
<exec_method
type='method'
name='start'
- exec='/lib/svc/method/quagga start %i'
+ exec='/lib/svc/method/quagga start %f %i'
timeout_seconds='60'/>
<exec_method
type='method'
name='stop'
- exec='/lib/svc/method/quagga stop %i'
+ exec='/lib/svc/method/quagga stop %f %i'
timeout_seconds='60' />
<exec_method
type='method'
name='restart'
- exec='/lib/svc/method/quagga restart %i'
+ exec='/lib/svc/method/quagga restart %f %i'
timeout_seconds='60' />
<!--
if we define these properties at the service level, each instance
@@ -65,8 +65,6 @@
</property_group>
<property_group name='quagga' type='application'>
<!-- Options common to Quagga daemons -->
- <propval name='config_file' type='astring' value='' />
- <propval name='pid_file' type='astring' value='' />
<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@' />
@@ -89,8 +87,6 @@
<property_group name='quagga' type='application'>
<propval name='keep_kernel' type='boolean'
value='false'/>
- <propval name='daemon_name' type='astring'
- value='zebra'/>
</property_group>
<template>
<common_name>
@@ -125,8 +121,6 @@
value='file://localhost/@sysconfdir@/bgpd.conf' />
</dependency>
<property_group name='quagga' type='application'>
- <propval name='daemon_name' type='astring'
- value='bgpd'/>
<propval name='no_kernel' type='boolean'
value='false'/>
</property_group>
@@ -164,10 +158,6 @@
<service_fmri
value='file://localhost/@sysconfdir@/ospf6d.conf' />
</dependency>
- <property_group name='quagga' type='application'>
- <propval name='daemon_name' type='astring'
- value='ospf6d'/>
- </property_group>
<template>
<common_name>
<loctext xml:lang='C'>
@@ -205,10 +195,6 @@
<property_group name='quagga' type='application'>
<propval name='retain_routes' type='boolean' value='false'/>
</property_group>
- <property_group name='quagga' type='application'>
- <propval name='daemon_name' type='astring'
- value='ospfd'/>
- </property_group>
<template>
<common_name>
<loctext xml:lang='C'>
@@ -246,10 +232,6 @@
<property_group name='quagga' type='application'>
<propval name='retain_routes' type='boolean' value='false'/>
</property_group>
- <property_group name='quagga' type='application'>
- <propval name='daemon_name' type='astring'
- value='ripd'/>
- </property_group>
<template>
<common_name>
<loctext xml:lang='C'>
@@ -285,11 +267,8 @@
value='file://localhost/@sysconfdir@/ripngd.conf' />
</dependency>
<property_group name='quagga' type='application'>
- <propval name='retain_routes' type='boolean' value='false'/>
- </property_group>
- <property_group name='quagga' type='application'>
- <propval name='daemon_name' type='astring'
- value='ripngd'/>
+ <propval name='retain_routes' type='boolean'
+ value='false'/>
</property_group>
<template>
<common_name>