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