1# SPDX-License-Identifier: GPL-2.0 2 3mirror_install() 4{ 5 local from_dev=$1; shift 6 local direction=$1; shift 7 local to_dev=$1; shift 8 local filter=$1; shift 9 10 tc filter add dev $from_dev $direction \ 11 pref 1000 $filter \ 12 action mirred egress mirror dev $to_dev 13} 14 15mirror_uninstall() 16{ 17 local from_dev=$1; shift 18 local direction=$1; shift 19 20 tc filter del dev $swp1 $direction pref 1000 21} 22 23mirror_test() 24{ 25 local vrf_name=$1; shift 26 local sip=$1; shift 27 local dip=$1; shift 28 local dev=$1; shift 29 local pref=$1; shift 30 local expect=$1; shift 31 32 local t0=$(tc_rule_stats_get $dev $pref) 33 ip vrf exec $vrf_name \ 34 ${PING} ${sip:+-I $sip} $dip -c 10 -i 0.1 -w 2 &> /dev/null 35 local t1=$(tc_rule_stats_get $dev $pref) 36 local delta=$((t1 - t0)) 37 # Tolerate a couple stray extra packets. 38 ((expect <= delta && delta <= expect + 2)) 39 check_err $? "Expected to capture $expect packets, got $delta." 40} 41 42do_test_span_dir_ips() 43{ 44 local expect=$1; shift 45 local dev=$1; shift 46 local direction=$1; shift 47 local ip1=$1; shift 48 local ip2=$1; shift 49 50 icmp_capture_install $dev 51 mirror_test v$h1 $ip1 $ip2 $dev 100 $expect 52 mirror_test v$h2 $ip2 $ip1 $dev 100 $expect 53 icmp_capture_uninstall $dev 54} 55 56quick_test_span_dir_ips() 57{ 58 do_test_span_dir_ips 10 "$@" 59} 60 61fail_test_span_dir_ips() 62{ 63 do_test_span_dir_ips 0 "$@" 64} 65 66test_span_dir_ips() 67{ 68 local dev=$1; shift 69 local direction=$1; shift 70 local forward_type=$1; shift 71 local backward_type=$1; shift 72 local ip1=$1; shift 73 local ip2=$1; shift 74 75 quick_test_span_dir_ips "$dev" "$direction" "$ip1" "$ip2" 76 77 icmp_capture_install $dev "type $forward_type" 78 mirror_test v$h1 $ip1 $ip2 $dev 100 10 79 icmp_capture_uninstall $dev 80 81 icmp_capture_install $dev "type $backward_type" 82 mirror_test v$h2 $ip2 $ip1 $dev 100 10 83 icmp_capture_uninstall $dev 84} 85 86fail_test_span_dir() 87{ 88 fail_test_span_dir_ips "$@" 192.0.2.1 192.0.2.2 89} 90 91test_span_dir() 92{ 93 test_span_dir_ips "$@" 192.0.2.1 192.0.2.2 94} 95