linux/tools/testing/selftests/net/so_txtime.sh
<<
>>
Prefs
   1#!/bin/bash
   2# SPDX-License-Identifier: GPL-2.0
   3#
   4# Regression tests for the SO_TXTIME interface
   5
   6set -e
   7
   8readonly DEV="veth0"
   9readonly BIN="./so_txtime"
  10
  11readonly RAND="$(mktemp -u XXXXXX)"
  12readonly NSPREFIX="ns-${RAND}"
  13readonly NS1="${NSPREFIX}1"
  14readonly NS2="${NSPREFIX}2"
  15
  16readonly SADDR4='192.168.1.1'
  17readonly DADDR4='192.168.1.2'
  18readonly SADDR6='fd::1'
  19readonly DADDR6='fd::2'
  20
  21cleanup() {
  22        ip netns del "${NS2}"
  23        ip netns del "${NS1}"
  24}
  25
  26trap cleanup EXIT
  27
  28# Create virtual ethernet pair between network namespaces
  29ip netns add "${NS1}"
  30ip netns add "${NS2}"
  31
  32ip link add "${DEV}" netns "${NS1}" type veth \
  33  peer name "${DEV}" netns "${NS2}"
  34
  35# Bring the devices up
  36ip -netns "${NS1}" link set "${DEV}" up
  37ip -netns "${NS2}" link set "${DEV}" up
  38
  39# Set fixed MAC addresses on the devices
  40ip -netns "${NS1}" link set dev "${DEV}" address 02:02:02:02:02:02
  41ip -netns "${NS2}" link set dev "${DEV}" address 06:06:06:06:06:06
  42
  43# Add fixed IP addresses to the devices
  44ip -netns "${NS1}" addr add 192.168.1.1/24 dev "${DEV}"
  45ip -netns "${NS2}" addr add 192.168.1.2/24 dev "${DEV}"
  46ip -netns "${NS1}" addr add       fd::1/64 dev "${DEV}" nodad
  47ip -netns "${NS2}" addr add       fd::2/64 dev "${DEV}" nodad
  48
  49do_test() {
  50        local readonly IP="$1"
  51        local readonly CLOCK="$2"
  52        local readonly TXARGS="$3"
  53        local readonly RXARGS="$4"
  54
  55        if [[ "${IP}" == "4" ]]; then
  56                local readonly SADDR="${SADDR4}"
  57                local readonly DADDR="${DADDR4}"
  58        elif [[ "${IP}" == "6" ]]; then
  59                local readonly SADDR="${SADDR6}"
  60                local readonly DADDR="${DADDR6}"
  61        else
  62                echo "Invalid IP version ${IP}"
  63                exit 1
  64        fi
  65
  66        local readonly START="$(date +%s%N --date="+ 0.1 seconds")"
  67        ip netns exec "${NS2}" "${BIN}" -"${IP}" -c "${CLOCK}" -t "${START}" -S "${SADDR}" -D "${DADDR}" "${RXARGS}" -r &
  68        ip netns exec "${NS1}" "${BIN}" -"${IP}" -c "${CLOCK}" -t "${START}" -S "${SADDR}" -D "${DADDR}" "${TXARGS}"
  69        wait "$!"
  70}
  71
  72ip netns exec "${NS1}" tc qdisc add dev "${DEV}" root fq
  73do_test 4 mono a,-1 a,-1
  74do_test 6 mono a,0 a,0
  75do_test 6 mono a,10 a,10
  76do_test 4 mono a,10,b,20 a,10,b,20
  77do_test 6 mono a,20,b,10 b,20,a,20
  78
  79if ip netns exec "${NS1}" tc qdisc replace dev "${DEV}" root etf clockid CLOCK_TAI delta 400000; then
  80        ! do_test 4 tai a,-1 a,-1
  81        ! do_test 6 tai a,0 a,0
  82        do_test 6 tai a,10 a,10
  83        do_test 4 tai a,10,b,20 a,10,b,20
  84        do_test 6 tai a,20,b,10 b,10,a,20
  85else
  86        echo "tc ($(tc -V)) does not support qdisc etf. skipping"
  87fi
  88
  89echo OK. All tests passed
  90