github.com/rootless-containers/rootlesskit/v2@v2.3.4/hack/benchmark-iperf3-net.sh (about)

     1  #!/bin/bash
     2  source $(realpath $(dirname $0))/common.inc.sh
     3  function benchmark::iperf3::pasta() {
     4  	INFO "[benchmark:iperf3] slirp4netns ($@)"
     5  	statedir=$(mktemp -d)
     6  	if echo "$@" | grep -q -- --detach-netns; then
     7  		IPERF3C="nsenter -n${statedir}/netns $IPERF3C"
     8  	fi
     9  	set -x
    10  	$ROOTLESSKIT --state-dir=$statedir --net=slirp4netns $@ -- $IPERF3C 10.0.2.2
    11  	set +x
    12  }
    13  
    14  function benchmark::iperf3::slirp4netns() {
    15  	INFO "[benchmark:iperf3] slirp4netns ($@)"
    16  	statedir=$(mktemp -d)
    17  	if echo "$@" | grep -q -- --detach-netns; then
    18  		IPERF3C="nsenter -n${statedir}/netns $IPERF3C"
    19  	fi
    20  	set -x
    21  	$ROOTLESSKIT --state-dir=$statedir --net=slirp4netns $@ -- $IPERF3C 10.0.2.2
    22  	set +x
    23  }
    24  
    25  function benchmark::iperf3::vpnkit() {
    26  	INFO "[benchmark:iperf3] vpnkit ($@)"
    27  	statedir=$(mktemp -d)
    28  	if echo "$@" | grep -q -- --detach-netns; then
    29  		IPERF3C="nsenter -n${statedir}/netns $IPERF3C"
    30  	fi
    31  	set -x
    32  	$ROOTLESSKIT --state-dir=$statedir --net=vpnkit $@ -- $IPERF3C 192.168.65.2
    33  	set +x
    34  }
    35  
    36  function benchmark::iperf3::lxc-user-nic() {
    37  	INFO "[benchmark:iperf3] lxc-user-nic ($@)"
    38  	statedir=$(mktemp -d)
    39  	if echo "$@" | grep -q -- --detach-netns; then
    40  		IPERF3C="nsenter -n${statedir}/netns $IPERF3C"
    41  	fi
    42  	dev=lxcbr0
    43  	set -x
    44  	# ignore "lxc-net is already running" error
    45  	sudo /usr/lib/$(uname -m)-linux-gnu/lxc/lxc-net start || sudo /etc/init.d/lxc-net start || true
    46  	ip=$(ip -4 -o addr show $dev | awk '{print $4}' | cut -d "/" -f 1)
    47  	$ROOTLESSKIT --state-dir=$statedir --net=lxc-user-nic $@ -- $IPERF3C $ip
    48  	set +x
    49  }
    50  
    51  function benchmark::iperf3::rootful_veth() {
    52  	INFO "[benchmark:iperf3] rootful_veth ($@) for reference"
    53  	# only --mtu=MTU is supposed as $@
    54  	mtu=$(echo $@ | sed -e s/--mtu=//g)
    55  	set -x
    56  	sudo ip netns add foo
    57  	sudo ip link add foo_veth0 type veth peer name foo_veth1
    58  	sudo ip link set foo_veth1 netns foo
    59  	sudo ip addr add 10.0.42.1/24 dev foo_veth0
    60  	sudo ip -netns foo addr add 10.0.42.2/24 dev foo_veth1
    61  	sudo ip link set dev foo_veth0 mtu $mtu
    62  	sudo ip -netns foo link set dev foo_veth1 mtu $mtu
    63  	sudo ip link set foo_veth0 up
    64  	sudo ip -netns foo link set foo_veth1 up
    65  	sudo ip netns exec foo $IPERF3C 10.0.42.1
    66  	sudo ip link del foo_veth0
    67  	sudo ip netns del foo
    68  	set +x
    69  }
    70  
    71  if [ $# -lt 2 ]; then
    72  	ERROR "Usage: $0 NETDRIVER MTU [FLAGS...]"
    73  	exit 1
    74  fi
    75  net=$1
    76  mtu=$2
    77  shift 2
    78  flags=$@
    79  INFO "net=${net} mtu=${mtu} flags=$@"
    80  
    81  iperf3 -s >/dev/null &
    82  iperf3pid=$!
    83  function cleanup() {
    84  	kill $iperf3pid
    85  }
    86  trap cleanup EXIT
    87  benchmark::iperf3::$net --mtu=$mtu $flags