#!/bin/sh
#
# Copyright 2008 Meru Networks
# All rights reserved.
#
PROC=/opt/meru/bin/discovery

START_DELAY=.2

MNAME=`basename $PROC`
PIDFILE=/opt/wlan/var/run/${MNAME}.pid
LOG=/opt/wlan/var/log/${MNAME}.log

STATE_FILE=/opt/meru/var/run/discovery.state

if [ -f /etc/init.d/meru-functions ]; then
        . /etc/init.d/meru-functions
else
        echo "/etc/init.d/meru-functions must exist to use $0"; exit 1
fi

set_params

set_myparams()
{
    # Now create the ap-limit file using platform defaults.
    [ -f /opt/meru/etc/ap-limit ] || echo $AP_LIMIT > /opt/meru/etc/ap-limit
	
	# To use this define a variable called ATS_ALLOW_LIST with space separated mac addresses
	ATS_ALLOW_LIST_DISC=
	for ats_mac in $ATS_ALLOW_LIST
	    do
	    ATS_ALLOW_LIST_DISC="$ATS_ALLOW_LIST_DISC --ats=$ats_mac"
	done
	

	[ "$UDP_IF" ] || fail "Cannot determine interface." 
	if [ "$NODE_TYPE" = "wnc" ]; then
		[ "$WIRELESS_SUBNET_ADDR" ] || 	fail "Cannot determine subnet"
		[ "$WIRELESS_SUBNET_MASK" ] || 	fail "Cannot determine subnet mask"
		[ "$MERU_MAC" ]             || 	fail "Cannot determine Meru mac"
		[ "$WIRELESS_SUBNET_BCST" ] || 	fail "Cannot determine subnet broadcast"
		[ "$ASC_ATS_IF" ]           || 	fail "Cannot determine asc ats IF"

		USER_SPACE_DISCOVERY_MODE="--wnc-server --asc-script=/opt/meru/bin/meru-wnc-asc --meru-essid=essid-none --meru-ip=$WIRELESS_SUBNET_ADDR --meru-broadcast=$WIRELESS_SUBNET_BCST --meru-mac=$MERU_MAC --eth-interface=$UDP_IF --wnc-ip=$WNC_IP --state-file=$STATE_FILE $ATS_ALLOW_LIST_DISC --keepalive-interval=1000 --keepalive-limit=20 --ap-limit=$AP_LIMIT" 
	else
		[ "$WNC_IP" ]               || 	fail "Cannot determine wnc ip"
		[ "$ASC_ATS_IF" ]           || 	fail "Cannot determine asc ats IF"
		[ "$UDP_IF" ]               || 	fail "Cannot determine asc ats IF"

		USER_SPACE_DISCOVERY_MODE="--asc-relay --asc-script=/etc/init.d/meru-asc-post-disc --wnc-ip=$WNC_IP --eth-interface=$ASC_ATS_IF --state-file=$STATE_FILE $ATS_ALLOW_LIST_DISC --keepalive-interval=1000 --keepalive-limit=20"

	fi
}

start() {

    vrfy_combo `cat $PIDFILE 2>/dev/null` && {
        return
    }

    echo "============ $0 start =================" >> $LOG
    cd /opt/wlan/etc

    $PROC $USER_SPACE_DISCOVERY_MODE --udp-interface="$UDP_IF" >> $LOG 2>&1 &

    sleep $START_DELAY
    check_pid
    vrfy `cat $PIDFILE 2>/dev/null` || warning "$PROC did not start. Will try again."

}

stop() {
	echo "============ $0 stop =================" >> $LOG
	die "$PROC --wnc"
	die `cat $PIDFILE 2>/dev/null` 20

	rm -f $PIDFILE
	rm -f /opt/meru/etc/ap-limit
}

#
# main()
#

case "$1" in
	start)
		set_myparams
		if vrfy monit; then
			start_with_monit $MNAME
		else
			start
		fi
		;;
	stop)
		if vrfy monit; then
                        stop_with_monit $MNAME
		else
			stop
		fi
		;;
	restart)
		if vrfy monit; then
                        restart_with_monit $MNAME
		else
			stop
			start
		fi
		;;
	mstart)
		set_myparams
		start
		;;
	mstop)
		stop
		;;
	*)
		echo $"Usage: $prog {start|stop|restart}"
		exit 1
esac

exit 0
