xref: /linux/tools/testing/selftests/net/ovpn/test-close-socket.sh (revision 7a5f1cd22d47f8ca4b760b6334378ae42c1bd24b)
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