mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 02:50:43 +00:00
![Carlos Llamas](/assets/img/avatar_default.png)
SO_TXTIME hardware offload requires testing across devices, either between machines or separate network namespaces. Split up SO_TXTIME test into tx and rx modes, so traffic can be sent from one process to another. Create a veth-pair on different namespaces and bind each process to an end point via [-S]ource and [-D]estination parameters. Optional start [-t]ime parameter can be passed to synchronize the test across the hosts (with synchorinzed clocks). Signed-off-by: Carlos Llamas <cmllamas@google.com> Reviewed-by: Willem de Bruijn <willemb@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
89 lines
2.4 KiB
Bash
Executable file
89 lines
2.4 KiB
Bash
Executable file
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# Regression tests for the SO_TXTIME interface
|
|
|
|
set -e
|
|
|
|
readonly DEV="veth0"
|
|
readonly BIN="./so_txtime"
|
|
|
|
readonly RAND="$(mktemp -u XXXXXX)"
|
|
readonly NSPREFIX="ns-${RAND}"
|
|
readonly NS1="${NSPREFIX}1"
|
|
readonly NS2="${NSPREFIX}2"
|
|
|
|
readonly SADDR4='192.168.1.1'
|
|
readonly DADDR4='192.168.1.2'
|
|
readonly SADDR6='fd::1'
|
|
readonly DADDR6='fd::2'
|
|
|
|
cleanup() {
|
|
ip netns del "${NS2}"
|
|
ip netns del "${NS1}"
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
|
|
# Create virtual ethernet pair between network namespaces
|
|
ip netns add "${NS1}"
|
|
ip netns add "${NS2}"
|
|
|
|
ip link add "${DEV}" netns "${NS1}" type veth \
|
|
peer name "${DEV}" netns "${NS2}"
|
|
|
|
# Bring the devices up
|
|
ip -netns "${NS1}" link set "${DEV}" up
|
|
ip -netns "${NS2}" link set "${DEV}" up
|
|
|
|
# Set fixed MAC addresses on the devices
|
|
ip -netns "${NS1}" link set dev "${DEV}" address 02:02:02:02:02:02
|
|
ip -netns "${NS2}" link set dev "${DEV}" address 06:06:06:06:06:06
|
|
|
|
# Add fixed IP addresses to the devices
|
|
ip -netns "${NS1}" addr add 192.168.1.1/24 dev "${DEV}"
|
|
ip -netns "${NS2}" addr add 192.168.1.2/24 dev "${DEV}"
|
|
ip -netns "${NS1}" addr add fd::1/64 dev "${DEV}" nodad
|
|
ip -netns "${NS2}" addr add fd::2/64 dev "${DEV}" nodad
|
|
|
|
do_test() {
|
|
local readonly IP="$1"
|
|
local readonly CLOCK="$2"
|
|
local readonly TXARGS="$3"
|
|
local readonly RXARGS="$4"
|
|
|
|
if [[ "${IP}" == "4" ]]; then
|
|
local readonly SADDR="${SADDR4}"
|
|
local readonly DADDR="${DADDR4}"
|
|
elif [[ "${IP}" == "6" ]]; then
|
|
local readonly SADDR="${SADDR6}"
|
|
local readonly DADDR="${DADDR6}"
|
|
else
|
|
echo "Invalid IP version ${IP}"
|
|
exit 1
|
|
fi
|
|
|
|
local readonly START="$(date +%s%N --date="+ 0.1 seconds")"
|
|
ip netns exec "${NS2}" "${BIN}" -"${IP}" -c "${CLOCK}" -t "${START}" -S "${SADDR}" -D "${DADDR}" "${RXARGS}" -r &
|
|
ip netns exec "${NS1}" "${BIN}" -"${IP}" -c "${CLOCK}" -t "${START}" -S "${SADDR}" -D "${DADDR}" "${TXARGS}"
|
|
wait "$!"
|
|
}
|
|
|
|
ip netns exec "${NS1}" tc qdisc add dev "${DEV}" root fq
|
|
do_test 4 mono a,-1 a,-1
|
|
do_test 6 mono a,0 a,0
|
|
do_test 6 mono a,10 a,10
|
|
do_test 4 mono a,10,b,20 a,10,b,20
|
|
do_test 6 mono a,20,b,10 b,20,a,20
|
|
|
|
if ip netns exec "${NS1}" tc qdisc replace dev "${DEV}" root etf clockid CLOCK_TAI delta 400000; then
|
|
! do_test 4 tai a,-1 a,-1
|
|
! do_test 6 tai a,0 a,0
|
|
do_test 6 tai a,10 a,10
|
|
do_test 4 tai a,10,b,20 a,10,b,20
|
|
do_test 6 tai a,20,b,10 b,10,a,20
|
|
else
|
|
echo "tc ($(tc -V)) does not support qdisc etf. skipping"
|
|
fi
|
|
|
|
echo OK. All tests passed
|