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