2 # SPDX-License-Identifier: GPL-2.0
4 # This test is for checking IPv4 and IPv6 FIB rules API
8 PAUSE_ON_FAIL=${PAUSE_ON_FAIL:=no}
26 if [ ${rc} -eq ${expected} ]; then
27 nsuccess=$((nsuccess+1))
28 printf "\n TEST: %-50s [ OK ]\n" "${msg}"
32 printf "\n TEST: %-50s [FAIL]\n" "${msg}"
33 if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
35 echo "hit enter to continue, 'q' to quit"
37 [ "$a" = "q" ] && exit 1
45 echo "######################################################################"
46 echo "TEST SECTION: $*"
47 echo "######################################################################"
54 $IP link set dev lo up
56 $IP link add dummy0 type dummy
57 $IP link set dev dummy0 up
58 $IP address add 198.51.100.1/24 dev dummy0
59 $IP -6 address add 2001:db8:1::1/64 dev dummy0
66 $IP link del dev dummy0 &> /dev/null
70 fib_check_iproute_support()
72 ip rule help 2>&1 | grep -q $1
74 echo "SKIP: iproute2 iprule too old, missing $1 match"
78 ip route get help 2>&1 | grep -q $2
80 echo "SKIP: iproute2 get route too old, missing $2 match"
90 log_test $? 0 "rule6 del $1"
93 fib_rule6_del_by_pref()
95 pref=$($IP -6 rule show | grep "$1 lookup $TABLE" | cut -d ":" -f 1)
96 $IP -6 rule del pref $pref
99 fib_rule6_test_match_n_redirect()
104 $IP -6 rule add $match table $RTABLE
105 $IP -6 route get $GW_IP6 $getmatch | grep -q "table $RTABLE"
106 log_test $? 0 "rule6 check: $1"
108 fib_rule6_del_by_pref "$match"
109 log_test $? 0 "rule6 del by pref: $match"
114 # setup the fib rule redirect route
115 $IP -6 route add table $RTABLE default via $GW_IP6 dev $DEV onlink
118 fib_rule6_test_match_n_redirect "$match" "$match" "oif redirect to table"
120 match="from $SRC_IP6 iif $DEV"
121 fib_rule6_test_match_n_redirect "$match" "$match" "iif redirect to table"
124 fib_rule6_test_match_n_redirect "$match" "$match" "tos redirect to table"
128 fib_rule6_test_match_n_redirect "$match" "$getmatch" "fwmark redirect to table"
130 fib_check_iproute_support "uidrange" "uid"
131 if [ $? -eq 0 ]; then
132 match="uidrange 100-100"
134 fib_rule6_test_match_n_redirect "$match" "$getmatch" "uid redirect to table"
137 fib_check_iproute_support "sport" "sport"
138 if [ $? -eq 0 ]; then
139 match="sport 666 dport 777"
140 fib_rule6_test_match_n_redirect "$match" "$match" "sport and dport redirect to table"
143 fib_check_iproute_support "ipproto" "ipproto"
144 if [ $? -eq 0 ]; then
146 fib_rule6_test_match_n_redirect "$match" "$match" "ipproto match"
149 fib_check_iproute_support "ipproto" "ipproto"
150 if [ $? -eq 0 ]; then
151 match="ipproto ipv6-icmp"
152 fib_rule6_test_match_n_redirect "$match" "$match" "ipproto ipv6-icmp match"
159 log_test $? 0 "del $1"
162 fib_rule4_del_by_pref()
164 pref=$($IP rule show | grep "$1 lookup $TABLE" | cut -d ":" -f 1)
165 $IP rule del pref $pref
168 fib_rule4_test_match_n_redirect()
173 $IP rule add $match table $RTABLE
174 $IP route get $GW_IP4 $getmatch | grep -q "table $RTABLE"
175 log_test $? 0 "rule4 check: $1"
177 fib_rule4_del_by_pref "$match"
178 log_test $? 0 "rule4 del by pref: $match"
183 # setup the fib rule redirect route
184 $IP route add table $RTABLE default via $GW_IP4 dev $DEV onlink
187 fib_rule4_test_match_n_redirect "$match" "$match" "oif redirect to table"
189 match="from $SRC_IP iif $DEV"
190 fib_rule4_test_match_n_redirect "$match" "$match" "iif redirect to table"
193 fib_rule4_test_match_n_redirect "$match" "$match" "tos redirect to table"
197 fib_rule4_test_match_n_redirect "$match" "$getmatch" "fwmark redirect to table"
199 fib_check_iproute_support "uidrange" "uid"
200 if [ $? -eq 0 ]; then
201 match="uidrange 100-100"
203 fib_rule4_test_match_n_redirect "$match" "$getmatch" "uid redirect to table"
206 fib_check_iproute_support "sport" "sport"
207 if [ $? -eq 0 ]; then
208 match="sport 666 dport 777"
209 fib_rule4_test_match_n_redirect "$match" "$match" "sport and dport redirect to table"
212 fib_check_iproute_support "ipproto" "ipproto"
213 if [ $? -eq 0 ]; then
215 fib_rule4_test_match_n_redirect "$match" "$match" "ipproto tcp match"
218 fib_check_iproute_support "ipproto" "ipproto"
219 if [ $? -eq 0 ]; then
221 fib_rule4_test_match_n_redirect "$match" "$match" "ipproto icmp match"
227 log_section "IPv4 fib rule"
229 log_section "IPv6 fib rule"
233 if [ "$(id -u)" -ne 0 ];then
234 echo "SKIP: Need root privileges"
238 if [ ! -x "$(command -v ip)" ]; then
239 echo "SKIP: Could not run test without ip tool"
249 if [ "$TESTS" != "none" ]; then
250 printf "\nTests passed: %3d\n" ${nsuccess}
251 printf "Tests failed: %3d\n" ${nfail}