1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4source "$(dirname $(realpath $0))/../../kselftest/ktap_helpers.sh" 5 6readonly ipv4_args=('--ip_version=ipv4 ' 7 '--local_ip=192.168.0.1 ' 8 '--gateway_ip=192.168.0.1 ' 9 '--netmask_ip=255.255.0.0 ' 10 '--remote_ip=192.0.2.1 ' 11 '-D CMSG_LEVEL_IP=SOL_IP ' 12 '-D CMSG_TYPE_RECVERR=IP_RECVERR ') 13 14readonly ipv6_args=('--ip_version=ipv6 ' 15 '--mtu=1520 ' 16 '--local_ip=fd3d:0a0b:17d6::1 ' 17 '--gateway_ip=fd3d:0a0b:17d6:8888::1 ' 18 '--remote_ip=fd3d:fa7b:d17d::1 ' 19 '-D CMSG_LEVEL_IP=SOL_IPV6 ' 20 '-D CMSG_TYPE_RECVERR=IPV6_RECVERR ') 21 22if [ $# -ne 1 ]; then 23 ktap_exit_fail_msg "usage: $0 <script>" 24 exit "$KSFT_FAIL" 25fi 26script="$(basename $1)" 27 28if [ -z "$(which packetdrill)" ]; then 29 ktap_skip_all "packetdrill not found in PATH" 30 exit "$KSFT_SKIP" 31fi 32 33declare -a optargs 34failfunc=ktap_test_fail 35 36if [[ -n "${KSFT_MACHINE_SLOW}" ]]; then 37 optargs+=('--tolerance_usecs=14000') 38 39 # xfail tests that are known flaky with dbg config, not fixable. 40 # still run them for coverage (and expect 100% pass without dbg). 41 declare -ar xfail_list=( 42 "tcp_eor_no-coalesce-retrans.pkt" 43 "tcp_fast_recovery_prr-ss.*.pkt" 44 "tcp_slow_start_slow-start-after-win-update.pkt" 45 "tcp_timestamping.*.pkt" 46 "tcp_user_timeout_user-timeout-probe.pkt" 47 "tcp_zerocopy_epoll_.*.pkt" 48 "tcp_tcp_info_tcp-info-.*-limited.pkt" 49 ) 50 readonly xfail_regex="^($(printf '%s|' "${xfail_list[@]}"))$" 51 [[ "$script" =~ ${xfail_regex} ]] && failfunc=ktap_test_xfail 52fi 53 54ktap_print_header 55ktap_set_plan 2 56 57unshare -n packetdrill ${ipv4_args[@]} ${optargs[@]} $script > /dev/null \ 58 && ktap_test_pass "ipv4" || $failfunc "ipv4" 59unshare -n packetdrill ${ipv6_args[@]} ${optargs[@]} $script > /dev/null \ 60 && ktap_test_pass "ipv6" || $failfunc "ipv6" 61 62ktap_finished 63