1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3# Copyright (C) 2020-2025 OpenVPN, Inc. 4# 5# Author: Antonio Quartulli <antonio@openvpn.net> 6 7#set -x 8set -eE 9 10source ./common.sh 11 12ovpn_test_finished=0 13 14ovpn_test_exit() { 15 ovpn_cleanup 16 modprobe -r ovpn || true 17 18 if [ "${ovpn_test_finished}" -eq 0 ]; then 19 ktap_print_totals 20 fi 21} 22 23ovpn_prepare_network() { 24 local p 25 local peer_ns 26 27 for p in $(seq 0 ${OVPN_NUM_PEERS}); do 28 ovpn_cmd_ok "create namespace peer${p}" ovpn_create_ns "${p}" 29 done 30 31 for p in $(seq 0 ${OVPN_NUM_PEERS}); do 32 ovpn_cmd_ok "configure peer${p} namespace" ovpn_setup_ns \ 33 "${p}" 5.5.5.$((p + 1))/24 34 done 35 36 for p in $(seq 0 ${OVPN_NUM_PEERS}); do 37 ovpn_cmd_ok "register peer${p} in overlay" ovpn_add_peer "${p}" 38 done 39 40 for p in $(seq 1 ${OVPN_NUM_PEERS}); do 41 peer_ns="ovpn_peer${p}" 42 ovpn_cmd_ok "set peer0 timeout for peer ${p}" \ 43 ip netns exec ovpn_peer0 ${OVPN_CLI} set_peer tun0 \ 44 ${p} 60 120 45 ovpn_cmd_ok "set peer${p} timeout for peer ${p}" \ 46 ip netns exec "${peer_ns}" ${OVPN_CLI} set_peer \ 47 tun${p} $((p + OVPN_ID_OFFSET)) 60 120 48 done 49} 50 51ovpn_run_ping_traffic() { 52 local p 53 54 for p in $(seq 1 ${OVPN_NUM_PEERS}); do 55 ovpn_cmd_ok "send ping traffic to peer ${p}" \ 56 ip netns exec ovpn_peer0 ping -qfc 500 -w 3 \ 57 5.5.5.$((p + 1)) 58 done 59} 60 61ovpn_run_iperf() { 62 local iperf_pid 63 64 ovpn_run_bg iperf_pid ip netns exec ovpn_peer0 iperf3 -1 -s 65 sleep 1 66 ovpn_cmd_ok "run iperf throughput flow" \ 67 ip netns exec ovpn_peer1 iperf3 -Z -t 3 -c 5.5.5.1 68 wait "${iperf_pid}" || return 1 69} 70 71trap ovpn_test_exit EXIT 72trap ovpn_stage_err ERR 73 74ktap_print_header 75ktap_set_plan 3 76 77ovpn_cleanup 78modprobe -q ovpn || true 79 80ovpn_run_stage "setup network topology" ovpn_prepare_network 81ovpn_run_stage "run ping traffic" ovpn_run_ping_traffic 82ovpn_run_stage "run iperf throughput" ovpn_run_iperf 83 84ovpn_test_finished=1 85ktap_finished 86