mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-17 23:16:44 +07:00
selftests: forwarding: fix race between packet receive and tc check
It is possible that tc stats get checked before the packet we check for
actually arrived into the interface and accounted for.
Fix it by checking for the expected result in a loop until
timeout is reached (by default 1 second).
Fixes: 07e5c75184
("selftests: forwarding: Introduce tc flower matching tests")
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
14e54ab914
commit
408469d31e
@ -3,16 +3,42 @@
|
||||
|
||||
CHECK_TC="yes"
|
||||
|
||||
# Can be overridden by the configuration file. See lib.sh
|
||||
TC_HIT_TIMEOUT=${TC_HIT_TIMEOUT:=1000} # ms
|
||||
|
||||
__tc_check_packets()
|
||||
{
|
||||
local id=$1
|
||||
local handle=$2
|
||||
local count=$3
|
||||
local operator=$4
|
||||
|
||||
start_time="$(date -u +%s%3N)"
|
||||
while true
|
||||
do
|
||||
cmd_jq "tc -j -s filter show $id" \
|
||||
".[] | select(.options.handle == $handle) | \
|
||||
select(.options.actions[0].stats.packets $operator $count)" \
|
||||
&> /dev/null
|
||||
ret=$?
|
||||
if [[ $ret -eq 0 ]]; then
|
||||
return $ret
|
||||
fi
|
||||
current_time="$(date -u +%s%3N)"
|
||||
diff=$(expr $current_time - $start_time)
|
||||
if [ "$diff" -gt "$TC_HIT_TIMEOUT" ]; then
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
tc_check_packets()
|
||||
{
|
||||
local id=$1
|
||||
local handle=$2
|
||||
local count=$3
|
||||
|
||||
cmd_jq "tc -j -s filter show $id" \
|
||||
".[] | select(.options.handle == $handle) | \
|
||||
select(.options.actions[0].stats.packets == $count)" \
|
||||
&> /dev/null
|
||||
__tc_check_packets "$id" "$handle" "$count" "=="
|
||||
}
|
||||
|
||||
tc_check_packets_hitting()
|
||||
@ -20,8 +46,5 @@ tc_check_packets_hitting()
|
||||
local id=$1
|
||||
local handle=$2
|
||||
|
||||
cmd_jq "tc -j -s filter show $id" \
|
||||
".[] | select(.options.handle == $handle) | \
|
||||
select(.options.actions[0].stats.packets > 0)" \
|
||||
&> /dev/null
|
||||
__tc_check_packets "$id" "$handle" 0 ">"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user