1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4source lib.sh 5 6IP4=172.16.0.1/24 7TGT4=172.16.0.2 8IP6=2001:db8:1::1/64 9TGT6=2001:db8:1::2 10 11cleanup() 12{ 13 cleanup_ns $NS 14} 15 16trap cleanup EXIT 17 18# Namespaces 19setup_ns NS 20 21ip netns exec $NS sysctl -w net.ipv4.ping_group_range='0 2147483647' > /dev/null 22 23# Connectivity 24ip -netns $NS link add type dummy 25ip -netns $NS link set dev dummy0 up 26ip -netns $NS addr add $IP4 dev dummy0 27ip -netns $NS addr add $IP6 dev dummy0 28 29# Need FQ for TXTIME 30ip netns exec $NS tc qdisc replace dev dummy0 root fq 31 32# Test 33BAD=0 34TOTAL=0 35 36check_result() { 37 local ret=$1 38 local got=$2 39 local exp=$3 40 local case=$4 41 local xfail=$5 42 local xf= 43 local inc= 44 45 if [ "$xfail" == "xfail" ]; then 46 xf="(XFAIL)" 47 inc=0 48 else 49 inc=1 50 fi 51 52 ((TOTAL++)) 53 if [ $ret -ne 0 ]; then 54 echo " Case $case returned $ret, expected 0 $xf" 55 ((BAD+=inc)) 56 elif [ "$2" != "$3" ]; then 57 echo " Case $case returned '$got', expected '$exp' $xf" 58 ((BAD+=inc)) 59 fi 60} 61 62for i in "-4 $TGT4" "-6 $TGT6"; do 63 for p in u i r; do 64 [ $p == "u" ] && prot=UDPv${i:1:2} 65 [ $p == "i" ] && prot=ICMPv${i:1:2} 66 [ $p == "r" ] && prot=RAWv${i:1:2} 67 68 ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234) 69 check_result $? "$ts" "" "$prot - no options" 70 71 ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234 -t | wc -l) 72 check_result $? "$ts" "2" "$prot - ts cnt" 73 ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234 -t | 74 sed -n "s/.*SCHED ts0 [0-9].*/OK/p") 75 check_result $? "$ts" "OK" "$prot - ts0 SCHED" 76 ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234 -t | 77 sed -n "s/.*SND ts0 [0-9].*/OK/p") 78 check_result $? "$ts" "OK" "$prot - ts0 SND" 79 80 ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234 -t -d 1000 | 81 awk '/SND/ { if ($3 > 1000) print "OK"; }') 82 check_result $? "$ts" "OK" "$prot - TXTIME abs" 83 84 [ "$KSFT_MACHINE_SLOW" = yes ] && xfail=xfail 85 86 ts=$(ip netns exec $NS ./cmsg_sender -p $p $i 1234 -t -d 1000 | 87 awk '/SND/ {snd=$3} 88 /SCHED/ {sch=$3} 89 END { if (snd - sch > 500) print "OK"; 90 else print snd, "-", sch, "<", 500; }') 91 check_result $? "$ts" "OK" "$prot - TXTIME rel" $xfail 92 done 93done 94 95# Summary 96if [ $BAD -ne 0 ]; then 97 echo "FAIL - $BAD/$TOTAL cases failed" 98 exit 1 99else 100 echo "OK" 101 exit 0 102fi 103