[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZE6Cw0XOU9L/STZj@shredder>
Date: Sun, 30 Apr 2023 18:01:23 +0300
From: Ido Schimmel <idosch@...sch.org>
To: Zahari Doychev <zahari.doychev@...ux.com>
Cc: netdev@...r.kernel.org, jhs@...atatu.com, xiyou.wangcong@...il.com,
jiri@...nulli.us, davem@...emloft.net, edumazet@...gle.com,
kuba@...nel.org, pabeni@...hat.com, hmehrtens@...linear.com,
aleksander.lobakin@...el.com, simon.horman@...igine.com,
Zahari Doychev <zdoychev@...linear.com>
Subject: Re: [PATCH net-next v4 3/3] selftests: net: add tc flower cfm test
On Tue, Apr 25, 2023 at 11:16:30PM +0200, Zahari Doychev wrote:
> From: Zahari Doychev <zdoychev@...linear.com>
>
> New cfm flower test case is added to the net forwarding selfttests.
>
> Signed-off-by: Zahari Doychev <zdoychev@...linear.com>
> ---
> .../testing/selftests/net/forwarding/Makefile | 1 +
> .../selftests/net/forwarding/tc_flower_cfm.sh | 175 ++++++++++++++++++
> 2 files changed, 176 insertions(+)
> create mode 100755 tools/testing/selftests/net/forwarding/tc_flower_cfm.sh
>
> diff --git a/tools/testing/selftests/net/forwarding/Makefile b/tools/testing/selftests/net/forwarding/Makefile
> index a474c60fe348..11fb97a63646 100644
> --- a/tools/testing/selftests/net/forwarding/Makefile
> +++ b/tools/testing/selftests/net/forwarding/Makefile
> @@ -83,6 +83,7 @@ TEST_PROGS = bridge_igmp.sh \
> tc_chains.sh \
> tc_flower_router.sh \
> tc_flower.sh \
> + tc_flower_cfm.sh \
> tc_mpls_l2vpn.sh \
> tc_police.sh \
> tc_shblocks.sh \
> diff --git a/tools/testing/selftests/net/forwarding/tc_flower_cfm.sh b/tools/testing/selftests/net/forwarding/tc_flower_cfm.sh
> new file mode 100755
> index 000000000000..0509bc3c9f75
> --- /dev/null
> +++ b/tools/testing/selftests/net/forwarding/tc_flower_cfm.sh
> @@ -0,0 +1,175 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +
> +ALL_TESTS="match_cfm_opcode match_cfm_level match_cfm_level_and_opcode"
> +NUM_NETIFS=2
> +source tc_common.sh
> +source lib.sh
> +
> +tcflags="skip_hw"
> +
> +h1_create()
> +{
> + simple_if_init $h1 192.0.2.1/24 198.51.100.1/24
The IP address are not used in the test. Can be omitted.
> +}
> +
> +h1_destroy()
> +{
> + simple_if_fini $h1 192.0.2.1/24 198.51.100.1/24
> +}
> +
> +h2_create()
> +{
> + simple_if_init $h2 192.0.2.2/24 198.51.100.2/24
> + tc qdisc add dev $h2 clsact
> +}
> +
> +h2_destroy()
> +{
> + tc qdisc del dev $h2 clsact
> + simple_if_fini $h2 192.0.2.2/24 198.51.100.2/24
> +}
> +
> +cfm_mdl_opcode()
> +{
> + local mdl=$1
> + local op=$2
> + local flags=$3
> + local tlv_offset=$4
If you use something like:
local mdl=$1; shift
local op=$1; shift
Then minimal changes are required if the order changes
> +
> + printf "%02x %02x %02x %02x" \
> + $((mdl << 5)) \
> + $((op & 0xff)) \
> + $((flags & 0xff)) \
> + $tlv_offset
> +}
See mldv2_is_in_get() in tools/testing/selftests/net/forwarding/lib.sh
and related functions for a more readable way to achieve the above.
> +
> +match_cfm_opcode()
> +{
> + local ethtype="89 02"; readonly ethtype
> + RET=0
> +
> + tc filter add dev $h2 ingress protocol cfm pref 1 handle 101 \
> + flower cfm op 47 action drop
> + tc filter add dev $h2 ingress protocol cfm pref 2 handle 102 \
> + flower cfm op 43 action drop
Both filters can use the same preference since the same mask is used.
> +
> + pkt="$ethtype $(cfm_mdl_opcode 7 47 0 4)"
> + $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
> + pkt="$ethtype $(cfm_mdl_opcode 6 5 0 4)"
> + $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
> +
> + tc_check_packets "dev $h2 ingress" 101 1
> + check_err $? "Did not match on correct opcode"
> +
> + tc_check_packets "dev $h2 ingress" 102 0
> + check_err $? "Matched on the wrong opcode"
For good measures you can send a packet with opcode 43 and check that
only 102 is hit.
> +
> + tc filter del dev $h2 ingress protocol cfm pref 1 handle 101 flower
> + tc filter del dev $h2 ingress protocol cfm pref 2 handle 102 flower
> +
> + log_test "CFM opcode match test"
> +}
> +
> +match_cfm_level()
> +{
> + local ethtype="89 02"; readonly ethtype
> + RET=0
> +
> + tc filter add dev $h2 ingress protocol cfm pref 1 handle 101 \
> + flower cfm mdl 5 action drop
> + tc filter add dev $h2 ingress protocol cfm pref 2 handle 102 \
> + flower cfm mdl 3 action drop
> + tc filter add dev $h2 ingress protocol cfm pref 3 handle 103 \
> + flower cfm mdl 0 action drop
Same comment about the preference.
> +
> + pkt="$ethtype $(cfm_mdl_opcode 5 42 0 4)"
> + $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
> + pkt="$ethtype $(cfm_mdl_opcode 6 1 0 4)"
> + $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
> + pkt="$ethtype $(cfm_mdl_opcode 0 1 0 4)"
> + $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
> +
> + tc_check_packets "dev $h2 ingress" 101 1
> + check_err $? "Did not match on correct level"
> +
> + tc_check_packets "dev $h2 ingress" 102 0
> + check_err $? "Matched on the wrong level"
> +
> + tc_check_packets "dev $h2 ingress" 103 1
> + check_err $? "Did not match on correct level"
> +
> + tc filter del dev $h2 ingress protocol cfm pref 1 handle 101 flower
> + tc filter del dev $h2 ingress protocol cfm pref 2 handle 102 flower
> + tc filter del dev $h2 ingress protocol cfm pref 3 handle 103 flower
> +
> + log_test "CFM level match test"
> +}
> +
> +match_cfm_level_and_opcode()
> +{
> + local ethtype="89 02"; readonly ethtype
> + RET=0
> +
> + tc filter add dev $h2 ingress protocol cfm pref 1 handle 101 \
> + flower cfm mdl 5 op 41 action drop
> + tc filter add dev $h2 ingress protocol cfm pref 2 handle 102 \
> + flower cfm mdl 7 op 42 action drop
Likewise
> +
> + pkt="$ethtype $(cfm_mdl_opcode 5 41 0 4)"
> + $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
> + pkt="$ethtype $(cfm_mdl_opcode 7 3 0 4)"
> + $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
> + pkt="$ethtype $(cfm_mdl_opcode 3 42 0 4)"
> + $MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
> +
> + tc_check_packets "dev $h2 ingress" 101 1
> + check_err $? "Did not match on correct level and opcode"
> + tc_check_packets "dev $h2 ingress" 102 0
> + check_err $? "Matched on the wrong level and opcode"
> +
> + tc filter del dev $h2 ingress protocol cfm pref 1 handle 101 flower
> + tc filter del dev $h2 ingress protocol cfm pref 2 handle 102 flower
> +
> + log_test "CFM opcode and level match test"
> +}
> +
> +setup_prepare()
> +{
> + h1=${NETIFS[p1]}
> + h2=${NETIFS[p2]}
> + h1mac=$(mac_get $h1)
> + h2mac=$(mac_get $h2)
> +
> + vrf_prepare
> +
> + h1_create
> + h2_create
> +}
> +
> +cleanup()
> +{
> + pre_cleanup
> +
> + h2_destroy
> + h1_destroy
> +
> + vrf_cleanup
> +}
> +
> +trap cleanup EXIT
> +
> +setup_prepare
> +setup_wait
> +
> +tests_run
> +
> +tc_offload_check
> +if [[ $? -ne 0 ]]; then
> + log_info "Could not test offloaded functionality"
> +else
> + tcflags="skip_sw"
> + tests_run
> +fi
> +
> +exit $EXIT_STATUS
> --
> 2.40.0
>
Powered by blists - more mailing lists