1*af6ca205SJakub Kicinski#!/bin/bash
2*af6ca205SJakub Kicinski# SPDX-License-Identifier: GPL-2.0
3*af6ca205SJakub Kicinski
4*af6ca205SJakub KicinskiNS=ns
5*af6ca205SJakub KicinskiIP4=172.16.0.1/24
6*af6ca205SJakub KicinskiTGT4=172.16.0.2
7*af6ca205SJakub KicinskiIP6=2001:db8:1::1/64
8*af6ca205SJakub KicinskiTGT6=2001:db8:1::2
9*af6ca205SJakub Kicinski
10*af6ca205SJakub Kicinskicleanup()
11*af6ca205SJakub Kicinski{
12*af6ca205SJakub Kicinski    ip netns del $NS
13*af6ca205SJakub Kicinski}
14*af6ca205SJakub Kicinski
15*af6ca205SJakub Kicinskitrap cleanup EXIT
16*af6ca205SJakub Kicinski
17*af6ca205SJakub Kicinski# Namespaces
18*af6ca205SJakub Kicinskiip netns add $NS
19*af6ca205SJakub Kicinski
20*af6ca205SJakub Kicinskiip netns exec $NS sysctl -w net.ipv4.ping_group_range='0 2147483647' > /dev/null
21*af6ca205SJakub Kicinski
22*af6ca205SJakub Kicinski# Connectivity
23*af6ca205SJakub Kicinskiip -netns $NS link add type dummy
24*af6ca205SJakub Kicinskiip -netns $NS link set dev dummy0 up
25*af6ca205SJakub Kicinskiip -netns $NS addr add $IP4 dev dummy0
26*af6ca205SJakub Kicinskiip -netns $NS addr add $IP6 dev dummy0
27*af6ca205SJakub Kicinski
28*af6ca205SJakub Kicinski# Need FQ for TXTIME
29*af6ca205SJakub Kicinskiip netns exec $NS tc qdisc replace dev dummy0 root fq
30*af6ca205SJakub Kicinski
31*af6ca205SJakub Kicinski# Test
32*af6ca205SJakub KicinskiBAD=0
33*af6ca205SJakub KicinskiTOTAL=0
34*af6ca205SJakub Kicinski
35*af6ca205SJakub Kicinskicheck_result() {
36*af6ca205SJakub Kicinski    ((TOTAL++))
37*af6ca205SJakub Kicinski    if [ $1 -ne 0 ]; then
38*af6ca205SJakub Kicinski	echo "  Case $4 returned $1, expected 0"
39*af6ca205SJakub Kicinski	((BAD++))
40*af6ca205SJakub Kicinski    elif [ "$2" != "$3" ]; then
41*af6ca205SJakub Kicinski	echo "  Case $4 returned '$2', expected '$3'"
42*af6ca205SJakub Kicinski	((BAD++))
43*af6ca205SJakub Kicinski    fi
44*af6ca205SJakub Kicinski}
45*af6ca205SJakub Kicinski
46*af6ca205SJakub Kicinskifor i in "-4 $TGT4" "-6 $TGT6"; do
47*af6ca205SJakub Kicinski    for p in u i r; do
48*af6ca205SJakub Kicinski	[ $p == "u" ] && prot=UDPv${i:1:2}
49*af6ca205SJakub Kicinski	[ $p == "i" ] && prot=ICMPv${i:1:2}
50*af6ca205SJakub Kicinski	[ $p == "r" ] && prot=RAWv${i:1:2}
51*af6ca205SJakub Kicinski
52*af6ca205SJakub Kicinski	ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234)
53*af6ca205SJakub Kicinski	check_result $? "$ts" "" "$prot - no options"
54*af6ca205SJakub Kicinski
55*af6ca205SJakub Kicinski	ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234 -t | wc -l)
56*af6ca205SJakub Kicinski	check_result $? "$ts" "2" "$prot - ts cnt"
57*af6ca205SJakub Kicinski	ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234 -t |
58*af6ca205SJakub Kicinski		 sed -n "s/.*SCHED ts0 [0-9].*/OK/p")
59*af6ca205SJakub Kicinski	check_result $? "$ts" "OK" "$prot - ts0 SCHED"
60*af6ca205SJakub Kicinski	ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234 -t |
61*af6ca205SJakub Kicinski		 sed -n "s/.*SND ts0 [0-9].*/OK/p")
62*af6ca205SJakub Kicinski	check_result $? "$ts" "OK" "$prot - ts0 SND"
63*af6ca205SJakub Kicinski
64*af6ca205SJakub Kicinski	ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234 -t -d 1000 |
65*af6ca205SJakub Kicinski		 awk '/SND/ { if ($3 > 1000) print "OK"; }')
66*af6ca205SJakub Kicinski	check_result $? "$ts" "OK" "$prot - TXTIME abs"
67*af6ca205SJakub Kicinski
68*af6ca205SJakub Kicinski	ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234 -t -d 1000 |
69*af6ca205SJakub Kicinski		 awk '/SND/ {snd=$3}
70*af6ca205SJakub Kicinski		      /SCHED/ {sch=$3}
71*af6ca205SJakub Kicinski		      END { if (snd - sch > 500) print "OK"; }')
72*af6ca205SJakub Kicinski	check_result $? "$ts" "OK" "$prot - TXTIME rel"
73*af6ca205SJakub Kicinski    done
74*af6ca205SJakub Kicinskidone
75*af6ca205SJakub Kicinski
76*af6ca205SJakub Kicinski# Summary
77*af6ca205SJakub Kicinskiif [ $BAD -ne 0 ]; then
78*af6ca205SJakub Kicinski    echo "FAIL - $BAD/$TOTAL cases failed"
79*af6ca205SJakub Kicinski    exit 1
80*af6ca205SJakub Kicinskielse
81*af6ca205SJakub Kicinski    echo "OK"
82*af6ca205SJakub Kicinski    exit 0
83*af6ca205SJakub Kicinskifi
84