
IMPORTANT: this change has a docs/UPDATING entry! This rename is unfortunately necessary because NetBSD has decided to create its own service(8) utility, and we will want to import theirs as well. The two can obviously not coexist. Also move ours from /bin to /sbin, as it is a superuser-only utility. Change-Id: Ic6e46ffb3a84b4747d2fdcb0d74e62dbea065039
147 lines
2.5 KiB
Bash
Executable File
147 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
LABEL=dp8390
|
|
EXEDIR=/service/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.
|
|
minix-service down $LABEL
|
|
sleep 10 # Allow driver to die
|
|
minix-service up $EXE -script `pwd`/rs.restart_imm -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
|
|
minix-service refresh $LABEL
|