#!/bin/sh # $Header: /root/magellan-cvs/src/openslp/slpd.rc,v 1.1 2009-06-11 13:22:04 niro Exp $ #%rlevels: 3:s 4:s 5:s 0:k 1:k 2:k 6:k #%start: 30 #%stop: 30 #deps #%needs: #%before: #%after: source /etc/conf.d/rc source $rc_functions # # Does nothing if a route exists that supports multicast traffic. # If no routes supporting multicast traffic exists, the function # tries to add one. A 0 is returned on success and a 1 on failure. # One parameter must be passed in. This variable determins verbosity. # If parameter is non-zero debugging will appear. # multicast_route_set() { PING_OPTIONS_1='-c1 -w1' PING_OPTIONS_2='-c1 -i1' MULTICAST_ADDRESS='239.255.255.253' TMP_FILE=/tmp/route.check PING_ERROR_NO_ROUTE='unreachable' MSG_FAILED_TO_FIND='Failed to Detect Multicast Route' MSG_SUCCESS_ON_FIND='Multicast Route Enabled' MSG_ADDING_ROUTE='Attempting to Add Multicast Route ...' MSG_FAILED_TO_ADD=' FAILED - Route NOT Added.' MSG_SUCCES_ON_ADD=' SUCCESS - Route Added.' CMD_GET_INTERFACE="netstat -i | awk 'BEGIN{}(NR>2)&&(!/^lo*/){print \$1}'" CMD_ADD_ROUTE="route add -net 224.0.0.0 netmask 240.0.0.0" ping $PING_OPTIONS_1 $MULTICAST_ADDRESS 2> $TMP_FILE 1> /dev/null if [ $? = 2 ]; then ping $PING_OPTIONS_2 $MULTICAST_ADDRESS 2> $TMP_FILE 1> /dev/null fi grep $PING_ERROR_NO_ROUTE $TMP_FILE > /dev/null 2>&1 err_unreachable_found=$? #If errors, add route. Otherwise, do nothing if [ -s $TMP_FILE ] && [ $err_unreachable_found = 0 ]; then if [ $1 != 0 ]; then rc_echo $MSG_FAILED_TO_FIND rc_echo $MSG_ADDING_ROUTE fi $CMD_ADD_ROUTE `eval $CMD_GET_INTERFACE` > /dev/null 2>&1 retval=$? if [ $1 != 0 ]; then if [ $retval = 0 ]; then rc_echo $MSG_SUCCES_ON_ADD else rc_echo $MSG_FAILED_TO_ADD fi fi else if [ $1 != 0 ]; then rc_echo -n $MSG_SUCCESS_ON_FIND fi retval=0 fi rm -f $TMP_FILE # Clean up return $retval } checkconfig() { multicast_route_set 0 if [ $? -ne 0 ] then rc_echo "No route available for multicast traffic!" exit 1 fi } case "$1" in start) checkconfig rc_print "Starting slpd ..." start-stop-daemon --start --quiet --exec /usr/sbin/slpd --pidfile /var/run/slpd.pid evaluate_retval update_svcstatus $1 splash svc_started "$(basename $0)" 0 ;; stop) rc_print "Stopping slpd ..." start-stop-daemon --stop --quiet --pidfile /var/run/slpd.pid evaluate_retval update_svcstatus $1 splash svc_stopped "$(basename $0)" 0 ;; restart) $0 stop sleep 1 $0 start ;; *) rc_echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac