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