145315673SPetr Machata#!/bin/bash 245315673SPetr Machata# SPDX-License-Identifier: GPL-2.0 345315673SPetr Machata 445315673SPetr Machata# This test uses standard topology for testing gretap. See 545315673SPetr Machata# mirror_gre_topo_lib.sh for more details. 645315673SPetr Machata# 745315673SPetr Machata# Test how mirrors to gretap and ip6gretap react to changes to relevant 845315673SPetr Machata# configuration. 945315673SPetr Machata 100eb8053cSIdo SchimmelALL_TESTS=" 110eb8053cSIdo Schimmel test_ttl 120eb8053cSIdo Schimmel test_tun_up 130eb8053cSIdo Schimmel test_egress_up 140eb8053cSIdo Schimmel test_remote_ip 156b45432dSPetr Machata test_tun_del 1677a8df38SPetr Machata test_route_del 170eb8053cSIdo Schimmel" 180eb8053cSIdo Schimmel 1945315673SPetr MachataNUM_NETIFS=6 2045315673SPetr Machatasource lib.sh 2145315673SPetr Machatasource mirror_lib.sh 2245315673SPetr Machatasource mirror_gre_lib.sh 2345315673SPetr Machatasource mirror_gre_topo_lib.sh 2445315673SPetr Machata 2545315673SPetr Machatasetup_prepare() 2645315673SPetr Machata{ 2745315673SPetr Machata h1=${NETIFS[p1]} 2845315673SPetr Machata swp1=${NETIFS[p2]} 2945315673SPetr Machata 3045315673SPetr Machata swp2=${NETIFS[p3]} 3145315673SPetr Machata h2=${NETIFS[p4]} 3245315673SPetr Machata 3345315673SPetr Machata swp3=${NETIFS[p5]} 3445315673SPetr Machata h3=${NETIFS[p6]} 3545315673SPetr Machata 3645315673SPetr Machata vrf_prepare 3745315673SPetr Machata mirror_gre_topo_create 3845315673SPetr Machata 3945315673SPetr Machata # This test downs $swp3, which deletes the configured IPv6 address 4045315673SPetr Machata # unless this sysctl is set. 41d51d10aaSPetr Machata sysctl_set net.ipv6.conf.$swp3.keep_addr_on_down 1 4245315673SPetr Machata 4345315673SPetr Machata ip address add dev $swp3 192.0.2.129/28 4445315673SPetr Machata ip address add dev $h3 192.0.2.130/28 4545315673SPetr Machata 4645315673SPetr Machata ip address add dev $swp3 2001:db8:2::1/64 4745315673SPetr Machata ip address add dev $h3 2001:db8:2::2/64 4845315673SPetr Machata} 4945315673SPetr Machata 5045315673SPetr Machatacleanup() 5145315673SPetr Machata{ 5245315673SPetr Machata pre_cleanup 5345315673SPetr Machata 5445315673SPetr Machata ip address del dev $h3 2001:db8:2::2/64 5545315673SPetr Machata ip address del dev $swp3 2001:db8:2::1/64 5645315673SPetr Machata 5745315673SPetr Machata ip address del dev $h3 192.0.2.130/28 5845315673SPetr Machata ip address del dev $swp3 192.0.2.129/28 5945315673SPetr Machata 60d51d10aaSPetr Machata sysctl_restore net.ipv6.conf.$swp3.keep_addr_on_down 6145315673SPetr Machata 6245315673SPetr Machata mirror_gre_topo_destroy 6345315673SPetr Machata vrf_cleanup 6445315673SPetr Machata} 6545315673SPetr Machata 6645315673SPetr Machatatest_span_gre_ttl() 6745315673SPetr Machata{ 6845315673SPetr Machata local tundev=$1; shift 6945315673SPetr Machata local type=$1; shift 7045315673SPetr Machata local prot=$1; shift 7145315673SPetr Machata local what=$1; shift 7245315673SPetr Machata 7345315673SPetr Machata RET=0 7445315673SPetr Machata 75*855067deSPetr Machata mirror_install $swp1 ingress $tundev \ 76*855067deSPetr Machata "prot ip flower $tcflags ip_prot icmp" 7745315673SPetr Machata tc filter add dev $h3 ingress pref 77 prot $prot \ 78af0a5111SPetr Machata flower skip_hw ip_ttl 50 action pass 7945315673SPetr Machata 8045315673SPetr Machata mirror_test v$h1 192.0.2.1 192.0.2.2 $h3 77 0 8145315673SPetr Machata 8245315673SPetr Machata ip link set dev $tundev type $type ttl 50 833dc178a9SPetr Machata sleep 2 8445315673SPetr Machata mirror_test v$h1 192.0.2.1 192.0.2.2 $h3 77 10 8545315673SPetr Machata 8645315673SPetr Machata ip link set dev $tundev type $type ttl 100 8745315673SPetr Machata tc filter del dev $h3 ingress pref 77 8845315673SPetr Machata mirror_uninstall $swp1 ingress 8945315673SPetr Machata 9045315673SPetr Machata log_test "$what: TTL change ($tcflags)" 9145315673SPetr Machata} 9245315673SPetr Machata 9345315673SPetr Machatatest_span_gre_tun_up() 9445315673SPetr Machata{ 9545315673SPetr Machata local tundev=$1; shift 9645315673SPetr Machata local what=$1; shift 9745315673SPetr Machata 9845315673SPetr Machata RET=0 9945315673SPetr Machata 10045315673SPetr Machata ip link set dev $tundev down 10145315673SPetr Machata mirror_install $swp1 ingress $tundev "matchall $tcflags" 10245315673SPetr Machata fail_test_span_gre_dir $tundev ingress 10345315673SPetr Machata 10445315673SPetr Machata ip link set dev $tundev up 10545315673SPetr Machata 10645315673SPetr Machata quick_test_span_gre_dir $tundev ingress 10745315673SPetr Machata mirror_uninstall $swp1 ingress 10845315673SPetr Machata 10945315673SPetr Machata log_test "$what: tunnel down/up ($tcflags)" 11045315673SPetr Machata} 11145315673SPetr Machata 11245315673SPetr Machatatest_span_gre_egress_up() 11345315673SPetr Machata{ 11445315673SPetr Machata local tundev=$1; shift 11545315673SPetr Machata local remote_ip=$1; shift 11645315673SPetr Machata local what=$1; shift 11745315673SPetr Machata 11845315673SPetr Machata RET=0 11945315673SPetr Machata 12045315673SPetr Machata ip link set dev $swp3 down 12145315673SPetr Machata mirror_install $swp1 ingress $tundev "matchall $tcflags" 12245315673SPetr Machata fail_test_span_gre_dir $tundev ingress 12345315673SPetr Machata 12445315673SPetr Machata # After setting the device up, wait for neighbor to get resolved so that 12545315673SPetr Machata # we can expect mirroring to work. 12645315673SPetr Machata ip link set dev $swp3 up 1274e74cc7cSPetr Machata setup_wait_dev $swp3 1284e74cc7cSPetr Machata ping -c 1 -I $swp3 $remote_ip &>/dev/null 12945315673SPetr Machata 13045315673SPetr Machata quick_test_span_gre_dir $tundev ingress 13145315673SPetr Machata mirror_uninstall $swp1 ingress 13245315673SPetr Machata 13345315673SPetr Machata log_test "$what: egress down/up ($tcflags)" 13445315673SPetr Machata} 13545315673SPetr Machata 13645315673SPetr Machatatest_span_gre_remote_ip() 13745315673SPetr Machata{ 13845315673SPetr Machata local tundev=$1; shift 13945315673SPetr Machata local type=$1; shift 14045315673SPetr Machata local correct_ip=$1; shift 14145315673SPetr Machata local wrong_ip=$1; shift 14245315673SPetr Machata local what=$1; shift 14345315673SPetr Machata 14445315673SPetr Machata RET=0 14545315673SPetr Machata 14645315673SPetr Machata ip link set dev $tundev type $type remote $wrong_ip 14745315673SPetr Machata mirror_install $swp1 ingress $tundev "matchall $tcflags" 14845315673SPetr Machata fail_test_span_gre_dir $tundev ingress 14945315673SPetr Machata 15045315673SPetr Machata ip link set dev $tundev type $type remote $correct_ip 15145315673SPetr Machata quick_test_span_gre_dir $tundev ingress 15245315673SPetr Machata mirror_uninstall $swp1 ingress 15345315673SPetr Machata 15445315673SPetr Machata log_test "$what: remote address change ($tcflags)" 15545315673SPetr Machata} 15645315673SPetr Machata 1576b45432dSPetr Machatatest_span_gre_tun_del() 1586b45432dSPetr Machata{ 1596b45432dSPetr Machata local tundev=$1; shift 1606b45432dSPetr Machata local type=$1; shift 1616b45432dSPetr Machata local flags=$1; shift 1626b45432dSPetr Machata local local_ip=$1; shift 1636b45432dSPetr Machata local remote_ip=$1; shift 1646b45432dSPetr Machata local what=$1; shift 1656b45432dSPetr Machata 1666b45432dSPetr Machata RET=0 1676b45432dSPetr Machata 1686b45432dSPetr Machata mirror_install $swp1 ingress $tundev "matchall $tcflags" 1696b45432dSPetr Machata quick_test_span_gre_dir $tundev ingress 1706b45432dSPetr Machata ip link del dev $tundev 1716b45432dSPetr Machata fail_test_span_gre_dir $tundev ingress 1726b45432dSPetr Machata 1736b45432dSPetr Machata tunnel_create $tundev $type $local_ip $remote_ip \ 1746b45432dSPetr Machata ttl 100 tos inherit $flags 1756b45432dSPetr Machata 1766b45432dSPetr Machata # Recreating the tunnel doesn't reestablish mirroring, so reinstall it 1776b45432dSPetr Machata # and verify it works for the follow-up tests. 1786b45432dSPetr Machata mirror_uninstall $swp1 ingress 1796b45432dSPetr Machata mirror_install $swp1 ingress $tundev "matchall $tcflags" 1806b45432dSPetr Machata quick_test_span_gre_dir $tundev ingress 1816b45432dSPetr Machata mirror_uninstall $swp1 ingress 1826b45432dSPetr Machata 1836b45432dSPetr Machata log_test "$what: tunnel deleted ($tcflags)" 1846b45432dSPetr Machata} 1856b45432dSPetr Machata 18677a8df38SPetr Machatatest_span_gre_route_del() 18777a8df38SPetr Machata{ 18877a8df38SPetr Machata local tundev=$1; shift 18977a8df38SPetr Machata local edev=$1; shift 19077a8df38SPetr Machata local route=$1; shift 19177a8df38SPetr Machata local what=$1; shift 19277a8df38SPetr Machata 19377a8df38SPetr Machata RET=0 19477a8df38SPetr Machata 19577a8df38SPetr Machata mirror_install $swp1 ingress $tundev "matchall $tcflags" 19677a8df38SPetr Machata quick_test_span_gre_dir $tundev ingress 19777a8df38SPetr Machata 19877a8df38SPetr Machata ip route del $route dev $edev 19977a8df38SPetr Machata fail_test_span_gre_dir $tundev ingress 20077a8df38SPetr Machata 20177a8df38SPetr Machata ip route add $route dev $edev 20277a8df38SPetr Machata quick_test_span_gre_dir $tundev ingress 20377a8df38SPetr Machata 20477a8df38SPetr Machata mirror_uninstall $swp1 ingress 20577a8df38SPetr Machata 20677a8df38SPetr Machata log_test "$what: underlay route removal ($tcflags)" 20777a8df38SPetr Machata} 20877a8df38SPetr Machata 2090eb8053cSIdo Schimmeltest_ttl() 2100eb8053cSIdo Schimmel{ 2110eb8053cSIdo Schimmel test_span_gre_ttl gt4 gretap ip "mirror to gretap" 2120eb8053cSIdo Schimmel test_span_gre_ttl gt6 ip6gretap ipv6 "mirror to ip6gretap" 2130eb8053cSIdo Schimmel} 2140eb8053cSIdo Schimmel 2150eb8053cSIdo Schimmeltest_tun_up() 2160eb8053cSIdo Schimmel{ 2170eb8053cSIdo Schimmel test_span_gre_tun_up gt4 "mirror to gretap" 2180eb8053cSIdo Schimmel test_span_gre_tun_up gt6 "mirror to ip6gretap" 2190eb8053cSIdo Schimmel} 2200eb8053cSIdo Schimmel 2210eb8053cSIdo Schimmeltest_egress_up() 2220eb8053cSIdo Schimmel{ 2230eb8053cSIdo Schimmel test_span_gre_egress_up gt4 192.0.2.130 "mirror to gretap" 2240eb8053cSIdo Schimmel test_span_gre_egress_up gt6 2001:db8:2::2 "mirror to ip6gretap" 2250eb8053cSIdo Schimmel} 2260eb8053cSIdo Schimmel 2270eb8053cSIdo Schimmeltest_remote_ip() 2280eb8053cSIdo Schimmel{ 2290eb8053cSIdo Schimmel test_span_gre_remote_ip gt4 gretap 192.0.2.130 192.0.2.132 "mirror to gretap" 2300eb8053cSIdo Schimmel test_span_gre_remote_ip gt6 ip6gretap 2001:db8:2::2 2001:db8:2::4 "mirror to ip6gretap" 2310eb8053cSIdo Schimmel} 2320eb8053cSIdo Schimmel 2336b45432dSPetr Machatatest_tun_del() 2346b45432dSPetr Machata{ 2356b45432dSPetr Machata test_span_gre_tun_del gt4 gretap "" \ 2366b45432dSPetr Machata 192.0.2.129 192.0.2.130 "mirror to gretap" 2376b45432dSPetr Machata test_span_gre_tun_del gt6 ip6gretap allow-localremote \ 2386b45432dSPetr Machata 2001:db8:2::1 2001:db8:2::2 "mirror to ip6gretap" 2396b45432dSPetr Machata} 2406b45432dSPetr Machata 24177a8df38SPetr Machatatest_route_del() 24277a8df38SPetr Machata{ 24377a8df38SPetr Machata test_span_gre_route_del gt4 $swp3 192.0.2.128/28 "mirror to gretap" 24477a8df38SPetr Machata test_span_gre_route_del gt6 $swp3 2001:db8:2::/64 "mirror to ip6gretap" 24577a8df38SPetr Machata} 24677a8df38SPetr Machata 24745315673SPetr Machatatest_all() 24845315673SPetr Machata{ 24945315673SPetr Machata slow_path_trap_install $swp1 ingress 25045315673SPetr Machata slow_path_trap_install $swp1 egress 25145315673SPetr Machata 2520eb8053cSIdo Schimmel tests_run 25345315673SPetr Machata 25445315673SPetr Machata slow_path_trap_uninstall $swp1 egress 25545315673SPetr Machata slow_path_trap_uninstall $swp1 ingress 25645315673SPetr Machata} 25745315673SPetr Machata 25845315673SPetr Machatatrap cleanup EXIT 25945315673SPetr Machata 26045315673SPetr Machatasetup_prepare 26145315673SPetr Machatasetup_wait 26245315673SPetr Machata 26345315673SPetr Machatatcflags="skip_hw" 26445315673SPetr Machatatest_all 26545315673SPetr Machata 26645315673SPetr Machataif ! tc_offload_check; then 26745315673SPetr Machata echo "WARN: Could not test offloaded functionality" 26845315673SPetr Machataelse 26945315673SPetr Machata tcflags="skip_sw" 27045315673SPetr Machata test_all 27145315673SPetr Machatafi 27245315673SPetr Machata 27345315673SPetr Machataexit $EXIT_STATUS 274