at v4.18 278 lines 5.9 kB view raw
1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4# This test uses standard topology for testing gretap. See 5# mirror_gre_topo_lib.sh for more details. 6# 7# Test how mirrors to gretap and ip6gretap react to changes to relevant 8# configuration. 9 10ALL_TESTS=" 11 test_ttl 12 test_tun_up 13 test_egress_up 14 test_remote_ip 15 test_tun_del 16 test_route_del 17" 18 19NUM_NETIFS=6 20source lib.sh 21source mirror_lib.sh 22source mirror_gre_lib.sh 23source mirror_gre_topo_lib.sh 24 25setup_prepare() 26{ 27 h1=${NETIFS[p1]} 28 swp1=${NETIFS[p2]} 29 30 swp2=${NETIFS[p3]} 31 h2=${NETIFS[p4]} 32 33 swp3=${NETIFS[p5]} 34 h3=${NETIFS[p6]} 35 36 vrf_prepare 37 mirror_gre_topo_create 38 39 # This test downs $swp3, which deletes the configured IPv6 address 40 # unless this sysctl is set. 41 sysctl_set net.ipv6.conf.$swp3.keep_addr_on_down 1 42 43 ip address add dev $swp3 192.0.2.129/28 44 ip address add dev $h3 192.0.2.130/28 45 46 ip address add dev $swp3 2001:db8:2::1/64 47 ip address add dev $h3 2001:db8:2::2/64 48} 49 50cleanup() 51{ 52 pre_cleanup 53 54 ip address del dev $h3 2001:db8:2::2/64 55 ip address del dev $swp3 2001:db8:2::1/64 56 57 ip address del dev $h3 192.0.2.130/28 58 ip address del dev $swp3 192.0.2.129/28 59 60 sysctl_restore net.ipv6.conf.$swp3.keep_addr_on_down 61 62 mirror_gre_topo_destroy 63 vrf_cleanup 64} 65 66test_span_gre_ttl() 67{ 68 local tundev=$1; shift 69 local type=$1; shift 70 local prot=$1; shift 71 local what=$1; shift 72 73 RET=0 74 75 mirror_install $swp1 ingress $tundev "matchall $tcflags" 76 tc filter add dev $h3 ingress pref 77 prot $prot \ 77 flower ip_ttl 50 action pass 78 79 mirror_test v$h1 192.0.2.1 192.0.2.2 $h3 77 0 80 81 ip link set dev $tundev type $type ttl 50 82 mirror_test v$h1 192.0.2.1 192.0.2.2 $h3 77 10 83 84 ip link set dev $tundev type $type ttl 100 85 tc filter del dev $h3 ingress pref 77 86 mirror_uninstall $swp1 ingress 87 88 log_test "$what: TTL change ($tcflags)" 89} 90 91test_span_gre_tun_up() 92{ 93 local tundev=$1; shift 94 local what=$1; shift 95 96 RET=0 97 98 ip link set dev $tundev down 99 mirror_install $swp1 ingress $tundev "matchall $tcflags" 100 fail_test_span_gre_dir $tundev ingress 101 102 ip link set dev $tundev up 103 104 quick_test_span_gre_dir $tundev ingress 105 mirror_uninstall $swp1 ingress 106 107 log_test "$what: tunnel down/up ($tcflags)" 108} 109 110test_span_gre_egress_up() 111{ 112 local tundev=$1; shift 113 local remote_ip=$1; shift 114 local what=$1; shift 115 116 RET=0 117 118 ip link set dev $swp3 down 119 mirror_install $swp1 ingress $tundev "matchall $tcflags" 120 fail_test_span_gre_dir $tundev ingress 121 122 # After setting the device up, wait for neighbor to get resolved so that 123 # we can expect mirroring to work. 124 ip link set dev $swp3 up 125 while true; do 126 ip neigh sh dev $swp3 $remote_ip nud reachable | 127 grep -q ^ 128 if [[ $? -ne 0 ]]; then 129 sleep 1 130 else 131 break 132 fi 133 done 134 135 quick_test_span_gre_dir $tundev ingress 136 mirror_uninstall $swp1 ingress 137 138 log_test "$what: egress down/up ($tcflags)" 139} 140 141test_span_gre_remote_ip() 142{ 143 local tundev=$1; shift 144 local type=$1; shift 145 local correct_ip=$1; shift 146 local wrong_ip=$1; shift 147 local what=$1; shift 148 149 RET=0 150 151 ip link set dev $tundev type $type remote $wrong_ip 152 mirror_install $swp1 ingress $tundev "matchall $tcflags" 153 fail_test_span_gre_dir $tundev ingress 154 155 ip link set dev $tundev type $type remote $correct_ip 156 quick_test_span_gre_dir $tundev ingress 157 mirror_uninstall $swp1 ingress 158 159 log_test "$what: remote address change ($tcflags)" 160} 161 162test_span_gre_tun_del() 163{ 164 local tundev=$1; shift 165 local type=$1; shift 166 local flags=$1; shift 167 local local_ip=$1; shift 168 local remote_ip=$1; shift 169 local what=$1; shift 170 171 RET=0 172 173 mirror_install $swp1 ingress $tundev "matchall $tcflags" 174 quick_test_span_gre_dir $tundev ingress 175 ip link del dev $tundev 176 fail_test_span_gre_dir $tundev ingress 177 178 tunnel_create $tundev $type $local_ip $remote_ip \ 179 ttl 100 tos inherit $flags 180 181 # Recreating the tunnel doesn't reestablish mirroring, so reinstall it 182 # and verify it works for the follow-up tests. 183 mirror_uninstall $swp1 ingress 184 mirror_install $swp1 ingress $tundev "matchall $tcflags" 185 quick_test_span_gre_dir $tundev ingress 186 mirror_uninstall $swp1 ingress 187 188 log_test "$what: tunnel deleted ($tcflags)" 189} 190 191test_span_gre_route_del() 192{ 193 local tundev=$1; shift 194 local edev=$1; shift 195 local route=$1; shift 196 local what=$1; shift 197 198 RET=0 199 200 mirror_install $swp1 ingress $tundev "matchall $tcflags" 201 quick_test_span_gre_dir $tundev ingress 202 203 ip route del $route dev $edev 204 fail_test_span_gre_dir $tundev ingress 205 206 ip route add $route dev $edev 207 quick_test_span_gre_dir $tundev ingress 208 209 mirror_uninstall $swp1 ingress 210 211 log_test "$what: underlay route removal ($tcflags)" 212} 213 214test_ttl() 215{ 216 test_span_gre_ttl gt4 gretap ip "mirror to gretap" 217 test_span_gre_ttl gt6 ip6gretap ipv6 "mirror to ip6gretap" 218} 219 220test_tun_up() 221{ 222 test_span_gre_tun_up gt4 "mirror to gretap" 223 test_span_gre_tun_up gt6 "mirror to ip6gretap" 224} 225 226test_egress_up() 227{ 228 test_span_gre_egress_up gt4 192.0.2.130 "mirror to gretap" 229 test_span_gre_egress_up gt6 2001:db8:2::2 "mirror to ip6gretap" 230} 231 232test_remote_ip() 233{ 234 test_span_gre_remote_ip gt4 gretap 192.0.2.130 192.0.2.132 "mirror to gretap" 235 test_span_gre_remote_ip gt6 ip6gretap 2001:db8:2::2 2001:db8:2::4 "mirror to ip6gretap" 236} 237 238test_tun_del() 239{ 240 test_span_gre_tun_del gt4 gretap "" \ 241 192.0.2.129 192.0.2.130 "mirror to gretap" 242 test_span_gre_tun_del gt6 ip6gretap allow-localremote \ 243 2001:db8:2::1 2001:db8:2::2 "mirror to ip6gretap" 244} 245 246test_route_del() 247{ 248 test_span_gre_route_del gt4 $swp3 192.0.2.128/28 "mirror to gretap" 249 test_span_gre_route_del gt6 $swp3 2001:db8:2::/64 "mirror to ip6gretap" 250} 251 252test_all() 253{ 254 slow_path_trap_install $swp1 ingress 255 slow_path_trap_install $swp1 egress 256 257 tests_run 258 259 slow_path_trap_uninstall $swp1 egress 260 slow_path_trap_uninstall $swp1 ingress 261} 262 263trap cleanup EXIT 264 265setup_prepare 266setup_wait 267 268tcflags="skip_hw" 269test_all 270 271if ! tc_offload_check; then 272 echo "WARN: Could not test offloaded functionality" 273else 274 tcflags="skip_sw" 275 test_all 276fi 277 278exit $EXIT_STATUS