Annotation of embedaddon/quagga/solaris/quagga.init.in, revision 1.1
1.1 ! misho 1: #!/sbin/sh
! 2: #
! 3: # Copyright 2007 Sun Microsystems, Inc. All rights reserved.
! 4: # Use is subject to license terms.
! 5: #
! 6: # This file is part of Quagga.
! 7: #
! 8: # Quagga is free software; you can redistribute it and/or modify it
! 9: # under the terms of the GNU General Public License as published by the
! 10: # Free Software Foundation; either version 2, or (at your option) any
! 11: # later version.
! 12: #
! 13: # Quagga is distributed in the hope that it will be useful, but
! 14: # WITHOUT ANY WARRANTY; without even the implied warranty of
! 15: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 16: # General Public License for more details.
! 17: #
! 18: # You should have received a copy of the GNU General Public License
! 19: # along with Quagga; see the file COPYING. If not, write to the Free
! 20: # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! 21: # 02111-1307, USA.
! 22: #
! 23: # Starts/stops the given daemon
! 24:
! 25: SMFINCLUDE=/lib/svc/share/smf_include.sh
! 26: ROUTEADMINCLUDE=/lib/svc/share/routing_include.sh
! 27: GLOBAL_OPTIONS="PAfiug"
! 28: DAEMON_PATH=@sbindir@
! 29: USER=@enable_user@
! 30: GROUP=@enable_group@
! 31:
! 32: # handle upgrade of daemon-args SMF property to new routeadm properties
! 33: # used during upgrade too by routeadm.
! 34: # relevant to S10U4+ only.
! 35: handle_routeadm_upgrade () {
! 36: GLOBAL_OPTIONS="PAfiug"
! 37:
! 38: daemon_args=`get_daemon_args $SMF_FMRI`
! 39:
! 40: if [ -n "$daemon_args" ]; then
! 41: set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
! 42: "$GLOBAL_OPTIONS" "P" vty_port 0
! 43: set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
! 44: "$GLOBAL_OPTIONS" "A" vty_address
! 45: set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
! 46: "$GLOBAL_OPTIONS" "f" config_file
! 47: set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
! 48: "$GLOBAL_OPTIONS" "i" pid_file
! 49: set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
! 50: "$GLOBAL_OPTIONS" "u" user
! 51: set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
! 52: "$GLOBAL_OPTIONS" "g" group
! 53:
! 54: case "$1" in
! 55: zebra)
! 56: set_daemon_boolean_property "$SMF_FMRI" "$daemon_args" \
! 57: "${GLOBAL_OPTIONS}b" "b" batch true false
! 58: ;;
! 59: ripd|ripngd)
! 60: set_daemon_boolean_property "$SMF_FMRI" "$daemon_args" \
! 61: "${GLOBAL_OPTIONS}r" "r" retain true false
! 62: ;;
! 63: bgpd)
! 64: set_daemon_boolean_property "$SMF_FMRI" "$daemon_args" \
! 65: "${GLOBAL_OPTIONS}rnp" "r" retain true false
! 66: set_daemon_boolean_property "$SMF_FMRI" "$daemon_args" \
! 67: "${GLOBAL_OPTIONS}rnp" "n" no_kernel true false
! 68: set_daemon_value_property "$SMF_FMRI" "$daemon_args" \
! 69: "${GLOBAL_OPTIONS}rnp" "p" bgp_port
! 70: esac
! 71: clear_daemon_args $SMF_FMRI
! 72: fi
! 73: }
! 74:
! 75: upgrade_config () {
! 76: DAEMON=$1
! 77: # handle upgrade of SUNWzebra to Quagga
! 78: if [ -d "/etc/quagga" -a ! -f "/etc/quagga/${DAEMON}.conf" ] ; then
! 79: if [ -f "/etc/sfw/zebra/${DAEMON}.conf" ] ; then
! 80: cp "/etc/sfw/zebra/${DAEMON}.conf" \
! 81: "/etc/quagga/${DAEMON}.conf.upgrade" \
! 82: || exit $SMF_EXIT_ERR_FATAL
! 83: chown "${USER}:${GROUP}" "/etc/quagga/${DAEMON}.conf.upgrade" \
! 84: || exit $SMF_EXIT_ERR_FATAL
! 85: chmod 0600 "/etc/quagga/${DAEMON}.conf.upgrade" \
! 86: || exit $SMF_EXIT_ERR_FATAL
! 87: mv "/etc/quagga/${DAEMON}.conf.upgrade" "/etc/quagga/${DAEMON}.conf" \
! 88: || exit $SMF_EXIT_ERR_FATAL
! 89: fi
! 90: fi
! 91:
! 92: if [ ! -f "/etc/quagga/${DAEMON}.conf" ] ; then
! 93: touch "/etc/quagga/${DAEMON}.conf.new" \
! 94: || exit $SMF_EXIT_ERR_FATAL
! 95: chown "${USER}:${GROUP}" "/etc/quagga/${DAEMON}.conf.new" \
! 96: || exit $SMF_EXIT_ERR_FATAL
! 97: chmod 0600 "/etc/quagga/${DAEMON}.conf.new" \
! 98: || exit $SMF_EXIT_ERR_FATAL
! 99: mv "/etc/quagga/${DAEMON}.conf.new" "/etc/quagga/${DAEMON}.conf" \
! 100: || exit $SMF_EXIT_ERR_FATAL
! 101: fi
! 102: }
! 103:
! 104: # Relevant to S10+
! 105: quagga_is_globalzone () {
! 106: if [ "${QUAGGA_INIT_ZONENAME:=`/sbin/zonename`}" = "global" \
! 107: -o `/sbin/zonename -t` = "exclusive" ]; then
! 108: return 0
! 109: else
! 110: return 1
! 111: fi
! 112: }
! 113:
! 114: routeadm_daemon_args () {
! 115: # globals
! 116: args="`get_daemon_option_from_property $SMF_FMRI config_file f`"
! 117: args="${args} `get_daemon_option_from_property $SMF_FMRI vty_port P`"
! 118: args="${args} `get_daemon_option_from_property $SMF_FMRI vty_address A`"
! 119: args="${args} `get_daemon_option_from_property $SMF_FMRI pid_file i`"
! 120:
! 121: # user and group we need for config file upgrade..
! 122: SMF_USER=`get_routeadm_property $SMF_FMRI user`
! 123: SMF_GROUP=`get_routeadm_property()$SMF_FMRI group`
! 124: if [ "${SMF_USER}" ] ; then
! 125: USER="${SMF_USER}"
! 126: args="${args} -u ${SMF_USER}"
! 127: fi
! 128: if [ "${SMF_GROUP}" ] ; then
! 129: GROUP="${SMF_GROUP}"
! 130: args="${args} -g ${SMF_GROUP}"
! 131: fi
! 132:
! 133: case $1 in
! 134: zebra)
! 135: args="${args} `get_daemon_option_from_boolean_property $SMF_FMRI batch -b true`"
! 136: ;;
! 137: ripd|ripngd)
! 138: args="${args} `get_daemon_option_from_boolean_property $SMF_FMRI retain -r true`"
! 139: ;;
! 140: bgpd)
! 141: args="${args} `get_daemon_option_from_boolean_property $SMF_FMRI retain -r true`"
! 142: args="${args} `get_daemon_option_from_boolean_property $SMF_FMRI no_kernel -n true`"
! 143: args="${args} `get_daemon_option_from_property $SMF_FMRI bgp_port p 179`"
! 144: ;;
! 145: esac
! 146: echo ${args}
! 147: }
! 148:
! 149: # certain daemons need zebra
! 150: routeadm_zebra_enable () {
! 151:
! 152: if [ "$DAEMON" = "zebra" ]; then
! 153: return
! 154: fi
! 155:
! 156: enable_zebra=`/usr/bin/svcprop -p \
! 157: routing/enable_zebra $SMF_FMRI 2> /dev/null`
! 158: if [ "$enable_zebra" != "false" ]; then
! 159: zenabled=`/usr/bin/svcprop -p general/enabled zebra:quagga`
! 160: zenabledt=`/usr/bin/svcprop -p general_ovr/enabled zebra:quagga`
! 161: if [ "$zenabled" = "true" -o "$zenabledt" = "true" ]; then
! 162: /usr/sbin/svcadm disable zebra:quagga
! 163: /usr/sbin/svcadm enable -st zebra:quagga
! 164: else
! 165: /usr/sbin/svcadm enable -st zebra:quagga
! 166: fi
! 167: if [ "$?" != "0" ]; then
! 168: echo "Could not enable zebra:quagga"
! 169: exit $SMF_EXIT_ERR_FATAL
! 170: fi
! 171: fi
! 172: }
! 173:
! 174: # Include smf functions, if available. If not, define smf_present to indicate
! 175: # there is no SMF. Should allow this script to work pre-S10.
! 176: if [ -f "$SMFINCLUDE" ] ; then
! 177: . "$SMFINCLUDE";
! 178:
! 179: # source the SMF-routeadm include if present..
! 180: if [ -f "$ROUTEADMINCLUDE" ] ; then
! 181: . "$ROUTEADMINCLUDE"
! 182: fi
! 183: else
! 184: # pre-SMF system, fake up any functions and exit codes
! 185: # which SMFINCLUDE usually provides.
! 186: smf_present () {
! 187: return 1
! 188: }
! 189: SMF_EXIT_OK=0;
! 190: SMF_EXIT_ERR_CONFIG=96;
! 191: SMF_EXIT_ERR_FATAL=95;
! 192: fi
! 193:
! 194: # if there's no SMF, set some default DAEMON_ARGS
! 195: smf_present || DAEMON_ARGS=""
! 196:
! 197: usage () {
! 198: if smf_present ; then
! 199: echo "Usage: $0 <daemon>";
! 200: else
! 201: echo "Usage: $0 <stop|start> <daemon> <daemon arguments>";
! 202: fi
! 203: echo "The --pid_file argument is implied";
! 204: echo "This help message: $0 <help|usage>";
! 205: }
! 206:
! 207: # parse arguments, different according to SMF or not.
! 208: case $1 in
! 209: 'help' | 'usage')
! 210: usage
! 211: exit $SMF_EXIT_OK
! 212: ;;
! 213: esac
! 214:
! 215: if smf_present ; then
! 216: QUAGGA_METHOD="start"
! 217: else
! 218: QUAGGA_METHOD="$1"
! 219: shift;
! 220: fi
! 221:
! 222: DAEMON="$1"
! 223:
! 224: # daemon path must be given
! 225: if [ -z "$DAEMON_PATH/$DAEMON" ]; then
! 226: usage
! 227: exit $SMF_EXIT_ERR_FATAL
! 228: fi
! 229:
! 230: # only bgpd is suitable for running in a non-global zone, at this
! 231: # time.
! 232: case "${DAEMON}" in
! 233: bgpd)
! 234: ;;
! 235: zebra | ospfd | ospf6d | ripd | ripngd )
! 236: quagga_is_globalzone || exit $SMF_EXIT_OK
! 237: ;;
! 238: *)
! 239: usage
! 240: exit $SMF_EXIT_ERR_CONFIG;
! 241: ;;
! 242: esac
! 243:
! 244: # Older Quagga SMF packages pass daemon args on the commandline
! 245: # Newer SMF routeadm model uses properties for each argument
! 246: # so we must handle that.
! 247: if [ smf_present -a -f "$ROUTEADMINCLUDE" ]; then
! 248: handle_routeadm_upgrade $DAEMON;
! 249: DAEMON_ARGS=`routeadm_daemon_args`;
! 250: routeadm_zebra_enable $DAEMON;
! 251: else
! 252: if [ $# -gt 0 ] ; then
! 253: shift
! 254: DAEMON_ARGS="$@"
! 255: fi
! 256: fi
! 257:
! 258: upgrade_config "$DAEMON"
! 259:
! 260: if [ ! -f "@sysconfdir@/${DAEMON}.conf" ] ; then
! 261: echo "Could not find config file, @sysconfdir@/${DAEMON}.conf"
! 262: exit $SMF_EXIT_ERR_CONFIG
! 263: fi
! 264:
! 265: # we need @quagga_statedir@ to exist, it probably is on tmpfs.
! 266: if [ ! -d @quagga_statedir@ ] ; then
! 267: mkdir -p @quagga_statedir@
! 268: chown @enable_user@:@enable_group@ @quagga_statedir@
! 269: chmod 751 @quagga_statedir@
! 270: fi
! 271:
! 272: PIDFILE="@quagga_statedir@/${DAEMON}.pid"
! 273:
! 274: start () {
! 275: if [ ! -x "$DAEMON_PATH/$DAEMON" ] ; then
! 276: echo "Error, could not find daemon, $DAEMON_PATH/$DAEMON"
! 277: exit $SMF_EXIT_ERR_FATAL
! 278: fi
! 279: eval exec $DAEMON_PATH/$DAEMON $DAEMON_ARGS --pid_file ${PIDFILE} &
! 280: }
! 281:
! 282: stop_by_pidfile () {
! 283: if [ -f "${PIDFILE}" ]; then
! 284: /usr/bin/kill -TERM `/usr/bin/cat "${PIDFILE}"`
! 285: fi
! 286: }
! 287:
! 288: case "$QUAGGA_METHOD" in
! 289: 'start')
! 290: start
! 291: ;;
! 292: 'stop')
! 293: stop_by_pidfile
! 294: ;;
! 295:
! 296: *)
! 297: usage
! 298: exit $SMF_EXIT_ERR_FATAL
! 299: ;;
! 300: esac
! 301:
! 302: exit $SMF_EXIT_OK;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>