blob: cfdeb35bfed5cda7e2b89d49e7f8b56eee49a830 [file] [log] [blame]
Ido Schimmel607bd2e2018-01-07 12:45:16 +02001#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4# This test is for checking IPv4 and IPv6 FIB behavior in response to
5# different events.
6
7ret=0
8
David Ahern10566912018-02-13 08:37:34 -08009PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}
David Ahern171a4872018-03-13 08:29:39 -070010IP="ip -netns testns"
Ido Schimmel607bd2e2018-01-07 12:45:16 +020011
David Ahern10566912018-02-13 08:37:34 -080012log_test()
Ido Schimmel607bd2e2018-01-07 12:45:16 +020013{
David Ahern10566912018-02-13 08:37:34 -080014 local rc=$1
15 local expected=$2
16 local msg="$3"
17
18 if [ ${rc} -eq ${expected} ]; then
19 printf " %-60s [ OK ]\n" "${msg}"
20 else
Ido Schimmel607bd2e2018-01-07 12:45:16 +020021 ret=1
David Ahern10566912018-02-13 08:37:34 -080022 printf " %-60s [FAIL]\n" "${msg}"
23 if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
24 echo
25 echo "hit enter to continue, 'q' to quit"
26 read a
27 [ "$a" = "q" ] && exit 1
28 fi
Ido Schimmel607bd2e2018-01-07 12:45:16 +020029 fi
30}
31
David Ahernee395a52018-02-13 08:37:35 -080032setup()
Ido Schimmel607bd2e2018-01-07 12:45:16 +020033{
David Ahernee395a52018-02-13 08:37:35 -080034 set -e
35 ip netns add testns
David Ahern171a4872018-03-13 08:29:39 -070036 $IP link set dev lo up
Ido Schimmel607bd2e2018-01-07 12:45:16 +020037
David Ahern171a4872018-03-13 08:29:39 -070038 $IP link add dummy0 type dummy
39 $IP link set dev dummy0 up
40 $IP address add 198.51.100.1/24 dev dummy0
41 $IP -6 address add 2001:db8:1::1/64 dev dummy0
David Ahernee395a52018-02-13 08:37:35 -080042 set +e
43
44}
45
46cleanup()
47{
David Ahern171a4872018-03-13 08:29:39 -070048 $IP link del dev dummy0 &> /dev/null
David Ahernee395a52018-02-13 08:37:35 -080049 ip netns del testns
Ido Schimmel607bd2e2018-01-07 12:45:16 +020050}
51
52fib_unreg_unicast_test()
53{
David Ahern10566912018-02-13 08:37:34 -080054 echo
55 echo "Single path route test"
Ido Schimmel607bd2e2018-01-07 12:45:16 +020056
David Ahernee395a52018-02-13 08:37:35 -080057 setup
Ido Schimmel607bd2e2018-01-07 12:45:16 +020058
David Ahern10566912018-02-13 08:37:34 -080059 echo " Start point"
David Ahern171a4872018-03-13 08:29:39 -070060 $IP route get fibmatch 198.51.100.2 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -080061 log_test $? 0 "IPv4 fibmatch"
David Ahern171a4872018-03-13 08:29:39 -070062 $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -080063 log_test $? 0 "IPv6 fibmatch"
Ido Schimmel607bd2e2018-01-07 12:45:16 +020064
David Ahern10566912018-02-13 08:37:34 -080065 set -e
David Ahern171a4872018-03-13 08:29:39 -070066 $IP link del dev dummy0
David Ahern10566912018-02-13 08:37:34 -080067 set +e
Ido Schimmel607bd2e2018-01-07 12:45:16 +020068
David Ahern10566912018-02-13 08:37:34 -080069 echo " Nexthop device deleted"
David Ahern171a4872018-03-13 08:29:39 -070070 $IP route get fibmatch 198.51.100.2 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -080071 log_test $? 2 "IPv4 fibmatch - no route"
David Ahern171a4872018-03-13 08:29:39 -070072 $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -080073 log_test $? 2 "IPv6 fibmatch - no route"
Ido Schimmel607bd2e2018-01-07 12:45:16 +020074
David Ahernee395a52018-02-13 08:37:35 -080075 cleanup
Ido Schimmel607bd2e2018-01-07 12:45:16 +020076}
77
78fib_unreg_multipath_test()
79{
Ido Schimmel607bd2e2018-01-07 12:45:16 +020080
David Ahern10566912018-02-13 08:37:34 -080081 echo
82 echo "Multipath route test"
83
David Ahernee395a52018-02-13 08:37:35 -080084 setup
85
David Ahern10566912018-02-13 08:37:34 -080086 set -e
David Ahern171a4872018-03-13 08:29:39 -070087 $IP link add dummy1 type dummy
88 $IP link set dev dummy1 up
89 $IP address add 192.0.2.1/24 dev dummy1
90 $IP -6 address add 2001:db8:2::1/64 dev dummy1
Ido Schimmel607bd2e2018-01-07 12:45:16 +020091
David Ahern171a4872018-03-13 08:29:39 -070092 $IP route add 203.0.113.0/24 \
Ido Schimmel607bd2e2018-01-07 12:45:16 +020093 nexthop via 198.51.100.2 dev dummy0 \
94 nexthop via 192.0.2.2 dev dummy1
David Ahern171a4872018-03-13 08:29:39 -070095 $IP -6 route add 2001:db8:3::/64 \
Ido Schimmel607bd2e2018-01-07 12:45:16 +020096 nexthop via 2001:db8:1::2 dev dummy0 \
97 nexthop via 2001:db8:2::2 dev dummy1
David Ahern10566912018-02-13 08:37:34 -080098 set +e
Ido Schimmel607bd2e2018-01-07 12:45:16 +020099
David Ahern10566912018-02-13 08:37:34 -0800100 echo " Start point"
David Ahern171a4872018-03-13 08:29:39 -0700101 $IP route get fibmatch 203.0.113.1 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800102 log_test $? 0 "IPv4 fibmatch"
David Ahern171a4872018-03-13 08:29:39 -0700103 $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800104 log_test $? 0 "IPv6 fibmatch"
Ido Schimmel607bd2e2018-01-07 12:45:16 +0200105
David Ahern10566912018-02-13 08:37:34 -0800106 set -e
David Ahern171a4872018-03-13 08:29:39 -0700107 $IP link del dev dummy0
David Ahern10566912018-02-13 08:37:34 -0800108 set +e
Ido Schimmel607bd2e2018-01-07 12:45:16 +0200109
David Ahern10566912018-02-13 08:37:34 -0800110 echo " One nexthop device deleted"
David Ahern171a4872018-03-13 08:29:39 -0700111 $IP route get fibmatch 203.0.113.1 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800112 log_test $? 2 "IPv4 - multipath route removed on delete"
113
David Ahern171a4872018-03-13 08:29:39 -0700114 $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null
Ido Schimmel607bd2e2018-01-07 12:45:16 +0200115 # In IPv6 we do not flush the entire multipath route.
David Ahern10566912018-02-13 08:37:34 -0800116 log_test $? 0 "IPv6 - multipath down to single path"
Ido Schimmel607bd2e2018-01-07 12:45:16 +0200117
David Ahern10566912018-02-13 08:37:34 -0800118 set -e
David Ahern171a4872018-03-13 08:29:39 -0700119 $IP link del dev dummy1
David Ahern10566912018-02-13 08:37:34 -0800120 set +e
121
122 echo " Second nexthop device deleted"
David Ahern171a4872018-03-13 08:29:39 -0700123 $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800124 log_test $? 2 "IPv6 - no route"
Ido Schimmel607bd2e2018-01-07 12:45:16 +0200125
David Ahernee395a52018-02-13 08:37:35 -0800126 cleanup
Ido Schimmel607bd2e2018-01-07 12:45:16 +0200127}
128
129fib_unreg_test()
130{
Ido Schimmel607bd2e2018-01-07 12:45:16 +0200131 fib_unreg_unicast_test
132 fib_unreg_multipath_test
133}
134
Ido Schimmel5adb7682018-01-07 12:45:17 +0200135fib_down_unicast_test()
136{
David Ahern10566912018-02-13 08:37:34 -0800137 echo
138 echo "Single path, admin down"
Ido Schimmel5adb7682018-01-07 12:45:17 +0200139
David Ahernee395a52018-02-13 08:37:35 -0800140 setup
Ido Schimmel5adb7682018-01-07 12:45:17 +0200141
David Ahern10566912018-02-13 08:37:34 -0800142 echo " Start point"
David Ahern171a4872018-03-13 08:29:39 -0700143 $IP route get fibmatch 198.51.100.2 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800144 log_test $? 0 "IPv4 fibmatch"
David Ahern171a4872018-03-13 08:29:39 -0700145 $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800146 log_test $? 0 "IPv6 fibmatch"
Ido Schimmel5adb7682018-01-07 12:45:17 +0200147
David Ahern10566912018-02-13 08:37:34 -0800148 set -e
David Ahern171a4872018-03-13 08:29:39 -0700149 $IP link set dev dummy0 down
David Ahern10566912018-02-13 08:37:34 -0800150 set +e
Ido Schimmel5adb7682018-01-07 12:45:17 +0200151
David Ahern10566912018-02-13 08:37:34 -0800152 echo " Route deleted on down"
David Ahern171a4872018-03-13 08:29:39 -0700153 $IP route get fibmatch 198.51.100.2 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800154 log_test $? 2 "IPv4 fibmatch"
David Ahern171a4872018-03-13 08:29:39 -0700155 $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800156 log_test $? 2 "IPv6 fibmatch"
Ido Schimmel5adb7682018-01-07 12:45:17 +0200157
David Ahernee395a52018-02-13 08:37:35 -0800158 cleanup
Ido Schimmel5adb7682018-01-07 12:45:17 +0200159}
160
161fib_down_multipath_test_do()
162{
163 local down_dev=$1
164 local up_dev=$2
165
David Ahern171a4872018-03-13 08:29:39 -0700166 $IP route get fibmatch 203.0.113.1 \
Ido Schimmel5adb7682018-01-07 12:45:17 +0200167 oif $down_dev &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800168 log_test $? 2 "IPv4 fibmatch on down device"
David Ahern171a4872018-03-13 08:29:39 -0700169 $IP -6 route get fibmatch 2001:db8:3::1 \
Ido Schimmel5adb7682018-01-07 12:45:17 +0200170 oif $down_dev &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800171 log_test $? 2 "IPv6 fibmatch on down device"
Ido Schimmel5adb7682018-01-07 12:45:17 +0200172
David Ahern171a4872018-03-13 08:29:39 -0700173 $IP route get fibmatch 203.0.113.1 \
Ido Schimmel5adb7682018-01-07 12:45:17 +0200174 oif $up_dev &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800175 log_test $? 0 "IPv4 fibmatch on up device"
David Ahern171a4872018-03-13 08:29:39 -0700176 $IP -6 route get fibmatch 2001:db8:3::1 \
Ido Schimmel5adb7682018-01-07 12:45:17 +0200177 oif $up_dev &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800178 log_test $? 0 "IPv6 fibmatch on up device"
Ido Schimmel5adb7682018-01-07 12:45:17 +0200179
David Ahern171a4872018-03-13 08:29:39 -0700180 $IP route get fibmatch 203.0.113.1 | \
Ido Schimmel5adb7682018-01-07 12:45:17 +0200181 grep $down_dev | grep -q "dead linkdown"
David Ahern10566912018-02-13 08:37:34 -0800182 log_test $? 0 "IPv4 flags on down device"
David Ahern171a4872018-03-13 08:29:39 -0700183 $IP -6 route get fibmatch 2001:db8:3::1 | \
Ido Schimmel5adb7682018-01-07 12:45:17 +0200184 grep $down_dev | grep -q "dead linkdown"
David Ahern10566912018-02-13 08:37:34 -0800185 log_test $? 0 "IPv6 flags on down device"
Ido Schimmel5adb7682018-01-07 12:45:17 +0200186
David Ahern171a4872018-03-13 08:29:39 -0700187 $IP route get fibmatch 203.0.113.1 | \
Ido Schimmel5adb7682018-01-07 12:45:17 +0200188 grep $up_dev | grep -q "dead linkdown"
David Ahern10566912018-02-13 08:37:34 -0800189 log_test $? 1 "IPv4 flags on up device"
David Ahern171a4872018-03-13 08:29:39 -0700190 $IP -6 route get fibmatch 2001:db8:3::1 | \
Ido Schimmel5adb7682018-01-07 12:45:17 +0200191 grep $up_dev | grep -q "dead linkdown"
David Ahern10566912018-02-13 08:37:34 -0800192 log_test $? 1 "IPv6 flags on up device"
Ido Schimmel5adb7682018-01-07 12:45:17 +0200193}
194
195fib_down_multipath_test()
196{
David Ahern10566912018-02-13 08:37:34 -0800197 echo
198 echo "Admin down multipath"
Ido Schimmel5adb7682018-01-07 12:45:17 +0200199
David Ahernee395a52018-02-13 08:37:35 -0800200 setup
201
David Ahern10566912018-02-13 08:37:34 -0800202 set -e
David Ahern171a4872018-03-13 08:29:39 -0700203 $IP link add dummy1 type dummy
204 $IP link set dev dummy1 up
Ido Schimmel5adb7682018-01-07 12:45:17 +0200205
David Ahern171a4872018-03-13 08:29:39 -0700206 $IP address add 192.0.2.1/24 dev dummy1
207 $IP -6 address add 2001:db8:2::1/64 dev dummy1
Ido Schimmel5adb7682018-01-07 12:45:17 +0200208
David Ahern171a4872018-03-13 08:29:39 -0700209 $IP route add 203.0.113.0/24 \
Ido Schimmel5adb7682018-01-07 12:45:17 +0200210 nexthop via 198.51.100.2 dev dummy0 \
211 nexthop via 192.0.2.2 dev dummy1
David Ahern171a4872018-03-13 08:29:39 -0700212 $IP -6 route add 2001:db8:3::/64 \
Ido Schimmel5adb7682018-01-07 12:45:17 +0200213 nexthop via 2001:db8:1::2 dev dummy0 \
214 nexthop via 2001:db8:2::2 dev dummy1
David Ahern10566912018-02-13 08:37:34 -0800215 set +e
Ido Schimmel5adb7682018-01-07 12:45:17 +0200216
David Ahern10566912018-02-13 08:37:34 -0800217 echo " Verify start point"
David Ahern171a4872018-03-13 08:29:39 -0700218 $IP route get fibmatch 203.0.113.1 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800219 log_test $? 0 "IPv4 fibmatch"
220
David Ahern171a4872018-03-13 08:29:39 -0700221 $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800222 log_test $? 0 "IPv6 fibmatch"
Ido Schimmel5adb7682018-01-07 12:45:17 +0200223
David Ahern10566912018-02-13 08:37:34 -0800224 set -e
David Ahern171a4872018-03-13 08:29:39 -0700225 $IP link set dev dummy0 down
David Ahern10566912018-02-13 08:37:34 -0800226 set +e
Ido Schimmel5adb7682018-01-07 12:45:17 +0200227
David Ahern10566912018-02-13 08:37:34 -0800228 echo " One device down, one up"
Ido Schimmel5adb7682018-01-07 12:45:17 +0200229 fib_down_multipath_test_do "dummy0" "dummy1"
230
David Ahern10566912018-02-13 08:37:34 -0800231 set -e
David Ahern171a4872018-03-13 08:29:39 -0700232 $IP link set dev dummy0 up
233 $IP link set dev dummy1 down
David Ahern10566912018-02-13 08:37:34 -0800234 set +e
Ido Schimmel5adb7682018-01-07 12:45:17 +0200235
David Ahern10566912018-02-13 08:37:34 -0800236 echo " Other device down and up"
Ido Schimmel5adb7682018-01-07 12:45:17 +0200237 fib_down_multipath_test_do "dummy1" "dummy0"
238
David Ahern10566912018-02-13 08:37:34 -0800239 set -e
David Ahern171a4872018-03-13 08:29:39 -0700240 $IP link set dev dummy0 down
David Ahern10566912018-02-13 08:37:34 -0800241 set +e
Ido Schimmel5adb7682018-01-07 12:45:17 +0200242
David Ahern10566912018-02-13 08:37:34 -0800243 echo " Both devices down"
David Ahern171a4872018-03-13 08:29:39 -0700244 $IP route get fibmatch 203.0.113.1 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800245 log_test $? 2 "IPv4 fibmatch"
David Ahern171a4872018-03-13 08:29:39 -0700246 $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800247 log_test $? 2 "IPv6 fibmatch"
Ido Schimmel5adb7682018-01-07 12:45:17 +0200248
David Ahern171a4872018-03-13 08:29:39 -0700249 $IP link del dev dummy1
David Ahernee395a52018-02-13 08:37:35 -0800250 cleanup
Ido Schimmel5adb7682018-01-07 12:45:17 +0200251}
252
253fib_down_test()
254{
Ido Schimmel5adb7682018-01-07 12:45:17 +0200255 fib_down_unicast_test
256 fib_down_multipath_test
257}
258
David Ahern10566912018-02-13 08:37:34 -0800259# Local routes should not be affected when carrier changes.
Ido Schimmel82e45b62018-01-07 12:45:18 +0200260fib_carrier_local_test()
261{
David Ahern10566912018-02-13 08:37:34 -0800262 echo
263 echo "Local carrier tests - single path"
Ido Schimmel82e45b62018-01-07 12:45:18 +0200264
David Ahernee395a52018-02-13 08:37:35 -0800265 setup
266
David Ahern10566912018-02-13 08:37:34 -0800267 set -e
David Ahern171a4872018-03-13 08:29:39 -0700268 $IP link set dev dummy0 carrier on
David Ahern10566912018-02-13 08:37:34 -0800269 set +e
Ido Schimmel82e45b62018-01-07 12:45:18 +0200270
David Ahern10566912018-02-13 08:37:34 -0800271 echo " Start point"
David Ahern171a4872018-03-13 08:29:39 -0700272 $IP route get fibmatch 198.51.100.1 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800273 log_test $? 0 "IPv4 fibmatch"
David Ahern171a4872018-03-13 08:29:39 -0700274 $IP -6 route get fibmatch 2001:db8:1::1 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800275 log_test $? 0 "IPv6 fibmatch"
Ido Schimmel82e45b62018-01-07 12:45:18 +0200276
David Ahern171a4872018-03-13 08:29:39 -0700277 $IP route get fibmatch 198.51.100.1 | \
Ido Schimmel82e45b62018-01-07 12:45:18 +0200278 grep -q "linkdown"
David Ahern10566912018-02-13 08:37:34 -0800279 log_test $? 1 "IPv4 - no linkdown flag"
David Ahern171a4872018-03-13 08:29:39 -0700280 $IP -6 route get fibmatch 2001:db8:1::1 | \
Ido Schimmel82e45b62018-01-07 12:45:18 +0200281 grep -q "linkdown"
David Ahern10566912018-02-13 08:37:34 -0800282 log_test $? 1 "IPv6 - no linkdown flag"
Ido Schimmel82e45b62018-01-07 12:45:18 +0200283
David Ahern10566912018-02-13 08:37:34 -0800284 set -e
David Ahern171a4872018-03-13 08:29:39 -0700285 $IP link set dev dummy0 carrier off
David Aherne2ba7322018-02-13 08:37:36 -0800286 sleep 1
David Ahern10566912018-02-13 08:37:34 -0800287 set +e
Ido Schimmel82e45b62018-01-07 12:45:18 +0200288
David Ahern10566912018-02-13 08:37:34 -0800289 echo " Carrier off on nexthop"
David Ahern171a4872018-03-13 08:29:39 -0700290 $IP route get fibmatch 198.51.100.1 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800291 log_test $? 0 "IPv4 fibmatch"
David Ahern171a4872018-03-13 08:29:39 -0700292 $IP -6 route get fibmatch 2001:db8:1::1 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800293 log_test $? 0 "IPv6 fibmatch"
Ido Schimmel82e45b62018-01-07 12:45:18 +0200294
David Ahern171a4872018-03-13 08:29:39 -0700295 $IP route get fibmatch 198.51.100.1 | \
Ido Schimmel82e45b62018-01-07 12:45:18 +0200296 grep -q "linkdown"
David Ahern10566912018-02-13 08:37:34 -0800297 log_test $? 1 "IPv4 - linkdown flag set"
David Ahern171a4872018-03-13 08:29:39 -0700298 $IP -6 route get fibmatch 2001:db8:1::1 | \
Ido Schimmel82e45b62018-01-07 12:45:18 +0200299 grep -q "linkdown"
David Ahern10566912018-02-13 08:37:34 -0800300 log_test $? 1 "IPv6 - linkdown flag set"
Ido Schimmel82e45b62018-01-07 12:45:18 +0200301
David Ahern10566912018-02-13 08:37:34 -0800302 set -e
David Ahern171a4872018-03-13 08:29:39 -0700303 $IP address add 192.0.2.1/24 dev dummy0
304 $IP -6 address add 2001:db8:2::1/64 dev dummy0
David Ahern10566912018-02-13 08:37:34 -0800305 set +e
Ido Schimmel82e45b62018-01-07 12:45:18 +0200306
David Ahern10566912018-02-13 08:37:34 -0800307 echo " Route to local address with carrier down"
David Ahern171a4872018-03-13 08:29:39 -0700308 $IP route get fibmatch 192.0.2.1 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800309 log_test $? 0 "IPv4 fibmatch"
David Ahern171a4872018-03-13 08:29:39 -0700310 $IP -6 route get fibmatch 2001:db8:2::1 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800311 log_test $? 0 "IPv6 fibmatch"
Ido Schimmel82e45b62018-01-07 12:45:18 +0200312
David Ahern171a4872018-03-13 08:29:39 -0700313 $IP route get fibmatch 192.0.2.1 | \
Ido Schimmel82e45b62018-01-07 12:45:18 +0200314 grep -q "linkdown"
David Ahern10566912018-02-13 08:37:34 -0800315 log_test $? 1 "IPv4 linkdown flag set"
David Ahern171a4872018-03-13 08:29:39 -0700316 $IP -6 route get fibmatch 2001:db8:2::1 | \
Ido Schimmel82e45b62018-01-07 12:45:18 +0200317 grep -q "linkdown"
David Ahern10566912018-02-13 08:37:34 -0800318 log_test $? 1 "IPv6 linkdown flag set"
Ido Schimmel82e45b62018-01-07 12:45:18 +0200319
David Ahernee395a52018-02-13 08:37:35 -0800320 cleanup
Ido Schimmel82e45b62018-01-07 12:45:18 +0200321}
322
323fib_carrier_unicast_test()
324{
325 ret=0
326
David Ahern10566912018-02-13 08:37:34 -0800327 echo
328 echo "Single path route carrier test"
329
David Ahernee395a52018-02-13 08:37:35 -0800330 setup
Ido Schimmel82e45b62018-01-07 12:45:18 +0200331
David Ahern10566912018-02-13 08:37:34 -0800332 set -e
David Ahern171a4872018-03-13 08:29:39 -0700333 $IP link set dev dummy0 carrier on
David Ahern10566912018-02-13 08:37:34 -0800334 set +e
Ido Schimmel82e45b62018-01-07 12:45:18 +0200335
David Ahern10566912018-02-13 08:37:34 -0800336 echo " Start point"
David Ahern171a4872018-03-13 08:29:39 -0700337 $IP route get fibmatch 198.51.100.2 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800338 log_test $? 0 "IPv4 fibmatch"
David Ahern171a4872018-03-13 08:29:39 -0700339 $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800340 log_test $? 0 "IPv6 fibmatch"
Ido Schimmel82e45b62018-01-07 12:45:18 +0200341
David Ahern171a4872018-03-13 08:29:39 -0700342 $IP route get fibmatch 198.51.100.2 | \
Ido Schimmel82e45b62018-01-07 12:45:18 +0200343 grep -q "linkdown"
David Ahern10566912018-02-13 08:37:34 -0800344 log_test $? 1 "IPv4 no linkdown flag"
David Ahern171a4872018-03-13 08:29:39 -0700345 $IP -6 route get fibmatch 2001:db8:1::2 | \
Ido Schimmel82e45b62018-01-07 12:45:18 +0200346 grep -q "linkdown"
David Ahern10566912018-02-13 08:37:34 -0800347 log_test $? 1 "IPv6 no linkdown flag"
Ido Schimmel82e45b62018-01-07 12:45:18 +0200348
David Ahern10566912018-02-13 08:37:34 -0800349 set -e
David Ahern171a4872018-03-13 08:29:39 -0700350 $IP link set dev dummy0 carrier off
David Ahern10566912018-02-13 08:37:34 -0800351 set +e
Ido Schimmel82e45b62018-01-07 12:45:18 +0200352
David Ahern10566912018-02-13 08:37:34 -0800353 echo " Carrier down"
David Ahern171a4872018-03-13 08:29:39 -0700354 $IP route get fibmatch 198.51.100.2 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800355 log_test $? 0 "IPv4 fibmatch"
David Ahern171a4872018-03-13 08:29:39 -0700356 $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800357 log_test $? 0 "IPv6 fibmatch"
Ido Schimmel82e45b62018-01-07 12:45:18 +0200358
David Ahern171a4872018-03-13 08:29:39 -0700359 $IP route get fibmatch 198.51.100.2 | \
Ido Schimmel82e45b62018-01-07 12:45:18 +0200360 grep -q "linkdown"
David Ahern10566912018-02-13 08:37:34 -0800361 log_test $? 0 "IPv4 linkdown flag set"
David Ahern171a4872018-03-13 08:29:39 -0700362 $IP -6 route get fibmatch 2001:db8:1::2 | \
Ido Schimmel82e45b62018-01-07 12:45:18 +0200363 grep -q "linkdown"
David Ahern10566912018-02-13 08:37:34 -0800364 log_test $? 0 "IPv6 linkdown flag set"
Ido Schimmel82e45b62018-01-07 12:45:18 +0200365
David Ahern10566912018-02-13 08:37:34 -0800366 set -e
David Ahern171a4872018-03-13 08:29:39 -0700367 $IP address add 192.0.2.1/24 dev dummy0
368 $IP -6 address add 2001:db8:2::1/64 dev dummy0
David Ahern10566912018-02-13 08:37:34 -0800369 set +e
Ido Schimmel82e45b62018-01-07 12:45:18 +0200370
David Ahern10566912018-02-13 08:37:34 -0800371 echo " Second address added with carrier down"
David Ahern171a4872018-03-13 08:29:39 -0700372 $IP route get fibmatch 192.0.2.2 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800373 log_test $? 0 "IPv4 fibmatch"
David Ahern171a4872018-03-13 08:29:39 -0700374 $IP -6 route get fibmatch 2001:db8:2::2 &> /dev/null
David Ahern10566912018-02-13 08:37:34 -0800375 log_test $? 0 "IPv6 fibmatch"
Ido Schimmel82e45b62018-01-07 12:45:18 +0200376
David Ahern171a4872018-03-13 08:29:39 -0700377 $IP route get fibmatch 192.0.2.2 | \
Ido Schimmel82e45b62018-01-07 12:45:18 +0200378 grep -q "linkdown"
David Ahern10566912018-02-13 08:37:34 -0800379 log_test $? 0 "IPv4 linkdown flag set"
David Ahern171a4872018-03-13 08:29:39 -0700380 $IP -6 route get fibmatch 2001:db8:2::2 | \
Ido Schimmel82e45b62018-01-07 12:45:18 +0200381 grep -q "linkdown"
David Ahern10566912018-02-13 08:37:34 -0800382 log_test $? 0 "IPv6 linkdown flag set"
Ido Schimmel82e45b62018-01-07 12:45:18 +0200383
David Ahernee395a52018-02-13 08:37:35 -0800384 cleanup
Ido Schimmel82e45b62018-01-07 12:45:18 +0200385}
386
387fib_carrier_test()
388{
Ido Schimmel82e45b62018-01-07 12:45:18 +0200389 fib_carrier_local_test
390 fib_carrier_unicast_test
391}
392
Ido Schimmel607bd2e2018-01-07 12:45:16 +0200393fib_test()
394{
David Aherna5118582018-03-13 08:29:40 -0700395 if [ -n "$TEST" ]; then
396 eval $TEST
397 else
398 fib_unreg_test
399 fib_down_test
400 fib_carrier_test
401 fi
Ido Schimmel607bd2e2018-01-07 12:45:16 +0200402}
403
404if [ "$(id -u)" -ne 0 ];then
405 echo "SKIP: Need root privileges"
406 exit 0
407fi
408
409if [ ! -x "$(command -v ip)" ]; then
410 echo "SKIP: Could not run test without ip tool"
411 exit 0
412fi
413
414ip route help 2>&1 | grep -q fibmatch
415if [ $? -ne 0 ]; then
416 echo "SKIP: iproute2 too old, missing fibmatch"
417 exit 0
418fi
419
David Ahernee395a52018-02-13 08:37:35 -0800420# start clean
421cleanup &> /dev/null
422
Ido Schimmel607bd2e2018-01-07 12:45:16 +0200423fib_test
424
425exit $ret