David van Moolenbroek c58da9fbc3 Rename MINIX service(8) to minix-service(8)
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
2017-02-22 17:16:21 +00:00

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