#!/bin/bash SRV=fedora9server privatemnts=0 serverdir="/home/tmp" runtests() { test=$1 server=$2 vers=$3 proto=$4 sec=$5 #echo "test=$test server=$server vers-$vers proto=$proto sec=$sec" #return if [ $vers = "4" ]; then if [ -n "$sec" ] ; then if [ $minver -gt 0 ]; then mntargs="-o proto=$proto,sec=$sec,v4.$minver" else mntargs="-o proto=$proto,sec=$sec,v4" fi else if [ $minver -gt 0 ]; then mntargs="-o proto=$proto,v4.$minver" else mntargs="-o proto=$proto,v4" fi fi if [ "$proto" = "rdma" ] ; then mntargs="$mntargs,port=20049" [ -n "$rdmaif" ] && server=$rdmaif fi elif [ $vers = "41" ]; then if [ -n "$sec" ] ; then mntargs="-o proto=$proto,sec=$sec,v4.1" else mntargs="-o proto=$proto,v4.1" fi if [ "$proto" = "rdma" ] ; then mntargs="$mntargs,port=20049" [ -n "$rdmaif" ] && server=$rdmaif fi elif [ $vers = "42" ]; then if [ -n "$sec" ] ; then mntargs="-o proto=$proto,sec=$sec,v4.2" else mntargs="-o proto=$proto,v4.2" fi if [ "$proto" = "rdma" ] ; then mntargs="$mntargs,port=20049" [ -n "$rdmaif" ] && server=$rdmaif fi else if [ -n "$sec" ] ; then mntargs="-o $proto,v$vers,sec=$sec" else mntargs="-o $proto,v$vers" fi if [ "$proto" = "rdma" ] ; then mntargs="$mntargs,port=20049" [ -n "$rdmaif" ] && server=$rdmaif fi fi if [ $privatemnts -eq 1 ]; then [ ! -d /mnt/$server ] && mkdir /mnt/$server mnt=/mnt/$server else mnt=/mnt fi [ "$fsc" -eq 1 ] && mntargs="$mntargs,fsc" [ -n "$port" ] && mntargs="$mntargs,port=$port" mkdir -p $mnt/nfsv$vers$proto || exit 1 mntpoint="-m $mnt/nfsv$vers$proto" exportdir="-p $serverdir/nfsv$vers$proto" echo "./server $test $mntargs $mntpoint $exportdir $server" (./server $test $mntargs $mntpoint $exportdir $server > /tmp/nfsv$vers$proto 2>&1 ; [ $? -ne 0 ] && { echo "" echo "The '$test' test using '$mntargs' args to $server: Failed!!" mv /tmp/nfsv$vers$proto /tmp/nfsv$vers$proto-`date +"%H:%M:%S"`.error } cnt=`grep -c $mnt/nfsv$vers$proto /proc/mounts` if [ $cnt -gt 0 ]; then sudo umount $mnt/nfsv$vers$proto fi ) & } umountall() { protos="udp tcp" grep -q rdma /proc/mounts | grep -q nfs if [ $? -eq 1 ] ; then protos="$protos rdma" fi if [ $privatemnts -eq 1 ]; then if [ "$SRV" = "" ] ; then echo "--server has to be set on private unmounts" exit 1 fi mnt=/mnt/$SRV else mnt=/mnt fi for proto in $protos do for vers in 2 3 4 41 42 do for mnts in `cat /proc/mounts | grep nfs | awk '{print $2}'` do [ "$mnt/nfsv$vers$proto" = "$mnts" ] && { echo "sudo umount $mnt/nfsv$vers$proto" sudo umount $mnt/nfsv$vers$proto } done done done if grep -q nfsv /proc/mounts ; then exit 1 fi exit 0 } mkdirs() { protos="udp tcp" [ "$rdma" -eq 1 ] && protos="$proto rdma" for proto in $protos do for vers in 2 3 4 41 42 do [ "$proto" == "udp" -a "$vers" == "4" ] && continue [ "$proto" == "udp" -a "$vers" == "41" ] && continue mkdir ./nfsv$vers$proto done done exit 0 } trap 'echo SIGINT; pkill runcthon; pkill server; exit 1 ' SIGINT trap 'echo; echo -n "Done:"; date; exit 2' SIGTERM Usage="$0 --mkdirs [dir] |--unmountall|--server|--serverdir|--noudp|--dokrb5|--onlykrb5|--nov4|--nov2|--onlyv3|--onlyv4|--nov41|--dov42|--minver |--fsc|--rdma|--rdmaif |--onlyrdma|--nolcks|--port " nolcks=0 noudp=1 dokrb5=0 onlykrb5=0 nov4=0 dov41=1 dov42=0 nov2=1 onlyv3=0 onlyv4=0 minver=0 fsc=0 # Note port="2050" for Panasas server port="" rdma=0 rdmaif=0 onlyrdma=0 while [ -n "$1" ] do case $1 in "--mkdirs" ) [ -n "$2" ] && serverdir="$2" [ ! -d $serverdir ] && mkdir -p $serverdir cd $serverdir && mkdirs exit 0 ;; "--unmountall" ) umountall ;; "--server" ) SRV="$2" shift ;; "-p" ) privatemnts=1 ;; "--serverdir" ) serverdir="$2" shift ;; "-h" ) echo $Usage exit 0 ;; "--noudp" ) noudp=1 ;; "--dokrb5" ) dokrb5=1 ;; "--onlykrb5" ) onlykrb5=1 ;; "--nov4" ) nov4=1 ;; "--nov2" ) nov2=1 ;; "--nolcks" ) nolcks=1 ;; "--onlyv3" ) onlyv3=1 ;; "--onlyv4" ) onlyv4=1 ;; "--fsc" ) fsc=1 ;; "--rdma" ) rdma=1 ;; "--onlyrdma" ) rdma=1 onlyrdma=1 ;; "--port" ) port=$2 shift ;; "--rdmaif" ) rdmaif=$2 shift ;; "--minver" ) minver=$2 shift ;; "--nov41" ) dov41=0 ;; "--dov42" ) dov42=1 ;; "--help" ) echo "$Usage" exit 1 ;; * ) echo "'$1' - invalid option" echo "$Usage" exit 1 esac shift done date seclist="krb5 krb5i krb5p" tests="b g s l" [ "$nolcks" -eq 1 ] && tests="b g s" for i in $tests do if [ "$onlykrb5" -eq 0 -a $dokrb5 -eq 1 ]; then if [ "$noudp" -ne 1 -a "$onlyrdma" -eq 0 ]; then if [ "$onlyv4" -eq 0 ]; then runtests -$i $SRV 3 udp "" if [ "$onlyv3" -eq 0 -a "$nov2" -eq 0 ]; then runtests -$i $SRV 2 udp "" fi fi fi if [ "$onlyv4" -eq 0 -a "$onlyrdma" -eq 0 ]; then runtests -$i $SRV 3 tcp "" if [ "$onlyv3" -eq 0 -a "$nov2" -eq 0 ]; then runtests -$i $SRV 2 tcp "" fi fi if [ "$onlyv3" -ne 1 -a "$onlyrdma" -eq 0 ]; then if [ "$nov4" -eq 0 ]; then runtests -$i $SRV 4 tcp "" if [ "$dov41" -eq 1 ]; then runtests -$i $SRV 41 tcp "" fi if [ "$dov42" -eq 1 ]; then runtests -$i $SRV 42 tcp "" fi fi fi if [ "$rdma" -eq 1 ]; then if [ "$onlyv4" -eq 0 ]; then runtests -$i $SRV 3 rdma "" if [ "$onlyv3" -eq 0 -a "$nov2" -eq 0 ]; then runtests -$i $SRV 2 rdma "" fi fi if [ "$onlyv3" -ne 1 ]; then if [ "$nov4" -eq 0 ]; then runtests -$i $SRV 4 rdma "" if [ "$dov41" -eq 1 ]; then runtests -$i $SRV 41 rdma "" fi if [ "$dov42" -eq 1 ]; then runtests -$i $SRV 42 rdma "" fi fi fi fi echo -n "Waiting for '$i' to finish..." wait echo -n " Done: " date +"%X" fi if [ "$onlykrb5" -eq 1 -o $dokrb5 -eq 1 ]; then for j in krb5 krb5i krb5p do if [ "$noudp" -ne 1 -a "$onlyrdma" -eq 0 ]; then if [ "$onlyv4" -eq 0 ]; then runtests -$i $SRV 3 udp $j if [ "$onlyv3" -eq 0 -a "$nov2" -eq 0 ]; then runtests -$i $SRV 2 udp $j fi fi fi if [ "$onlyv4" -eq 0 -a "$onlyrdma" -eq 0 ]; then runtests -$i $SRV 3 tcp $j if [ "$onlyv3" -eq 0 -a "$nov2" -eq 0 ]; then runtests -$i $SRV 2 tcp $j fi fi if [ "$onlyv3" -ne 1 -a "$onlyrdma" -eq 0 ]; then if [ "$nov4" -eq 0 ]; then runtests -$i $SRV 4 tcp $j if [ "$dov41" -eq 1 ]; then runtests -$i $SRV 41 tcp $j fi if [ "$dov42" -eq 1 ]; then runtests -$i $SRV 42 tcp $j fi fi fi if [ "$rdma" -eq 1 ]; then if [ "$onlyv4" -eq 0 ]; then runtests -$i $SRV 3 rdma $j if [ "$onlyv3" -eq 0 -a "$nov2" -eq 0 ]; then runtests -$i $SRV 2 rdma $j fi fi if [ "$onlyv3" -ne 1 ]; then if [ "$nov4" -eq 0 ]; then runtests -$i $SRV 4 rdma $j if [ "$dov41" -eq 1 ]; then runtests -$i $SRV 41 rdma $j fi if [ "$dov42" -eq 1 ]; then runtests -$i $SRV 42 rdma $j fi fi fi fi echo -n "Waiting for '$i' to finish..." wait echo -n " Done: " date +"%X" done fi done