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