xref: /linux/tools/testing/selftests/net/ovpn/common.sh (revision fe259a1bb26ec78842c975d992331705b0c2c2e8)
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
7UDP_PEERS_FILE=${UDP_PEERS_FILE:-udp_peers.txt}
8TCP_PEERS_FILE=${TCP_PEERS_FILE:-tcp_peers.txt}
9OVPN_CLI=${OVPN_CLI:-./ovpn-cli}
10ALG=${ALG:-aes}
11PROTO=${PROTO:-UDP}
12FLOAT=${FLOAT:-0}
13
14create_ns() {
15	ip netns add peer${1}
16}
17
18setup_ns() {
19	MODE="P2P"
20
21	if [ ${1} -eq 0 ]; then
22		MODE="MP"
23		for p in $(seq 1 ${NUM_PEERS}); do
24			ip link add veth${p} netns peer0 type veth peer name veth${p} netns peer${p}
25
26			ip -n peer0 addr add 10.10.${p}.1/24 dev veth${p}
27			ip -n peer0 link set veth${p} up
28
29			ip -n peer${p} addr add 10.10.${p}.2/24 dev veth${p}
30			ip -n peer${p} link set veth${p} up
31		done
32	fi
33
34	ip netns exec peer${1} ${OVPN_CLI} new_iface tun${1} $MODE
35	ip -n peer${1} addr add ${2} dev tun${1}
36	ip -n peer${1} link set tun${1} up
37}
38
39add_peer() {
40	if [ "${PROTO}" == "UDP" ]; then
41		if [ ${1} -eq 0 ]; then
42			ip netns exec peer0 ${OVPN_CLI} new_multi_peer tun0 1 ${UDP_PEERS_FILE}
43
44			for p in $(seq 1 ${NUM_PEERS}); do
45				ip netns exec peer0 ${OVPN_CLI} new_key tun0 ${p} 1 0 ${ALG} 0 \
46					data64.key
47			done
48		else
49			ip netns exec peer${1} ${OVPN_CLI} new_peer tun${1} ${1} 1 10.10.${1}.1 1
50			ip netns exec peer${1} ${OVPN_CLI} new_key tun${1} ${1} 1 0 ${ALG} 1 \
51				data64.key
52		fi
53	else
54		if [ ${1} -eq 0 ]; then
55			(ip netns exec peer0 ${OVPN_CLI} listen tun0 1 ${TCP_PEERS_FILE} && {
56				for p in $(seq 1 ${NUM_PEERS}); do
57					ip netns exec peer0 ${OVPN_CLI} new_key tun0 ${p} 1 0 \
58						${ALG} 0 data64.key
59				done
60			}) &
61			sleep 5
62		else
63			ip netns exec peer${1} ${OVPN_CLI} connect tun${1} ${1} 10.10.${1}.1 1 \
64				data64.key
65		fi
66	fi
67}
68
69cleanup() {
70	# some ovpn-cli processes sleep in background so they need manual poking
71	killall $(basename ${OVPN_CLI}) 2>/dev/null || true
72
73	# netns peer0 is deleted without erasing ifaces first
74	for p in $(seq 1 10); do
75		ip -n peer${p} link set tun${p} down 2>/dev/null || true
76		ip netns exec peer${p} ${OVPN_CLI} del_iface tun${p} 2>/dev/null || true
77	done
78	for p in $(seq 1 10); do
79		ip -n peer0 link del veth${p} 2>/dev/null || true
80	done
81	for p in $(seq 0 10); do
82		ip netns del peer${p} 2>/dev/null || true
83	done
84}
85
86if [ "${PROTO}" == "UDP" ]; then
87	NUM_PEERS=${NUM_PEERS:-$(wc -l ${UDP_PEERS_FILE} | awk '{print $1}')}
88else
89	NUM_PEERS=${NUM_PEERS:-$(wc -l ${TCP_PEERS_FILE} | awk '{print $1}')}
90fi
91
92
93