mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
1.7 KiB
82 lines
1.7 KiB
#!/bin/bash |
|
# SPDX-License-Identifier: GPL-2.0 |
|
# |
|
# Send packets with transmit timestamps over loopback with netem |
|
# Verify that timestamps correspond to netem delay |
|
|
|
set -e |
|
|
|
setup() { |
|
# set 1ms delay on lo egress |
|
tc qdisc add dev lo root netem delay 1ms |
|
|
|
# set 2ms delay on ifb0 egress |
|
modprobe ifb |
|
ip link add ifb_netem0 type ifb |
|
ip link set dev ifb_netem0 up |
|
tc qdisc add dev ifb_netem0 root netem delay 2ms |
|
|
|
# redirect lo ingress through ifb0 egress |
|
tc qdisc add dev lo handle ffff: ingress |
|
tc filter add dev lo parent ffff: \ |
|
u32 match mark 0 0xffff \ |
|
action mirred egress redirect dev ifb_netem0 |
|
} |
|
|
|
run_test_v4v6() { |
|
# SND will be delayed 1000us |
|
# ACK will be delayed 6000us: 1 + 2 ms round-trip |
|
local -r args="$@ -v 1000 -V 6000" |
|
|
|
./txtimestamp ${args} -4 -L 127.0.0.1 |
|
./txtimestamp ${args} -6 -L ::1 |
|
} |
|
|
|
run_test_tcpudpraw() { |
|
local -r args=$@ |
|
|
|
run_test_v4v6 ${args} # tcp |
|
run_test_v4v6 ${args} -u # udp |
|
run_test_v4v6 ${args} -r # raw |
|
run_test_v4v6 ${args} -R # raw (IPPROTO_RAW) |
|
run_test_v4v6 ${args} -P # pf_packet |
|
} |
|
|
|
run_test_all() { |
|
setup |
|
run_test_tcpudpraw # setsockopt |
|
run_test_tcpudpraw -C # cmsg |
|
run_test_tcpudpraw -n # timestamp w/o data |
|
echo "OK. All tests passed" |
|
} |
|
|
|
run_test_one() { |
|
setup |
|
./txtimestamp $@ |
|
} |
|
|
|
usage() { |
|
echo "Usage: $0 [ -r | --run ] <txtimestamp args> | [ -h | --help ]" |
|
echo " (no args) Run all tests" |
|
echo " -r|--run Run an individual test with arguments" |
|
echo " -h|--help Help" |
|
} |
|
|
|
main() { |
|
if [[ $# -eq 0 ]]; then |
|
run_test_all |
|
else |
|
if [[ "$1" = "-r" || "$1" == "--run" ]]; then |
|
shift |
|
run_test_one $@ |
|
else |
|
usage |
|
fi |
|
fi |
|
} |
|
|
|
if [[ -z "$(ip netns identify)" ]]; then |
|
./in_netns.sh $0 $@ |
|
else |
|
main $@ |
|
fi
|
|
|