2 # SPDX-License-Identifier: GPL-2.0
4 # +--------------------+ +----------------------+
7 # | $h1.200 + | | + $h2.200 |
8 # | 192.0.2.1/28 | | | | 192.0.2.18/28 |
9 # | 2001:db8:1::1/64 | | | | 2001:db8:2::1/64 |
13 # +------------------|-+ +-|--------------------+
15 # +------------------|-------------------------|--------------------+
20 # | $rp1.200 + + $rp2.200 |
21 # | 192.0.2.2/28 192.0.2.17/28 |
22 # | 2001:db8:1::2/64 2001:db8:2::2/64 |
24 # +-----------------------------------------------------------------+
51 lib_dir
=$
(dirname "$0")
52 source "$lib_dir"/..
/..
/..
/net
/forwarding
/lib.sh
53 source "$lib_dir"/..
/..
/..
/net
/forwarding
/tc_common.sh
58 vlan_create
$h1 200 v
$h1 192.0.2.1/28 2001:db8
:1::1/64
59 ip route add
192.0.2.16/28 vrf v
$h1 nexthop via
192.0.2.2
60 ip
-6 route add
2001:db8
:2::/64 vrf v
$h1 nexthop via
2001:db8
:1::2
65 ip
-6 route del
2001:db8
:2::/64 vrf v
$h1 nexthop via
2001:db8
:1::2
66 ip route del
192.0.2.16/28 vrf v
$h1 nexthop via
192.0.2.2
74 vlan_create
$h2 200 v
$h2 192.0.2.18/28 2001:db8
:2::1/64
75 ip route add
192.0.2.0/28 vrf v
$h2 nexthop via
192.0.2.17
76 ip
-6 route add
2001:db8
:1::/64 vrf v
$h2 nexthop via
2001:db8
:2::2
81 ip
-6 route del
2001:db8
:1::/64 vrf v
$h2 nexthop via
2001:db8
:2::2
82 ip route del
192.0.2.0/28 vrf v
$h2 nexthop via
192.0.2.17
87 router_rp1_200_create
()
89 ip link add name
$rp1.200 link
$rp1 type vlan id
200
90 ip link
set dev
$rp1.200 addrgenmode eui64
91 ip link
set dev
$rp1.200 up
92 ip address add dev
$rp1.200
192.0.2.2/28
93 ip address add dev
$rp1.200
2001:db8
:1::2/64
94 ip stats
set dev
$rp1.200 l3_stats on
97 router_rp1_200_destroy
()
99 ip stats
set dev
$rp1.200 l3_stats off
100 ip address del dev
$rp1.200
2001:db8
:1::2/64
101 ip address del dev
$rp1.200
192.0.2.2/28
102 ip link del dev
$rp1.200
107 ip link
set dev
$rp1 up
108 router_rp1_200_create
110 ip link
set dev
$rp2 up
111 vlan_create
$rp2 200 "" 192.0.2.17/28 2001:db8
:2::2/64
116 vlan_destroy
$rp2 200
117 ip link
set dev
$rp2 down
119 router_rp1_200_destroy
120 ip link
set dev
$rp1 down
131 rp1mac
=$
(mac_get
$rp1)
132 rp2mac
=$
(mac_get
$rp2)
160 ping_test
$h1.200
192.0.2.18 " IPv4"
165 ping_test
$h1.200
2001:db8
:2::1 " IPv6"
168 send_packets_rx_ipv4
()
170 # Send 21 packets instead of 20, because the first one might trap and go
171 # through the SW datapath, which might not bump the HW counter.
172 $MZ $h1.200
-c 21 -d 20msec
-p 100 \
173 -a own
-b $rp1mac -A 192.0.2.1 -B 192.0.2.18 \
174 -q -t udp sp
=54321,dp
=12345
177 send_packets_rx_ipv6
()
179 $MZ $h1.200
-6 -c 21 -d 20msec
-p 100 \
180 -a own
-b $rp1mac -A 2001:db8
:1::1 -B 2001:db8
:2::1 \
181 -q -t udp sp
=54321,dp
=12345
184 send_packets_tx_ipv4
()
186 $MZ $h2.200
-c 21 -d 20msec
-p 100 \
187 -a own
-b $rp2mac -A 192.0.2.18 -B 192.0.2.1 \
188 -q -t udp sp
=54321,dp
=12345
191 send_packets_tx_ipv6
()
193 $MZ $h2.200
-6 -c 21 -d 20msec
-p 100 \
194 -a own
-b $rp2mac -A 2001:db8
:2::1 -B 2001:db8
:1::1 \
195 -q -t udp sp
=54321,dp
=12345
206 a
=$
(hw_stats_get l3_stats
$rp1.200
${dir} packets
)
207 send_packets_
${dir}_
${prot}
209 b
=$
(busywait
"$TC_HIT_TIMEOUT" until_counter_is
">= $a + 20" \
210 hw_stats_get l3_stats
$rp1.200
${dir} packets
)
211 check_err $?
"Traffic not reflected in the counter: $a -> $b"
220 ___test_stats
"$dir" "$prot"
221 log_test
"Test $dir packets: $prot"
244 # Make sure everything works well even after stats have been disabled and
245 # reenabled on the same device without touching the L3 configuration.
248 log_info
"Turning stats off and on again"
249 ip stats
set dev
$rp1.200 l3_stats off
250 ip stats
set dev
$rp1.200 l3_stats on
253 # For the initial run, l3_stats is enabled on a completely set up netdevice. Now
254 # do it the other way around: enabling the L3 stats on an L2 netdevice, and only
255 # then apply the L3 configuration.
258 log_info
"Reapplying configuration"
260 router_rp1_200_destroy
262 ip link add name
$rp1.200 link
$rp1 type vlan id
200
263 ip link
set dev
$rp1.200 addrgenmode none
264 ip stats
set dev
$rp1.200 l3_stats on
265 ip link
set dev
$rp1.200 addrgenmode eui64
266 ip link
set dev
$rp1.200 up
267 ip address add dev
$rp1.200
192.0.2.2/28
268 ip address add dev
$rp1.200
2001:db8
:1::2/64
271 __test_stats_report
()
281 a
=$
(hw_stats_get l3_stats
$rp1.200
${dir} packets
)
282 send_packets_
${dir}_
${prot}
283 ip address flush dev
$rp1.200
284 b
=$
(busywait
"$TC_HIT_TIMEOUT" until_counter_is
">= $a + 20" \
285 hw_stats_get l3_stats
$rp1.200
${dir} packets
)
286 check_err $?
"Traffic not reflected in the counter: $a -> $b"
287 log_test
"Test ${dir} packets: stats pushed on loss of L3"
289 ip stats
set dev
$rp1.200 l3_stats off
290 ip link del dev
$rp1.200
291 router_rp1_200_create
294 test_stats_report_rx
()
296 __test_stats_report rx ipv4
299 test_stats_report_tx
()
301 __test_stats_report tx ipv4
304 test_destroy_enabled
()
308 ip link del dev
$rp1.200
309 router_rp1_200_create
311 log_test
"Destroy l3_stats-enabled netdev"
317 ___test_stats rx ipv4 \
318 ip stats
set dev
$rp1.200 l3_stats on
319 log_test
"Test stat retention across a spurious enablement"
327 used
=$
(ip
-j stats show dev
$rp1.200 group offload subgroup hw_stats_info |
328 jq
'.[].info.l3_stats.used')
330 check_err $?
"hw_stats_info.used=$used"
331 log_test
"l3_stats offloaded"