File: benchmark-iperf3-net.sh

package info (click to toggle)
rootlesskit 2.0.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 636 kB
  • sloc: sh: 433; makefile: 25
file content (87 lines) | stat: -rwxr-xr-x 2,423 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/bin/bash
source $(realpath $(dirname $0))/common.inc.sh
function benchmark::iperf3::pasta() {
	INFO "[benchmark:iperf3] slirp4netns ($@)"
	statedir=$(mktemp -d)
	if echo "$@" | grep -q -- --detach-netns; then
		IPERF3C="nsenter -n${statedir}/netns $IPERF3C"
	fi
	set -x
	$ROOTLESSKIT --state-dir=$statedir --net=slirp4netns $@ -- $IPERF3C 10.0.2.2
	set +x
}

function benchmark::iperf3::slirp4netns() {
	INFO "[benchmark:iperf3] slirp4netns ($@)"
	statedir=$(mktemp -d)
	if echo "$@" | grep -q -- --detach-netns; then
		IPERF3C="nsenter -n${statedir}/netns $IPERF3C"
	fi
	set -x
	$ROOTLESSKIT --state-dir=$statedir --net=slirp4netns $@ -- $IPERF3C 10.0.2.2
	set +x
}

function benchmark::iperf3::vpnkit() {
	INFO "[benchmark:iperf3] vpnkit ($@)"
	statedir=$(mktemp -d)
	if echo "$@" | grep -q -- --detach-netns; then
		IPERF3C="nsenter -n${statedir}/netns $IPERF3C"
	fi
	set -x
	$ROOTLESSKIT --state-dir=$statedir --net=vpnkit $@ -- $IPERF3C 192.168.65.2
	set +x
}

function benchmark::iperf3::lxc-user-nic() {
	INFO "[benchmark:iperf3] lxc-user-nic ($@)"
	statedir=$(mktemp -d)
	if echo "$@" | grep -q -- --detach-netns; then
		IPERF3C="nsenter -n${statedir}/netns $IPERF3C"
	fi
	dev=lxcbr0
	set -x
	# ignore "lxc-net is already running" error
	sudo /usr/lib/$(uname -m)-linux-gnu/lxc/lxc-net start || true
	ip=$(ip -4 -o addr show $dev | awk '{print $4}' | cut -d "/" -f 1)
	$ROOTLESSKIT --state-dir=$statedir --net=lxc-user-nic $@ -- $IPERF3C $ip
	set +x
}

function benchmark::iperf3::rootful_veth() {
	INFO "[benchmark:iperf3] rootful_veth ($@) for reference"
	# only --mtu=MTU is supposed as $@
	mtu=$(echo $@ | sed -e s/--mtu=//g)
	set -x
	sudo ip netns add foo
	sudo ip link add foo_veth0 type veth peer name foo_veth1
	sudo ip link set foo_veth1 netns foo
	sudo ip addr add 10.0.42.1/24 dev foo_veth0
	sudo ip -netns foo addr add 10.0.42.2/24 dev foo_veth1
	sudo ip link set dev foo_veth0 mtu $mtu
	sudo ip -netns foo link set dev foo_veth1 mtu $mtu
	sudo ip link set foo_veth0 up
	sudo ip -netns foo link set foo_veth1 up
	sudo ip netns exec foo $IPERF3C 10.0.42.1
	sudo ip link del foo_veth0
	sudo ip netns del foo
	set +x
}

if [ $# -lt 2 ]; then
	ERROR "Usage: $0 NETDRIVER MTU [FLAGS...]"
	exit 1
fi
net=$1
mtu=$2
shift 2
flags=$@
INFO "net=${net} mtu=${mtu} flags=$@"

iperf3 -s >/dev/null &
iperf3pid=$!
function cleanup() {
	kill $iperf3pid
}
trap cleanup EXIT
benchmark::iperf3::$net --mtu=$mtu $flags