#!/bin/sh
#
# This is an example script for using netperf. Feel free to modify it 
# as necessary, but I would suggest that you copy this one first.
#
#
# uncomment the next line if you think the script is broken
#set -x


if [ $# -gt 2 ]; then
  echo "try again, correctly -> udp_rr_script hostname [CPU]"
  exit 1
fi

if [ $# -eq 0 ]; then
  echo "try again, correctly -> udp_rr_script hostname [CPU]"
  exit 1
fi

# where the programs are

#NETHOME=/usr/local/netperf
#NETHOME="/opt/netperf"
NETHOME="."

# at what port will netserver be waiting? If you decide to run
# netserver at a differnet port than the default of 12865, then set
# the value of PORT apropriately
#PORT="-p some_other_portnum"
PORT=""


# The test length in seconds

TEST_TIME=60

# How accurate we want the estimate of performance: 
#      maximum and minimum test iterations (-i)
#      confidence level (99 or 95) and interval (percent)

STATS_STUFF="-i 10,2 -I 99,10"

# The socket sizes that we will be testing - -1 means use default
# not much point in changing the socket buffer for a UDP request/
# response test - unless you want to have requests/responses which 
# are larger than the default

SOCKET_SIZES="-1"

# The send sizes that we will be using

RR_SIZES="1,1 64,64 100,200 1024,1024"

# if there are two parms, parm one it the hostname and parm two will
# be a CPU indicator. actually, anything as a second parm will cause
# the CPU to be measured, but we will "advertise" it should be "CPU"

if [ $# -eq 2 ]; then
  REM_HOST=$1
  LOC_CPU="-c"
  REM_CPU="-C"
fi

if [ $# -eq 1 ]; then
  LOC_CPU=""
  REM_CPU=""
  REM_HOST=$1
fi

# If we are measuring CPU utilization, then we can save beaucoup
# time by saving the results of the CPU calibration and passing
# them in during the real tests. So, we execute the new CPU "tests"
# of netperf and put the values into shell vars.
case $LOC_CPU in
\-c) LOC_RATE=`$NETHOME/netperf $PORT -t LOC_CPU`;;
*) LOC_RATE=""
esac

case $REM_CPU in
\-C) REM_RATE=`$NETHOME/netperf $PORT -t REM_CPU -H $REM_HOST`;;
*) REM_RATE=""
esac

# This turns-off the display headers
NO_HDR="-P 0"

for SOCKET_SIZE in $SOCKET_SIZES
do
  for RR_SIZE in $RR_SIZES
  do
  echo
  echo ------------------------------------------------------
  echo Testing with the following command line:
  echo $NETHOME/netperf $PORT -l $TEST_TIME -H $REM_HOST $STATS_STUFF \
                  $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE -t UDP_RR --\
                  -r $RR_SIZE -s $SOCKET_SIZE -S $SOCKET_SIZE
  $NETHOME/netperf $PORT -l $TEST_TIME -H $REM_HOST $STATS_STUFF \
    $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE -t UDP_RR $NO_HDR --\
                  -r $RR_SIZE -s $SOCKET_SIZE -S $SOCKET_SIZE
  done
done
echo
echo If you wish to submit these results to the netperf database at
echo http://www.cup.hp.com/netperf/NetperfPage.html, please submit each
echo datapoint individually. Individual datapoints are separated by
echo lines of dashes. 
