2 # SPDX-License-Identifier: GPL-2.0
4 # Test traffic distribution when there are multiple routes between an IPv4
5 # GRE tunnel. The tunnel carries IPv6 traffic between multiple hosts.
6 # Multiple routes are in the underlay network. With the default multipath
7 # policy, SW2 will only look at the outer IP addresses, hence only a single
10 # +-------------------------+
13 # | 2001:db8:1::2/64 | |
14 # +-------------------|-----+
16 # +-------------------|------------------------+
19 # | 2001:db8:1::1/64 |
23 # | rem=192.0.2.66 --. |
27 # | | 192.0.2.129/28 |
28 # +---------------------|----------------------+
30 # +---------------------|----------------------+
35 # ! ________________|_____ |
38 # | + $ul22.111 (vlan) + $ul22.222 (vlan) |
39 # | | 192.0.2.145/28 | 192.0.2.161/28 |
41 # +--|----------------------|------------------+
43 # +--|----------------------|------------------+
45 # | + $ul32.111 (vlan) + $ul32.222 (vlan) |
46 # | | 192.0.2.146/28 | 192.0.2.162/28 |
48 # | \______________________/ |
52 # | 192.0.2.177/28 | SW3 |
53 # +---------------------|----------------------+
55 # +---------------------|----------------------+
57 # | ^ 192.0.2.178/28 |
60 # | loc=192.0.2.66 | |
61 # | rem=192.0.2.65 --' |
65 # | 2001:db8:2::1/64 | SW4 |
66 # +--------------------|-----------------------+
68 # +--------------------|---------+
71 # | 2001:db8:2::2/64 H2 |
72 # +------------------------------+
84 simple_if_init
$h1 2001:db8
:1::2/64
85 ip
-6 route add vrf v
$h1 2001:db8
:2::/64 via
2001:db8
:1::1
90 ip
-6 route del vrf v
$h1 2001:db8
:2::/64 via
2001:db8
:1::1
91 simple_if_fini
$h1 2001:db8
:1::2/64
96 simple_if_init
$ol1 2001:db8
:1::1/64
97 __simple_if_init
$ul1 v
$ol1 192.0.2.129/28
99 tunnel_create g1 gre
192.0.2.65 192.0.2.66 tos inherit dev v
$ol1
100 __simple_if_init g1 v
$ol1 192.0.2.65/32
101 ip route add vrf v
$ol1 192.0.2.66/32 via
192.0.2.130
103 ip
-6 route add vrf v
$ol1 2001:db8
:2::/64 dev g1
108 ip
-6 route del vrf v
$ol1 2001:db8
:2::/64
110 ip route del vrf v
$ol1 192.0.2.66/32
111 __simple_if_fini g1
192.0.2.65/32
114 __simple_if_fini
$ul1 192.0.2.129/28
115 simple_if_fini
$ol1 2001:db8
:1::1/64
120 simple_if_init
$ul21 192.0.2.130/28
121 __simple_if_init
$ul22 v
$ul21
122 vlan_create
$ul22 111 v
$ul21 192.0.2.145/28
123 vlan_create
$ul22 222 v
$ul21 192.0.2.161/28
125 ip route add vrf v
$ul21 192.0.2.65/32 via
192.0.2.129
126 ip route add vrf v
$ul21 192.0.2.66/32 \
127 nexthop via
192.0.2.146 \
128 nexthop via
192.0.2.162
133 ip route del vrf v
$ul21 192.0.2.66/32
134 ip route del vrf v
$ul21 192.0.2.65/32
136 vlan_destroy
$ul22 222
137 vlan_destroy
$ul22 111
138 __simple_if_fini
$ul22
139 simple_if_fini
$ul21 192.0.2.130/28
144 simple_if_init
$ul31 192.0.2.177/28
145 __simple_if_init
$ul32 v
$ul31
146 vlan_create
$ul32 111 v
$ul31 192.0.2.146/28
147 vlan_create
$ul32 222 v
$ul31 192.0.2.162/28
149 ip route add vrf v
$ul31 192.0.2.66/32 via
192.0.2.178
150 ip route add vrf v
$ul31 192.0.2.65/32 \
151 nexthop via
192.0.2.145 \
152 nexthop via
192.0.2.161
154 tc qdisc add dev
$ul32 clsact
155 tc filter add dev
$ul32 ingress pref
111 prot
802.1Q \
156 flower vlan_id
111 action pass
157 tc filter add dev
$ul32 ingress pref
222 prot
802.1Q \
158 flower vlan_id
222 action pass
163 tc qdisc del dev
$ul32 clsact
165 ip route del vrf v
$ul31 192.0.2.65/32
166 ip route del vrf v
$ul31 192.0.2.66/32
168 vlan_destroy
$ul32 222
169 vlan_destroy
$ul32 111
170 __simple_if_fini
$ul32
171 simple_if_fini
$ul31 192.0.2.177/28
176 simple_if_init
$ol4 2001:db8
:2::1/64
177 __simple_if_init
$ul4 v
$ol4 192.0.2.178/28
179 tunnel_create g2 gre
192.0.2.66 192.0.2.65 tos inherit dev v
$ol4
180 __simple_if_init g2 v
$ol4 192.0.2.66/32
181 ip route add vrf v
$ol4 192.0.2.65/32 via
192.0.2.177
183 ip
-6 route add vrf v
$ol4 2001:db8
:1::/64 dev g2
188 ip
-6 route del vrf v
$ol4 2001:db8
:1::/64
190 ip route del vrf v
$ol4 192.0.2.65/32
191 __simple_if_fini g2
192.0.2.66/32
194 __simple_if_fini
$ul4 192.0.2.178/28
195 simple_if_fini
$ol4 2001:db8
:2::1/64
200 simple_if_init
$h2 2001:db8
:2::2/64
201 ip
-6 route add vrf v
$h2 2001:db8
:1::/64 via
2001:db8
:2::1
206 ip
-6 route del vrf v
$h2 2001:db8
:1::/64 via
2001:db8
:2::1
207 simple_if_fini
$h2 2001:db8
:2::2/64
257 local weight1
=$1; shift
258 local weight2
=$1; shift
260 sysctl_set net.ipv4.fib_multipath_hash_policy
2
261 ip route replace vrf v
$ul21 192.0.2.66/32 \
262 nexthop via
192.0.2.146 weight
$weight1 \
263 nexthop via
192.0.2.162 weight
$weight2
265 local t0_111
=$
(tc_rule_stats_get
$ul32 111 ingress
)
266 local t0_222
=$
(tc_rule_stats_get
$ul32 222 ingress
)
269 $MZ $h1 -6 -q -p 64 -A "2001:db8:1::2-2001:db8:1::1e" \
270 -B "2001:db8:2::2-2001:db8:2::1e" \
271 -d 1msec
-c 50 -t udp
"sp=1024,dp=1024"
274 local t1_111
=$
(tc_rule_stats_get
$ul32 111 ingress
)
275 local t1_222
=$
(tc_rule_stats_get
$ul32 222 ingress
)
277 local d111
=$
((t1_111
- t0_111
))
278 local d222
=$
((t1_222
- t0_222
))
279 multipath_eval
"$what" $weight1 $weight2 $d111 $d222
281 ip route replace vrf v
$ul21 192.0.2.66/32 \
282 nexthop via
192.0.2.146 \
283 nexthop via
192.0.2.162
284 sysctl_restore net.ipv4.fib_multipath_hash_policy
289 ping_test
$h1 2001:db8
:2::2
294 log_info
"Running IPv6 over GRE over IPv4 multipath tests"
295 multipath6_test
"ECMP" 1 1
296 multipath6_test
"Weighted MP 2:1" 2 1
297 multipath6_test
"Weighted MP 11:45" 11 45