/etc CHANGES: - /etc/drivers.conf has been renamed to /etc/system.conf. Every entry in the file is now marked as "service" rather than driver. - user "service" has been added to password file /etc/passwd. - docs/UPDATING updated accordingly, as well as every other mention to the old drivers.conf in the system. RS CHANGES: - No more distinction between servers and drivers. - RS_START has been renamed to RS_UP and the old legacy RS_UP and RS_UP_COPY dropped. - RS asks PCI to set / remove ACL entries only for services whose ACL properties have been set. This change eliminates unnecessary warnings. - Temporarily minimize the risk of potential races at boot time or when starting a new service. Upcoming changes will eliminate races completely. - General cleanup.
		
			
				
	
	
		
			147 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			147 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/system.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
 |