| #!/bin/bash | |
| # SPDX-License-Identifier: GPL-2.0 | |
| # xdping tests | |
| # Here we setup and teardown configuration required to run | |
| # xdping, exercising its options. | |
| # | |
| # Setup is similar to test_tunnel tests but without the tunnel. | |
| # | |
| # Topology: | |
| # --------- | |
| # root namespace | tc_ns0 namespace | |
| # | | |
| # ---------- | ---------- | |
| # | veth1 | --------- | veth0 | | |
| # ---------- peer ---------- | |
| # | |
| # Device Configuration | |
| # -------------------- | |
| # Root namespace with BPF | |
| # Device names and addresses: | |
| # veth1 IP: 10.1.1.200 | |
| # xdp added to veth1, xdpings originate from here. | |
| # | |
| # Namespace tc_ns0 with BPF | |
| # Device names and addresses: | |
| # veth0 IPv4: 10.1.1.100 | |
| # For some tests xdping run in server mode here. | |
| # | |
| readonly TARGET_IP="10.1.1.100" | |
| readonly TARGET_NS="xdp_ns0" | |
| readonly LOCAL_IP="10.1.1.200" | |
| setup() | |
| { | |
| ip netns add $TARGET_NS | |
| ip link add veth0 type veth peer name veth1 | |
| ip link set veth0 netns $TARGET_NS | |
| ip netns exec $TARGET_NS ip addr add ${TARGET_IP}/24 dev veth0 | |
| ip addr add ${LOCAL_IP}/24 dev veth1 | |
| ip netns exec $TARGET_NS ip link set veth0 up | |
| ip link set veth1 up | |
| } | |
| cleanup() | |
| { | |
| set +e | |
| ip netns delete $TARGET_NS 2>/dev/null | |
| ip link del veth1 2>/dev/null | |
| if [[ $server_pid -ne 0 ]]; then | |
| kill -TERM $server_pid | |
| fi | |
| } | |
| test() | |
| { | |
| client_args="$1" | |
| server_args="$2" | |
| echo "Test client args '$client_args'; server args '$server_args'" | |
| server_pid=0 | |
| if [[ -n "$server_args" ]]; then | |
| ip netns exec $TARGET_NS ./xdping $server_args & | |
| server_pid=$! | |
| sleep 10 | |
| fi | |
| ./xdping $client_args $TARGET_IP | |
| if [[ $server_pid -ne 0 ]]; then | |
| kill -TERM $server_pid | |
| server_pid=0 | |
| fi | |
| echo "Test client args '$client_args'; server args '$server_args': PASS" | |
| } | |
| set -e | |
| server_pid=0 | |
| trap cleanup EXIT | |
| setup | |
| for server_args in "" "-I veth0 -s -S" ; do | |
| # client in skb mode | |
| client_args="-I veth1 -S" | |
| test "$client_args" "$server_args" | |
| # client with count of 10 RTT measurements. | |
| client_args="-I veth1 -S -c 10" | |
| test "$client_args" "$server_args" | |
| done | |
| echo "OK. All tests passed" | |
| exit 0 |