diff options
author | David S. Miller <davem@davemloft.net> | 2018-02-13 14:34:29 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-02-13 14:34:29 -0500 |
commit | b95367e3bd8eaf2d88d7b7a7ab2847f5a6e70321 (patch) | |
tree | 621fd561ed3ec2ffe9c94dc33f7abee560662e91 /tools | |
parent | 8c2ceabe99e04005cadba739856eed6953a8a3af (diff) | |
parent | e2ba732a1681d907a6dffbaf9802aebcac233099 (diff) |
Merge branch 'selftests-fib_tests-simplifications-verbosity-and-a-race'
David Ahern says:
====================
selftests: fib_tests: simplifications, verbosity and a race
Improve efficiency of fib_tests.sh and make the test result more verbose,
from this summary:
$ fib_tests.sh is failing in a VM:
$ fib_tests.sh
Running netdev unregister tests
PASS: unicast route test
PASS: multipath route test
Running netdev down tests
PASS: unicast route test
PASS: multipath route test
Running netdev carrier change tests
PASS: local route carrier test
FAIL: unicast route carrier test
where a single entry actually corresponds to many checks to a much more
verbse output that clarifies test cases:
$fib_tests.sh
Single path route carrier test
....
Carrier down
IPv4 fibmatch [ OK ]
IPv6 fibmatch [ OK ]
IPv4 linkdown flag set [FAIL]
IPv6 linkdown flag set [FAIL]
Second address added with carrier down
IPv4 fibmatch [ OK ]
IPv6 fibmatch [ OK ]
IPv4 linkdown flag set [FAIL]
IPv6 linkdown flag set [ OK ]
And then fix the race in changing carrier down on dummy device to checking
the corresponding routes.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/testing/selftests/net/fib_tests.sh | 483 |
1 files changed, 237 insertions, 246 deletions
diff --git a/tools/testing/selftests/net/fib_tests.sh b/tools/testing/selftests/net/fib_tests.sh index a9154eefb2e2..b617985ecdc1 100755 --- a/tools/testing/selftests/net/fib_tests.sh +++ b/tools/testing/selftests/net/fib_tests.sh | |||
@@ -6,154 +6,155 @@ | |||
6 | 6 | ||
7 | ret=0 | 7 | ret=0 |
8 | 8 | ||
9 | check_err() | 9 | PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no} |
10 | { | ||
11 | if [ $ret -eq 0 ]; then | ||
12 | ret=$1 | ||
13 | fi | ||
14 | } | ||
15 | 10 | ||
16 | check_fail() | 11 | log_test() |
17 | { | 12 | { |
18 | if [ $1 -eq 0 ]; then | 13 | local rc=$1 |
14 | local expected=$2 | ||
15 | local msg="$3" | ||
16 | |||
17 | if [ ${rc} -eq ${expected} ]; then | ||
18 | printf " %-60s [ OK ]\n" "${msg}" | ||
19 | else | ||
19 | ret=1 | 20 | ret=1 |
21 | printf " %-60s [FAIL]\n" "${msg}" | ||
22 | if [ "${PAUSE_ON_FAIL}" = "yes" ]; then | ||
23 | echo | ||
24 | echo "hit enter to continue, 'q' to quit" | ||
25 | read a | ||
26 | [ "$a" = "q" ] && exit 1 | ||
27 | fi | ||
20 | fi | 28 | fi |
21 | } | 29 | } |
22 | 30 | ||
23 | netns_create() | 31 | setup() |
24 | { | 32 | { |
25 | local testns=$1 | 33 | set -e |
34 | ip netns add testns | ||
35 | ip -netns testns link set dev lo up | ||
36 | |||
37 | ip -netns testns link add dummy0 type dummy | ||
38 | ip -netns testns link set dev dummy0 up | ||
39 | ip -netns testns address add 198.51.100.1/24 dev dummy0 | ||
40 | ip -netns testns -6 address add 2001:db8:1::1/64 dev dummy0 | ||
41 | set +e | ||
26 | 42 | ||
27 | ip netns add $testns | ||
28 | ip netns exec $testns ip link set dev lo up | ||
29 | } | 43 | } |
30 | 44 | ||
31 | fib_unreg_unicast_test() | 45 | cleanup() |
32 | { | 46 | { |
33 | ret=0 | 47 | ip -netns testns link del dev dummy0 &> /dev/null |
34 | 48 | ip netns del testns | |
35 | netns_create "testns" | 49 | } |
36 | |||
37 | ip netns exec testns ip link add dummy0 type dummy | ||
38 | ip netns exec testns ip link set dev dummy0 up | ||
39 | 50 | ||
40 | ip netns exec testns ip address add 198.51.100.1/24 dev dummy0 | 51 | fib_unreg_unicast_test() |
41 | ip netns exec testns ip -6 address add 2001:db8:1::1/64 dev dummy0 | 52 | { |
53 | echo | ||
54 | echo "Single path route test" | ||
42 | 55 | ||
43 | ip netns exec testns ip route get fibmatch 198.51.100.2 &> /dev/null | 56 | setup |
44 | check_err $? | ||
45 | ip netns exec testns ip -6 route get fibmatch 2001:db8:1::2 &> /dev/null | ||
46 | check_err $? | ||
47 | 57 | ||
48 | ip netns exec testns ip link del dev dummy0 | 58 | echo " Start point" |
49 | check_err $? | 59 | ip -netns testns route get fibmatch 198.51.100.2 &> /dev/null |
60 | log_test $? 0 "IPv4 fibmatch" | ||
61 | ip -netns testns -6 route get fibmatch 2001:db8:1::2 &> /dev/null | ||
62 | log_test $? 0 "IPv6 fibmatch" | ||
50 | 63 | ||
51 | ip netns exec testns ip route get fibmatch 198.51.100.2 &> /dev/null | 64 | set -e |
52 | check_fail $? | 65 | ip -netns testns link del dev dummy0 |
53 | ip netns exec testns ip -6 route get fibmatch 2001:db8:1::2 &> /dev/null | 66 | set +e |
54 | check_fail $? | ||
55 | 67 | ||
56 | ip netns del testns | 68 | echo " Nexthop device deleted" |
69 | ip -netns testns route get fibmatch 198.51.100.2 &> /dev/null | ||
70 | log_test $? 2 "IPv4 fibmatch - no route" | ||
71 | ip -netns testns -6 route get fibmatch 2001:db8:1::2 &> /dev/null | ||
72 | log_test $? 2 "IPv6 fibmatch - no route" | ||
57 | 73 | ||
58 | if [ $ret -ne 0 ]; then | 74 | cleanup |
59 | echo "FAIL: unicast route test" | ||
60 | return 1 | ||
61 | fi | ||
62 | echo "PASS: unicast route test" | ||
63 | } | 75 | } |
64 | 76 | ||
65 | fib_unreg_multipath_test() | 77 | fib_unreg_multipath_test() |
66 | { | 78 | { |
67 | ret=0 | ||
68 | |||
69 | netns_create "testns" | ||
70 | 79 | ||
71 | ip netns exec testns ip link add dummy0 type dummy | 80 | echo |
72 | ip netns exec testns ip link set dev dummy0 up | 81 | echo "Multipath route test" |
73 | 82 | ||
74 | ip netns exec testns ip link add dummy1 type dummy | 83 | setup |
75 | ip netns exec testns ip link set dev dummy1 up | ||
76 | 84 | ||
77 | ip netns exec testns ip address add 198.51.100.1/24 dev dummy0 | 85 | set -e |
78 | ip netns exec testns ip -6 address add 2001:db8:1::1/64 dev dummy0 | 86 | ip -netns testns link add dummy1 type dummy |
87 | ip -netns testns link set dev dummy1 up | ||
88 | ip -netns testns address add 192.0.2.1/24 dev dummy1 | ||
89 | ip -netns testns -6 address add 2001:db8:2::1/64 dev dummy1 | ||
79 | 90 | ||
80 | ip netns exec testns ip address add 192.0.2.1/24 dev dummy1 | 91 | ip -netns testns route add 203.0.113.0/24 \ |
81 | ip netns exec testns ip -6 address add 2001:db8:2::1/64 dev dummy1 | ||
82 | |||
83 | ip netns exec testns ip route add 203.0.113.0/24 \ | ||
84 | nexthop via 198.51.100.2 dev dummy0 \ | 92 | nexthop via 198.51.100.2 dev dummy0 \ |
85 | nexthop via 192.0.2.2 dev dummy1 | 93 | nexthop via 192.0.2.2 dev dummy1 |
86 | ip netns exec testns ip -6 route add 2001:db8:3::/64 \ | 94 | ip -netns testns -6 route add 2001:db8:3::/64 \ |
87 | nexthop via 2001:db8:1::2 dev dummy0 \ | 95 | nexthop via 2001:db8:1::2 dev dummy0 \ |
88 | nexthop via 2001:db8:2::2 dev dummy1 | 96 | nexthop via 2001:db8:2::2 dev dummy1 |
97 | set +e | ||
98 | |||
99 | echo " Start point" | ||
100 | ip -netns testns route get fibmatch 203.0.113.1 &> /dev/null | ||
101 | log_test $? 0 "IPv4 fibmatch" | ||
102 | ip -netns testns -6 route get fibmatch 2001:db8:3::1 &> /dev/null | ||
103 | log_test $? 0 "IPv6 fibmatch" | ||
89 | 104 | ||
90 | ip netns exec testns ip route get fibmatch 203.0.113.1 &> /dev/null | 105 | set -e |
91 | check_err $? | 106 | ip -netns testns link del dev dummy0 |
92 | ip netns exec testns ip -6 route get fibmatch 2001:db8:3::1 &> /dev/null | 107 | set +e |
93 | check_err $? | ||
94 | 108 | ||
95 | ip netns exec testns ip link del dev dummy0 | 109 | echo " One nexthop device deleted" |
96 | check_err $? | 110 | ip -netns testns route get fibmatch 203.0.113.1 &> /dev/null |
111 | log_test $? 2 "IPv4 - multipath route removed on delete" | ||
97 | 112 | ||
98 | ip netns exec testns ip route get fibmatch 203.0.113.1 &> /dev/null | 113 | ip -netns testns -6 route get fibmatch 2001:db8:3::1 &> /dev/null |
99 | check_fail $? | ||
100 | ip netns exec testns ip -6 route get fibmatch 2001:db8:3::1 &> /dev/null | ||
101 | # In IPv6 we do not flush the entire multipath route. | 114 | # In IPv6 we do not flush the entire multipath route. |
102 | check_err $? | 115 | log_test $? 0 "IPv6 - multipath down to single path" |
103 | 116 | ||
104 | ip netns exec testns ip link del dev dummy1 | 117 | set -e |
118 | ip -netns testns link del dev dummy1 | ||
119 | set +e | ||
105 | 120 | ||
106 | ip netns del testns | 121 | echo " Second nexthop device deleted" |
122 | ip -netns testns -6 route get fibmatch 2001:db8:3::1 &> /dev/null | ||
123 | log_test $? 2 "IPv6 - no route" | ||
107 | 124 | ||
108 | if [ $ret -ne 0 ]; then | 125 | cleanup |
109 | echo "FAIL: multipath route test" | ||
110 | return 1 | ||
111 | fi | ||
112 | echo "PASS: multipath route test" | ||
113 | } | 126 | } |
114 | 127 | ||
115 | fib_unreg_test() | 128 | fib_unreg_test() |
116 | { | 129 | { |
117 | echo "Running netdev unregister tests" | ||
118 | |||
119 | fib_unreg_unicast_test | 130 | fib_unreg_unicast_test |
120 | fib_unreg_multipath_test | 131 | fib_unreg_multipath_test |
121 | } | 132 | } |
122 | 133 | ||
123 | fib_down_unicast_test() | 134 | fib_down_unicast_test() |
124 | { | 135 | { |
125 | ret=0 | 136 | echo |
126 | 137 | echo "Single path, admin down" | |
127 | netns_create "testns" | ||
128 | |||
129 | ip netns exec testns ip link add dummy0 type dummy | ||
130 | ip netns exec testns ip link set dev dummy0 up | ||
131 | |||
132 | ip netns exec testns ip address add 198.51.100.1/24 dev dummy0 | ||
133 | ip netns exec testns ip -6 address add 2001:db8:1::1/64 dev dummy0 | ||
134 | 138 | ||
135 | ip netns exec testns ip route get fibmatch 198.51.100.2 &> /dev/null | 139 | setup |
136 | check_err $? | ||
137 | ip netns exec testns ip -6 route get fibmatch 2001:db8:1::2 &> /dev/null | ||
138 | check_err $? | ||
139 | 140 | ||
140 | ip netns exec testns ip link set dev dummy0 down | 141 | echo " Start point" |
141 | check_err $? | 142 | ip -netns testns route get fibmatch 198.51.100.2 &> /dev/null |
143 | log_test $? 0 "IPv4 fibmatch" | ||
144 | ip -netns testns -6 route get fibmatch 2001:db8:1::2 &> /dev/null | ||
145 | log_test $? 0 "IPv6 fibmatch" | ||
142 | 146 | ||
143 | ip netns exec testns ip route get fibmatch 198.51.100.2 &> /dev/null | 147 | set -e |
144 | check_fail $? | 148 | ip -netns testns link set dev dummy0 down |
145 | ip netns exec testns ip -6 route get fibmatch 2001:db8:1::2 &> /dev/null | 149 | set +e |
146 | check_fail $? | ||
147 | 150 | ||
148 | ip netns exec testns ip link del dev dummy0 | 151 | echo " Route deleted on down" |
152 | ip -netns testns route get fibmatch 198.51.100.2 &> /dev/null | ||
153 | log_test $? 2 "IPv4 fibmatch" | ||
154 | ip -netns testns -6 route get fibmatch 2001:db8:1::2 &> /dev/null | ||
155 | log_test $? 2 "IPv6 fibmatch" | ||
149 | 156 | ||
150 | ip netns del testns | 157 | cleanup |
151 | |||
152 | if [ $ret -ne 0 ]; then | ||
153 | echo "FAIL: unicast route test" | ||
154 | return 1 | ||
155 | fi | ||
156 | echo "PASS: unicast route test" | ||
157 | } | 158 | } |
158 | 159 | ||
159 | fib_down_multipath_test_do() | 160 | fib_down_multipath_test_do() |
@@ -161,242 +162,229 @@ fib_down_multipath_test_do() | |||
161 | local down_dev=$1 | 162 | local down_dev=$1 |
162 | local up_dev=$2 | 163 | local up_dev=$2 |
163 | 164 | ||
164 | ip netns exec testns ip route get fibmatch 203.0.113.1 \ | 165 | ip -netns testns route get fibmatch 203.0.113.1 \ |
165 | oif $down_dev &> /dev/null | 166 | oif $down_dev &> /dev/null |
166 | check_fail $? | 167 | log_test $? 2 "IPv4 fibmatch on down device" |
167 | ip netns exec testns ip -6 route get fibmatch 2001:db8:3::1 \ | 168 | ip -netns testns -6 route get fibmatch 2001:db8:3::1 \ |
168 | oif $down_dev &> /dev/null | 169 | oif $down_dev &> /dev/null |
169 | check_fail $? | 170 | log_test $? 2 "IPv6 fibmatch on down device" |
170 | 171 | ||
171 | ip netns exec testns ip route get fibmatch 203.0.113.1 \ | 172 | ip -netns testns route get fibmatch 203.0.113.1 \ |
172 | oif $up_dev &> /dev/null | 173 | oif $up_dev &> /dev/null |
173 | check_err $? | 174 | log_test $? 0 "IPv4 fibmatch on up device" |
174 | ip netns exec testns ip -6 route get fibmatch 2001:db8:3::1 \ | 175 | ip -netns testns -6 route get fibmatch 2001:db8:3::1 \ |
175 | oif $up_dev &> /dev/null | 176 | oif $up_dev &> /dev/null |
176 | check_err $? | 177 | log_test $? 0 "IPv6 fibmatch on up device" |
177 | 178 | ||
178 | ip netns exec testns ip route get fibmatch 203.0.113.1 | \ | 179 | ip -netns testns route get fibmatch 203.0.113.1 | \ |
179 | grep $down_dev | grep -q "dead linkdown" | 180 | grep $down_dev | grep -q "dead linkdown" |
180 | check_err $? | 181 | log_test $? 0 "IPv4 flags on down device" |
181 | ip netns exec testns ip -6 route get fibmatch 2001:db8:3::1 | \ | 182 | ip -netns testns -6 route get fibmatch 2001:db8:3::1 | \ |
182 | grep $down_dev | grep -q "dead linkdown" | 183 | grep $down_dev | grep -q "dead linkdown" |
183 | check_err $? | 184 | log_test $? 0 "IPv6 flags on down device" |
184 | 185 | ||
185 | ip netns exec testns ip route get fibmatch 203.0.113.1 | \ | 186 | ip -netns testns route get fibmatch 203.0.113.1 | \ |
186 | grep $up_dev | grep -q "dead linkdown" | 187 | grep $up_dev | grep -q "dead linkdown" |
187 | check_fail $? | 188 | log_test $? 1 "IPv4 flags on up device" |
188 | ip netns exec testns ip -6 route get fibmatch 2001:db8:3::1 | \ | 189 | ip -netns testns -6 route get fibmatch 2001:db8:3::1 | \ |
189 | grep $up_dev | grep -q "dead linkdown" | 190 | grep $up_dev | grep -q "dead linkdown" |
190 | check_fail $? | 191 | log_test $? 1 "IPv6 flags on up device" |
191 | } | 192 | } |
192 | 193 | ||
193 | fib_down_multipath_test() | 194 | fib_down_multipath_test() |
194 | { | 195 | { |
195 | ret=0 | 196 | echo |
197 | echo "Admin down multipath" | ||
196 | 198 | ||
197 | netns_create "testns" | 199 | setup |
198 | 200 | ||
199 | ip netns exec testns ip link add dummy0 type dummy | 201 | set -e |
200 | ip netns exec testns ip link set dev dummy0 up | 202 | ip -netns testns link add dummy1 type dummy |
203 | ip -netns testns link set dev dummy1 up | ||
201 | 204 | ||
202 | ip netns exec testns ip link add dummy1 type dummy | 205 | ip -netns testns address add 192.0.2.1/24 dev dummy1 |
203 | ip netns exec testns ip link set dev dummy1 up | 206 | ip -netns testns -6 address add 2001:db8:2::1/64 dev dummy1 |
204 | 207 | ||
205 | ip netns exec testns ip address add 198.51.100.1/24 dev dummy0 | 208 | ip -netns testns route add 203.0.113.0/24 \ |
206 | ip netns exec testns ip -6 address add 2001:db8:1::1/64 dev dummy0 | ||
207 | |||
208 | ip netns exec testns ip address add 192.0.2.1/24 dev dummy1 | ||
209 | ip netns exec testns ip -6 address add 2001:db8:2::1/64 dev dummy1 | ||
210 | |||
211 | ip netns exec testns ip route add 203.0.113.0/24 \ | ||
212 | nexthop via 198.51.100.2 dev dummy0 \ | 209 | nexthop via 198.51.100.2 dev dummy0 \ |
213 | nexthop via 192.0.2.2 dev dummy1 | 210 | nexthop via 192.0.2.2 dev dummy1 |
214 | ip netns exec testns ip -6 route add 2001:db8:3::/64 \ | 211 | ip -netns testns -6 route add 2001:db8:3::/64 \ |
215 | nexthop via 2001:db8:1::2 dev dummy0 \ | 212 | nexthop via 2001:db8:1::2 dev dummy0 \ |
216 | nexthop via 2001:db8:2::2 dev dummy1 | 213 | nexthop via 2001:db8:2::2 dev dummy1 |
214 | set +e | ||
215 | |||
216 | echo " Verify start point" | ||
217 | ip -netns testns route get fibmatch 203.0.113.1 &> /dev/null | ||
218 | log_test $? 0 "IPv4 fibmatch" | ||
217 | 219 | ||
218 | ip netns exec testns ip route get fibmatch 203.0.113.1 &> /dev/null | 220 | ip -netns testns -6 route get fibmatch 2001:db8:3::1 &> /dev/null |
219 | check_err $? | 221 | log_test $? 0 "IPv6 fibmatch" |
220 | ip netns exec testns ip -6 route get fibmatch 2001:db8:3::1 &> /dev/null | ||
221 | check_err $? | ||
222 | 222 | ||
223 | ip netns exec testns ip link set dev dummy0 down | 223 | set -e |
224 | check_err $? | 224 | ip -netns testns link set dev dummy0 down |
225 | set +e | ||
225 | 226 | ||
227 | echo " One device down, one up" | ||
226 | fib_down_multipath_test_do "dummy0" "dummy1" | 228 | fib_down_multipath_test_do "dummy0" "dummy1" |
227 | 229 | ||
228 | ip netns exec testns ip link set dev dummy0 up | 230 | set -e |
229 | check_err $? | 231 | ip -netns testns link set dev dummy0 up |
230 | ip netns exec testns ip link set dev dummy1 down | 232 | ip -netns testns link set dev dummy1 down |
231 | check_err $? | 233 | set +e |
232 | 234 | ||
235 | echo " Other device down and up" | ||
233 | fib_down_multipath_test_do "dummy1" "dummy0" | 236 | fib_down_multipath_test_do "dummy1" "dummy0" |
234 | 237 | ||
235 | ip netns exec testns ip link set dev dummy0 down | 238 | set -e |
236 | check_err $? | 239 | ip -netns testns link set dev dummy0 down |
240 | set +e | ||
237 | 241 | ||
238 | ip netns exec testns ip route get fibmatch 203.0.113.1 &> /dev/null | 242 | echo " Both devices down" |
239 | check_fail $? | 243 | ip -netns testns route get fibmatch 203.0.113.1 &> /dev/null |
240 | ip netns exec testns ip -6 route get fibmatch 2001:db8:3::1 &> /dev/null | 244 | log_test $? 2 "IPv4 fibmatch" |
241 | check_fail $? | 245 | ip -netns testns -6 route get fibmatch 2001:db8:3::1 &> /dev/null |
246 | log_test $? 2 "IPv6 fibmatch" | ||
242 | 247 | ||
243 | ip netns exec testns ip link del dev dummy1 | 248 | ip -netns testns link del dev dummy1 |
244 | ip netns exec testns ip link del dev dummy0 | 249 | cleanup |
245 | |||
246 | ip netns del testns | ||
247 | |||
248 | if [ $ret -ne 0 ]; then | ||
249 | echo "FAIL: multipath route test" | ||
250 | return 1 | ||
251 | fi | ||
252 | echo "PASS: multipath route test" | ||
253 | } | 250 | } |
254 | 251 | ||
255 | fib_down_test() | 252 | fib_down_test() |
256 | { | 253 | { |
257 | echo "Running netdev down tests" | ||
258 | |||
259 | fib_down_unicast_test | 254 | fib_down_unicast_test |
260 | fib_down_multipath_test | 255 | fib_down_multipath_test |
261 | } | 256 | } |
262 | 257 | ||
258 | # Local routes should not be affected when carrier changes. | ||
263 | fib_carrier_local_test() | 259 | fib_carrier_local_test() |
264 | { | 260 | { |
265 | ret=0 | 261 | echo |
262 | echo "Local carrier tests - single path" | ||
266 | 263 | ||
267 | # Local routes should not be affected when carrier changes. | 264 | setup |
268 | netns_create "testns" | ||
269 | 265 | ||
270 | ip netns exec testns ip link add dummy0 type dummy | 266 | set -e |
271 | ip netns exec testns ip link set dev dummy0 up | 267 | ip -netns testns link set dev dummy0 carrier on |
268 | set +e | ||
272 | 269 | ||
273 | ip netns exec testns ip link set dev dummy0 carrier on | 270 | echo " Start point" |
271 | ip -netns testns route get fibmatch 198.51.100.1 &> /dev/null | ||
272 | log_test $? 0 "IPv4 fibmatch" | ||
273 | ip -netns testns -6 route get fibmatch 2001:db8:1::1 &> /dev/null | ||
274 | log_test $? 0 "IPv6 fibmatch" | ||
274 | 275 | ||
275 | ip netns exec testns ip address add 198.51.100.1/24 dev dummy0 | 276 | ip -netns testns route get fibmatch 198.51.100.1 | \ |
276 | ip netns exec testns ip -6 address add 2001:db8:1::1/64 dev dummy0 | ||
277 | |||
278 | ip netns exec testns ip route get fibmatch 198.51.100.1 &> /dev/null | ||
279 | check_err $? | ||
280 | ip netns exec testns ip -6 route get fibmatch 2001:db8:1::1 &> /dev/null | ||
281 | check_err $? | ||
282 | |||
283 | ip netns exec testns ip route get fibmatch 198.51.100.1 | \ | ||
284 | grep -q "linkdown" | 277 | grep -q "linkdown" |
285 | check_fail $? | 278 | log_test $? 1 "IPv4 - no linkdown flag" |
286 | ip netns exec testns ip -6 route get fibmatch 2001:db8:1::1 | \ | 279 | ip -netns testns -6 route get fibmatch 2001:db8:1::1 | \ |
287 | grep -q "linkdown" | 280 | grep -q "linkdown" |
288 | check_fail $? | 281 | log_test $? 1 "IPv6 - no linkdown flag" |
289 | 282 | ||
290 | ip netns exec testns ip link set dev dummy0 carrier off | 283 | set -e |
284 | ip -netns testns link set dev dummy0 carrier off | ||
285 | sleep 1 | ||
286 | set +e | ||
291 | 287 | ||
292 | ip netns exec testns ip route get fibmatch 198.51.100.1 &> /dev/null | 288 | echo " Carrier off on nexthop" |
293 | check_err $? | 289 | ip -netns testns route get fibmatch 198.51.100.1 &> /dev/null |
294 | ip netns exec testns ip -6 route get fibmatch 2001:db8:1::1 &> /dev/null | 290 | log_test $? 0 "IPv4 fibmatch" |
295 | check_err $? | 291 | ip -netns testns -6 route get fibmatch 2001:db8:1::1 &> /dev/null |
292 | log_test $? 0 "IPv6 fibmatch" | ||
296 | 293 | ||
297 | ip netns exec testns ip route get fibmatch 198.51.100.1 | \ | 294 | ip -netns testns route get fibmatch 198.51.100.1 | \ |
298 | grep -q "linkdown" | 295 | grep -q "linkdown" |
299 | check_fail $? | 296 | log_test $? 1 "IPv4 - linkdown flag set" |
300 | ip netns exec testns ip -6 route get fibmatch 2001:db8:1::1 | \ | 297 | ip -netns testns -6 route get fibmatch 2001:db8:1::1 | \ |
301 | grep -q "linkdown" | 298 | grep -q "linkdown" |
302 | check_fail $? | 299 | log_test $? 1 "IPv6 - linkdown flag set" |
303 | 300 | ||
304 | ip netns exec testns ip address add 192.0.2.1/24 dev dummy0 | 301 | set -e |
305 | ip netns exec testns ip -6 address add 2001:db8:2::1/64 dev dummy0 | 302 | ip -netns testns address add 192.0.2.1/24 dev dummy0 |
303 | ip -netns testns -6 address add 2001:db8:2::1/64 dev dummy0 | ||
304 | set +e | ||
306 | 305 | ||
307 | ip netns exec testns ip route get fibmatch 192.0.2.1 &> /dev/null | 306 | echo " Route to local address with carrier down" |
308 | check_err $? | 307 | ip -netns testns route get fibmatch 192.0.2.1 &> /dev/null |
309 | ip netns exec testns ip -6 route get fibmatch 2001:db8:2::1 &> /dev/null | 308 | log_test $? 0 "IPv4 fibmatch" |
310 | check_err $? | 309 | ip -netns testns -6 route get fibmatch 2001:db8:2::1 &> /dev/null |
310 | log_test $? 0 "IPv6 fibmatch" | ||
311 | 311 | ||
312 | ip netns exec testns ip route get fibmatch 192.0.2.1 | \ | 312 | ip -netns testns route get fibmatch 192.0.2.1 | \ |
313 | grep -q "linkdown" | 313 | grep -q "linkdown" |
314 | check_fail $? | 314 | log_test $? 1 "IPv4 linkdown flag set" |
315 | ip netns exec testns ip -6 route get fibmatch 2001:db8:2::1 | \ | 315 | ip -netns testns -6 route get fibmatch 2001:db8:2::1 | \ |
316 | grep -q "linkdown" | 316 | grep -q "linkdown" |
317 | check_fail $? | 317 | log_test $? 1 "IPv6 linkdown flag set" |
318 | 318 | ||
319 | ip netns exec testns ip link del dev dummy0 | 319 | cleanup |
320 | |||
321 | ip netns del testns | ||
322 | |||
323 | if [ $ret -ne 0 ]; then | ||
324 | echo "FAIL: local route carrier test" | ||
325 | return 1 | ||
326 | fi | ||
327 | echo "PASS: local route carrier test" | ||
328 | } | 320 | } |
329 | 321 | ||
330 | fib_carrier_unicast_test() | 322 | fib_carrier_unicast_test() |
331 | { | 323 | { |
332 | ret=0 | 324 | ret=0 |
333 | 325 | ||
334 | netns_create "testns" | 326 | echo |
335 | 327 | echo "Single path route carrier test" | |
336 | ip netns exec testns ip link add dummy0 type dummy | ||
337 | ip netns exec testns ip link set dev dummy0 up | ||
338 | 328 | ||
339 | ip netns exec testns ip link set dev dummy0 carrier on | 329 | setup |
340 | 330 | ||
341 | ip netns exec testns ip address add 198.51.100.1/24 dev dummy0 | 331 | set -e |
342 | ip netns exec testns ip -6 address add 2001:db8:1::1/64 dev dummy0 | 332 | ip -netns testns link set dev dummy0 carrier on |
333 | set +e | ||
343 | 334 | ||
344 | ip netns exec testns ip route get fibmatch 198.51.100.2 &> /dev/null | 335 | echo " Start point" |
345 | check_err $? | 336 | ip -netns testns route get fibmatch 198.51.100.2 &> /dev/null |
346 | ip netns exec testns ip -6 route get fibmatch 2001:db8:1::2 &> /dev/null | 337 | log_test $? 0 "IPv4 fibmatch" |
347 | check_err $? | 338 | ip -netns testns -6 route get fibmatch 2001:db8:1::2 &> /dev/null |
339 | log_test $? 0 "IPv6 fibmatch" | ||
348 | 340 | ||
349 | ip netns exec testns ip route get fibmatch 198.51.100.2 | \ | 341 | ip -netns testns route get fibmatch 198.51.100.2 | \ |
350 | grep -q "linkdown" | 342 | grep -q "linkdown" |
351 | check_fail $? | 343 | log_test $? 1 "IPv4 no linkdown flag" |
352 | ip netns exec testns ip -6 route get fibmatch 2001:db8:1::2 | \ | 344 | ip -netns testns -6 route get fibmatch 2001:db8:1::2 | \ |
353 | grep -q "linkdown" | 345 | grep -q "linkdown" |
354 | check_fail $? | 346 | log_test $? 1 "IPv6 no linkdown flag" |
355 | 347 | ||
356 | ip netns exec testns ip link set dev dummy0 carrier off | 348 | set -e |
349 | ip -netns testns link set dev dummy0 carrier off | ||
350 | set +e | ||
357 | 351 | ||
358 | ip netns exec testns ip route get fibmatch 198.51.100.2 &> /dev/null | 352 | echo " Carrier down" |
359 | check_err $? | 353 | ip -netns testns route get fibmatch 198.51.100.2 &> /dev/null |
360 | ip netns exec testns ip -6 route get fibmatch 2001:db8:1::2 &> /dev/null | 354 | log_test $? 0 "IPv4 fibmatch" |
361 | check_err $? | 355 | ip -netns testns -6 route get fibmatch 2001:db8:1::2 &> /dev/null |
356 | log_test $? 0 "IPv6 fibmatch" | ||
362 | 357 | ||
363 | ip netns exec testns ip route get fibmatch 198.51.100.2 | \ | 358 | ip -netns testns route get fibmatch 198.51.100.2 | \ |
364 | grep -q "linkdown" | 359 | grep -q "linkdown" |
365 | check_err $? | 360 | log_test $? 0 "IPv4 linkdown flag set" |
366 | ip netns exec testns ip -6 route get fibmatch 2001:db8:1::2 | \ | 361 | ip -netns testns -6 route get fibmatch 2001:db8:1::2 | \ |
367 | grep -q "linkdown" | 362 | grep -q "linkdown" |
368 | check_err $? | 363 | log_test $? 0 "IPv6 linkdown flag set" |
369 | 364 | ||
370 | ip netns exec testns ip address add 192.0.2.1/24 dev dummy0 | 365 | set -e |
371 | ip netns exec testns ip -6 address add 2001:db8:2::1/64 dev dummy0 | 366 | ip -netns testns address add 192.0.2.1/24 dev dummy0 |
367 | ip -netns testns -6 address add 2001:db8:2::1/64 dev dummy0 | ||
368 | set +e | ||
372 | 369 | ||
373 | ip netns exec testns ip route get fibmatch 192.0.2.2 &> /dev/null | 370 | echo " Second address added with carrier down" |
374 | check_err $? | 371 | ip -netns testns route get fibmatch 192.0.2.2 &> /dev/null |
375 | ip netns exec testns ip -6 route get fibmatch 2001:db8:2::2 &> /dev/null | 372 | log_test $? 0 "IPv4 fibmatch" |
376 | check_err $? | 373 | ip -netns testns -6 route get fibmatch 2001:db8:2::2 &> /dev/null |
374 | log_test $? 0 "IPv6 fibmatch" | ||
377 | 375 | ||
378 | ip netns exec testns ip route get fibmatch 192.0.2.2 | \ | 376 | ip -netns testns route get fibmatch 192.0.2.2 | \ |
379 | grep -q "linkdown" | 377 | grep -q "linkdown" |
380 | check_err $? | 378 | log_test $? 0 "IPv4 linkdown flag set" |
381 | ip netns exec testns ip -6 route get fibmatch 2001:db8:2::2 | \ | 379 | ip -netns testns -6 route get fibmatch 2001:db8:2::2 | \ |
382 | grep -q "linkdown" | 380 | grep -q "linkdown" |
383 | check_err $? | 381 | log_test $? 0 "IPv6 linkdown flag set" |
384 | 382 | ||
385 | ip netns exec testns ip link del dev dummy0 | 383 | cleanup |
386 | |||
387 | ip netns del testns | ||
388 | |||
389 | if [ $ret -ne 0 ]; then | ||
390 | echo "FAIL: unicast route carrier test" | ||
391 | return 1 | ||
392 | fi | ||
393 | echo "PASS: unicast route carrier test" | ||
394 | } | 384 | } |
395 | 385 | ||
396 | fib_carrier_test() | 386 | fib_carrier_test() |
397 | { | 387 | { |
398 | echo "Running netdev carrier change tests" | ||
399 | |||
400 | fib_carrier_local_test | 388 | fib_carrier_local_test |
401 | fib_carrier_unicast_test | 389 | fib_carrier_unicast_test |
402 | } | 390 | } |
@@ -424,6 +412,9 @@ if [ $? -ne 0 ]; then | |||
424 | exit 0 | 412 | exit 0 |
425 | fi | 413 | fi |
426 | 414 | ||
415 | # start clean | ||
416 | cleanup &> /dev/null | ||
417 | |||
427 | fib_test | 418 | fib_test |
428 | 419 | ||
429 | exit $ret | 420 | exit $ret |