111 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03#4# Regression tests for the SO_TXTIME interface5 6set -e7 8readonly ksft_skip=49readonly DEV="veth0"10readonly BIN="./so_txtime"11 12readonly RAND="$(mktemp -u XXXXXX)"13readonly NSPREFIX="ns-${RAND}"14readonly NS1="${NSPREFIX}1"15readonly NS2="${NSPREFIX}2"16 17readonly SADDR4='192.168.1.1'18readonly DADDR4='192.168.1.2'19readonly SADDR6='fd::1'20readonly DADDR6='fd::2'21 22cleanup() {23 ip netns del "${NS2}"24 ip netns del "${NS1}"25}26 27trap cleanup EXIT28 29# Create virtual ethernet pair between network namespaces30ip netns add "${NS1}"31ip netns add "${NS2}"32 33ip link add "${DEV}" netns "${NS1}" type veth \34 peer name "${DEV}" netns "${NS2}"35 36# Bring the devices up37ip -netns "${NS1}" link set "${DEV}" up38ip -netns "${NS2}" link set "${DEV}" up39 40# Set fixed MAC addresses on the devices41ip -netns "${NS1}" link set dev "${DEV}" address 02:02:02:02:02:0242ip -netns "${NS2}" link set dev "${DEV}" address 06:06:06:06:06:0643 44# Add fixed IP addresses to the devices45ip -netns "${NS1}" addr add 192.168.1.1/24 dev "${DEV}"46ip -netns "${NS2}" addr add 192.168.1.2/24 dev "${DEV}"47ip -netns "${NS1}" addr add fd::1/64 dev "${DEV}" nodad48ip -netns "${NS2}" addr add fd::2/64 dev "${DEV}" nodad49 50run_test() {51 local readonly IP="$1"52 local readonly CLOCK="$2"53 local readonly TXARGS="$3"54 local readonly RXARGS="$4"55 56 if [[ "${IP}" == "4" ]]; then57 local readonly SADDR="${SADDR4}"58 local readonly DADDR="${DADDR4}"59 elif [[ "${IP}" == "6" ]]; then60 local readonly SADDR="${SADDR6}"61 local readonly DADDR="${DADDR6}"62 else63 echo "Invalid IP version ${IP}"64 exit 165 fi66 67 local readonly START="$(date +%s%N --date="+ 0.1 seconds")"68 69 ip netns exec "${NS2}" "${BIN}" -"${IP}" -c "${CLOCK}" -t "${START}" -S "${SADDR}" -D "${DADDR}" "${RXARGS}" -r &70 ip netns exec "${NS1}" "${BIN}" -"${IP}" -c "${CLOCK}" -t "${START}" -S "${SADDR}" -D "${DADDR}" "${TXARGS}"71 wait "$!"72}73 74do_test() {75 run_test $@76 [ $? -ne 0 ] && ret=177}78 79do_fail_test() {80 run_test $@81 [ $? -eq 0 ] && ret=182}83 84ip netns exec "${NS1}" tc qdisc add dev "${DEV}" root fq85set +e86ret=087do_test 4 mono a,-1 a,-188do_test 6 mono a,0 a,089do_test 6 mono a,10 a,1090do_test 4 mono a,10,b,20 a,10,b,2091do_test 6 mono a,20,b,10 b,20,a,2092 93if ip netns exec "${NS1}" tc qdisc replace dev "${DEV}" root etf clockid CLOCK_TAI delta 400000; then94 do_fail_test 4 tai a,-1 a,-195 do_fail_test 6 tai a,0 a,096 do_test 6 tai a,10 a,1097 do_test 4 tai a,10,b,20 a,10,b,2098 do_test 6 tai a,20,b,10 b,10,a,2099else100 echo "tc ($(tc -V)) does not support qdisc etf. skipping"101 [ $ret -eq 0 ] && ret=$ksft_skip102fi103 104if [ $ret -eq 0 ]; then105 echo OK. All tests passed106elif [[ $ret -ne $ksft_skip && -n "$KSFT_MACHINE_SLOW" ]]; then107 echo "Ignoring errors due to slow environment" 1>&2108 ret=0109fi110exit $ret111