wireguard_lib.sh 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/bin/sh
  2. # SPDX-License-Identifier: GPL-2.0-or-later
  3. # Copyright (c) 2020 Oracle and/or its affiliates. All Rights Reserved.
  4. TST_NEEDS_TMPDIR=1
  5. TST_NEEDS_CMDS="$TST_NEEDS_CMDS wg"
  6. TST_TESTFUNC=${TST_TESTFUNC:-virt_netperf_msg_sizes}
  7. TST_SETUP=${TST_SETUP:-wireguard_lib_setup}
  8. TST_CLEANUP=${TST_CLEANUP:-wireguard_lib_cleanup}
  9. TST_NEEDS_DRIVERS="wireguard"
  10. VIRT_PERF_THRESHOLD_MIN=${VIRT_PERF_THRESHOLD_MIN:-200}
  11. virt_type="wireguard"
  12. . virt_lib.sh
  13. # Usage: wireguard_lib_setup [TYPE]
  14. # TYPE: [ default | invalid_allowed_ips | invalid_pub_keys ]
  15. wireguard_lib_setup()
  16. {
  17. local type="${1:-default}"
  18. local pub_key0="$(wg genkey | tee wg0.key | wg pubkey)"
  19. local pub_key1="$(wg genkey | tee wg1.key | wg pubkey)"
  20. local port_loc="$(tst_get_unused_port ipv${TST_IPVER} dgram)"
  21. local port_rmt=$(tst_rhost_run -c "tst_get_unused_port ipv${TST_IPVER} dgram")
  22. # copy private key to remote host
  23. tst_rhost_run -s -c "echo '$(cat wg1.key)' > wg1.key"
  24. tst_res TINFO "setup wireguard UDPv${TST_IPVER} tunnel, port $port_loc/$port_rmt"
  25. tst_res TINFO "lhost[$(tst_ipaddr)] <-> rhost[$(tst_ipaddr rhost)]"
  26. virt_setup
  27. local ka_opt="persistent-keepalive 1"
  28. local allow_ip_loc="${ip_virt_local}/32,${ip6_virt_local}/128"
  29. local allow_ip_rmt="${ip_virt_remote}/32,${ip6_virt_remote}/128"
  30. case $type in
  31. invalid_allowed_ips)
  32. allow_ip_loc="${ip_virt_remote}/32,${ip6_virt_remote}/128"
  33. allow_ip_rmt="${ip_virt_local}/32,${ip6_virt_local}/128"
  34. tst_res TINFO "Allowed IPs are source IPs only"
  35. ;;
  36. invalid_pub_keys)
  37. pub_key0="$(wg genkey | wg pubkey)"
  38. tst_res TINFO "Invalid peer public key of lhost"
  39. ;;
  40. esac
  41. ROD wg set ltp_v0 listen-port $port_loc private-key wg0.key
  42. ROD wg set ltp_v0 peer $pub_key1 endpoint \
  43. $(tst_ipaddr rhost):$port_rmt $ka_opt \
  44. allowed-ips $allow_ip_rmt
  45. tst_rhost_run -s -c \
  46. "wg set ltp_v0 listen-port $port_rmt private-key wg1.key"
  47. tst_rhost_run -s -c "wg set ltp_v0 peer $pub_key0 \
  48. endpoint $(tst_ipaddr):$port_loc $ka_opt \
  49. allowed-ips $allow_ip_loc"
  50. }
  51. wireguard_lib_cleanup()
  52. {
  53. virt_cleanup
  54. }