minix/commands/swifi/run_t2
2008-10-02 13:45:46 +00:00

146 lines
2.5 KiB
Bash
Executable file

#!/bin/sh
LABEL=dp8390
EXEDIR=/usr/build/drivers/dp8390
EXE=$EXEDIR/$LABEL
DAYTIME_HOST=jetsam.cs.vu.nl
FAULTS_PER_BLOCK=1
:>log
fault_blocks=0
connect_blocks=0
dont_connect=0
do_one()
{
# $1 = test-nr, $2 = count, $3 = seed
pid=''
while [ X"$pid" = X ]
do
pid=`ps ax | grep $LABEL | grep -v grep |
sed 's,^[ ]*,,;s,[ ].*,,`
if [ X"$pid" != X ]
then
break
fi
sleep 10
done
echo pid = $pid
./swifi -f $EXE $pid $1 $2 $3 >/tmp/out
sleep 1
fault_blocks=`expr $fault_blocks + 1`
if kill -0 $pid
then
if [ $dont_connect -eq 0 ]
then
if ./socket -t 10 $DAYTIME_HOST daytime < /dev/null
then
connect_blocks=`expr $connect_blocks + 1`
else
dont_connect=1
fi
fi
echo "driver failed to die, params: test $1, count $2, seed $3"
else
connect_blocks=`expr $connect_blocks + 1`
echo "driver crashed after $fault_blocks blocks"
echo "driver failed to connect after $connect_blocks blocks"
fault_blocks=0
connect_blocks=0
dont_connect=0
fi
}
one_round()
{
# $1 = count, $2 = seed
count=$1
seed=$2
echo "Seed: $seed" >> log
sync
do_one 6 $count $seed # Source fault
do_one 5 $count $seed # Destination fault
do_one 8 $count $seed # Pointer fault
do_one 14 $count $seed # Interface fault
do_one 12 $count $seed # Loop fault
do_one 0 $count $seed # Text fault
do_one 4 $count $seed # Nop fault
}
usage()
{
echo "Usage: run_t2 <count> <type> <seed>" >&2
echo \
"Valid types are: source destination pointer interface loop text nop random" >&2
exit 1
}
select_from()
{
# $1 = index, $2... = choices
index="$1"
index=`expr "$index" + 1`
shift
v=`eval echo '$'$index`
echo "$v"
}
random_type()
{
# $1 = seed
seed="$1"
r=`./rnd -m 7 -s "$seed"`
select_from "$r" 6 5 8 14 12 0 4
}
if [ $# -ne 3 ]; then usage; fi
count="$1"
type="$2"
seed="$3"
case "$type" in
source) type_arg=6
;;
destination) type_arg=5
;;
pointer) type_arg=8
;;
interface) type_arg=14
;;
loop) type_arg=12
;;
text) type_arg=0
;;
nop) type_arg=4
;;
random)
;;
*)
usage
esac
# Start our own driver.
service down $LABEL
sleep 10 # Allow driver to die
service up $EXE -script `pwd`/rs.restart_imm -config /etc/drivers.conf -period 3HZ
i=0
while [ $i -lt "$count" ]
do
echo "Seed: $seed"
if [ "$type" = "random" ]
then
type_arg=`random_type $seed`
fi
do_one "$type_arg" $FAULTS_PER_BLOCK $seed
i=`expr $i + 1`
seed=`expr $seed + 1`
done
connect_blocks=`expr $connect_blocks + 1`
echo "driver crashed after $fault_blocks blocks"
echo "driver failed to connect after $connect_blocks blocks"
# Restart the driver
service refresh $LABEL