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