Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 
0004 # This test uses standard topology for testing gretap. See
0005 # mirror_gre_topo_lib.sh for more details.
0006 #
0007 # Test how mirrors to gretap and ip6gretap react to changes to relevant
0008 # configuration.
0009 
0010 ALL_TESTS="
0011         test_ttl
0012         test_tun_up
0013         test_egress_up
0014         test_remote_ip
0015         test_tun_del
0016         test_route_del
0017 "
0018 
0019 NUM_NETIFS=6
0020 source lib.sh
0021 source mirror_lib.sh
0022 source mirror_gre_lib.sh
0023 source mirror_gre_topo_lib.sh
0024 
0025 setup_prepare()
0026 {
0027         h1=${NETIFS[p1]}
0028         swp1=${NETIFS[p2]}
0029 
0030         swp2=${NETIFS[p3]}
0031         h2=${NETIFS[p4]}
0032 
0033         swp3=${NETIFS[p5]}
0034         h3=${NETIFS[p6]}
0035 
0036         vrf_prepare
0037         mirror_gre_topo_create
0038 
0039         # This test downs $swp3, which deletes the configured IPv6 address
0040         # unless this sysctl is set.
0041         sysctl_set net.ipv6.conf.$swp3.keep_addr_on_down 1
0042 
0043         ip address add dev $swp3 192.0.2.129/28
0044         ip address add dev $h3 192.0.2.130/28
0045 
0046         ip address add dev $swp3 2001:db8:2::1/64
0047         ip address add dev $h3 2001:db8:2::2/64
0048 }
0049 
0050 cleanup()
0051 {
0052         pre_cleanup
0053 
0054         ip address del dev $h3 2001:db8:2::2/64
0055         ip address del dev $swp3 2001:db8:2::1/64
0056 
0057         ip address del dev $h3 192.0.2.130/28
0058         ip address del dev $swp3 192.0.2.129/28
0059 
0060         sysctl_restore net.ipv6.conf.$swp3.keep_addr_on_down
0061 
0062         mirror_gre_topo_destroy
0063         vrf_cleanup
0064 }
0065 
0066 test_span_gre_ttl()
0067 {
0068         local tundev=$1; shift
0069         local type=$1; shift
0070         local prot=$1; shift
0071         local what=$1; shift
0072 
0073         RET=0
0074 
0075         mirror_install $swp1 ingress $tundev "matchall $tcflags"
0076         tc filter add dev $h3 ingress pref 77 prot $prot \
0077                 flower skip_hw ip_ttl 50 action pass
0078 
0079         mirror_test v$h1 192.0.2.1 192.0.2.2 $h3 77 0
0080 
0081         ip link set dev $tundev type $type ttl 50
0082         sleep 2
0083         mirror_test v$h1 192.0.2.1 192.0.2.2 $h3 77 10
0084 
0085         ip link set dev $tundev type $type ttl 100
0086         tc filter del dev $h3 ingress pref 77
0087         mirror_uninstall $swp1 ingress
0088 
0089         log_test "$what: TTL change ($tcflags)"
0090 }
0091 
0092 test_span_gre_tun_up()
0093 {
0094         local tundev=$1; shift
0095         local what=$1; shift
0096 
0097         RET=0
0098 
0099         ip link set dev $tundev down
0100         mirror_install $swp1 ingress $tundev "matchall $tcflags"
0101         fail_test_span_gre_dir $tundev ingress
0102 
0103         ip link set dev $tundev up
0104 
0105         quick_test_span_gre_dir $tundev ingress
0106         mirror_uninstall $swp1 ingress
0107 
0108         log_test "$what: tunnel down/up ($tcflags)"
0109 }
0110 
0111 test_span_gre_egress_up()
0112 {
0113         local tundev=$1; shift
0114         local remote_ip=$1; shift
0115         local what=$1; shift
0116 
0117         RET=0
0118 
0119         ip link set dev $swp3 down
0120         mirror_install $swp1 ingress $tundev "matchall $tcflags"
0121         fail_test_span_gre_dir $tundev ingress
0122 
0123         # After setting the device up, wait for neighbor to get resolved so that
0124         # we can expect mirroring to work.
0125         ip link set dev $swp3 up
0126         setup_wait_dev $swp3
0127         ping -c 1 -I $swp3 $remote_ip &>/dev/null
0128 
0129         quick_test_span_gre_dir $tundev ingress
0130         mirror_uninstall $swp1 ingress
0131 
0132         log_test "$what: egress down/up ($tcflags)"
0133 }
0134 
0135 test_span_gre_remote_ip()
0136 {
0137         local tundev=$1; shift
0138         local type=$1; shift
0139         local correct_ip=$1; shift
0140         local wrong_ip=$1; shift
0141         local what=$1; shift
0142 
0143         RET=0
0144 
0145         ip link set dev $tundev type $type remote $wrong_ip
0146         mirror_install $swp1 ingress $tundev "matchall $tcflags"
0147         fail_test_span_gre_dir $tundev ingress
0148 
0149         ip link set dev $tundev type $type remote $correct_ip
0150         quick_test_span_gre_dir $tundev ingress
0151         mirror_uninstall $swp1 ingress
0152 
0153         log_test "$what: remote address change ($tcflags)"
0154 }
0155 
0156 test_span_gre_tun_del()
0157 {
0158         local tundev=$1; shift
0159         local type=$1; shift
0160         local flags=$1; shift
0161         local local_ip=$1; shift
0162         local remote_ip=$1; shift
0163         local what=$1; shift
0164 
0165         RET=0
0166 
0167         mirror_install $swp1 ingress $tundev "matchall $tcflags"
0168         quick_test_span_gre_dir $tundev ingress
0169         ip link del dev $tundev
0170         fail_test_span_gre_dir $tundev ingress
0171 
0172         tunnel_create $tundev $type $local_ip $remote_ip \
0173                       ttl 100 tos inherit $flags
0174 
0175         # Recreating the tunnel doesn't reestablish mirroring, so reinstall it
0176         # and verify it works for the follow-up tests.
0177         mirror_uninstall $swp1 ingress
0178         mirror_install $swp1 ingress $tundev "matchall $tcflags"
0179         quick_test_span_gre_dir $tundev ingress
0180         mirror_uninstall $swp1 ingress
0181 
0182         log_test "$what: tunnel deleted ($tcflags)"
0183 }
0184 
0185 test_span_gre_route_del()
0186 {
0187         local tundev=$1; shift
0188         local edev=$1; shift
0189         local route=$1; shift
0190         local what=$1; shift
0191 
0192         RET=0
0193 
0194         mirror_install $swp1 ingress $tundev "matchall $tcflags"
0195         quick_test_span_gre_dir $tundev ingress
0196 
0197         ip route del $route dev $edev
0198         fail_test_span_gre_dir $tundev ingress
0199 
0200         ip route add $route dev $edev
0201         quick_test_span_gre_dir $tundev ingress
0202 
0203         mirror_uninstall $swp1 ingress
0204 
0205         log_test "$what: underlay route removal ($tcflags)"
0206 }
0207 
0208 test_ttl()
0209 {
0210         test_span_gre_ttl gt4 gretap ip "mirror to gretap"
0211         test_span_gre_ttl gt6 ip6gretap ipv6 "mirror to ip6gretap"
0212 }
0213 
0214 test_tun_up()
0215 {
0216         test_span_gre_tun_up gt4 "mirror to gretap"
0217         test_span_gre_tun_up gt6 "mirror to ip6gretap"
0218 }
0219 
0220 test_egress_up()
0221 {
0222         test_span_gre_egress_up gt4 192.0.2.130 "mirror to gretap"
0223         test_span_gre_egress_up gt6 2001:db8:2::2 "mirror to ip6gretap"
0224 }
0225 
0226 test_remote_ip()
0227 {
0228         test_span_gre_remote_ip gt4 gretap 192.0.2.130 192.0.2.132 "mirror to gretap"
0229         test_span_gre_remote_ip gt6 ip6gretap 2001:db8:2::2 2001:db8:2::4 "mirror to ip6gretap"
0230 }
0231 
0232 test_tun_del()
0233 {
0234         test_span_gre_tun_del gt4 gretap "" \
0235                               192.0.2.129 192.0.2.130 "mirror to gretap"
0236         test_span_gre_tun_del gt6 ip6gretap allow-localremote \
0237                               2001:db8:2::1 2001:db8:2::2 "mirror to ip6gretap"
0238 }
0239 
0240 test_route_del()
0241 {
0242         test_span_gre_route_del gt4 $swp3 192.0.2.128/28 "mirror to gretap"
0243         test_span_gre_route_del gt6 $swp3 2001:db8:2::/64 "mirror to ip6gretap"
0244 }
0245 
0246 test_all()
0247 {
0248         slow_path_trap_install $swp1 ingress
0249         slow_path_trap_install $swp1 egress
0250 
0251         tests_run
0252 
0253         slow_path_trap_uninstall $swp1 egress
0254         slow_path_trap_uninstall $swp1 ingress
0255 }
0256 
0257 trap cleanup EXIT
0258 
0259 setup_prepare
0260 setup_wait
0261 
0262 tcflags="skip_hw"
0263 test_all
0264 
0265 if ! tc_offload_check; then
0266         echo "WARN: Could not test offloaded functionality"
0267 else
0268         tcflags="skip_sw"
0269         test_all
0270 fi
0271 
0272 exit $EXIT_STATUS