ksft_runner.sh 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. source "$(dirname $(realpath $0))/../../kselftest/ktap_helpers.sh"
  4. declare -A ip_args=(
  5. [ipv4]="--ip_version=ipv4
  6. --local_ip=192.168.0.1
  7. --gateway_ip=192.168.0.1
  8. --netmask_ip=255.255.0.0
  9. --remote_ip=192.0.2.1
  10. -D TFO_COOKIE=3021b9d889017eeb
  11. -D TFO_COOKIE_ZERO=b7c12350a90dc8f5
  12. -D CMSG_LEVEL_IP=SOL_IP
  13. -D CMSG_TYPE_RECVERR=IP_RECVERR"
  14. [ipv4-mapped-ipv6]="--ip_version=ipv4-mapped-ipv6
  15. --local_ip=192.168.0.1
  16. --gateway_ip=192.168.0.1
  17. --netmask_ip=255.255.0.0
  18. --remote_ip=192.0.2.1
  19. -D TFO_COOKIE=3021b9d889017eeb
  20. -D TFO_COOKIE_ZERO=b7c12350a90dc8f5
  21. -D CMSG_LEVEL_IP=SOL_IPV6
  22. -D CMSG_TYPE_RECVERR=IPV6_RECVERR"
  23. [ipv6]="--ip_version=ipv6
  24. --mtu=1520
  25. --local_ip=fd3d:0a0b:17d6::1
  26. --gateway_ip=fd3d:0a0b:17d6:8888::1
  27. --remote_ip=fd3d:fa7b:d17d::1
  28. -D TFO_COOKIE=c1d1e9742a47a9bc
  29. -D TFO_COOKIE_ZERO=82af1a8f9a205c34
  30. -D CMSG_LEVEL_IP=SOL_IPV6
  31. -D CMSG_TYPE_RECVERR=IPV6_RECVERR"
  32. )
  33. if [ $# -ne 1 ]; then
  34. ktap_exit_fail_msg "usage: $0 <script>"
  35. exit "$KSFT_FAIL"
  36. fi
  37. script="$(basename $1)"
  38. if [ -z "$(which packetdrill)" ]; then
  39. ktap_skip_all "packetdrill not found in PATH"
  40. exit "$KSFT_SKIP"
  41. fi
  42. declare -a optargs
  43. failfunc=ktap_test_fail
  44. if [[ -n "${KSFT_MACHINE_SLOW}" ]]; then
  45. optargs+=('--tolerance_usecs=14000')
  46. failfunc=ktap_test_xfail
  47. fi
  48. ip_versions=$(grep -E '^--ip_version=' $script | cut -d '=' -f 2)
  49. if [[ -z $ip_versions ]]; then
  50. ip_versions="ipv4 ipv6 ipv4-mapped-ipv6"
  51. elif [[ ! "$ip_versions" =~ ^ipv[46]$ ]]; then
  52. ktap_exit_fail_msg "Too many or unsupported --ip_version: $ip_versions"
  53. exit "$KSFT_FAIL"
  54. fi
  55. ktap_print_header
  56. ktap_set_plan $(echo $ip_versions | wc -w)
  57. for ip_version in $ip_versions; do
  58. unshare -n packetdrill ${ip_args[$ip_version]} ${optargs[@]} $script > /dev/null \
  59. && ktap_test_pass $ip_version || $failfunc $ip_version
  60. done
  61. ktap_finished