1*4882a593Smuzhiyun#!/bin/bash 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun# xdping tests 5*4882a593Smuzhiyun# Here we setup and teardown configuration required to run 6*4882a593Smuzhiyun# xdping, exercising its options. 7*4882a593Smuzhiyun# 8*4882a593Smuzhiyun# Setup is similar to test_tunnel tests but without the tunnel. 9*4882a593Smuzhiyun# 10*4882a593Smuzhiyun# Topology: 11*4882a593Smuzhiyun# --------- 12*4882a593Smuzhiyun# root namespace | tc_ns0 namespace 13*4882a593Smuzhiyun# | 14*4882a593Smuzhiyun# ---------- | ---------- 15*4882a593Smuzhiyun# | veth1 | --------- | veth0 | 16*4882a593Smuzhiyun# ---------- peer ---------- 17*4882a593Smuzhiyun# 18*4882a593Smuzhiyun# Device Configuration 19*4882a593Smuzhiyun# -------------------- 20*4882a593Smuzhiyun# Root namespace with BPF 21*4882a593Smuzhiyun# Device names and addresses: 22*4882a593Smuzhiyun# veth1 IP: 10.1.1.200 23*4882a593Smuzhiyun# xdp added to veth1, xdpings originate from here. 24*4882a593Smuzhiyun# 25*4882a593Smuzhiyun# Namespace tc_ns0 with BPF 26*4882a593Smuzhiyun# Device names and addresses: 27*4882a593Smuzhiyun# veth0 IPv4: 10.1.1.100 28*4882a593Smuzhiyun# For some tests xdping run in server mode here. 29*4882a593Smuzhiyun# 30*4882a593Smuzhiyun 31*4882a593Smuzhiyunreadonly TARGET_IP="10.1.1.100" 32*4882a593Smuzhiyunreadonly TARGET_NS="xdp_ns0" 33*4882a593Smuzhiyun 34*4882a593Smuzhiyunreadonly LOCAL_IP="10.1.1.200" 35*4882a593Smuzhiyun 36*4882a593Smuzhiyunsetup() 37*4882a593Smuzhiyun{ 38*4882a593Smuzhiyun ip netns add $TARGET_NS 39*4882a593Smuzhiyun ip link add veth0 type veth peer name veth1 40*4882a593Smuzhiyun ip link set veth0 netns $TARGET_NS 41*4882a593Smuzhiyun ip netns exec $TARGET_NS ip addr add ${TARGET_IP}/24 dev veth0 42*4882a593Smuzhiyun ip addr add ${LOCAL_IP}/24 dev veth1 43*4882a593Smuzhiyun ip netns exec $TARGET_NS ip link set veth0 up 44*4882a593Smuzhiyun ip link set veth1 up 45*4882a593Smuzhiyun} 46*4882a593Smuzhiyun 47*4882a593Smuzhiyuncleanup() 48*4882a593Smuzhiyun{ 49*4882a593Smuzhiyun set +e 50*4882a593Smuzhiyun ip netns delete $TARGET_NS 2>/dev/null 51*4882a593Smuzhiyun ip link del veth1 2>/dev/null 52*4882a593Smuzhiyun if [[ $server_pid -ne 0 ]]; then 53*4882a593Smuzhiyun kill -TERM $server_pid 54*4882a593Smuzhiyun fi 55*4882a593Smuzhiyun} 56*4882a593Smuzhiyun 57*4882a593Smuzhiyuntest() 58*4882a593Smuzhiyun{ 59*4882a593Smuzhiyun client_args="$1" 60*4882a593Smuzhiyun server_args="$2" 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun echo "Test client args '$client_args'; server args '$server_args'" 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun server_pid=0 65*4882a593Smuzhiyun if [[ -n "$server_args" ]]; then 66*4882a593Smuzhiyun ip netns exec $TARGET_NS ./xdping $server_args & 67*4882a593Smuzhiyun server_pid=$! 68*4882a593Smuzhiyun sleep 10 69*4882a593Smuzhiyun fi 70*4882a593Smuzhiyun ./xdping $client_args $TARGET_IP 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun if [[ $server_pid -ne 0 ]]; then 73*4882a593Smuzhiyun kill -TERM $server_pid 74*4882a593Smuzhiyun server_pid=0 75*4882a593Smuzhiyun fi 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun echo "Test client args '$client_args'; server args '$server_args': PASS" 78*4882a593Smuzhiyun} 79*4882a593Smuzhiyun 80*4882a593Smuzhiyunset -e 81*4882a593Smuzhiyun 82*4882a593Smuzhiyunserver_pid=0 83*4882a593Smuzhiyun 84*4882a593Smuzhiyuntrap cleanup EXIT 85*4882a593Smuzhiyun 86*4882a593Smuzhiyunsetup 87*4882a593Smuzhiyun 88*4882a593Smuzhiyunfor server_args in "" "-I veth0 -s -S" ; do 89*4882a593Smuzhiyun # client in skb mode 90*4882a593Smuzhiyun client_args="-I veth1 -S" 91*4882a593Smuzhiyun test "$client_args" "$server_args" 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun # client with count of 10 RTT measurements. 94*4882a593Smuzhiyun client_args="-I veth1 -S -c 10" 95*4882a593Smuzhiyun test "$client_args" "$server_args" 96*4882a593Smuzhiyundone 97*4882a593Smuzhiyun 98*4882a593Smuzhiyunecho "OK. All tests passed" 99*4882a593Smuzhiyunexit 0 100