0001
0002
0003
0004
0005
0006 set -e
0007
0008 readonly DEV="veth0"
0009 readonly BIN="./so_txtime"
0010
0011 readonly RAND="$(mktemp -u XXXXXX)"
0012 readonly NSPREFIX="ns-${RAND}"
0013 readonly NS1="${NSPREFIX}1"
0014 readonly NS2="${NSPREFIX}2"
0015
0016 readonly SADDR4='192.168.1.1'
0017 readonly DADDR4='192.168.1.2'
0018 readonly SADDR6='fd::1'
0019 readonly DADDR6='fd::2'
0020
0021 cleanup() {
0022 ip netns del "${NS2}"
0023 ip netns del "${NS1}"
0024 }
0025
0026 trap cleanup EXIT
0027
0028
0029 ip netns add "${NS1}"
0030 ip netns add "${NS2}"
0031
0032 ip link add "${DEV}" netns "${NS1}" type veth \
0033 peer name "${DEV}" netns "${NS2}"
0034
0035
0036 ip -netns "${NS1}" link set "${DEV}" up
0037 ip -netns "${NS2}" link set "${DEV}" up
0038
0039
0040 ip -netns "${NS1}" link set dev "${DEV}" address 02:02:02:02:02:02
0041 ip -netns "${NS2}" link set dev "${DEV}" address 06:06:06:06:06:06
0042
0043
0044 ip -netns "${NS1}" addr add 192.168.1.1/24 dev "${DEV}"
0045 ip -netns "${NS2}" addr add 192.168.1.2/24 dev "${DEV}"
0046 ip -netns "${NS1}" addr add fd::1/64 dev "${DEV}" nodad
0047 ip -netns "${NS2}" addr add fd::2/64 dev "${DEV}" nodad
0048
0049 do_test() {
0050 local readonly IP="$1"
0051 local readonly CLOCK="$2"
0052 local readonly TXARGS="$3"
0053 local readonly RXARGS="$4"
0054
0055 if [[ "${IP}" == "4" ]]; then
0056 local readonly SADDR="${SADDR4}"
0057 local readonly DADDR="${DADDR4}"
0058 elif [[ "${IP}" == "6" ]]; then
0059 local readonly SADDR="${SADDR6}"
0060 local readonly DADDR="${DADDR6}"
0061 else
0062 echo "Invalid IP version ${IP}"
0063 exit 1
0064 fi
0065
0066 local readonly START="$(date +%s%N --date="+ 0.1 seconds")"
0067 ip netns exec "${NS2}" "${BIN}" -"${IP}" -c "${CLOCK}" -t "${START}" -S "${SADDR}" -D "${DADDR}" "${RXARGS}" -r &
0068 ip netns exec "${NS1}" "${BIN}" -"${IP}" -c "${CLOCK}" -t "${START}" -S "${SADDR}" -D "${DADDR}" "${TXARGS}"
0069 wait "$!"
0070 }
0071
0072 ip netns exec "${NS1}" tc qdisc add dev "${DEV}" root fq
0073 do_test 4 mono a,-1 a,-1
0074 do_test 6 mono a,0 a,0
0075 do_test 6 mono a,10 a,10
0076 do_test 4 mono a,10,b,20 a,10,b,20
0077 do_test 6 mono a,20,b,10 b,20,a,20
0078
0079 if ip netns exec "${NS1}" tc qdisc replace dev "${DEV}" root etf clockid CLOCK_TAI delta 400000; then
0080 ! do_test 4 tai a,-1 a,-1
0081 ! do_test 6 tai a,0 a,0
0082 do_test 6 tai a,10 a,10
0083 do_test 4 tai a,10,b,20 a,10,b,20
0084 do_test 6 tai a,20,b,10 b,10,a,20
0085 else
0086 echo "tc ($(tc -V)) does not support qdisc etf. skipping"
0087 fi
0088
0089 echo OK. All tests passed