Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 1 | #!/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 | |||||
7 | ret=0 | ||||
8 | |||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 9 | PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no} |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 10 | IP="ip -netns testns" |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 11 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 12 | log_test() |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 13 | { |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 14 | 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 Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 21 | ret=1 |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 22 | 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 Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 29 | fi |
30 | } | ||||
31 | |||||
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 32 | setup() |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 33 | { |
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 34 | set -e |
35 | ip netns add testns | ||||
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 36 | $IP link set dev lo up |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 37 | |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 38 | $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 Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 42 | set +e |
43 | |||||
44 | } | ||||
45 | |||||
46 | cleanup() | ||||
47 | { | ||||
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 48 | $IP link del dev dummy0 &> /dev/null |
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 49 | ip netns del testns |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 50 | } |
51 | |||||
52 | fib_unreg_unicast_test() | ||||
53 | { | ||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 54 | echo |
55 | echo "Single path route test" | ||||
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 56 | |
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 57 | setup |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 58 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 59 | echo " Start point" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 60 | $IP route get fibmatch 198.51.100.2 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 61 | log_test $? 0 "IPv4 fibmatch" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 62 | $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 63 | log_test $? 0 "IPv6 fibmatch" |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 64 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 65 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 66 | $IP link del dev dummy0 |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 67 | set +e |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 68 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 69 | echo " Nexthop device deleted" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 70 | $IP route get fibmatch 198.51.100.2 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 71 | log_test $? 2 "IPv4 fibmatch - no route" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 72 | $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 73 | log_test $? 2 "IPv6 fibmatch - no route" |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 74 | |
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 75 | cleanup |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 76 | } |
77 | |||||
78 | fib_unreg_multipath_test() | ||||
79 | { | ||||
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 80 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 81 | echo |
82 | echo "Multipath route test" | ||||
83 | |||||
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 84 | setup |
85 | |||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 86 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 87 | $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 Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 91 | |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 92 | $IP route add 203.0.113.0/24 \ |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 93 | nexthop via 198.51.100.2 dev dummy0 \ |
94 | nexthop via 192.0.2.2 dev dummy1 | ||||
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 95 | $IP -6 route add 2001:db8:3::/64 \ |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 96 | nexthop via 2001:db8:1::2 dev dummy0 \ |
97 | nexthop via 2001:db8:2::2 dev dummy1 | ||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 98 | set +e |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 99 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 100 | echo " Start point" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 101 | $IP route get fibmatch 203.0.113.1 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 102 | log_test $? 0 "IPv4 fibmatch" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 103 | $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 104 | log_test $? 0 "IPv6 fibmatch" |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 105 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 106 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 107 | $IP link del dev dummy0 |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 108 | set +e |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 109 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 110 | echo " One nexthop device deleted" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 111 | $IP route get fibmatch 203.0.113.1 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 112 | log_test $? 2 "IPv4 - multipath route removed on delete" |
113 | |||||
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 114 | $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 115 | # In IPv6 we do not flush the entire multipath route. |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 116 | log_test $? 0 "IPv6 - multipath down to single path" |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 117 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 118 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 119 | $IP link del dev dummy1 |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 120 | set +e |
121 | |||||
122 | echo " Second nexthop device deleted" | ||||
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 123 | $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 124 | log_test $? 2 "IPv6 - no route" |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 125 | |
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 126 | cleanup |
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 127 | } |
128 | |||||
129 | fib_unreg_test() | ||||
130 | { | ||||
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 131 | fib_unreg_unicast_test |
132 | fib_unreg_multipath_test | ||||
133 | } | ||||
134 | |||||
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 135 | fib_down_unicast_test() |
136 | { | ||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 137 | echo |
138 | echo "Single path, admin down" | ||||
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 139 | |
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 140 | setup |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 141 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 142 | echo " Start point" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 143 | $IP route get fibmatch 198.51.100.2 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 144 | log_test $? 0 "IPv4 fibmatch" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 145 | $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 146 | log_test $? 0 "IPv6 fibmatch" |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 147 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 148 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 149 | $IP link set dev dummy0 down |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 150 | set +e |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 151 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 152 | echo " Route deleted on down" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 153 | $IP route get fibmatch 198.51.100.2 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 154 | log_test $? 2 "IPv4 fibmatch" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 155 | $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 156 | log_test $? 2 "IPv6 fibmatch" |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 157 | |
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 158 | cleanup |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 159 | } |
160 | |||||
161 | fib_down_multipath_test_do() | ||||
162 | { | ||||
163 | local down_dev=$1 | ||||
164 | local up_dev=$2 | ||||
165 | |||||
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 166 | $IP route get fibmatch 203.0.113.1 \ |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 167 | oif $down_dev &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 168 | log_test $? 2 "IPv4 fibmatch on down device" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 169 | $IP -6 route get fibmatch 2001:db8:3::1 \ |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 170 | oif $down_dev &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 171 | log_test $? 2 "IPv6 fibmatch on down device" |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 172 | |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 173 | $IP route get fibmatch 203.0.113.1 \ |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 174 | oif $up_dev &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 175 | log_test $? 0 "IPv4 fibmatch on up device" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 176 | $IP -6 route get fibmatch 2001:db8:3::1 \ |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 177 | oif $up_dev &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 178 | log_test $? 0 "IPv6 fibmatch on up device" |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 179 | |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 180 | $IP route get fibmatch 203.0.113.1 | \ |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 181 | grep $down_dev | grep -q "dead linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 182 | log_test $? 0 "IPv4 flags on down device" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 183 | $IP -6 route get fibmatch 2001:db8:3::1 | \ |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 184 | grep $down_dev | grep -q "dead linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 185 | log_test $? 0 "IPv6 flags on down device" |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 186 | |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 187 | $IP route get fibmatch 203.0.113.1 | \ |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 188 | grep $up_dev | grep -q "dead linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 189 | log_test $? 1 "IPv4 flags on up device" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 190 | $IP -6 route get fibmatch 2001:db8:3::1 | \ |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 191 | grep $up_dev | grep -q "dead linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 192 | log_test $? 1 "IPv6 flags on up device" |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 193 | } |
194 | |||||
195 | fib_down_multipath_test() | ||||
196 | { | ||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 197 | echo |
198 | echo "Admin down multipath" | ||||
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 199 | |
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 200 | setup |
201 | |||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 202 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 203 | $IP link add dummy1 type dummy |
204 | $IP link set dev dummy1 up | ||||
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 205 | |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 206 | $IP address add 192.0.2.1/24 dev dummy1 |
207 | $IP -6 address add 2001:db8:2::1/64 dev dummy1 | ||||
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 208 | |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 209 | $IP route add 203.0.113.0/24 \ |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 210 | nexthop via 198.51.100.2 dev dummy0 \ |
211 | nexthop via 192.0.2.2 dev dummy1 | ||||
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 212 | $IP -6 route add 2001:db8:3::/64 \ |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 213 | nexthop via 2001:db8:1::2 dev dummy0 \ |
214 | nexthop via 2001:db8:2::2 dev dummy1 | ||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 215 | set +e |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 216 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 217 | echo " Verify start point" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 218 | $IP route get fibmatch 203.0.113.1 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 219 | log_test $? 0 "IPv4 fibmatch" |
220 | |||||
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 221 | $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 222 | log_test $? 0 "IPv6 fibmatch" |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 223 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 224 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 225 | $IP link set dev dummy0 down |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 226 | set +e |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 227 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 228 | echo " One device down, one up" |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 229 | fib_down_multipath_test_do "dummy0" "dummy1" |
230 | |||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 231 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 232 | $IP link set dev dummy0 up |
233 | $IP link set dev dummy1 down | ||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 234 | set +e |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 235 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 236 | echo " Other device down and up" |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 237 | fib_down_multipath_test_do "dummy1" "dummy0" |
238 | |||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 239 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 240 | $IP link set dev dummy0 down |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 241 | set +e |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 242 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 243 | echo " Both devices down" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 244 | $IP route get fibmatch 203.0.113.1 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 245 | log_test $? 2 "IPv4 fibmatch" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 246 | $IP -6 route get fibmatch 2001:db8:3::1 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 247 | log_test $? 2 "IPv6 fibmatch" |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 248 | |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 249 | $IP link del dev dummy1 |
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 250 | cleanup |
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 251 | } |
252 | |||||
253 | fib_down_test() | ||||
254 | { | ||||
Ido Schimmel | 5adb768 | 2018-01-07 12:45:17 +0200 | [diff] [blame] | 255 | fib_down_unicast_test |
256 | fib_down_multipath_test | ||||
257 | } | ||||
258 | |||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 259 | # Local routes should not be affected when carrier changes. |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 260 | fib_carrier_local_test() |
261 | { | ||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 262 | echo |
263 | echo "Local carrier tests - single path" | ||||
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 264 | |
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 265 | setup |
266 | |||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 267 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 268 | $IP link set dev dummy0 carrier on |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 269 | set +e |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 270 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 271 | echo " Start point" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 272 | $IP route get fibmatch 198.51.100.1 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 273 | log_test $? 0 "IPv4 fibmatch" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 274 | $IP -6 route get fibmatch 2001:db8:1::1 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 275 | log_test $? 0 "IPv6 fibmatch" |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 276 | |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 277 | $IP route get fibmatch 198.51.100.1 | \ |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 278 | grep -q "linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 279 | log_test $? 1 "IPv4 - no linkdown flag" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 280 | $IP -6 route get fibmatch 2001:db8:1::1 | \ |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 281 | grep -q "linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 282 | log_test $? 1 "IPv6 - no linkdown flag" |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 283 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 284 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 285 | $IP link set dev dummy0 carrier off |
David Ahern | e2ba732 | 2018-02-13 08:37:36 -0800 | [diff] [blame] | 286 | sleep 1 |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 287 | set +e |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 288 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 289 | echo " Carrier off on nexthop" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 290 | $IP route get fibmatch 198.51.100.1 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 291 | log_test $? 0 "IPv4 fibmatch" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 292 | $IP -6 route get fibmatch 2001:db8:1::1 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 293 | log_test $? 0 "IPv6 fibmatch" |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 294 | |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 295 | $IP route get fibmatch 198.51.100.1 | \ |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 296 | grep -q "linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 297 | log_test $? 1 "IPv4 - linkdown flag set" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 298 | $IP -6 route get fibmatch 2001:db8:1::1 | \ |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 299 | grep -q "linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 300 | log_test $? 1 "IPv6 - linkdown flag set" |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 301 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 302 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 303 | $IP address add 192.0.2.1/24 dev dummy0 |
304 | $IP -6 address add 2001:db8:2::1/64 dev dummy0 | ||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 305 | set +e |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 306 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 307 | echo " Route to local address with carrier down" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 308 | $IP route get fibmatch 192.0.2.1 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 309 | log_test $? 0 "IPv4 fibmatch" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 310 | $IP -6 route get fibmatch 2001:db8:2::1 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 311 | log_test $? 0 "IPv6 fibmatch" |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 312 | |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 313 | $IP route get fibmatch 192.0.2.1 | \ |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 314 | grep -q "linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 315 | log_test $? 1 "IPv4 linkdown flag set" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 316 | $IP -6 route get fibmatch 2001:db8:2::1 | \ |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 317 | grep -q "linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 318 | log_test $? 1 "IPv6 linkdown flag set" |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 319 | |
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 320 | cleanup |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 321 | } |
322 | |||||
323 | fib_carrier_unicast_test() | ||||
324 | { | ||||
325 | ret=0 | ||||
326 | |||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 327 | echo |
328 | echo "Single path route carrier test" | ||||
329 | |||||
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 330 | setup |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 331 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 332 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 333 | $IP link set dev dummy0 carrier on |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 334 | set +e |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 335 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 336 | echo " Start point" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 337 | $IP route get fibmatch 198.51.100.2 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 338 | log_test $? 0 "IPv4 fibmatch" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 339 | $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 340 | log_test $? 0 "IPv6 fibmatch" |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 341 | |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 342 | $IP route get fibmatch 198.51.100.2 | \ |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 343 | grep -q "linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 344 | log_test $? 1 "IPv4 no linkdown flag" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 345 | $IP -6 route get fibmatch 2001:db8:1::2 | \ |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 346 | grep -q "linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 347 | log_test $? 1 "IPv6 no linkdown flag" |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 348 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 349 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 350 | $IP link set dev dummy0 carrier off |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 351 | set +e |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 352 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 353 | echo " Carrier down" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 354 | $IP route get fibmatch 198.51.100.2 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 355 | log_test $? 0 "IPv4 fibmatch" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 356 | $IP -6 route get fibmatch 2001:db8:1::2 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 357 | log_test $? 0 "IPv6 fibmatch" |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 358 | |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 359 | $IP route get fibmatch 198.51.100.2 | \ |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 360 | grep -q "linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 361 | log_test $? 0 "IPv4 linkdown flag set" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 362 | $IP -6 route get fibmatch 2001:db8:1::2 | \ |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 363 | grep -q "linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 364 | log_test $? 0 "IPv6 linkdown flag set" |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 365 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 366 | set -e |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 367 | $IP address add 192.0.2.1/24 dev dummy0 |
368 | $IP -6 address add 2001:db8:2::1/64 dev dummy0 | ||||
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 369 | set +e |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 370 | |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 371 | echo " Second address added with carrier down" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 372 | $IP route get fibmatch 192.0.2.2 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 373 | log_test $? 0 "IPv4 fibmatch" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 374 | $IP -6 route get fibmatch 2001:db8:2::2 &> /dev/null |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 375 | log_test $? 0 "IPv6 fibmatch" |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 376 | |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 377 | $IP route get fibmatch 192.0.2.2 | \ |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 378 | grep -q "linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 379 | log_test $? 0 "IPv4 linkdown flag set" |
David Ahern | 171a487 | 2018-03-13 08:29:39 -0700 | [diff] [blame] | 380 | $IP -6 route get fibmatch 2001:db8:2::2 | \ |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 381 | grep -q "linkdown" |
David Ahern | 1056691 | 2018-02-13 08:37:34 -0800 | [diff] [blame] | 382 | log_test $? 0 "IPv6 linkdown flag set" |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 383 | |
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 384 | cleanup |
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 385 | } |
386 | |||||
387 | fib_carrier_test() | ||||
388 | { | ||||
Ido Schimmel | 82e45b6 | 2018-01-07 12:45:18 +0200 | [diff] [blame] | 389 | fib_carrier_local_test |
390 | fib_carrier_unicast_test | ||||
391 | } | ||||
392 | |||||
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 393 | fib_test() |
394 | { | ||||
David Ahern | a511858 | 2018-03-13 08:29:40 -0700 | [diff] [blame^] | 395 | if [ -n "$TEST" ]; then |
396 | eval $TEST | ||||
397 | else | ||||
398 | fib_unreg_test | ||||
399 | fib_down_test | ||||
400 | fib_carrier_test | ||||
401 | fi | ||||
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 402 | } |
403 | |||||
404 | if [ "$(id -u)" -ne 0 ];then | ||||
405 | echo "SKIP: Need root privileges" | ||||
406 | exit 0 | ||||
407 | fi | ||||
408 | |||||
409 | if [ ! -x "$(command -v ip)" ]; then | ||||
410 | echo "SKIP: Could not run test without ip tool" | ||||
411 | exit 0 | ||||
412 | fi | ||||
413 | |||||
414 | ip route help 2>&1 | grep -q fibmatch | ||||
415 | if [ $? -ne 0 ]; then | ||||
416 | echo "SKIP: iproute2 too old, missing fibmatch" | ||||
417 | exit 0 | ||||
418 | fi | ||||
419 | |||||
David Ahern | ee395a5 | 2018-02-13 08:37:35 -0800 | [diff] [blame] | 420 | # start clean |
421 | cleanup &> /dev/null | ||||
422 | |||||
Ido Schimmel | 607bd2e | 2018-01-07 12:45:16 +0200 | [diff] [blame] | 423 | fib_test |
424 | |||||
425 | exit $ret |