1511e8db5SIdo Schimmel#!/bin/bash
2511e8db5SIdo Schimmel# SPDX-License-Identifier: GPL-2.0
3511e8db5SIdo Schimmel#
4511e8db5SIdo Schimmel# Test traffic distribution between two paths when using custom hash policy.
5511e8db5SIdo Schimmel#
6511e8db5SIdo Schimmel# +--------------------------------+
7511e8db5SIdo Schimmel# | H1                             |
8511e8db5SIdo Schimmel# |                     $h1 +      |
9511e8db5SIdo Schimmel# |   198.51.100.{2-253}/24 |      |
10511e8db5SIdo Schimmel# |   2001:db8:1::{2-fd}/64 |      |
11511e8db5SIdo Schimmel# +-------------------------|------+
12511e8db5SIdo Schimmel#                           |
13511e8db5SIdo Schimmel# +-------------------------|-------------------------+
14511e8db5SIdo Schimmel# | SW1                     |                         |
15511e8db5SIdo Schimmel# |                    $rp1 +                         |
16511e8db5SIdo Schimmel# |         198.51.100.1/24                           |
17511e8db5SIdo Schimmel# |        2001:db8:1::1/64                           |
18511e8db5SIdo Schimmel# |                                                   |
19511e8db5SIdo Schimmel# |                                                   |
20511e8db5SIdo Schimmel# |            $rp11 +             + $rp12            |
21511e8db5SIdo Schimmel# |     192.0.2.1/28 |             | 192.0.2.17/28    |
22511e8db5SIdo Schimmel# | 2001:db8:2::1/64 |             | 2001:db8:3::1/64 |
23511e8db5SIdo Schimmel# +------------------|-------------|------------------+
24511e8db5SIdo Schimmel#                    |             |
25511e8db5SIdo Schimmel# +------------------|-------------|------------------+
26511e8db5SIdo Schimmel# | SW2              |             |                  |
27511e8db5SIdo Schimmel# |                  |             |                  |
28511e8db5SIdo Schimmel# |            $rp21 +             + $rp22            |
29511e8db5SIdo Schimmel# |     192.0.2.2/28                 192.0.2.18/28    |
30511e8db5SIdo Schimmel# | 2001:db8:2::2/64                 2001:db8:3::2/64 |
31511e8db5SIdo Schimmel# |                                                   |
32511e8db5SIdo Schimmel# |                                                   |
33511e8db5SIdo Schimmel# |                    $rp2 +                         |
34511e8db5SIdo Schimmel# |          203.0.113.1/24 |                         |
35511e8db5SIdo Schimmel# |        2001:db8:4::1/64 |                         |
36511e8db5SIdo Schimmel# +-------------------------|-------------------------+
37511e8db5SIdo Schimmel#                           |
38511e8db5SIdo Schimmel# +-------------------------|------+
39511e8db5SIdo Schimmel# | H2                      |      |
40511e8db5SIdo Schimmel# |                     $h2 +      |
41511e8db5SIdo Schimmel# |    203.0.113.{2-253}/24        |
42511e8db5SIdo Schimmel# |   2001:db8:4::{2-fd}/64        |
43511e8db5SIdo Schimmel# +--------------------------------+
44511e8db5SIdo Schimmel
45511e8db5SIdo SchimmelALL_TESTS="
46511e8db5SIdo Schimmel	ping_ipv4
47511e8db5SIdo Schimmel	ping_ipv6
48511e8db5SIdo Schimmel	custom_hash
49511e8db5SIdo Schimmel"
50511e8db5SIdo Schimmel
51511e8db5SIdo SchimmelNUM_NETIFS=8
52511e8db5SIdo Schimmelsource lib.sh
53511e8db5SIdo Schimmel
54511e8db5SIdo Schimmelh1_create()
55511e8db5SIdo Schimmel{
56511e8db5SIdo Schimmel	simple_if_init $h1 198.51.100.2/24 2001:db8:1::2/64
57511e8db5SIdo Schimmel	ip route add vrf v$h1 default via 198.51.100.1 dev $h1
58511e8db5SIdo Schimmel	ip -6 route add vrf v$h1 default via 2001:db8:1::1 dev $h1
59511e8db5SIdo Schimmel}
60511e8db5SIdo Schimmel
61511e8db5SIdo Schimmelh1_destroy()
62511e8db5SIdo Schimmel{
63511e8db5SIdo Schimmel	ip -6 route del vrf v$h1 default
64511e8db5SIdo Schimmel	ip route del vrf v$h1 default
65511e8db5SIdo Schimmel	simple_if_fini $h1 198.51.100.2/24 2001:db8:1::2/64
66511e8db5SIdo Schimmel}
67511e8db5SIdo Schimmel
68511e8db5SIdo Schimmelsw1_create()
69511e8db5SIdo Schimmel{
70511e8db5SIdo Schimmel	simple_if_init $rp1 198.51.100.1/24 2001:db8:1::1/64
71511e8db5SIdo Schimmel	__simple_if_init $rp11 v$rp1 192.0.2.1/28 2001:db8:2::1/64
72511e8db5SIdo Schimmel	__simple_if_init $rp12 v$rp1 192.0.2.17/28 2001:db8:3::1/64
73511e8db5SIdo Schimmel
74511e8db5SIdo Schimmel	ip route add vrf v$rp1 203.0.113.0/24 \
75511e8db5SIdo Schimmel		nexthop via 192.0.2.2 dev $rp11 \
76511e8db5SIdo Schimmel		nexthop via 192.0.2.18 dev $rp12
77511e8db5SIdo Schimmel
78511e8db5SIdo Schimmel	ip -6 route add vrf v$rp1 2001:db8:4::/64 \
79511e8db5SIdo Schimmel		nexthop via 2001:db8:2::2 dev $rp11 \
80511e8db5SIdo Schimmel		nexthop via 2001:db8:3::2 dev $rp12
81511e8db5SIdo Schimmel}
82511e8db5SIdo Schimmel
83511e8db5SIdo Schimmelsw1_destroy()
84511e8db5SIdo Schimmel{
85511e8db5SIdo Schimmel	ip -6 route del vrf v$rp1 2001:db8:4::/64
86511e8db5SIdo Schimmel
87511e8db5SIdo Schimmel	ip route del vrf v$rp1 203.0.113.0/24
88511e8db5SIdo Schimmel
89511e8db5SIdo Schimmel	__simple_if_fini $rp12 192.0.2.17/28 2001:db8:3::1/64
90511e8db5SIdo Schimmel	__simple_if_fini $rp11 192.0.2.1/28 2001:db8:2::1/64
91511e8db5SIdo Schimmel	simple_if_fini $rp1 198.51.100.1/24 2001:db8:1::1/64
92511e8db5SIdo Schimmel}
93511e8db5SIdo Schimmel
94511e8db5SIdo Schimmelsw2_create()
95511e8db5SIdo Schimmel{
96511e8db5SIdo Schimmel	simple_if_init $rp2 203.0.113.1/24 2001:db8:4::1/64
97511e8db5SIdo Schimmel	__simple_if_init $rp21 v$rp2 192.0.2.2/28 2001:db8:2::2/64
98511e8db5SIdo Schimmel	__simple_if_init $rp22 v$rp2 192.0.2.18/28 2001:db8:3::2/64
99511e8db5SIdo Schimmel
100511e8db5SIdo Schimmel	ip route add vrf v$rp2 198.51.100.0/24 \
101511e8db5SIdo Schimmel		nexthop via 192.0.2.1 dev $rp21 \
102511e8db5SIdo Schimmel		nexthop via 192.0.2.17 dev $rp22
103511e8db5SIdo Schimmel
104511e8db5SIdo Schimmel	ip -6 route add vrf v$rp2 2001:db8:1::/64 \
105511e8db5SIdo Schimmel		nexthop via 2001:db8:2::1 dev $rp21 \
106511e8db5SIdo Schimmel		nexthop via 2001:db8:3::1 dev $rp22
107511e8db5SIdo Schimmel}
108511e8db5SIdo Schimmel
109511e8db5SIdo Schimmelsw2_destroy()
110511e8db5SIdo Schimmel{
111511e8db5SIdo Schimmel	ip -6 route del vrf v$rp2 2001:db8:1::/64
112511e8db5SIdo Schimmel
113511e8db5SIdo Schimmel	ip route del vrf v$rp2 198.51.100.0/24
114511e8db5SIdo Schimmel
115511e8db5SIdo Schimmel	__simple_if_fini $rp22 192.0.2.18/28 2001:db8:3::2/64
116511e8db5SIdo Schimmel	__simple_if_fini $rp21 192.0.2.2/28 2001:db8:2::2/64
117511e8db5SIdo Schimmel	simple_if_fini $rp2 203.0.113.1/24 2001:db8:4::1/64
118511e8db5SIdo Schimmel}
119511e8db5SIdo Schimmel
120511e8db5SIdo Schimmelh2_create()
121511e8db5SIdo Schimmel{
122511e8db5SIdo Schimmel	simple_if_init $h2 203.0.113.2/24 2001:db8:4::2/64
123511e8db5SIdo Schimmel	ip route add vrf v$h2 default via 203.0.113.1 dev $h2
124511e8db5SIdo Schimmel	ip -6 route add vrf v$h2 default via 2001:db8:4::1 dev $h2
125511e8db5SIdo Schimmel}
126511e8db5SIdo Schimmel
127511e8db5SIdo Schimmelh2_destroy()
128511e8db5SIdo Schimmel{
129511e8db5SIdo Schimmel	ip -6 route del vrf v$h2 default
130511e8db5SIdo Schimmel	ip route del vrf v$h2 default
131511e8db5SIdo Schimmel	simple_if_fini $h2 203.0.113.2/24 2001:db8:4::2/64
132511e8db5SIdo Schimmel}
133511e8db5SIdo Schimmel
134511e8db5SIdo Schimmelsetup_prepare()
135511e8db5SIdo Schimmel{
136511e8db5SIdo Schimmel	h1=${NETIFS[p1]}
137511e8db5SIdo Schimmel
138511e8db5SIdo Schimmel	rp1=${NETIFS[p2]}
139511e8db5SIdo Schimmel
140511e8db5SIdo Schimmel	rp11=${NETIFS[p3]}
141511e8db5SIdo Schimmel	rp21=${NETIFS[p4]}
142511e8db5SIdo Schimmel
143511e8db5SIdo Schimmel	rp12=${NETIFS[p5]}
144511e8db5SIdo Schimmel	rp22=${NETIFS[p6]}
145511e8db5SIdo Schimmel
146511e8db5SIdo Schimmel	rp2=${NETIFS[p7]}
147511e8db5SIdo Schimmel
148511e8db5SIdo Schimmel	h2=${NETIFS[p8]}
149511e8db5SIdo Schimmel
150511e8db5SIdo Schimmel	vrf_prepare
151511e8db5SIdo Schimmel	h1_create
152511e8db5SIdo Schimmel	sw1_create
153511e8db5SIdo Schimmel	sw2_create
154511e8db5SIdo Schimmel	h2_create
155511e8db5SIdo Schimmel
156511e8db5SIdo Schimmel	forwarding_enable
157511e8db5SIdo Schimmel}
158511e8db5SIdo Schimmel
159511e8db5SIdo Schimmelcleanup()
160511e8db5SIdo Schimmel{
161511e8db5SIdo Schimmel	pre_cleanup
162511e8db5SIdo Schimmel
163511e8db5SIdo Schimmel	forwarding_restore
164511e8db5SIdo Schimmel
165511e8db5SIdo Schimmel	h2_destroy
166511e8db5SIdo Schimmel	sw2_destroy
167511e8db5SIdo Schimmel	sw1_destroy
168511e8db5SIdo Schimmel	h1_destroy
169511e8db5SIdo Schimmel	vrf_cleanup
170511e8db5SIdo Schimmel}
171511e8db5SIdo Schimmel
172511e8db5SIdo Schimmelping_ipv4()
173511e8db5SIdo Schimmel{
174511e8db5SIdo Schimmel	ping_test $h1 203.0.113.2
175511e8db5SIdo Schimmel}
176511e8db5SIdo Schimmel
177511e8db5SIdo Schimmelping_ipv6()
178511e8db5SIdo Schimmel{
179511e8db5SIdo Schimmel	ping6_test $h1 2001:db8:4::2
180511e8db5SIdo Schimmel}
181511e8db5SIdo Schimmel
182511e8db5SIdo Schimmelsend_src_ipv4()
183511e8db5SIdo Schimmel{
1848b7bf35dSIdo Schimmel	ip vrf exec v$h1 $MZ $h1 -q -p 64 \
1858b7bf35dSIdo Schimmel		-A "198.51.100.2-198.51.100.253" -B 203.0.113.2 \
186511e8db5SIdo Schimmel		-d 1msec -c 50 -t udp "sp=20000,dp=30000"
187511e8db5SIdo Schimmel}
188511e8db5SIdo Schimmel
189511e8db5SIdo Schimmelsend_dst_ipv4()
190511e8db5SIdo Schimmel{
1918b7bf35dSIdo Schimmel	ip vrf exec v$h1 $MZ $h1 -q -p 64 \
1928b7bf35dSIdo Schimmel		-A 198.51.100.2 -B "203.0.113.2-203.0.113.253" \
193511e8db5SIdo Schimmel		-d 1msec -c 50 -t udp "sp=20000,dp=30000"
194511e8db5SIdo Schimmel}
195511e8db5SIdo Schimmel
196511e8db5SIdo Schimmelsend_src_udp4()
197511e8db5SIdo Schimmel{
1988b7bf35dSIdo Schimmel	ip vrf exec v$h1 $MZ $h1 -q -p 64 \
1998b7bf35dSIdo Schimmel		-A 198.51.100.2 -B 203.0.113.2 \
200511e8db5SIdo Schimmel		-d 1msec -t udp "sp=0-32768,dp=30000"
201511e8db5SIdo Schimmel}
202511e8db5SIdo Schimmel
203511e8db5SIdo Schimmelsend_dst_udp4()
204511e8db5SIdo Schimmel{
2058b7bf35dSIdo Schimmel	ip vrf exec v$h1 $MZ $h1 -q -p 64 \
2068b7bf35dSIdo Schimmel		-A 198.51.100.2 -B 203.0.113.2 \
207511e8db5SIdo Schimmel		-d 1msec -t udp "sp=20000,dp=0-32768"
208511e8db5SIdo Schimmel}
209511e8db5SIdo Schimmel
210511e8db5SIdo Schimmelsend_src_ipv6()
211511e8db5SIdo Schimmel{
2128b7bf35dSIdo Schimmel	ip vrf exec v$h1 $MZ -6 $h1 -q -p 64 \
2138b7bf35dSIdo Schimmel		-A "2001:db8:1::2-2001:db8:1::fd" -B 2001:db8:4::2 \
214511e8db5SIdo Schimmel		-d 1msec -c 50 -t udp "sp=20000,dp=30000"
215511e8db5SIdo Schimmel}
216511e8db5SIdo Schimmel
217511e8db5SIdo Schimmelsend_dst_ipv6()
218511e8db5SIdo Schimmel{
2198b7bf35dSIdo Schimmel	ip vrf exec v$h1 $MZ -6 $h1 -q -p 64 \
2208b7bf35dSIdo Schimmel		-A 2001:db8:1::2 -B "2001:db8:4::2-2001:db8:4::fd" \
221511e8db5SIdo Schimmel		-d 1msec -c 50 -t udp "sp=20000,dp=30000"
222511e8db5SIdo Schimmel}
223511e8db5SIdo Schimmel
224511e8db5SIdo Schimmelsend_flowlabel()
225511e8db5SIdo Schimmel{
226511e8db5SIdo Schimmel	# Generate 16384 echo requests, each with a random flow label.
227511e8db5SIdo Schimmel	for _ in $(seq 1 16384); do
228511e8db5SIdo Schimmel		ip vrf exec v$h1 \
229511e8db5SIdo Schimmel			$PING6 2001:db8:4::2 -F 0 -c 1 -q >/dev/null 2>&1
230511e8db5SIdo Schimmel	done
231511e8db5SIdo Schimmel}
232511e8db5SIdo Schimmel
233511e8db5SIdo Schimmelsend_src_udp6()
234511e8db5SIdo Schimmel{
2358b7bf35dSIdo Schimmel	ip vrf exec v$h1 $MZ -6 $h1 -q -p 64 \
2368b7bf35dSIdo Schimmel		-A 2001:db8:1::2 -B 2001:db8:4::2 \
237511e8db5SIdo Schimmel		-d 1msec -t udp "sp=0-32768,dp=30000"
238511e8db5SIdo Schimmel}
239511e8db5SIdo Schimmel
240511e8db5SIdo Schimmelsend_dst_udp6()
241511e8db5SIdo Schimmel{
2428b7bf35dSIdo Schimmel	ip vrf exec v$h1 $MZ -6 $h1 -q -p 64 \
2438b7bf35dSIdo Schimmel		-A 2001:db8:1::2 -B 2001:db8:4::2 \
244511e8db5SIdo Schimmel		-d 1msec -t udp "sp=20000,dp=0-32768"
245511e8db5SIdo Schimmel}
246511e8db5SIdo Schimmel
247511e8db5SIdo Schimmelcustom_hash_test()
248511e8db5SIdo Schimmel{
249511e8db5SIdo Schimmel	local field="$1"; shift
250511e8db5SIdo Schimmel	local balanced="$1"; shift
251511e8db5SIdo Schimmel	local send_flows="$@"
252511e8db5SIdo Schimmel
253511e8db5SIdo Schimmel	RET=0
254511e8db5SIdo Schimmel
255511e8db5SIdo Schimmel	local t0_rp11=$(link_stats_tx_packets_get $rp11)
256511e8db5SIdo Schimmel	local t0_rp12=$(link_stats_tx_packets_get $rp12)
257511e8db5SIdo Schimmel
258511e8db5SIdo Schimmel	$send_flows
259511e8db5SIdo Schimmel
260511e8db5SIdo Schimmel	local t1_rp11=$(link_stats_tx_packets_get $rp11)
261511e8db5SIdo Schimmel	local t1_rp12=$(link_stats_tx_packets_get $rp12)
262511e8db5SIdo Schimmel
263511e8db5SIdo Schimmel	local d_rp11=$((t1_rp11 - t0_rp11))
264511e8db5SIdo Schimmel	local d_rp12=$((t1_rp12 - t0_rp12))
265511e8db5SIdo Schimmel
266511e8db5SIdo Schimmel	local diff=$((d_rp12 - d_rp11))
267511e8db5SIdo Schimmel	local sum=$((d_rp11 + d_rp12))
268511e8db5SIdo Schimmel
269511e8db5SIdo Schimmel	local pct=$(echo "$diff / $sum * 100" | bc -l)
270511e8db5SIdo Schimmel	local is_balanced=$(echo "-20 <= $pct && $pct <= 20" | bc)
271511e8db5SIdo Schimmel
272511e8db5SIdo Schimmel	[[ ( $is_balanced -eq 1 && $balanced == "balanced" ) ||
273511e8db5SIdo Schimmel	   ( $is_balanced -eq 0 && $balanced == "unbalanced" ) ]]
274511e8db5SIdo Schimmel	check_err $? "Expected traffic to be $balanced, but it is not"
275511e8db5SIdo Schimmel
276511e8db5SIdo Schimmel	log_test "Multipath hash field: $field ($balanced)"
277511e8db5SIdo Schimmel	log_info "Packets sent on path1 / path2: $d_rp11 / $d_rp12"
278511e8db5SIdo Schimmel}
279511e8db5SIdo Schimmel
280511e8db5SIdo Schimmelcustom_hash_v4()
281511e8db5SIdo Schimmel{
282511e8db5SIdo Schimmel	log_info "Running IPv4 custom multipath hash tests"
283511e8db5SIdo Schimmel
284511e8db5SIdo Schimmel	sysctl_set net.ipv4.fib_multipath_hash_policy 3
285511e8db5SIdo Schimmel
286511e8db5SIdo Schimmel	# Prevent the neighbour table from overflowing, as different neighbour
287511e8db5SIdo Schimmel	# entries will be created on $ol4 when using different destination IPs.
288511e8db5SIdo Schimmel	sysctl_set net.ipv4.neigh.default.gc_thresh1 1024
289511e8db5SIdo Schimmel	sysctl_set net.ipv4.neigh.default.gc_thresh2 1024
290511e8db5SIdo Schimmel	sysctl_set net.ipv4.neigh.default.gc_thresh3 1024
291511e8db5SIdo Schimmel
292511e8db5SIdo Schimmel	sysctl_set net.ipv4.fib_multipath_hash_fields 0x0001
293511e8db5SIdo Schimmel	custom_hash_test "Source IP" "balanced" send_src_ipv4
294511e8db5SIdo Schimmel	custom_hash_test "Source IP" "unbalanced" send_dst_ipv4
295511e8db5SIdo Schimmel
296511e8db5SIdo Schimmel	sysctl_set net.ipv4.fib_multipath_hash_fields 0x0002
297511e8db5SIdo Schimmel	custom_hash_test "Destination IP" "balanced" send_dst_ipv4
298511e8db5SIdo Schimmel	custom_hash_test "Destination IP" "unbalanced" send_src_ipv4
299511e8db5SIdo Schimmel
300511e8db5SIdo Schimmel	sysctl_set net.ipv4.fib_multipath_hash_fields 0x0010
301511e8db5SIdo Schimmel	custom_hash_test "Source port" "balanced" send_src_udp4
302511e8db5SIdo Schimmel	custom_hash_test "Source port" "unbalanced" send_dst_udp4
303511e8db5SIdo Schimmel
304511e8db5SIdo Schimmel	sysctl_set net.ipv4.fib_multipath_hash_fields 0x0020
305511e8db5SIdo Schimmel	custom_hash_test "Destination port" "balanced" send_dst_udp4
306511e8db5SIdo Schimmel	custom_hash_test "Destination port" "unbalanced" send_src_udp4
307511e8db5SIdo Schimmel
308511e8db5SIdo Schimmel	sysctl_restore net.ipv4.neigh.default.gc_thresh3
309511e8db5SIdo Schimmel	sysctl_restore net.ipv4.neigh.default.gc_thresh2
310511e8db5SIdo Schimmel	sysctl_restore net.ipv4.neigh.default.gc_thresh1
311511e8db5SIdo Schimmel
312511e8db5SIdo Schimmel	sysctl_restore net.ipv4.fib_multipath_hash_policy
313511e8db5SIdo Schimmel}
314511e8db5SIdo Schimmel
315511e8db5SIdo Schimmelcustom_hash_v6()
316511e8db5SIdo Schimmel{
317511e8db5SIdo Schimmel	log_info "Running IPv6 custom multipath hash tests"
318511e8db5SIdo Schimmel
319511e8db5SIdo Schimmel	sysctl_set net.ipv6.fib_multipath_hash_policy 3
320511e8db5SIdo Schimmel
321511e8db5SIdo Schimmel	# Prevent the neighbour table from overflowing, as different neighbour
322511e8db5SIdo Schimmel	# entries will be created on $ol4 when using different destination IPs.
323511e8db5SIdo Schimmel	sysctl_set net.ipv6.neigh.default.gc_thresh1 1024
324511e8db5SIdo Schimmel	sysctl_set net.ipv6.neigh.default.gc_thresh2 1024
325511e8db5SIdo Schimmel	sysctl_set net.ipv6.neigh.default.gc_thresh3 1024
326511e8db5SIdo Schimmel
327511e8db5SIdo Schimmel	sysctl_set net.ipv6.fib_multipath_hash_fields 0x0001
328511e8db5SIdo Schimmel	custom_hash_test "Source IP" "balanced" send_src_ipv6
329511e8db5SIdo Schimmel	custom_hash_test "Source IP" "unbalanced" send_dst_ipv6
330511e8db5SIdo Schimmel
331511e8db5SIdo Schimmel	sysctl_set net.ipv6.fib_multipath_hash_fields 0x0002
332511e8db5SIdo Schimmel	custom_hash_test "Destination IP" "balanced" send_dst_ipv6
333511e8db5SIdo Schimmel	custom_hash_test "Destination IP" "unbalanced" send_src_ipv6
334511e8db5SIdo Schimmel
335511e8db5SIdo Schimmel	sysctl_set net.ipv6.fib_multipath_hash_fields 0x0008
336511e8db5SIdo Schimmel	custom_hash_test "Flowlabel" "balanced" send_flowlabel
337511e8db5SIdo Schimmel	custom_hash_test "Flowlabel" "unbalanced" send_src_ipv6
338511e8db5SIdo Schimmel
339511e8db5SIdo Schimmel	sysctl_set net.ipv6.fib_multipath_hash_fields 0x0010
340511e8db5SIdo Schimmel	custom_hash_test "Source port" "balanced" send_src_udp6
341511e8db5SIdo Schimmel	custom_hash_test "Source port" "unbalanced" send_dst_udp6
342511e8db5SIdo Schimmel
343511e8db5SIdo Schimmel	sysctl_set net.ipv6.fib_multipath_hash_fields 0x0020
344511e8db5SIdo Schimmel	custom_hash_test "Destination port" "balanced" send_dst_udp6
345511e8db5SIdo Schimmel	custom_hash_test "Destination port" "unbalanced" send_src_udp6
346511e8db5SIdo Schimmel
347511e8db5SIdo Schimmel	sysctl_restore net.ipv6.neigh.default.gc_thresh3
348511e8db5SIdo Schimmel	sysctl_restore net.ipv6.neigh.default.gc_thresh2
349511e8db5SIdo Schimmel	sysctl_restore net.ipv6.neigh.default.gc_thresh1
350511e8db5SIdo Schimmel
351511e8db5SIdo Schimmel	sysctl_restore net.ipv6.fib_multipath_hash_policy
352511e8db5SIdo Schimmel}
353511e8db5SIdo Schimmel
354511e8db5SIdo Schimmelcustom_hash()
355511e8db5SIdo Schimmel{
356511e8db5SIdo Schimmel	# Test that when the hash policy is set to custom, traffic is
357511e8db5SIdo Schimmel	# distributed only according to the fields set in the
358511e8db5SIdo Schimmel	# fib_multipath_hash_fields sysctl.
359511e8db5SIdo Schimmel	#
360511e8db5SIdo Schimmel	# Each time set a different field and make sure traffic is only
361511e8db5SIdo Schimmel	# distributed when the field is changed in the packet stream.
362511e8db5SIdo Schimmel	custom_hash_v4
363511e8db5SIdo Schimmel	custom_hash_v6
364511e8db5SIdo Schimmel}
365511e8db5SIdo Schimmel
366511e8db5SIdo Schimmeltrap cleanup EXIT
367511e8db5SIdo Schimmel
368511e8db5SIdo Schimmelsetup_prepare
369511e8db5SIdo Schimmelsetup_wait
370511e8db5SIdo Schimmeltests_run
371511e8db5SIdo Schimmel
372511e8db5SIdo Schimmelexit $EXIT_STATUS
373