140d269c0SPetr Machata#!/bin/bash
240d269c0SPetr Machata# SPDX-License-Identifier: GPL-2.0
340d269c0SPetr Machata
440d269c0SPetr Machata# Test L3 stats on IP-in-IP GRE tunnel without key.
540d269c0SPetr Machata
640d269c0SPetr Machata# This test uses flat topology for IP tunneling tests. See ipip_lib.sh for more
740d269c0SPetr Machata# details.
840d269c0SPetr Machata
940d269c0SPetr MachataALL_TESTS="
1040d269c0SPetr Machata	ping_ipv4
1140d269c0SPetr Machata	test_stats_rx
1240d269c0SPetr Machata	test_stats_tx
1340d269c0SPetr Machata"
1440d269c0SPetr MachataNUM_NETIFS=6
1540d269c0SPetr Machatalib_dir=$(dirname "$0")
1640d269c0SPetr Machatasource "$lib_dir"/../../../net/forwarding/lib.sh
1740d269c0SPetr Machatasource "$lib_dir"/../../../net/forwarding/ipip_lib.sh
18*bfc42940SPetr Machatasource "$lib_dir"/../../../net/forwarding/tc_common.sh
1940d269c0SPetr Machata
2040d269c0SPetr Machatasetup_prepare()
2140d269c0SPetr Machata{
2240d269c0SPetr Machata	h1=${NETIFS[p1]}
2340d269c0SPetr Machata	ol1=${NETIFS[p2]}
2440d269c0SPetr Machata
2540d269c0SPetr Machata	ul1=${NETIFS[p3]}
2640d269c0SPetr Machata	ul2=${NETIFS[p4]}
2740d269c0SPetr Machata
2840d269c0SPetr Machata	ol2=${NETIFS[p5]}
2940d269c0SPetr Machata	h2=${NETIFS[p6]}
3040d269c0SPetr Machata
3140d269c0SPetr Machata	ol1mac=$(mac_get $ol1)
3240d269c0SPetr Machata
3340d269c0SPetr Machata	forwarding_enable
3440d269c0SPetr Machata	vrf_prepare
3540d269c0SPetr Machata	h1_create
3640d269c0SPetr Machata	h2_create
3740d269c0SPetr Machata	sw1_flat_create gre $ol1 $ul1
3840d269c0SPetr Machata	sw2_flat_create gre $ol2 $ul2
3940d269c0SPetr Machata	ip stats set dev g1a l3_stats on
4040d269c0SPetr Machata	ip stats set dev g2a l3_stats on
4140d269c0SPetr Machata}
4240d269c0SPetr Machata
4340d269c0SPetr Machatacleanup()
4440d269c0SPetr Machata{
4540d269c0SPetr Machata	pre_cleanup
4640d269c0SPetr Machata
4740d269c0SPetr Machata	ip stats set dev g1a l3_stats off
4840d269c0SPetr Machata	ip stats set dev g2a l3_stats off
4940d269c0SPetr Machata
5040d269c0SPetr Machata	sw2_flat_destroy $ol2 $ul2
5140d269c0SPetr Machata	sw1_flat_destroy $ol1 $ul1
5240d269c0SPetr Machata	h2_destroy
5340d269c0SPetr Machata	h1_destroy
5440d269c0SPetr Machata
5540d269c0SPetr Machata	vrf_cleanup
5640d269c0SPetr Machata	forwarding_restore
5740d269c0SPetr Machata}
5840d269c0SPetr Machata
5940d269c0SPetr Machataping_ipv4()
6040d269c0SPetr Machata{
6140d269c0SPetr Machata	RET=0
6240d269c0SPetr Machata
6340d269c0SPetr Machata	ping_test $h1 192.0.2.18 " gre flat"
6440d269c0SPetr Machata}
6540d269c0SPetr Machata
6640d269c0SPetr Machatasend_packets_ipv4()
6740d269c0SPetr Machata{
6840d269c0SPetr Machata	# Send 21 packets instead of 20, because the first one might trap and go
6940d269c0SPetr Machata	# through the SW datapath, which might not bump the HW counter.
7040d269c0SPetr Machata	$MZ $h1 -c 21 -d 20msec -p 100 \
7140d269c0SPetr Machata	    -a own -b $ol1mac -A 192.0.2.1 -B 192.0.2.18 \
7240d269c0SPetr Machata	    -q -t udp sp=54321,dp=12345
7340d269c0SPetr Machata}
7440d269c0SPetr Machata
7540d269c0SPetr Machatatest_stats()
7640d269c0SPetr Machata{
7740d269c0SPetr Machata	local dev=$1; shift
7840d269c0SPetr Machata	local dir=$1; shift
7940d269c0SPetr Machata
8040d269c0SPetr Machata	local a
8140d269c0SPetr Machata	local b
8240d269c0SPetr Machata
8340d269c0SPetr Machata	RET=0
8440d269c0SPetr Machata
8540d269c0SPetr Machata	a=$(hw_stats_get l3_stats $dev $dir packets)
8640d269c0SPetr Machata	send_packets_ipv4
8740d269c0SPetr Machata	b=$(busywait "$TC_HIT_TIMEOUT" until_counter_is ">= $a + 20" \
8840d269c0SPetr Machata		     hw_stats_get l3_stats $dev $dir packets)
8940d269c0SPetr Machata	check_err $? "Traffic not reflected in the counter: $a -> $b"
9040d269c0SPetr Machata
9140d269c0SPetr Machata	log_test "Test $dir packets: $prot"
9240d269c0SPetr Machata}
9340d269c0SPetr Machata
9440d269c0SPetr Machatatest_stats_tx()
9540d269c0SPetr Machata{
9640d269c0SPetr Machata	test_stats g1a tx
9740d269c0SPetr Machata}
9840d269c0SPetr Machata
9940d269c0SPetr Machatatest_stats_rx()
10040d269c0SPetr Machata{
10140d269c0SPetr Machata	test_stats g2a rx
10240d269c0SPetr Machata}
10340d269c0SPetr Machata
10440d269c0SPetr Machatatrap cleanup EXIT
10540d269c0SPetr Machata
10640d269c0SPetr Machatasetup_prepare
10740d269c0SPetr Machatasetup_wait
10840d269c0SPetr Machata
10940d269c0SPetr Machatatests_run
11040d269c0SPetr Machata
11140d269c0SPetr Machataexit $EXIT_STATUS
112