test_sock_addr.sh 1.0 KB

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