1*053f45beSAndroid Build Coastguard Worker#!/bin/bash 2*053f45beSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0 3*053f45beSAndroid Build Coastguard Worker 4*053f45beSAndroid Build Coastguard Workerreadonly SERVER_MAC="aa:00:00:00:00:02" 5*053f45beSAndroid Build Coastguard Workerreadonly CLIENT_MAC="aa:00:00:00:00:01" 6*053f45beSAndroid Build Coastguard Workerreadonly TESTS=("data" "ack" "flags" "tcp" "ip" "large") 7*053f45beSAndroid Build Coastguard Workerreadonly PROTOS=("ipv4" "ipv6") 8*053f45beSAndroid Build Coastguard Workerdev="" 9*053f45beSAndroid Build Coastguard Workertest="all" 10*053f45beSAndroid Build Coastguard Workerproto="ipv4" 11*053f45beSAndroid Build Coastguard Worker 12*053f45beSAndroid Build Coastguard Workerrun_test() { 13*053f45beSAndroid Build Coastguard Worker local server_pid=0 14*053f45beSAndroid Build Coastguard Worker local exit_code=0 15*053f45beSAndroid Build Coastguard Worker local protocol=$1 16*053f45beSAndroid Build Coastguard Worker local test=$2 17*053f45beSAndroid Build Coastguard Worker local ARGS=( "--${protocol}" "--dmac" "${SERVER_MAC}" \ 18*053f45beSAndroid Build Coastguard Worker "--smac" "${CLIENT_MAC}" "--test" "${test}" "--verbose" ) 19*053f45beSAndroid Build Coastguard Worker 20*053f45beSAndroid Build Coastguard Worker setup_ns 21*053f45beSAndroid Build Coastguard Worker # Each test is run 3 times to deflake, because given the receive timing, 22*053f45beSAndroid Build Coastguard Worker # not all packets that should coalesce will be considered in the same flow 23*053f45beSAndroid Build Coastguard Worker # on every try. 24*053f45beSAndroid Build Coastguard Worker for tries in {1..3}; do 25*053f45beSAndroid Build Coastguard Worker # Actual test starts here 26*053f45beSAndroid Build Coastguard Worker ip netns exec server_ns ./gro "${ARGS[@]}" "--rx" "--iface" "server" \ 27*053f45beSAndroid Build Coastguard Worker 1>>log.txt & 28*053f45beSAndroid Build Coastguard Worker server_pid=$! 29*053f45beSAndroid Build Coastguard Worker sleep 0.5 # to allow for socket init 30*053f45beSAndroid Build Coastguard Worker ip netns exec client_ns ./gro "${ARGS[@]}" "--iface" "client" \ 31*053f45beSAndroid Build Coastguard Worker 1>>log.txt 32*053f45beSAndroid Build Coastguard Worker wait "${server_pid}" 33*053f45beSAndroid Build Coastguard Worker exit_code=$? 34*053f45beSAndroid Build Coastguard Worker if [[ "${exit_code}" -eq 0 ]]; then 35*053f45beSAndroid Build Coastguard Worker break; 36*053f45beSAndroid Build Coastguard Worker fi 37*053f45beSAndroid Build Coastguard Worker done 38*053f45beSAndroid Build Coastguard Worker cleanup_ns 39*053f45beSAndroid Build Coastguard Worker echo ${exit_code} 40*053f45beSAndroid Build Coastguard Worker} 41*053f45beSAndroid Build Coastguard Worker 42*053f45beSAndroid Build Coastguard Workerrun_all_tests() { 43*053f45beSAndroid Build Coastguard Worker local failed_tests=() 44*053f45beSAndroid Build Coastguard Worker for proto in "${PROTOS[@]}"; do 45*053f45beSAndroid Build Coastguard Worker for test in "${TESTS[@]}"; do 46*053f45beSAndroid Build Coastguard Worker echo "running test ${proto} ${test}" >&2 47*053f45beSAndroid Build Coastguard Worker exit_code=$(run_test $proto $test) 48*053f45beSAndroid Build Coastguard Worker if [[ "${exit_code}" -ne 0 ]]; then 49*053f45beSAndroid Build Coastguard Worker failed_tests+=("${proto}_${test}") 50*053f45beSAndroid Build Coastguard Worker fi; 51*053f45beSAndroid Build Coastguard Worker done; 52*053f45beSAndroid Build Coastguard Worker done 53*053f45beSAndroid Build Coastguard Worker if [[ ${#failed_tests[@]} -ne 0 ]]; then 54*053f45beSAndroid Build Coastguard Worker echo "failed tests: ${failed_tests[*]}. \ 55*053f45beSAndroid Build Coastguard Worker Please see log.txt for more logs" 56*053f45beSAndroid Build Coastguard Worker exit 1 57*053f45beSAndroid Build Coastguard Worker else 58*053f45beSAndroid Build Coastguard Worker echo "All Tests Succeeded!" 59*053f45beSAndroid Build Coastguard Worker fi; 60*053f45beSAndroid Build Coastguard Worker} 61*053f45beSAndroid Build Coastguard Worker 62*053f45beSAndroid Build Coastguard Workerusage() { 63*053f45beSAndroid Build Coastguard Worker echo "Usage: $0 \ 64*053f45beSAndroid Build Coastguard Worker [-i <DEV>] \ 65*053f45beSAndroid Build Coastguard Worker [-t data|ack|flags|tcp|ip|large] \ 66*053f45beSAndroid Build Coastguard Worker [-p <ipv4|ipv6>]" 1>&2; 67*053f45beSAndroid Build Coastguard Worker exit 1; 68*053f45beSAndroid Build Coastguard Worker} 69*053f45beSAndroid Build Coastguard Worker 70*053f45beSAndroid Build Coastguard Workerwhile getopts "i:t:p:" opt; do 71*053f45beSAndroid Build Coastguard Worker case "${opt}" in 72*053f45beSAndroid Build Coastguard Worker i) 73*053f45beSAndroid Build Coastguard Worker dev="${OPTARG}" 74*053f45beSAndroid Build Coastguard Worker ;; 75*053f45beSAndroid Build Coastguard Worker t) 76*053f45beSAndroid Build Coastguard Worker test="${OPTARG}" 77*053f45beSAndroid Build Coastguard Worker ;; 78*053f45beSAndroid Build Coastguard Worker p) 79*053f45beSAndroid Build Coastguard Worker proto="${OPTARG}" 80*053f45beSAndroid Build Coastguard Worker ;; 81*053f45beSAndroid Build Coastguard Worker *) 82*053f45beSAndroid Build Coastguard Worker usage 83*053f45beSAndroid Build Coastguard Worker ;; 84*053f45beSAndroid Build Coastguard Worker esac 85*053f45beSAndroid Build Coastguard Workerdone 86*053f45beSAndroid Build Coastguard Worker 87*053f45beSAndroid Build Coastguard Workerif [ -n "$dev" ]; then 88*053f45beSAndroid Build Coastguard Worker source setup_loopback.sh 89*053f45beSAndroid Build Coastguard Workerelse 90*053f45beSAndroid Build Coastguard Worker source setup_veth.sh 91*053f45beSAndroid Build Coastguard Workerfi 92*053f45beSAndroid Build Coastguard Worker 93*053f45beSAndroid Build Coastguard Workersetup 94*053f45beSAndroid Build Coastguard Workertrap cleanup EXIT 95*053f45beSAndroid Build Coastguard Workerif [[ "${test}" == "all" ]]; then 96*053f45beSAndroid Build Coastguard Worker run_all_tests 97*053f45beSAndroid Build Coastguard Workerelse 98*053f45beSAndroid Build Coastguard Worker run_test "${proto}" "${test}" 99*053f45beSAndroid Build Coastguard Workerfi; 100