2 # SPDX-License-Identifier: GPL-2.0
4 # Validate cached routes in fib{6}_nh that is used by multiple prefixes.
5 # Validate a different # exception is generated in h0 for each remote host.
13 # routing in h0 to hN is done with nexthop objects.
18 which ping6
> /dev
/null
2>&1 && ping6
=$
(which ping6
) || ping6
=$
(which ping)
20 ################################################################################
29 if [ ${rc} -eq ${expected} ]; then
30 printf "TEST: %-60s [ OK ]\n" "${msg}"
31 nsuccess
=$
((nsuccess
+1))
35 printf "TEST: %-60s [FAIL]\n" "${msg}"
36 if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
38 echo "hit enter to continue, 'q' to quit"
40 [ "$a" = "q" ] && exit 1
44 [ "$VERBOSE" = "1" ] && echo
53 if [ "$VERBOSE" = "1" ]; then
59 if [ "$VERBOSE" = "1" -a -n "$out" ]; then
63 [ "$VERBOSE" = "1" ] && echo
68 ################################################################################
75 ip netns del
${ns} 2>/dev
/null
78 ip
-netns ${ns} addr add
127.0.0.1/8 dev lo
79 ip
-netns ${ns} link
set lo up
81 ip netns
exec ${ns} sysctl
-q -w net.ipv6.conf.all.keep_addr_on_down
=1
84 ip netns
exec $ns sysctl
-q -w net.ipv6.conf.all.forwarding
=0
87 ip netns
exec $ns sysctl
-q -w net.ipv4.ip_forward
=1
88 ip netns
exec $ns sysctl
-q -w net.ipv6.conf.all.forwarding
=1
100 for ns
in h0 r1 h1 h2 h3
106 # create interconnects
111 ip
-netns h
${i} li add eth0
type veth peer name r1h
${i}
112 ip
-netns h
${i} li
set eth0 up
113 ip
-netns h
${i} li set r1h${i} netns r1 name eth${i} up
115 ip
-netns h
${i} addr add dev eth0
172.16.10${i}.1/24
116 ip
-netns h
${i} -6 addr add dev eth0
2001:db8
:10${i}::1/64
117 ip
-netns r1 addr add dev eth
${i} 172.16.10${i}.254/24
118 ip
-netns r1
-6 addr add dev eth
${i} 2001:db8
:10${i}::64/64
121 ip
-netns h0 nexthop add id
4 via
172.16.100.254 dev eth0
122 ip
-netns h0 nexthop add id
6 via
2001:db8
:100::64 dev eth0
124 # routing from h0 to h1-h3 and back
127 ip
-netns h0 ro add
172.16.10${i}.0/24 nhid
4
128 ip
-netns h
${i} ro add
172.16.100.0/24 via
172.16.10${i}.254
130 ip
-netns h0
-6 ro add
2001:db8
:10${i}::/64 nhid
6
131 ip
-netns h
${i} -6 ro add
2001:db8
:100::/64 via
2001:db8
:10${i}::64
134 if [ "$VERBOSE" = "1" ]; then
139 ip
-netns h0
-6 ro sh
147 for n
in h0 r1 h1 h2 h3
149 ip netns del
${n} 2>/dev
/null
158 run_cmd ip
-netns h
${hostid} li
set eth0 mtu
${mtu}
159 run_cmd ip
-netns r1 li
set eth
${hostid} mtu
${mtu}
162 ################################################################################
163 # validate exceptions
165 validate_v4_exception
()
170 local dst
="172.16.10${i}.1"
171 local h0
=172.16.100.1
172 local r1
=172.16.100.254
175 if [ ${ping_sz} != "0" ]; then
176 run_cmd ip netns
exec h0
ping -s ${ping_sz} -c5 -w5 ${dst}
179 if [ "$VERBOSE" = "1" ]; then
181 ip
-netns h0 ro get
${dst}
182 echo "Searching for:"
183 echo " cache .* mtu ${mtu}"
187 ip
-netns h0 ro get
${dst} | \
188 grep -q "cache .* mtu ${mtu}"
191 log_test
$rc 0 "IPv4: host 0 to host ${i}, mtu ${mtu}"
194 validate_v6_exception
()
199 local dst
="2001:db8:10${i}::1"
200 local h0
=2001:db8
:100::1
201 local r1
=2001:db8
:100::64
204 if [ ${ping_sz} != "0" ]; then
205 run_cmd ip netns
exec h0
${ping6} -s ${ping_sz} -c5 -w5 ${dst}
208 if [ "$VERBOSE" = "1" ]; then
210 ip
-netns h0
-6 ro get
${dst}
211 echo "Searching for:"
212 echo " ${dst} from :: via ${r1} dev eth0 src ${h0} .* mtu ${mtu}"
216 ip
-netns h0
-6 ro get
${dst} | \
217 grep -q "${dst} from :: via ${r1} dev eth0 src ${h0} .* mtu ${mtu}"
220 log_test
$rc 0 "IPv6: host 0 to host ${i}, mtu ${mtu}"
223 ################################################################################
229 p
) PAUSE_ON_FAIL
=yes;;
238 cpus
=$
(cat /sys
/devices
/system
/cpu
/online
)
239 cpus
="$(seq ${cpus/-/ })"
243 # generate a cached route per-cpu
245 run_cmd taskset
-c ${c} ip netns
exec h0
ping -c1 -w1 172.16.10${i}.1
246 [ $?
-ne 0 ] && printf "\nERROR: ping to h${i} failed\n" && ret
=1
248 run_cmd taskset
-c ${c} ip netns exec h0 ${ping6} -c1 -w1 2001:db8:10${i}::1
249 [ $?
-ne 0 ] && printf "\nERROR: ping6 to h${i} failed\n" && ret
=1
251 [ $ret -ne 0 ] && break
253 [ $ret -ne 0 ] && break
256 if [ $ret -eq 0 ]; then
257 # generate different exceptions in h0 for h1, h2 and h3
259 validate_v4_exception
1 1300 1350
260 validate_v6_exception
1 1300 1350
264 validate_v4_exception
2 1350 1400
265 validate_v6_exception
2 1350 1400
269 validate_v4_exception
3 1400 1450
270 validate_v6_exception
3 1400 1450
273 validate_v4_exception
1 1300 0
274 validate_v6_exception
1 1300 0
277 validate_v4_exception
2 1350 0
278 validate_v6_exception
2 1350 0
281 validate_v4_exception
3 1400 0
282 validate_v6_exception
3 1400 0
284 # targeted deletes to trigger cleanup paths in kernel
285 ip
-netns h0 ro del
172.16.102.0/24 nhid
4
286 ip
-netns h0
-6 ro del
2001:db8
:102::/64 nhid
6
288 ip
-netns h0 nexthop del id
4
289 ip
-netns h0 nexthop del id
6