2 # SPDX-License-Identifier: GPL-2.0
4 # Test that blackhole routes are marked as offloaded and that packets hitting
5 # them are dropped by the ASIC and not by the kernel.
7 # +---------------------------------+
11 # | | 2001:db8:1::1/64 |
13 # | | default via 192.0.2.2 |
14 # | | default via 2001:db8:1::2 |
15 # +----|----------------------------+
17 # +----|----------------------------------------------------------------------+
21 # | 2001:db8:1::2/64 |
23 # | 2001:db8:2::2/64 |
27 # +----|----------------------------------------------------------------------+
29 # +----|----------------------------+
30 # | | default via 198.51.100.2 |
31 # | | default via 2001:db8:2::2 |
33 # | | 2001:db8:2::1/64 |
34 # | | 198.51.100.1/24 |
37 # +---------------------------------+
39 lib_dir
=$
(dirname $0)/..
/..
/..
/net
/forwarding
48 : ${TIMEOUT:=20000} # ms
49 source $lib_dir/tc_common.sh
50 source $lib_dir/lib.sh
54 simple_if_init
$h1 192.0.2.1/24 2001:db8
:1::1/64
56 ip
-4 route add default vrf v
$h1 nexthop via
192.0.2.2
57 ip
-6 route add default vrf v
$h1 nexthop via
2001:db8
:1::2
62 ip
-6 route del default vrf v
$h1 nexthop via
2001:db8
:1::2
63 ip
-4 route del default vrf v
$h1 nexthop via
192.0.2.2
65 simple_if_fini
$h1 192.0.2.1/24 2001:db8
:1::1/64
70 simple_if_init
$h2 198.51.100.1/24 2001:db8
:2::1/64
72 ip
-4 route add default vrf v
$h2 nexthop via
198.51.100.2
73 ip
-6 route add default vrf v
$h2 nexthop via
2001:db8
:2::2
78 ip
-6 route del default vrf v
$h2 nexthop via
2001:db8
:2::2
79 ip
-4 route del default vrf v
$h2 nexthop via
198.51.100.2
81 simple_if_fini
$h2 198.51.100.1/24 2001:db8
:2::1/64
86 ip link
set dev
$rp1 up
87 ip link
set dev
$rp2 up
89 tc qdisc add dev
$rp1 clsact
91 __addr_add_del
$rp1 add
192.0.2.2/24 2001:db8
:1::2/64
92 __addr_add_del
$rp2 add
198.51.100.2/24 2001:db8
:2::2/64
97 __addr_add_del
$rp2 del
198.51.100.2/24 2001:db8
:2::2/64
98 __addr_add_del
$rp1 del
192.0.2.2/24 2001:db8
:1::2/64
100 tc qdisc del dev
$rp1 clsact
102 ip link
set dev
$rp2 down
103 ip link
set dev
$rp1 down
108 ping_test
$h1 198.51.100.1 ": h1->h2"
113 ping6_test
$h1 2001:db8
:2::1 ": h1->h2"
118 # Transmit packets from H1 to H2 and make sure they are dropped by the
119 # ASIC and not by the kernel
122 ip
-4 route add blackhole
198.51.100.0/30
123 tc filter add dev
$rp1 ingress protocol ip pref
1 handle
101 flower \
124 skip_hw dst_ip
198.51.100.1 src_ip
192.0.2.1 ip_proto icmp \
127 busywait
"$TIMEOUT" wait_for_offload ip
-4 route show
198.51.100.0/30
128 check_err $?
"route not marked as offloaded when should"
130 ping_do
$h1 198.51.100.1
131 check_fail $?
"ping passed when should not"
133 tc_check_packets
"dev $rp1 ingress" 101 0
134 check_err $?
"packets trapped and not dropped by ASIC"
136 log_test
"IPv4 blackhole route"
138 tc filter del dev
$rp1 ingress protocol ip pref
1 handle
101 flower
139 ip
-4 route del blackhole
198.51.100.0/30
146 ip
-6 route add blackhole
2001:db8
:2::/120
147 tc filter add dev
$rp1 ingress protocol ipv6 pref
1 handle
101 flower \
148 skip_hw dst_ip
2001:db8
:2::1 src_ip
2001:db8
:1::1 \
149 ip_proto icmpv6 action pass
151 busywait
"$TIMEOUT" wait_for_offload ip
-6 route show
2001:db8
:2::/120
152 check_err $?
"route not marked as offloaded when should"
154 ping6_do
$h1 2001:db8
:2::1
155 check_fail $?
"ping passed when should not"
157 tc_check_packets
"dev $rp1 ingress" 101 0
158 check_err $?
"packets trapped and not dropped by ASIC"
160 log_test
"IPv6 blackhole route"
162 tc filter del dev
$rp1 ingress protocol ipv6 pref
1 handle
101 flower
163 ip
-6 route del blackhole
2001:db8
:2::/120