Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 #
0004 # Regression tests for the SO_TXTIME interface
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 # Create virtual ethernet pair between network namespaces
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 # Bring the devices up
0036 ip -netns "${NS1}" link set "${DEV}" up
0037 ip -netns "${NS2}" link set "${DEV}" up
0038 
0039 # Set fixed MAC addresses on the devices
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 # Add fixed IP addresses to the devices
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