Annotation of embedaddon/quagga/solaris/quagga.init.in, revision 1.1.1.2

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: # Include smf functions, if available. If not, define smf_present to indicate
                    150: # there is no SMF. Should allow this script to work pre-S10.
                    151: if [ -f "$SMFINCLUDE" ] ; then
                    152:        . "$SMFINCLUDE";
                    153:        
                    154:        # source the SMF-routeadm include if present..
                    155:        if [ -f "$ROUTEADMINCLUDE" ] ; then
                    156:                . "$ROUTEADMINCLUDE"
                    157:        fi
                    158: else
                    159:        # pre-SMF system, fake up any functions and exit codes
                    160:        # which SMFINCLUDE usually provides.
                    161:        smf_present () {
                    162:                return 1
                    163:        }
                    164:        SMF_EXIT_OK=0;
                    165:        SMF_EXIT_ERR_CONFIG=96;
                    166:        SMF_EXIT_ERR_FATAL=95;
                    167: fi
                    168:        
                    169: # if there's no SMF, set some default DAEMON_ARGS
                    170: smf_present || DAEMON_ARGS=""
                    171: 
                    172: usage () {
                    173:        if smf_present ; then
                    174:                echo "Usage: $0 <daemon>";
                    175:        else
                    176:                echo "Usage: $0 <stop|start> <daemon> <daemon arguments>";
                    177:        fi
                    178:        echo "The --pid_file argument is implied";
                    179:        echo "This help message: $0 <help|usage>";
                    180: }
                    181: 
                    182: # parse arguments, different according to SMF or not.
                    183: case $1 in
                    184:        'help' | 'usage')
                    185:                usage
                    186:                exit $SMF_EXIT_OK
                    187:                ;;
                    188: esac
                    189: 
                    190: if smf_present ; then
                    191:        QUAGGA_METHOD="start"
                    192: else
                    193:        QUAGGA_METHOD="$1"
                    194:        shift;
                    195: fi
                    196: 
                    197: DAEMON="$1"
                    198: 
                    199: # daemon path must be given
                    200: if [ -z "$DAEMON_PATH/$DAEMON" ]; then
                    201:        usage
                    202:        exit $SMF_EXIT_ERR_FATAL
                    203: fi
                    204: 
                    205: # only bgpd is suitable for running in a non-global zone, at this
                    206: # time.
                    207: case "${DAEMON}" in
                    208:        bgpd)
                    209:        ;;
                    210:        zebra | ospfd | ospf6d | ripd | ripngd )
                    211:                quagga_is_globalzone || exit $SMF_EXIT_OK
                    212:        ;;
                    213:        *)
                    214:                usage
                    215:                exit $SMF_EXIT_ERR_CONFIG;
                    216:        ;;
                    217: esac
                    218: 
                    219: # Older Quagga SMF packages pass daemon args on the commandline
                    220: # Newer SMF routeadm model uses properties for each argument
                    221: # so we must handle that.
                    222: if [ smf_present -a -f "$ROUTEADMINCLUDE" ]; then
                    223:        handle_routeadm_upgrade $DAEMON;
                    224:        DAEMON_ARGS=`routeadm_daemon_args`;
                    225: else
                    226:        if [ $# -gt 0 ] ; then
                    227:                shift
                    228:                DAEMON_ARGS="$@"
                    229:        fi
                    230: fi
                    231: 
                    232: upgrade_config "$DAEMON"
                    233: 
                    234: if [ ! -f "@sysconfdir@/${DAEMON}.conf" ] ; then
                    235:        echo "Could not find config file, @sysconfdir@/${DAEMON}.conf"
                    236:        exit $SMF_EXIT_ERR_CONFIG
                    237: fi
                    238: 
                    239: # we need @quagga_statedir@ to exist, it probably is on tmpfs.
                    240: if [ ! -d @quagga_statedir@ ] ; then
                    241:        mkdir -p @quagga_statedir@
                    242:        chown @enable_user@:@enable_group@ @quagga_statedir@
                    243:        chmod 751 @quagga_statedir@
                    244: fi
                    245: 
                    246: PIDFILE="@quagga_statedir@/${DAEMON}.pid"
                    247: 
                    248: start () {
                    249:        if [ ! -x "$DAEMON_PATH/$DAEMON" ] ; then
                    250:                echo "Error, could not find daemon, $DAEMON_PATH/$DAEMON"
                    251:                exit $SMF_EXIT_ERR_FATAL
                    252:        fi
                    253:        eval exec $DAEMON_PATH/$DAEMON $DAEMON_ARGS --pid_file ${PIDFILE} &
                    254: }
                    255: 
                    256: stop_by_pidfile () {
                    257:        if [ -f "${PIDFILE}" ]; then
                    258:                /usr/bin/kill -TERM `/usr/bin/cat "${PIDFILE}"`
                    259:        fi
                    260: }
                    261: 
                    262: case "$QUAGGA_METHOD" in
                    263: 'start')
                    264:        start
                    265:        ;;
                    266: 'stop')
                    267:        stop_by_pidfile
                    268:        ;;
                    269: 
                    270: *)
                    271:        usage
                    272:        exit $SMF_EXIT_ERR_FATAL
                    273:        ;;
                    274: esac   
                    275: 
                    276: exit $SMF_EXIT_OK;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>