Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 
0004 readonly SERVER_MAC="aa:00:00:00:00:02"
0005 readonly CLIENT_MAC="aa:00:00:00:00:01"
0006 readonly TESTS=("data" "ack" "flags" "tcp" "ip" "large")
0007 readonly PROTOS=("ipv4" "ipv6")
0008 dev=""
0009 test="all"
0010 proto="ipv4"
0011 
0012 run_test() {
0013   local server_pid=0
0014   local exit_code=0
0015   local protocol=$1
0016   local test=$2
0017   local ARGS=( "--${protocol}" "--dmac" "${SERVER_MAC}" \
0018   "--smac" "${CLIENT_MAC}" "--test" "${test}" "--verbose" )
0019 
0020   setup_ns
0021   # Each test is run 3 times to deflake, because given the receive timing,
0022   # not all packets that should coalesce will be considered in the same flow
0023   # on every try.
0024   for tries in {1..3}; do
0025     # Actual test starts here
0026     ip netns exec server_ns ./gro "${ARGS[@]}" "--rx" "--iface" "server" \
0027       1>>log.txt &
0028     server_pid=$!
0029     sleep 0.5  # to allow for socket init
0030     ip netns exec client_ns ./gro "${ARGS[@]}" "--iface" "client" \
0031       1>>log.txt
0032     wait "${server_pid}"
0033     exit_code=$?
0034     if [[ "${exit_code}" -eq 0 ]]; then
0035         break;
0036     fi
0037   done
0038   cleanup_ns
0039   echo ${exit_code}
0040 }
0041 
0042 run_all_tests() {
0043   local failed_tests=()
0044   for proto in "${PROTOS[@]}"; do
0045     for test in "${TESTS[@]}"; do
0046       echo "running test ${proto} ${test}" >&2
0047       exit_code=$(run_test $proto $test)
0048       if [[ "${exit_code}" -ne 0 ]]; then
0049         failed_tests+=("${proto}_${test}")
0050       fi;
0051     done;
0052   done
0053   if [[ ${#failed_tests[@]} -ne 0 ]]; then
0054     echo "failed tests: ${failed_tests[*]}. \
0055     Please see log.txt for more logs"
0056     exit 1
0057   else
0058     echo "All Tests Succeeded!"
0059   fi;
0060 }
0061 
0062 usage() {
0063   echo "Usage: $0 \
0064   [-i <DEV>] \
0065   [-t data|ack|flags|tcp|ip|large] \
0066   [-p <ipv4|ipv6>]" 1>&2;
0067   exit 1;
0068 }
0069 
0070 while getopts "i:t:p:" opt; do
0071   case "${opt}" in
0072     i)
0073       dev="${OPTARG}"
0074       ;;
0075     t)
0076       test="${OPTARG}"
0077       ;;
0078     p)
0079       proto="${OPTARG}"
0080       ;;
0081     *)
0082       usage
0083       ;;
0084   esac
0085 done
0086 
0087 if [ -n "$dev" ]; then
0088         source setup_loopback.sh
0089 else
0090         source setup_veth.sh
0091 fi
0092 
0093 setup
0094 trap cleanup EXIT
0095 if [[ "${test}" == "all" ]]; then
0096   run_all_tests
0097 else
0098   run_test "${proto}" "${test}"
0099 fi;