255 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4# This test uses standard topology for testing gretap. See5# mirror_gre_topo_lib.sh for more details.6#7# Test how mirrors to gretap and ip6gretap react to changes to relevant8# configuration.9 10ALL_TESTS="11 test_ttl12 test_tun_up13 test_egress_up14 test_remote_ip15 test_tun_del16 test_route_del17"18 19NUM_NETIFS=620source lib.sh21source mirror_lib.sh22source mirror_gre_lib.sh23source mirror_gre_topo_lib.sh24 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_prepare37 mirror_gre_topo_create38 39 # This test downs $swp3, which deletes the configured IPv6 address40 # unless this sysctl is set.41 sysctl_set net.ipv6.conf.$swp3.keep_addr_on_down 142 43 ip address add dev $swp3 192.0.2.129/2844 ip address add dev $h3 192.0.2.130/2845 46 ip address add dev $swp3 2001:db8:2::1/6447 ip address add dev $h3 2001:db8:2::2/6448}49 50cleanup()51{52 pre_cleanup53 54 ip address del dev $h3 2001:db8:2::2/6455 ip address del dev $swp3 2001:db8:2::1/6456 57 ip address del dev $h3 192.0.2.130/2858 ip address del dev $swp3 192.0.2.129/2859 60 sysctl_restore net.ipv6.conf.$swp3.keep_addr_on_down61 62 mirror_gre_topo_destroy63 vrf_cleanup64}65 66test_span_gre_ttl()67{68 local tundev=$1; shift69 local type=$1; shift70 local prot=$1; shift71 local what=$1; shift72 73 RET=074 75 mirror_install $swp1 ingress $tundev \76 "prot ip flower ip_prot icmp"77 tc filter add dev $h3 ingress pref 77 prot $prot \78 flower skip_hw ip_ttl 50 action pass79 80 mirror_test v$h1 192.0.2.1 192.0.2.2 $h3 77 081 82 ip link set dev $tundev type $type ttl 5083 sleep 284 mirror_test v$h1 192.0.2.1 192.0.2.2 $h3 77 ">= 10"85 86 ip link set dev $tundev type $type ttl 10087 tc filter del dev $h3 ingress pref 7788 mirror_uninstall $swp1 ingress89 90 log_test "$what: TTL change"91}92 93test_span_gre_tun_up()94{95 local tundev=$1; shift96 local what=$1; shift97 98 RET=099 100 ip link set dev $tundev down101 mirror_install $swp1 ingress $tundev "matchall"102 fail_test_span_gre_dir $tundev103 104 ip link set dev $tundev up105 106 quick_test_span_gre_dir $tundev107 mirror_uninstall $swp1 ingress108 109 log_test "$what: tunnel down/up"110}111 112test_span_gre_egress_up()113{114 local tundev=$1; shift115 local remote_ip=$1; shift116 local what=$1; shift117 118 RET=0119 120 ip link set dev $swp3 down121 mirror_install $swp1 ingress $tundev "matchall"122 fail_test_span_gre_dir $tundev123 124 # After setting the device up, wait for neighbor to get resolved so that125 # we can expect mirroring to work.126 ip link set dev $swp3 up127 setup_wait_dev $swp3128 ping -c 1 -I $swp3 $remote_ip &>/dev/null129 130 quick_test_span_gre_dir $tundev131 mirror_uninstall $swp1 ingress132 133 log_test "$what: egress down/up"134}135 136test_span_gre_remote_ip()137{138 local tundev=$1; shift139 local type=$1; shift140 local correct_ip=$1; shift141 local wrong_ip=$1; shift142 local what=$1; shift143 144 RET=0145 146 ip link set dev $tundev type $type remote $wrong_ip147 mirror_install $swp1 ingress $tundev "matchall"148 fail_test_span_gre_dir $tundev149 150 ip link set dev $tundev type $type remote $correct_ip151 quick_test_span_gre_dir $tundev152 mirror_uninstall $swp1 ingress153 154 log_test "$what: remote address change"155}156 157test_span_gre_tun_del()158{159 local tundev=$1; shift160 local type=$1; shift161 local flags=$1; shift162 local local_ip=$1; shift163 local remote_ip=$1; shift164 local what=$1; shift165 166 RET=0167 168 mirror_install $swp1 ingress $tundev "matchall"169 quick_test_span_gre_dir $tundev170 ip link del dev $tundev171 fail_test_span_gre_dir $tundev172 173 tunnel_create $tundev $type $local_ip $remote_ip \174 ttl 100 tos inherit $flags175 176 # Recreating the tunnel doesn't reestablish mirroring, so reinstall it177 # and verify it works for the follow-up tests.178 mirror_uninstall $swp1 ingress179 mirror_install $swp1 ingress $tundev "matchall"180 quick_test_span_gre_dir $tundev181 mirror_uninstall $swp1 ingress182 183 log_test "$what: tunnel deleted"184}185 186test_span_gre_route_del()187{188 local tundev=$1; shift189 local edev=$1; shift190 local route=$1; shift191 local what=$1; shift192 193 RET=0194 195 mirror_install $swp1 ingress $tundev "matchall"196 quick_test_span_gre_dir $tundev197 198 ip route del $route dev $edev199 fail_test_span_gre_dir $tundev200 201 ip route add $route dev $edev202 quick_test_span_gre_dir $tundev203 204 mirror_uninstall $swp1 ingress205 206 log_test "$what: underlay route removal"207}208 209test_ttl()210{211 test_span_gre_ttl gt4 gretap ip "mirror to gretap"212 test_span_gre_ttl gt6 ip6gretap ipv6 "mirror to ip6gretap"213}214 215test_tun_up()216{217 test_span_gre_tun_up gt4 "mirror to gretap"218 test_span_gre_tun_up gt6 "mirror to ip6gretap"219}220 221test_egress_up()222{223 test_span_gre_egress_up gt4 192.0.2.130 "mirror to gretap"224 test_span_gre_egress_up gt6 2001:db8:2::2 "mirror to ip6gretap"225}226 227test_remote_ip()228{229 test_span_gre_remote_ip gt4 gretap 192.0.2.130 192.0.2.132 "mirror to gretap"230 test_span_gre_remote_ip gt6 ip6gretap 2001:db8:2::2 2001:db8:2::4 "mirror to ip6gretap"231}232 233test_tun_del()234{235 test_span_gre_tun_del gt4 gretap "" \236 192.0.2.129 192.0.2.130 "mirror to gretap"237 test_span_gre_tun_del gt6 ip6gretap allow-localremote \238 2001:db8:2::1 2001:db8:2::2 "mirror to ip6gretap"239}240 241test_route_del()242{243 test_span_gre_route_del gt4 $swp3 192.0.2.128/28 "mirror to gretap"244 test_span_gre_route_del gt6 $swp3 2001:db8:2::/64 "mirror to ip6gretap"245}246 247trap cleanup EXIT248 249setup_prepare250setup_wait251 252tests_run253 254exit $EXIT_STATUS255