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 231233898aSPetr Machatais_ipv6() 241233898aSPetr Machata{ 251233898aSPetr Machata local addr=$1; shift 261233898aSPetr Machata 271233898aSPetr Machata [[ -z ${addr//[0-9a-fA-F:]/} ]] 281233898aSPetr Machata} 291233898aSPetr Machata 307d4cbae0SPetr Machatamirror_test() 317d4cbae0SPetr Machata{ 327d4cbae0SPetr Machata local vrf_name=$1; shift 337d4cbae0SPetr Machata local sip=$1; shift 347d4cbae0SPetr Machata local dip=$1; shift 357d4cbae0SPetr Machata local dev=$1; shift 367d4cbae0SPetr Machata local pref=$1; shift 377d4cbae0SPetr Machata local expect=$1; shift 387d4cbae0SPetr Machata 391233898aSPetr Machata if is_ipv6 $dip; then 401233898aSPetr Machata local proto=-6 411233898aSPetr Machata local type="icmp6 type=128" # Echo request. 421233898aSPetr Machata else 431233898aSPetr Machata local proto= 441233898aSPetr Machata local type="icmp echoreq" 451233898aSPetr Machata fi 461233898aSPetr Machata 477d4cbae0SPetr Machata local t0=$(tc_rule_stats_get $dev $pref) 481233898aSPetr Machata $MZ $proto $vrf_name ${sip:+-A $sip} -B $dip -a own -b bc -q \ 491233898aSPetr Machata -c 10 -d 100msec -t $type 50db2c5bfcSPetr Machata sleep 0.5 517d4cbae0SPetr Machata local t1=$(tc_rule_stats_get $dev $pref) 527d4cbae0SPetr Machata local delta=$((t1 - t0)) 537d4cbae0SPetr Machata # Tolerate a couple stray extra packets. 547d4cbae0SPetr Machata ((expect <= delta && delta <= expect + 2)) 557d4cbae0SPetr Machata check_err $? "Expected to capture $expect packets, got $delta." 567d4cbae0SPetr Machata} 57d5ea2bfcSPetr Machata 58d5ea2bfcSPetr Machatado_test_span_dir_ips() 59d5ea2bfcSPetr Machata{ 60d5ea2bfcSPetr Machata local expect=$1; shift 61d5ea2bfcSPetr Machata local dev=$1; shift 62d5ea2bfcSPetr Machata local direction=$1; shift 63d5ea2bfcSPetr Machata local ip1=$1; shift 64d5ea2bfcSPetr Machata local ip2=$1; shift 65d5ea2bfcSPetr Machata 66d5ea2bfcSPetr Machata icmp_capture_install $dev 67d5ea2bfcSPetr Machata mirror_test v$h1 $ip1 $ip2 $dev 100 $expect 68d5ea2bfcSPetr Machata mirror_test v$h2 $ip2 $ip1 $dev 100 $expect 69d5ea2bfcSPetr Machata icmp_capture_uninstall $dev 70d5ea2bfcSPetr Machata} 71d5ea2bfcSPetr Machata 72d5ea2bfcSPetr Machataquick_test_span_dir_ips() 73d5ea2bfcSPetr Machata{ 74d5ea2bfcSPetr Machata do_test_span_dir_ips 10 "$@" 75d5ea2bfcSPetr Machata} 76d5ea2bfcSPetr Machata 77d5ea2bfcSPetr Machatafail_test_span_dir_ips() 78d5ea2bfcSPetr Machata{ 79d5ea2bfcSPetr Machata do_test_span_dir_ips 0 "$@" 80d5ea2bfcSPetr Machata} 81d5ea2bfcSPetr Machata 82d5ea2bfcSPetr Machatatest_span_dir_ips() 83d5ea2bfcSPetr Machata{ 84d5ea2bfcSPetr Machata local dev=$1; shift 85d5ea2bfcSPetr Machata local direction=$1; shift 86d5ea2bfcSPetr Machata local forward_type=$1; shift 87d5ea2bfcSPetr Machata local backward_type=$1; shift 88d5ea2bfcSPetr Machata local ip1=$1; shift 89d5ea2bfcSPetr Machata local ip2=$1; shift 90d5ea2bfcSPetr Machata 91d5ea2bfcSPetr Machata quick_test_span_dir_ips "$dev" "$direction" "$ip1" "$ip2" 92d5ea2bfcSPetr Machata 93d5ea2bfcSPetr Machata icmp_capture_install $dev "type $forward_type" 94d5ea2bfcSPetr Machata mirror_test v$h1 $ip1 $ip2 $dev 100 10 95d5ea2bfcSPetr Machata icmp_capture_uninstall $dev 96d5ea2bfcSPetr Machata 97d5ea2bfcSPetr Machata icmp_capture_install $dev "type $backward_type" 98d5ea2bfcSPetr Machata mirror_test v$h2 $ip2 $ip1 $dev 100 10 99d5ea2bfcSPetr Machata icmp_capture_uninstall $dev 100d5ea2bfcSPetr Machata} 101d5ea2bfcSPetr Machata 102d5ea2bfcSPetr Machatafail_test_span_dir() 103d5ea2bfcSPetr Machata{ 104d5ea2bfcSPetr Machata fail_test_span_dir_ips "$@" 192.0.2.1 192.0.2.2 105d5ea2bfcSPetr Machata} 106d5ea2bfcSPetr Machata 107d5ea2bfcSPetr Machatatest_span_dir() 108d5ea2bfcSPetr Machata{ 109d5ea2bfcSPetr Machata test_span_dir_ips "$@" 192.0.2.1 192.0.2.2 110d5ea2bfcSPetr Machata} 111900530f3SPetr Machata 112900530f3SPetr Machatado_test_span_vlan_dir_ips() 113900530f3SPetr Machata{ 114900530f3SPetr Machata local expect=$1; shift 115900530f3SPetr Machata local dev=$1; shift 116900530f3SPetr Machata local vid=$1; shift 117900530f3SPetr Machata local direction=$1; shift 118*af0a5111SPetr Machata local ul_proto=$1; shift 119900530f3SPetr Machata local ip1=$1; shift 120900530f3SPetr Machata local ip2=$1; shift 121900530f3SPetr Machata 122275225fbSPetr Machata # Install the capture as skip_hw to avoid double-counting of packets. 123275225fbSPetr Machata # The traffic is meant for local box anyway, so will be trapped to 124275225fbSPetr Machata # kernel. 125*af0a5111SPetr Machata vlan_capture_install $dev "skip_hw vlan_id $vid vlan_ethtype $ul_proto" 126900530f3SPetr Machata mirror_test v$h1 $ip1 $ip2 $dev 100 $expect 127900530f3SPetr Machata mirror_test v$h2 $ip2 $ip1 $dev 100 $expect 128900530f3SPetr Machata vlan_capture_uninstall $dev 129900530f3SPetr Machata} 130900530f3SPetr Machata 131900530f3SPetr Machataquick_test_span_vlan_dir_ips() 132900530f3SPetr Machata{ 133900530f3SPetr Machata do_test_span_vlan_dir_ips 10 "$@" 134900530f3SPetr Machata} 135900530f3SPetr Machata 136900530f3SPetr Machatafail_test_span_vlan_dir_ips() 137900530f3SPetr Machata{ 138900530f3SPetr Machata do_test_span_vlan_dir_ips 0 "$@" 139900530f3SPetr Machata} 140900530f3SPetr Machata 141900530f3SPetr Machataquick_test_span_vlan_dir() 142900530f3SPetr Machata{ 143900530f3SPetr Machata quick_test_span_vlan_dir_ips "$@" 192.0.2.1 192.0.2.2 144900530f3SPetr Machata} 145900530f3SPetr Machata 146900530f3SPetr Machatafail_test_span_vlan_dir() 147900530f3SPetr Machata{ 148900530f3SPetr Machata fail_test_span_vlan_dir_ips "$@" 192.0.2.1 192.0.2.2 149900530f3SPetr Machata} 150