summaryrefslogtreecommitdiff
path: root/solaris/quagga.init.in
diff options
context:
space:
mode:
authorPaul Jakma <paul.jakma@sun.com>2006-03-30 13:38:28 +0000
committerPaul Jakma <paul.jakma@sun.com>2006-03-30 13:38:28 +0000
commit75db03ebb169da26102275c70eff0a0ebaae04cb (patch)
tree8ac5dd58bc3b37ead3c8932138052348b8c66629 /solaris/quagga.init.in
parente6d7d054d9b787c597319ec528ea8f64a7f949f6 (diff)
[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.
Diffstat (limited to 'solaris/quagga.init.in')
-rwxr-xr-xsolaris/quagga.init.in130
1 files changed, 70 insertions, 60 deletions
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