blob: 0af386007fadbf0dceb37dda0e494ec76aaadefb [file] [log] [blame]
#!/bin/bash
# -----------------------------------------------------------------------------
# Starts or interacts with mininet in a remote screen session.
# -----------------------------------------------------------------------------
[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults
export MAX_WAIT=${ONOS_MN_TIMEOUT:-90}
cmd="$1" && shift
log="screenlog.0"
remote="$ONOS_USER@$OCN"
screenversion=$(ssh $remote screen -v | sed -n -e 's/^Screen version \([0-9]*\.[0-9]*\).*$/\1/p')
# note: Screen version check for >4.04 may be inaccurate - The only sure thing is that v4.01
# requires logname to NOT be given while in v4.05 it is optional (as long as -L is the
# last parameter on the command line).
[[ $screenversion > "4.04" ]] && screenlog=$log
[[ $screenversion > "4.05" ]] && screenlog="-Logfile $log"
mininet="ssh -t -t $remote screen -L $screenlog -S mininet"
case $cmd in
send)
$mininet -X "stuff \"$@\\n\"" 2>/dev/null
;;
sendAndExpect)
cmd=""
for a in $*; do shift; if [ "$a" = "--expect" ]; then break; fi; cmd="$cmd $a"; done
$mininet -X "stuff \"$cmd\\n\"" 2>/dev/null
onos-mininet expect "$@"
;;
wait)
ssh $remote "
let count=0
sleep 1 && while test ! -f $log; do if test \$count -ge $MAX_WAIT; then exit 1; fi; sleep 1; let count=count+1; done
while ! (tail -n1 $log | egrep -q '^[ ]*[0]*mininet>'); do if [ \$count -ge $MAX_WAIT ]; then exit 1; fi; sleep 1; done
sleep ${1-:1}
"
;;
expect)
aux=/tmp/mininet.$$.log
ssh $remote "
sleep 1
if [ ! -f $log ]; then exit 1; fi;
let count=0
while ! (tail -n1 $log | egrep -q '^[ ]*[0]*mininet>'); do if test \$count -ge $MAX_WAIT; then exit 1; fi; sleep 1; let count=count+1; done
tac $log | awk '{ print \$0; } /^[ ]*[0]*mininet>/ { if (on) { exit 0; } on=1; }' | tac > $aux
cat $aux
set -x
egrep \"$@\" $aux
"
;;
attach)
$mininet -x
;;
start)
ssh $remote "rm -f $log; echo logfile flush 1 > ~/.screenrc"
(
$mininet "$@"
scp $remote:$log /tmp/mininet.log
ssh $remote rm -f $log
) &
;;
stop)
$mininet -X "stuff \"^C\\n\"" 2>/dev/null && \
$mininet -X "stuff \"^C\\n\"" 2>/dev/null && \
$mininet -X "stuff \"exit\\n\"" 2>/dev/null
ssh -t -t $remote sudo mn -c
;;
cleanup)
ssh -t -t $remote sudo mn -c
ssh -t -t $remote "screen -list | grep mininet | cut -d. -f1 | tr -d '\t' | xargs kill -9; screen -wipe; exit 0"
;;
esac