#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Test L3 stats on IP-in-IP GRE tunnel without key.
# This test uses flat topology for IP tunneling tests. See ipip_lib.sh for more
# details.
ALL_TESTS="
ping_ipv4
test_stats_rx
test_stats_tx
"
NUM_NETIFS=6
lib_dir=$(dirname "$0")
source "$lib_dir"/../../../net/forwarding/lib.sh
source "$lib_dir"/../../../net/forwarding/ipip_lib.sh
source "$lib_dir"/../../../net/forwarding/tc_common.sh
setup_prepare()
{
h1=${NETIFS[p1]}
ol1=${NETIFS[p2]}
ul1=${NETIFS[p3]}
ul2=${NETIFS[p4]}
ol2=${NETIFS[p5]}
h2=${NETIFS[p6]}
ol1mac=$(mac_get $ol1)
forwarding_enable
vrf_prepare
h1_create
h2_create
sw1_flat_create gre $ol1 $ul1
sw2_flat_create gre $ol2 $ul2
ip stats set dev g1a l3_stats on
ip stats set dev g2a l3_stats on
}
cleanup()
{
pre_cleanup
ip stats set dev g1a l3_stats off
ip stats set dev g2a l3_stats off
sw2_flat_destroy $ol2 $ul2
sw1_flat_destroy $ol1 $ul1
h2_destroy
h1_destroy
vrf_cleanup
forwarding_restore
}
ping_ipv4()
{
RET=0
ping_test $h1 192.0.2.18 " gre flat"
}
send_packets_ipv4()
{
# Send 21 packets instead of 20, because the first one might trap and go
# through the SW datapath, which might not bump the HW counter.
$MZ $h1 -c 21 -d 20msec -p 100 \
-a own -b $ol1mac -A 192.0.2.1 -B 192.0.2.18 \
-q -t udp sp=54321,dp=12345
}
test_stats()
{
local dev=$1; shift
local dir=$1; shift
local a
local b
RET=0
a=$(hw_stats_get l3_stats $dev $dir packets)
send_packets_ipv4
b=$(busywait "$TC_HIT_TIMEOUT" until_counter_is ">= $a + 20" \
hw_stats_get l3_stats $dev $dir packets)
check_err $? "Traffic not reflected in the counter: $a -> $b"
log_test "Test $dir packets: $prot"
}
test_stats_tx()
{
test_stats g1a tx
}
test_stats_rx()
{
test_stats g2a rx
}
trap cleanup EXIT
setup_prepare
setup_wait
tests_run
exit $EXIT_STATUS