test_sock_addr.sh 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/bin/sh
  2. set -eu
  3. ping_once()
  4. {
  5. type ping${1} >/dev/null 2>&1 && PING="ping${1}" || PING="ping -${1}"
  6. $PING -q -c 1 -W 1 ${2%%/*} >/dev/null 2>&1
  7. }
  8. wait_for_ip()
  9. {
  10. local _i
  11. echo -n "Wait for testing IPv4/IPv6 to become available "
  12. for _i in $(seq ${MAX_PING_TRIES}); do
  13. echo -n "."
  14. if ping_once 4 ${TEST_IPv4} && ping_once 6 ${TEST_IPv6}; then
  15. echo " OK"
  16. return
  17. fi
  18. done
  19. echo 1>&2 "ERROR: Timeout waiting for test IP to become available."
  20. exit 1
  21. }
  22. setup()
  23. {
  24. # Create testing interfaces not to interfere with current environment.
  25. ip link add dev ${TEST_IF} type veth peer name ${TEST_IF_PEER}
  26. ip link set ${TEST_IF} up
  27. ip link set ${TEST_IF_PEER} up
  28. ip -4 addr add ${TEST_IPv4} dev ${TEST_IF}
  29. ip -6 addr add ${TEST_IPv6} dev ${TEST_IF}
  30. wait_for_ip
  31. }
  32. cleanup()
  33. {
  34. ip link del ${TEST_IF} 2>/dev/null || :
  35. ip link del ${TEST_IF_PEER} 2>/dev/null || :
  36. }
  37. main()
  38. {
  39. trap cleanup EXIT 2 3 6 15
  40. setup
  41. ./test_sock_addr setup_done
  42. }
  43. BASENAME=$(basename $0 .sh)
  44. TEST_IF="${BASENAME}1"
  45. TEST_IF_PEER="${BASENAME}2"
  46. TEST_IPv4="127.0.0.4/8"
  47. TEST_IPv6="::6/128"
  48. MAX_PING_TRIES=5
  49. main