1#!/bin/sh 2 3LABEL=dp8390 4EXEDIR=/service/dp8390 5EXE=$EXEDIR/$LABEL 6DAYTIME_HOST=jetsam.cs.vu.nl 7FAULTS_PER_BLOCK=1 8 9:>log 10 11fault_blocks=0 12connect_blocks=0 13dont_connect=0 14 15do_one() 16{ 17 # $1 = test-nr, $2 = count, $3 = seed 18 pid='' 19 while [ X"$pid" = X ] 20 do 21 pid=`ps ax | grep $LABEL | grep -v grep | 22 sed 's,^[ ]*,,;s,[ ].*,,'` 23 if [ X"$pid" != X ] 24 then 25 break 26 fi 27 sleep 10 28 done 29 echo pid = $pid 30 swifi -f $EXE $pid $1 $2 $3 >/tmp/out 31 sleep 1 32 fault_blocks=`expr $fault_blocks + 1` 33 if kill -0 $pid 34 then 35 if [ $dont_connect -eq 0 ] 36 then 37 if ./socket -t 10 $DAYTIME_HOST daytime < /dev/null 38 then 39 connect_blocks=`expr $connect_blocks + 1` 40 else 41 dont_connect=1 42 fi 43 fi 44 echo "driver failed to die, params: test $1, count $2, seed $3" 45 else 46 connect_blocks=`expr $connect_blocks + 1` 47 echo "driver crashed after $fault_blocks blocks" 48 echo "driver failed to connect after $connect_blocks blocks" 49 fault_blocks=0 50 connect_blocks=0 51 dont_connect=0 52 fi 53} 54 55one_round() 56{ 57 # $1 = count, $2 = seed 58 count=$1 59 seed=$2 60 echo "Seed: $seed" >> log 61 sync 62 do_one 6 $count $seed # Source fault 63 do_one 5 $count $seed # Destination fault 64 do_one 8 $count $seed # Pointer fault 65 do_one 14 $count $seed # Interface fault 66 do_one 12 $count $seed # Loop fault 67 do_one 0 $count $seed # Text fault 68 do_one 4 $count $seed # Nop fault 69} 70 71usage() 72{ 73 echo "Usage: run_t2 <count> <type> <seed>" >&2 74 echo \ 75"Valid types are: source destination pointer interface loop text nop random" >&2 76 exit 1 77} 78 79select_from() 80{ 81 # $1 = index, $2... = choices 82 index="$1" 83 index=`expr "$index" + 1` 84 shift 85 v=`eval echo '$'$index` 86 echo "$v" 87} 88 89random_type() 90{ 91 # $1 = seed 92 seed="$1" 93 r=`./rnd -m 7 -s "$seed"` 94 select_from "$r" 6 5 8 14 12 0 4 95} 96 97if [ $# -ne 3 ]; then usage; fi 98count="$1" 99type="$2" 100seed="$3" 101 102case "$type" in 103source) type_arg=6 104;; 105destination) type_arg=5 106;; 107pointer) type_arg=8 108;; 109interface) type_arg=14 110;; 111loop) type_arg=12 112;; 113text) type_arg=0 114;; 115nop) type_arg=4 116;; 117random) 118;; 119*) 120 usage 121esac 122 123# Start our own driver. 124minix-service down $LABEL 125sleep 10 # Allow driver to die 126minix-service up $EXE -script `pwd`/rs.restart_imm -period 3HZ 127 128i=0 129while [ $i -lt "$count" ] 130do 131 echo "Seed: $seed" 132 if [ "$type" = "random" ] 133 then 134 type_arg=`random_type $seed` 135 fi 136 do_one "$type_arg" $FAULTS_PER_BLOCK $seed 137 i=`expr $i + 1` 138 seed=`expr $seed + 1` 139done 140 141connect_blocks=`expr $connect_blocks + 1` 142echo "driver crashed after $fault_blocks blocks" 143echo "driver failed to connect after $connect_blocks blocks" 144 145# Restart the driver 146minix-service refresh $LABEL 147