Skip to content

Commit

Permalink
selftests: forwarding: fix race between packet receive and tc check
Browse files Browse the repository at this point in the history
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: 07e5c75 ("selftests: forwarding: Introduce tc flower matching tests")
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jiri Pirko authored and David S. Miller committed Nov 30, 2019
1 parent 14e54ab commit 408469d
Showing 1 changed file with 31 additions and 8 deletions.
39 changes: 31 additions & 8 deletions tools/testing/selftests/net/forwarding/tc_common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,48 @@

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()
{
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 ">"
}

0 comments on commit 408469d

Please sign in to comment.