File Index
Files and directories
Sign in
FILE

common.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/net/ovpn/common.sh BASH
  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
 14LAN_IP="11.11.11.11"
 15
 16create_ns() {
 17	ip netns add peer${1}
 18}
 19
 20setup_ns() {
 21	MODE="P2P"
 22
 23	if [ ${1} -eq 0 ]; then
 24		MODE="MP"
 25		for p in $(seq 1 ${NUM_PEERS}); do
 26			ip link add veth${p} netns peer0 type veth peer name veth${p} netns peer${p}
 27
 28			ip -n peer0 addr add 10.10.${p}.1/24 dev veth${p}
 29			ip -n peer0 addr add fd00:0:0:${p}::1/64 dev veth${p}
 30			ip -n peer0 link set veth${p} up
 31
 32			ip -n peer${p} addr add 10.10.${p}.2/24 dev veth${p}
 33			ip -n peer${p} addr add fd00:0:0:${p}::2/64 dev veth${p}
 34			ip -n peer${p} link set veth${p} up
 35		done
 36	fi
 37
 38	ip netns exec peer${1} ${OVPN_CLI} new_iface tun${1} $MODE
 39	ip -n peer${1} addr add ${2} dev tun${1}
 40	# add a secondary IP to peer 1, to test a LAN behind a client
 41	if [ ${1} -eq 1 -a -n "${LAN_IP}" ]; then
 42		ip -n peer${1} addr add ${LAN_IP} dev tun${1}
 43		ip -n peer0 route add ${LAN_IP} via $(echo ${2} |sed -e s'!/.*!!') dev tun0
 44	fi
 45	if [ -n "${3}" ]; then
 46		ip -n peer${1} link set mtu ${3} dev tun${1}
 47	fi
 48	ip -n peer${1} link set tun${1} up
 49}
 50
 51add_peer() {
 52	if [ "${PROTO}" == "UDP" ]; then
 53		if [ ${1} -eq 0 ]; then
 54			ip netns exec peer0 ${OVPN_CLI} new_multi_peer tun0 1 ${UDP_PEERS_FILE}
 55
 56			for p in $(seq 1 ${NUM_PEERS}); do
 57				ip netns exec peer0 ${OVPN_CLI} new_key tun0 ${p} 1 0 ${ALG} 0 \
 58					data64.key
 59			done
 60		else
 61			RADDR=$(awk "NR == ${1} {print \$2}" ${UDP_PEERS_FILE})
 62			RPORT=$(awk "NR == ${1} {print \$3}" ${UDP_PEERS_FILE})
 63			LPORT=$(awk "NR == ${1} {print \$5}" ${UDP_PEERS_FILE})
 64			ip netns exec peer${1} ${OVPN_CLI} new_peer tun${1} ${1} ${LPORT} \
 65				${RADDR} ${RPORT}
 66			ip netns exec peer${1} ${OVPN_CLI} new_key tun${1} ${1} 1 0 ${ALG} 1 \
 67				data64.key
 68		fi
 69	else
 70		if [ ${1} -eq 0 ]; then
 71			(ip netns exec peer0 ${OVPN_CLI} listen tun0 1 ${TCP_PEERS_FILE} && {
 72				for p in $(seq 1 ${NUM_PEERS}); do
 73					ip netns exec peer0 ${OVPN_CLI} new_key tun0 ${p} 1 0 \
 74						${ALG} 0 data64.key
 75				done
 76			}) &
 77			sleep 5
 78		else
 79			ip netns exec peer${1} ${OVPN_CLI} connect tun${1} ${1} 10.10.${1}.1 1 \
 80				data64.key
 81		fi
 82	fi
 83}
 84
 85cleanup() {
 86	# some ovpn-cli processes sleep in background so they need manual poking
 87	killall $(basename ${OVPN_CLI}) 2>/dev/null || true
 88
 89	# netns peer0 is deleted without erasing ifaces first
 90	for p in $(seq 1 10); do
 91		ip -n peer${p} link set tun${p} down 2>/dev/null || true
 92		ip netns exec peer${p} ${OVPN_CLI} del_iface tun${p} 2>/dev/null || true
 93	done
 94	for p in $(seq 1 10); do
 95		ip -n peer0 link del veth${p} 2>/dev/null || true
 96	done
 97	for p in $(seq 0 10); do
 98		ip netns del peer${p} 2>/dev/null || true
 99	done
100}
101
102if [ "${PROTO}" == "UDP" ]; then
103	NUM_PEERS=${NUM_PEERS:-$(wc -l ${UDP_PEERS_FILE} | awk '{print $1}')}
104else
105	NUM_PEERS=${NUM_PEERS:-$(wc -l ${TCP_PEERS_FILE} | awk '{print $1}')}
106fi
107
108
~/ Read-only file preview.