#!/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