17d4cbae0SPetr Machata# SPDX-License-Identifier: GPL-2.0
27d4cbae0SPetr Machata
37d4cbae0SPetr Machatamirror_install()
47d4cbae0SPetr Machata{
57d4cbae0SPetr Machata	local from_dev=$1; shift
67d4cbae0SPetr Machata	local direction=$1; shift
77d4cbae0SPetr Machata	local to_dev=$1; shift
87d4cbae0SPetr Machata	local filter=$1; shift
97d4cbae0SPetr Machata
107d4cbae0SPetr Machata	tc filter add dev $from_dev $direction \
117d4cbae0SPetr Machata	   pref 1000 $filter \
127d4cbae0SPetr Machata	   action mirred egress mirror dev $to_dev
137d4cbae0SPetr Machata}
147d4cbae0SPetr Machata
157d4cbae0SPetr Machatamirror_uninstall()
167d4cbae0SPetr Machata{
177d4cbae0SPetr Machata	local from_dev=$1; shift
187d4cbae0SPetr Machata	local direction=$1; shift
197d4cbae0SPetr Machata
207d4cbae0SPetr Machata	tc filter del dev $swp1 $direction pref 1000
217d4cbae0SPetr Machata}
227d4cbae0SPetr Machata
237d4cbae0SPetr Machatamirror_test()
247d4cbae0SPetr Machata{
257d4cbae0SPetr Machata	local vrf_name=$1; shift
267d4cbae0SPetr Machata	local sip=$1; shift
277d4cbae0SPetr Machata	local dip=$1; shift
287d4cbae0SPetr Machata	local dev=$1; shift
297d4cbae0SPetr Machata	local pref=$1; shift
307d4cbae0SPetr Machata	local expect=$1; shift
317d4cbae0SPetr Machata
327d4cbae0SPetr Machata	local t0=$(tc_rule_stats_get $dev $pref)
337d4cbae0SPetr Machata	ip vrf exec $vrf_name \
347d4cbae0SPetr Machata	   ${PING} ${sip:+-I $sip} $dip -c 10 -i 0.1 -w 2 &> /dev/null
357d4cbae0SPetr Machata	local t1=$(tc_rule_stats_get $dev $pref)
367d4cbae0SPetr Machata	local delta=$((t1 - t0))
377d4cbae0SPetr Machata	# Tolerate a couple stray extra packets.
387d4cbae0SPetr Machata	((expect <= delta && delta <= expect + 2))
397d4cbae0SPetr Machata	check_err $? "Expected to capture $expect packets, got $delta."
407d4cbae0SPetr Machata}
41