#!/bin/bash
# starts the UML instances in an xterm (requires X11R6)
#
# Copyright (C) 2004  Eric Marchionni, Patrik Rayo
# Zuercher Hochschule Winterthur
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#
# RCSID $Id: xstart-umls 3590 2008-03-13 14:20:20Z martin $

DIR=`dirname $0`

source $DIR/function.sh

[ -f $DIR/../testing.conf ] || die "Configuration file 'testing.conf' not found"

source $DIR/../testing.conf

if [ "$#" -eq 0 ]
then
    HOSTS=$STRONGSWANHOSTS
else
    HOSTS=$*
fi

BOOTING_HOSTS=""
count_max=12
count=0

#position of xterm window on the desktop
x0=8
y0=8
dx=12
dy=24

for host in $HOSTS
do
    up=0

    if [ -d ~/.uml/${host} ]
    then
	pid=`cat ~/.uml/${host}/pid`
	up=`ps up $pid | wc -l`
    fi
    
    if [ $up -eq 2 ]
    then
	cecho " * Great, ${host} is already running!"
    else
	rm -rf ~/.uml/${host}
	BOOTING_HOSTS="$BOOTING_HOSTS ${host}"
	let "count_max += 12"

	UMLHOSTFS=$BUILDDIR/root-fs/gentoo-fs-${host}
	[ -f  $UMLHOSTFS ] || die "!! uml root file system '$UMLHOSTFS' not found"

	cecho-n " * Starting ${host}.."
	eval xterm -title ${host} -geometry "+${x0}+${y0}" -rightbar -sb -sl 500 -e "$UMLKERNEL \
	    umid=${host} \
	    ubda=$UMLHOSTFS \
	    \$SWITCH_${host} \
	    mem=${MEM}M con=pty con0=fd:0,fd:1" &
        cgecho "done"
    fi
    let "x0+=dx"
    let "y0+=dy"
    sleep 15
done

if [ -z "$BOOTING_HOSTS" ]
then
    exit 0
fi

cecho " * Waiting for the uml instances to finish booting"

for host in $BOOTING_HOSTS
do
    cecho-n " * Checking on $host.."

    while [ $count -lt $count_max ] && [ ! -d ~/.uml/$host ]
    do
	cecho-n "."
	sleep 5
	let "count+=1"
    done

    if [ $count -ge $count_max ]
    then
	cecho "exit"
	exit 1
    fi

    up=`uml_mconsole $host proc net/route 2> /dev/null | grep eth0 | wc -l`

    while [ $count -lt $count_max ] && [ $up -eq 0 ]
    do
	cecho-n "."
	sleep 5
	up=`uml_mconsole $host proc net/route 2> /dev/null | grep eth0 | wc -l`
	let "count+=1"
    done

    if [ $count -ge $count_max ]
    then
	cecho "exit"
	exit 1
    else
	cgecho "up"
    fi

    if [ "$host" = "alice" ]
    then
	eval ipv4_${host}="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $1 }' | awk '{ print $1 }'`"
	ssh root@$ipv4_alice /etc/init.d/net.eth1 stop
    fi
done

cecho " * All uml instances are up now"
