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>