1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4# Test L3 stats on IP-in-IP GRE tunnel without key.
5
6# This test uses flat topology for IP tunneling tests. See ipip_lib.sh for more
7# details.
8
9ALL_TESTS="
10	ping_ipv4
11	test_stats_rx
12	test_stats_tx
13"
14NUM_NETIFS=6
15source lib.sh
16source ipip_lib.sh
17
18setup_prepare()
19{
20	h1=${NETIFS[p1]}
21	ol1=${NETIFS[p2]}
22
23	ul1=${NETIFS[p3]}
24	ul2=${NETIFS[p4]}
25
26	ol2=${NETIFS[p5]}
27	h2=${NETIFS[p6]}
28
29	ol1mac=$(mac_get $ol1)
30
31	forwarding_enable
32	vrf_prepare
33	h1_create
34	h2_create
35	sw1_flat_create gre $ol1 $ul1
36	sw2_flat_create gre $ol2 $ul2
37	ip stats set dev g1a l3_stats on
38	ip stats set dev g2a l3_stats on
39}
40
41cleanup()
42{
43	pre_cleanup
44
45	ip stats set dev g1a l3_stats off
46	ip stats set dev g2a l3_stats off
47
48	sw2_flat_destroy $ol2 $ul2
49	sw1_flat_destroy $ol1 $ul1
50	h2_destroy
51	h1_destroy
52
53	vrf_cleanup
54	forwarding_restore
55}
56
57ping_ipv4()
58{
59	RET=0
60
61	ping_test $h1 192.0.2.18 " gre flat"
62}
63
64send_packets_ipv4()
65{
66	# Send 21 packets instead of 20, because the first one might trap and go
67	# through the SW datapath, which might not bump the HW counter.
68	$MZ $h1 -c 21 -d 20msec -p 100 \
69	    -a own -b $ol1mac -A 192.0.2.1 -B 192.0.2.18 \
70	    -q -t udp sp=54321,dp=12345
71}
72
73test_stats()
74{
75	local dev=$1; shift
76	local dir=$1; shift
77
78	local a
79	local b
80
81	RET=0
82
83	a=$(hw_stats_get l3_stats $dev $dir packets)
84	send_packets_ipv4
85	b=$(busywait "$TC_HIT_TIMEOUT" until_counter_is ">= $a + 20" \
86		     hw_stats_get l3_stats $dev $dir packets)
87	check_err $? "Traffic not reflected in the counter: $a -> $b"
88
89	log_test "Test $dir packets: $prot"
90}
91
92test_stats_tx()
93{
94	test_stats g1a tx
95}
96
97test_stats_rx()
98{
99	test_stats g2a rx
100}
101
102skip_on_veth
103
104trap cleanup EXIT
105
106setup_prepare
107setup_wait
108
109tests_run
110
111exit $EXIT_STATUS
112