104 lines
2.1 KiB
Bash
104 lines
2.1 KiB
Bash
|
#!/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
|
||
|
|
||
|
# Test drv mode
|
||
|
test "-I veth1 -N" "-I veth0 -s -N"
|
||
|
test "-I veth1 -N -c 10" "-I veth0 -s -N"
|
||
|
|
||
|
echo "OK. All tests passed"
|
||
|
exit 0
|