GNU Linux-libre 4.19.245-gnu1
[releases.git] / tools / testing / selftests / net / forwarding / mirror_gre_nh.sh
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 that gretap and ip6gretap mirroring works when the other tunnel endpoint
8 # is reachable through a next-hop route (as opposed to directly-attached route).
9
10 ALL_TESTS="
11         test_gretap
12         test_ip6gretap
13 "
14
15 NUM_NETIFS=6
16 source lib.sh
17 source mirror_lib.sh
18 source mirror_gre_lib.sh
19 source mirror_gre_topo_lib.sh
20
21 setup_prepare()
22 {
23         h1=${NETIFS[p1]}
24         swp1=${NETIFS[p2]}
25
26         swp2=${NETIFS[p3]}
27         h2=${NETIFS[p4]}
28
29         swp3=${NETIFS[p5]}
30         h3=${NETIFS[p6]}
31
32         sysctl_set net.ipv4.conf.all.rp_filter 0
33         sysctl_set net.ipv4.conf.$h3.rp_filter 0
34
35         vrf_prepare
36         mirror_gre_topo_create
37
38         sysctl_set net.ipv4.conf.v$h3.rp_filter 0
39
40         ip address add dev $swp3 192.0.2.161/28
41         ip address add dev $h3 192.0.2.162/28
42         ip address add dev gt4 192.0.2.129/32
43         ip address add dev h3-gt4 192.0.2.130/32
44
45         # IPv6 route can't be added after address. Such routes are rejected due
46         # to the gateway address having been configured on the local system. It
47         # works the other way around though.
48         ip address add dev $swp3 2001:db8:4::1/64
49         ip -6 route add 2001:db8:2::2/128 via 2001:db8:4::2
50         ip address add dev $h3 2001:db8:4::2/64
51         ip address add dev gt6 2001:db8:2::1
52         ip address add dev h3-gt6 2001:db8:2::2
53 }
54
55 cleanup()
56 {
57         pre_cleanup
58
59         ip -6 route del 2001:db8:2::2/128 via 2001:db8:4::2
60         ip address del dev $h3 2001:db8:4::2/64
61         ip address del dev $swp3 2001:db8:4::1/64
62
63         ip address del dev $h3 192.0.2.162/28
64         ip address del dev $swp3 192.0.2.161/28
65
66         sysctl_restore net.ipv4.conf.v$h3.rp_filter 0
67
68         mirror_gre_topo_destroy
69         vrf_cleanup
70
71         sysctl_restore net.ipv4.conf.$h3.rp_filter
72         sysctl_restore net.ipv4.conf.all.rp_filter
73 }
74
75 test_gretap()
76 {
77         RET=0
78         mirror_install $swp1 ingress gt4 "matchall $tcflags"
79
80         # For IPv4, test that there's no mirroring without the route directing
81         # the traffic to tunnel remote address. Then add it and test that
82         # mirroring starts. For IPv6 we can't test this due to the limitation
83         # that routes for locally-specified IPv6 addresses can't be added.
84         fail_test_span_gre_dir gt4 ingress
85
86         ip route add 192.0.2.130/32 via 192.0.2.162
87         quick_test_span_gre_dir gt4 ingress
88         ip route del 192.0.2.130/32 via 192.0.2.162
89
90         mirror_uninstall $swp1 ingress
91         log_test "mirror to gre with next-hop remote ($tcflags)"
92 }
93
94 test_ip6gretap()
95 {
96         RET=0
97
98         mirror_install $swp1 ingress gt6 "matchall $tcflags"
99         quick_test_span_gre_dir gt6 ingress
100         mirror_uninstall $swp1 ingress
101
102         log_test "mirror to ip6gre with next-hop remote ($tcflags)"
103 }
104
105 test_all()
106 {
107         slow_path_trap_install $swp1 ingress
108         slow_path_trap_install $swp1 egress
109
110         tests_run
111
112         slow_path_trap_uninstall $swp1 egress
113         slow_path_trap_uninstall $swp1 ingress
114 }
115
116 trap cleanup EXIT
117
118 setup_prepare
119 setup_wait
120
121 tcflags="skip_hw"
122 test_all
123
124 if ! tc_offload_check; then
125         echo "WARN: Could not test offloaded functionality"
126 else
127         tcflags="skip_sw"
128         test_all
129 fi
130
131 exit $EXIT_STATUS