| #!/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 |