#!/bin/bash
# starts the UML instances with a hidden screen
#
# 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: start-umls,v 1.5 2005/08/30 22:13:12 as Exp $

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

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 screen -dmS ${host} "$UMLKERNEL \
	    umid=${host} \
	    ubda=$UMLHOSTFS \
	    \$SWITCH_${host} \
	    mem=${MEM}M con=pty con0=fd:0,fd:1"
        cecho "done"
    fi
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
	cecho "up"
    fi
done

cecho " * All uml instances are up now"
