Code Search for Developers
 
 
  

proof-of-concept-hacked.sh from EmStar at Krugle


Show proof-of-concept-hacked.sh syntax highlighted

#!/bin/bash


echo "Starting script. You may have to enter your ssh password twice for setup"

if [ -z $1 ]; then
    echo "Please specify interface for rbsh with first parameter"
    exit 1
fi

INTERFACE=$1

TOTALINSTANCES=30

WIREDPREFIX=131.179.145
WIFIPREFIX=192.168.12

CONTROLLERNODE=169
# THE SPACE AT THE END OF THE LIST IS IMPORTANT!!!!!!! DO NOT REMOVE IT!!!!
NODELIST="123 172 " 



IPERFSERVERPARAMS="-s -f K -i 5"
IPERFCLIENTPARAMS="-f K -i 5 -n 4M"

TCPDUMPCMD="tcpdump -i wlan0:1 -n"

DATEPREFIX=`date +%G%m%d%H%M`
OUTDIR="/mnt/nfs/exp/poc-$DATEPREFIX"
PCOUTDIR="/exportedfs/exp/poc-$DATEPREFIX"
echo "Creating outputdir cockatoo:$PCOUTDIR ... you may have to input your ssh path"
ssh cockatoo "mkdir -p $PCOUTDIR; chmod 777 $PCOUTDIR"


RBSHCMD="rbsh -b $INTERFACE --timeout 5000"
SSHCMD="ssh -i $HOME/.ssh-ceiling/id_rsa"



if [ ! -d $HOME/.ssh-ceiling ]; then
    echo "Please run 'cd; tar zxvf ~mlukac/util/ceiling-keys.tar.gz'"
    exit 1
fi


which rbsh &> /dev/null
if [ $? -eq 1 ]; then
    echo "Please make sure rbsh is in your path"
    exit 1
fi


ifconfig $INTERFACE | grep -q 131.179.145
if [ $? -eq 1 ]; then
    echo "$INTERFACE is not on 131.179.145.* network"
    echo "Please setup an interface on the 131.179.145.*"
    exit 1
fi



DONE=0
SAVEDINSTANCE=1

function sleepdot {
    GOTO=$1
    COUNTER=0
    while [ $COUNTER -lt $GOTO ]; do
	sleep 10
	echo -n .
	COUNTER=$((COUNTER + 1))
    done
    echo '.'
}  




function innerreset {

    echo "Hitting reset"
    $SSHCMD root@$WIREDPREFIX.$NODE "echo 'reset' > /dev/herd/wakestat"

    #
    # nodes take 2 min nap
    #
    echo "Everyone back to sleep for 2 mins"
    $RBSHCMD "echo 'sleep' > /dev/dsr/command"

    sleep 5
    echo "Telling root to flush!"
    $SSHCMD root@$WIREDPREFIX.$CONTROLLERNODE "echo flush > /dev/dsr/command"

    sleepdot 3

    #
    # wakeup all the nodes and resue dynamic routing
    #
    echo "Waking up all nodes and turning on dynamic routing"
    $RBSHCMD "echo 'wakeup' > /dev/dsr/command"
    $RBSHCMD "echo off > /dev/dsr/linuxroute"
    
}

function fullreset {


    $RBSHCMD "echo halt > /dev/emrun/command"
    $RBSHCMD "killall tcpdump"
    $RBSHCMD "killall iperf; killall iperf; killall -9 iperf"
    $RBSHCMD "killall echocat"
    
    #
    # Start up code on stargates
    #
    echo "Starting stargate code on all stargate. (please wait 10 seconds)"
    $RBSHCMD "cd /mnt/nfs/thanos/emstar/obj.stargate; ./dsr-cr-start.sh $CONTROLLERNODE" 

    #
    # Start echocat on controller
    #
    echo "Starting echocat of controler on $WIREDPREFIX.$CONTROLLERNODE: See $PCOUTDIR/controler-log"
    $SSHCMD root@$WIREDPREFIX.$CONTROLLERNODE "echocat --daemon --outfile $OUTDIR/controller-log --append -w /dev/emlog/controller/all"


    #
    # Wait 10 minutes
    # 
    echo "Now waiting 7 mins for centroute paths to stabalize (will '.' every 10 seconds)"
    sleepdot 90

}


function mainloop {

#
# Main node selection loop
#

while [[ "$NODELIST" != "" ]]; do
#while [[ ! -z $NODELIST ]]; do

    NODE=`echo $NODELIST | cut -d ' ' -f 1`


    #
    # instance loop
    #
    for ((INSTANCE=$SAVEDINSTANCE;INSTANCE<=$TOTALINSTANCES;INSTANCE++)); do

	echo "-------- Running instance $INSTANCE for node $NODE ---------"

	SAVEDINSTANCE=$((INSTANCE + 1))
    #
    # killall dsrping
    #

    echo "Killing all dsrpings. (please wait 10 seconds)"
    $RBSHCMD "killall dsrping; killall dsrping"

    #
    # start dsr ping
    #
    echo "Starting dsrping on $NODE"
    $SSHCMD -f root@$WIREDPREFIX.$NODE "cd /mnt/nfs/thanos/emstar/obj.stargate/link/examples; ./dsrping --uses dsr0 --interval 10000 -d $CONTROLLERNODE &> $OUTDIR/$NODE.dsr-ping"


	#
	# take 5
	#
	echo "Sleeping 5 minutes while ping works (will '.' every 10 seconds)"
	sleepdot 30

	#
	# Check valid path exists!
	#
	VALIDPATH=`$SSHCMD root@$WIREDPREFIX.$NODE 'cat /dev/dsr/cache | grep -q ".*A.*$NODE.*$CONTROLLERNODE"; echo $?'`
	if [ $VALIDPATH -eq 1 ]; then
	    echo "NO VALID PATH - Need to restart the experiment"
	    echo "Reporting failier:"
	    echo '$NODE $INSTANCE FAILED: NO VALID PATH AFTER PING!!!'
	    ssh cockatoo "echo '\# $NODE $INSTANCE FAILED: NO VALID PATH AFTER PING' >> $PCOUTDIR/$NODE.results"
	    SAVEDINSTANCE=$INSTANCE
	    return
	fi


	#
	# Put all stargates to sleep!
	#
	echo "Putting all nodes to sleep. (please wait 10 seconds)"
	$RBSHCMD "echo 'sleep' > /dev/dsr/command"

	#
	# Take 2
	#
	echo "Taking 2 minute nap (will '.' every 10 seconds)"
	sleepdot 12

	# 
	# Wakeup
	#
	echo "Waking up node $WIREDPREFIX.$NODE"
	$SSHCMD root@$WIREDPREFIX.$NODE "echo 'wakeup' > /dev/dsr/pingstatus"
	WAKEUPTIME=`date +%s`
	echo "Woken up at $WAKEUPTIME"

	#
	# wait for 3 mins max for path established
	#
	echo "Waiting up to 3 mins for path to establish"
	PATHSET=0
	WAITCOUNT=0
	while [ $WAITCOUNT -lt 180 ]; do
	    $SSHCMD root@$WIREDPREFIX.$NODE "cat /dev/dsr/pingstatus" | grep "Reply rcvd = 1"
	    if [ $? -eq 0 ]; then
		PATHSET=1
		break
	    fi
	    sleep 2
	    WAITCOUNT=$((WAITCOUNT + 2))
	done

	GOTPATHTIME=`date +%s`

	if [ $PATHSET -eq 0 ]; then
	    echo "NO VALID PATH - Need to move to the next instance"
	    echo "Reporting failier:"
	    echo '$NODE $INSTANCE $WAKEUPTIME $GOTPATHTIME FAILED: NO VALID PATH AFTER wakeup!!!'
	    ssh cockatoo "echo '\# $NODE $INSTANCE $WAKEUPTIME $GOTPATHTIME FAILED: NO VALID PATH AFTER wakeup' >> $PCOUTDIR/$NODE.results"
	    innerreset
	    continue
	fi

	PINGSTATUSSTART=`$SSHCMD root@$WIREDPREFIX.$NODE "cat /dev/dsr/pingstatus" | grep "Start time" | cut -d ' ' -f 4` 
	PINGSTATUSEND=`$SSHCMD root@$WIREDPREFIX.$NODE "cat /dev/dsr/pingstatus" | grep "End time" | cut -d ' ' -f 4` 


	#
	# Stop linuxroute from doing its thing
	#
	echo "Stopping linux route from receiving updates. (please wait 10 seconds)"
	$RBSHCMD "echo on > /dev/dsr/linuxroute"

	#
	# Read /dev/dsr/cache to determine the path length!
	#
	echo "Determining the path length"
	VALIDPATH=`$SSHCMD root@$WIREDPREFIX.$NODE "cat /dev/dsr/cache | grep '.*A.*$NODE.*$CONTROLLERNODE'"`
	PATHLEN=`echo $VALIDPATH | python -c "import sys; res = sys.stdin.readline(); print str(len(res.split('->'))-1),;"`
	echo "Path length is $PATHLEN"

	echo "Couting nodes woken up!"
	WOKENNODE=`$SSHCMD root@$WIREDPREFIX.$CONTROLLERNODE 'cat /dev/ctrl/wake_status' | ./proof-of-concept-helper.py`
	echo "$WOKENNODE nodes woken up"


	#
	# Start tcpdump
	#
	echo "Running tcpdump... outputing raw to $PCOUTDIR/$NODE-tcpdump-raw.$INSTANCE"
	$SSHCMD -f root@$WIREDPREFIX.$NODE "$TCPDUMPCMD -w $OUTDIR/$NODE-tcpdump-raw.$INSTANCE &> $OUTDIR/$NODE-tcpdump-output.$INSTANCE"


	#
	# Starting iperf on controller
	# 
	echo "Starting iperf server on controller: See $PCOUTDIR/iperf-server.$NODE.$INSTANCE"
	$SSHCMD root@$WIREDPREFIX.$CONTROLLERNODE "killall iperf; killall iperf; killall -9 iperf"
	$SSHCMD -f root@$WIREDPREFIX.$CONTROLLERNODE "iperf $IPERFSERVERPARAMS -B $WIFIPREFIX.$CONTROLLERNODE &> $OUTDIR/iperf-server.$NODE.$INSTANCE"

	#
	# Do iperf client side
	#
	echo "Running iperf on $NODE... outputting to $PCOUTDIR/$NODE-iperf-tcp.c.$INSTANCE"
	$SSHCMD root@$WIREDPREFIX.$NODE "iperf -c $WIFIPREFIX.$CONTROLLERNODE $IPERFCLIENTPARAMS >> $OUTDIR/$NODE-iperf-tcp.c.$INSTANCE"


	IPERFDONETIME=`date +%s`

	#
	# Report
	# 
	echo "Reporting:"
	echo '$NODE $INSTANCE $WAKEUPTIME $GOTPATHTIME $IPERFDONETIME $PATHLEN $WOKENNODE'
	ssh cockatoo "echo '$NODE $INSTANCE $WAKEUPTIME $GOTPATHTIME $IPERFDONETIME $PINGSTATUSSTART $PINGSTATUSEND $PATHLEN $WOKENNODE' >> $PCOUTDIR/$NODE.results"

	#
	# Stop tcpdump
	#
	echo "Stopping tcpdump. (please wait 10 seconds)"
	$RBSHCMD "killall tcpdump"

	# Stop iperf
	echo "Stopping iperf on $CONTROLLERNODE"
	$SSHCMD root@$WIREDPREFIX.$CONTROLLERNODE "killall iperf; sleep 1; killall iperf; sleep 1; killall -9 iperf"

	innerreset
	fullreset	
    
    
    done 
    # instance loop


    NODELIST2=`echo $NODELIST | cut -d ' ' -f 2-`
    NODELIST=$NODELIST2
    SAVEDINSTANCE=1

done
# node loop
DONE=1

}



#
#
#
# MAIN
#
#
#



#
# Start up mote code on gamayun
#
echo "Starting mote code on gamayun... you may have to input your ssh pass"
ssh gamayun "cd /home/thanos/cvs/emstar/obj.i686-linux; SIM_GROUP=1 emrun/emsim --daemon --ceiling ../devel/herd/testtabs/dsr_moteceil.sim"



while [[ $DONE -ne 1 ]]; do

    fullreset
    mainloop

done









See more files for this project here

EmStar

EmStar is a software system for developing and deploying wireless sensor networks involving Linux-based platforms. As the wireless sensor network community has attempted to deploy more complex designs---large-scale, long-lived systems that need self-organization and adaptivity---a number of difficult software design issues have arisen. Advances in software design have not kept pace with the capabilities of hardware. This is because designing for an adaptive, efficient, and useful sensor network has turned out to be surprisingly complex and difficult. EmStar is a Linux-based software framework, whose goal is to dramatically reduce this complexity, enabling work to be shared and reused, and simplifying and speeding the design of new sensor network applications.

Project homepage: http://cvs.cens.ucla.edu/emstar/
Programming language(s): C,Shell Script
License: other

  BUILD
  ceiling_static_route_part
  ceiling_static_route_whole
  e2e.sh
  gen_static_routes.py
  m2m.sh
  process-e2e-tcp.sh
  process-e2e-udp-assist.py
  process-e2e-udp.sh
  process-m2m-tcp.sh
  process-poc-allon.sh
  process-poc-reliability.sh
  process-poc-tcpdump.sh
  proof-of-concept-allon.sh
  proof-of-concept-hacked.sh
  proof-of-concept-helper.py
  proof-of-concept-pingtime.sh
  proof-of-concept-reliability-real.sh
  proof-of-concept-reliability.sh
  proof-of-concept.sh
  resdisc_client.c
  testfile