15ef5c90eSJian Yang#!/bin/bash 25ef5c90eSJian Yang# SPDX-License-Identifier: GPL-2.0 35ef5c90eSJian Yang# 45ef5c90eSJian Yang# Send packets with transmit timestamps over loopback with netem 55ef5c90eSJian Yang# Verify that timestamps correspond to netem delay 65ef5c90eSJian Yang 75ef5c90eSJian Yangset -e 85ef5c90eSJian Yang 95ef5c90eSJian Yangsetup() { 105ef5c90eSJian Yang # set 1ms delay on lo egress 115ef5c90eSJian Yang tc qdisc add dev lo root netem delay 1ms 125ef5c90eSJian Yang 135ef5c90eSJian Yang # set 2ms delay on ifb0 egress 145ef5c90eSJian Yang modprobe ifb 155ef5c90eSJian Yang ip link add ifb_netem0 type ifb 165ef5c90eSJian Yang ip link set dev ifb_netem0 up 175ef5c90eSJian Yang tc qdisc add dev ifb_netem0 root netem delay 2ms 185ef5c90eSJian Yang 195ef5c90eSJian Yang # redirect lo ingress through ifb0 egress 205ef5c90eSJian Yang tc qdisc add dev lo handle ffff: ingress 215ef5c90eSJian Yang tc filter add dev lo parent ffff: \ 225ef5c90eSJian Yang u32 match mark 0 0xffff \ 235ef5c90eSJian Yang action mirred egress redirect dev ifb_netem0 245ef5c90eSJian Yang} 255ef5c90eSJian Yang 265ef5c90eSJian Yangrun_test_v4v6() { 275ef5c90eSJian Yang # SND will be delayed 1000us 285ef5c90eSJian Yang # ACK will be delayed 6000us: 1 + 2 ms round-trip 295ef5c90eSJian Yang local -r args="$@ -v 1000 -V 6000" 305ef5c90eSJian Yang 315ef5c90eSJian Yang ./txtimestamp ${args} -4 -L 127.0.0.1 325ef5c90eSJian Yang ./txtimestamp ${args} -6 -L ::1 335ef5c90eSJian Yang} 345ef5c90eSJian Yang 355ef5c90eSJian Yangrun_test_tcpudpraw() { 365ef5c90eSJian Yang local -r args=$@ 375ef5c90eSJian Yang 385ef5c90eSJian Yang run_test_v4v6 ${args} # tcp 395ef5c90eSJian Yang run_test_v4v6 ${args} -u # udp 405ef5c90eSJian Yang run_test_v4v6 ${args} -r # raw 415ef5c90eSJian Yang run_test_v4v6 ${args} -R # raw (IPPROTO_RAW) 425ef5c90eSJian Yang run_test_v4v6 ${args} -P # pf_packet 435ef5c90eSJian Yang} 445ef5c90eSJian Yang 455ef5c90eSJian Yangrun_test_all() { 465ef5c90eSJian Yang setup 475ef5c90eSJian Yang run_test_tcpudpraw # setsockopt 485ef5c90eSJian Yang run_test_tcpudpraw -C # cmsg 495ef5c90eSJian Yang run_test_tcpudpraw -n # timestamp w/o data 505ef5c90eSJian Yang echo "OK. All tests passed" 515ef5c90eSJian Yang} 525ef5c90eSJian Yang 535ef5c90eSJian Yangrun_test_one() { 545ef5c90eSJian Yang setup 555ef5c90eSJian Yang ./txtimestamp $@ 565ef5c90eSJian Yang} 575ef5c90eSJian Yang 585ef5c90eSJian Yangusage() { 595ef5c90eSJian Yang echo "Usage: $0 [ -r | --run ] <txtimestamp args> | [ -h | --help ]" 605ef5c90eSJian Yang echo " (no args) Run all tests" 615ef5c90eSJian Yang echo " -r|--run Run an individual test with arguments" 625ef5c90eSJian Yang echo " -h|--help Help" 635ef5c90eSJian Yang} 645ef5c90eSJian Yang 655ef5c90eSJian Yangmain() { 665ef5c90eSJian Yang if [[ $# -eq 0 ]]; then 675ef5c90eSJian Yang run_test_all 685ef5c90eSJian Yang else 695ef5c90eSJian Yang if [[ "$1" = "-r" || "$1" == "--run" ]]; then 705ef5c90eSJian Yang shift 715ef5c90eSJian Yang run_test_one $@ 725ef5c90eSJian Yang else 735ef5c90eSJian Yang usage 745ef5c90eSJian Yang fi 755ef5c90eSJian Yang fi 765ef5c90eSJian Yang} 775ef5c90eSJian Yang 78*b346c0c8SPaolo Pisatiif [[ -z "$(ip netns identify)" ]]; then 795ef5c90eSJian Yang ./in_netns.sh $0 $@ 805ef5c90eSJian Yangelse 815ef5c90eSJian Yang main $@ 825ef5c90eSJian Yangfi 83