* [PATCH net-next] selftests: tc: Add generic erspan_opts matching support for tc-flower
@ 2025-07-18 14:16 shuali
2025-07-20 16:32 ` Xin Long
2025-07-21 23:50 ` patchwork-bot+netdevbpf
0 siblings, 2 replies; 3+ messages in thread
From: shuali @ 2025-07-18 14:16 UTC (permalink / raw)
To: David S . Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Shuah Khan
Cc: Simon Horman, Xin Long, xiyou.wangcong, netdev, linux-kselftest,
linux-kernel
From: Li Shuang <shuali@redhat.com>
Add test cases to tc_flower.sh to validate generic matching on ERSPAN
options. Both ERSPAN Type II and Type III are covered.
Also add check_tc_erspan_support() to verify whether tc supports
erspan_opts.
Signed-off-by: Li Shuang <shuali@redhat.com>
---
tools/testing/selftests/net/forwarding/lib.sh | 14 +++++
.../selftests/net/forwarding/tc_flower.sh | 52 ++++++++++++++++++-
2 files changed, 65 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/net/forwarding/lib.sh b/tools/testing/selftests/net/forwarding/lib.sh
index 9308b2f77fed..890b3374dacd 100644
--- a/tools/testing/selftests/net/forwarding/lib.sh
+++ b/tools/testing/selftests/net/forwarding/lib.sh
@@ -142,6 +142,20 @@ check_tc_version()
fi
}
+check_tc_erspan_support()
+{
+ local dev=$1; shift
+
+ tc filter add dev $dev ingress pref 1 handle 1 flower \
+ erspan_opts 1:0:0:0 &> /dev/null
+ if [[ $? -ne 0 ]]; then
+ echo "SKIP: iproute2 too old; tc is missing erspan support"
+ return $ksft_skip
+ fi
+ tc filter del dev $dev ingress pref 1 handle 1 flower \
+ erspan_opts 1:0:0:0 &> /dev/null
+}
+
# Old versions of tc don't understand "mpls_uc"
check_tc_mpls_support()
{
diff --git a/tools/testing/selftests/net/forwarding/tc_flower.sh b/tools/testing/selftests/net/forwarding/tc_flower.sh
index b1daad19b01e..b58909a93112 100755
--- a/tools/testing/selftests/net/forwarding/tc_flower.sh
+++ b/tools/testing/selftests/net/forwarding/tc_flower.sh
@@ -6,7 +6,7 @@ ALL_TESTS="match_dst_mac_test match_src_mac_test match_dst_ip_test \
match_ip_tos_test match_indev_test match_ip_ttl_test
match_mpls_label_test \
match_mpls_tc_test match_mpls_bos_test match_mpls_ttl_test \
- match_mpls_lse_test"
+ match_mpls_lse_test match_erspan_opts_test"
NUM_NETIFS=2
source tc_common.sh
source lib.sh
@@ -676,6 +676,56 @@ match_mpls_lse_test()
log_test "mpls lse match ($tcflags)"
}
+match_erspan_opts_test()
+{
+ RET=0
+
+ check_tc_erspan_support $h2 || return 0
+
+ # h1 erspan setup
+ tunnel_create erspan1 erspan 192.0.2.1 192.0.2.2 dev $h1 seq key 1001 \
+ tos C ttl 64 erspan_ver 1 erspan 6789 # ERSPAN Type II
+ tunnel_create erspan2 erspan 192.0.2.1 192.0.2.2 dev $h1 seq key 1002 \
+ tos C ttl 64 erspan_ver 2 erspan_dir egress erspan_hwid 63 \
+ # ERSPAN Type III
+ ip link set dev erspan1 master v$h1
+ ip link set dev erspan2 master v$h1
+ # h2 erspan setup
+ ip link add ep-ex type erspan ttl 64 external # To collect tunnel info
+ ip link set ep-ex up
+ ip link set dev ep-ex master v$h2
+ tc qdisc add dev ep-ex clsact
+
+ # ERSPAN Type II [decap direction]
+ tc filter add dev ep-ex ingress protocol ip handle 101 flower \
+ $tcflags enc_src_ip 192.0.2.1 enc_dst_ip 192.0.2.2 \
+ enc_key_id 1001 erspan_opts 1:6789:0:0 \
+ action drop
+ # ERSPAN Type III [decap direction]
+ tc filter add dev ep-ex ingress protocol ip handle 102 flower \
+ $tcflags enc_src_ip 192.0.2.1 enc_dst_ip 192.0.2.2 \
+ enc_key_id 1002 erspan_opts 2:0:1:63 action drop
+
+ ep1mac=$(mac_get erspan1)
+ $MZ erspan1 -c 1 -p 64 -a $ep1mac -b $h2mac -t ip -q
+ tc_check_packets "dev ep-ex ingress" 101 1
+ check_err $? "ERSPAN Type II"
+
+ ep2mac=$(mac_get erspan2)
+ $MZ erspan2 -c 1 -p 64 -a $ep1mac -b $h2mac -t ip -q
+ tc_check_packets "dev ep-ex ingress" 102 1
+ check_err $? "ERSPAN Type III"
+
+ # h2 erspan cleanup
+ tc qdisc del dev ep-ex clsact
+ tunnel_destroy ep-ex
+ # h1 erspan cleanup
+ tunnel_destroy erspan2 # ERSPAN Type III
+ tunnel_destroy erspan1 # ERSPAN Type II
+
+ log_test "erspan_opts match ($tcflags)"
+}
+
setup_prepare()
{
h1=${NETIFS[p1]}
--
2.50.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH net-next] selftests: tc: Add generic erspan_opts matching support for tc-flower
2025-07-18 14:16 [PATCH net-next] selftests: tc: Add generic erspan_opts matching support for tc-flower shuali
@ 2025-07-20 16:32 ` Xin Long
2025-07-21 23:50 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: Xin Long @ 2025-07-20 16:32 UTC (permalink / raw)
To: shuali
Cc: David S . Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Shuah Khan, Simon Horman, xiyou.wangcong, netdev, linux-kselftest,
linux-kernel
On Fri, Jul 18, 2025 at 10:16 AM <shuali@redhat.com> wrote:
>
> From: Li Shuang <shuali@redhat.com>
>
> Add test cases to tc_flower.sh to validate generic matching on ERSPAN
> options. Both ERSPAN Type II and Type III are covered.
>
> Also add check_tc_erspan_support() to verify whether tc supports
> erspan_opts.
>
> Signed-off-by: Li Shuang <shuali@redhat.com>
> ---
> tools/testing/selftests/net/forwarding/lib.sh | 14 +++++
> .../selftests/net/forwarding/tc_flower.sh | 52 ++++++++++++++++++-
> 2 files changed, 65 insertions(+), 1 deletion(-)
>
> diff --git a/tools/testing/selftests/net/forwarding/lib.sh b/tools/testing/selftests/net/forwarding/lib.sh
> index 9308b2f77fed..890b3374dacd 100644
> --- a/tools/testing/selftests/net/forwarding/lib.sh
> +++ b/tools/testing/selftests/net/forwarding/lib.sh
> @@ -142,6 +142,20 @@ check_tc_version()
> fi
> }
>
> +check_tc_erspan_support()
> +{
> + local dev=$1; shift
> +
> + tc filter add dev $dev ingress pref 1 handle 1 flower \
> + erspan_opts 1:0:0:0 &> /dev/null
> + if [[ $? -ne 0 ]]; then
> + echo "SKIP: iproute2 too old; tc is missing erspan support"
> + return $ksft_skip
> + fi
> + tc filter del dev $dev ingress pref 1 handle 1 flower \
> + erspan_opts 1:0:0:0 &> /dev/null
> +}
> +
> # Old versions of tc don't understand "mpls_uc"
> check_tc_mpls_support()
> {
> diff --git a/tools/testing/selftests/net/forwarding/tc_flower.sh b/tools/testing/selftests/net/forwarding/tc_flower.sh
> index b1daad19b01e..b58909a93112 100755
> --- a/tools/testing/selftests/net/forwarding/tc_flower.sh
> +++ b/tools/testing/selftests/net/forwarding/tc_flower.sh
> @@ -6,7 +6,7 @@ ALL_TESTS="match_dst_mac_test match_src_mac_test match_dst_ip_test \
> match_ip_tos_test match_indev_test match_ip_ttl_test
> match_mpls_label_test \
> match_mpls_tc_test match_mpls_bos_test match_mpls_ttl_test \
> - match_mpls_lse_test"
> + match_mpls_lse_test match_erspan_opts_test"
> NUM_NETIFS=2
> source tc_common.sh
> source lib.sh
> @@ -676,6 +676,56 @@ match_mpls_lse_test()
> log_test "mpls lse match ($tcflags)"
> }
>
> +match_erspan_opts_test()
> +{
> + RET=0
> +
> + check_tc_erspan_support $h2 || return 0
> +
> + # h1 erspan setup
> + tunnel_create erspan1 erspan 192.0.2.1 192.0.2.2 dev $h1 seq key 1001 \
> + tos C ttl 64 erspan_ver 1 erspan 6789 # ERSPAN Type II
> + tunnel_create erspan2 erspan 192.0.2.1 192.0.2.2 dev $h1 seq key 1002 \
> + tos C ttl 64 erspan_ver 2 erspan_dir egress erspan_hwid 63 \
> + # ERSPAN Type III
> + ip link set dev erspan1 master v$h1
> + ip link set dev erspan2 master v$h1
> + # h2 erspan setup
> + ip link add ep-ex type erspan ttl 64 external # To collect tunnel info
> + ip link set ep-ex up
> + ip link set dev ep-ex master v$h2
> + tc qdisc add dev ep-ex clsact
> +
> + # ERSPAN Type II [decap direction]
> + tc filter add dev ep-ex ingress protocol ip handle 101 flower \
> + $tcflags enc_src_ip 192.0.2.1 enc_dst_ip 192.0.2.2 \
> + enc_key_id 1001 erspan_opts 1:6789:0:0 \
> + action drop
> + # ERSPAN Type III [decap direction]
> + tc filter add dev ep-ex ingress protocol ip handle 102 flower \
> + $tcflags enc_src_ip 192.0.2.1 enc_dst_ip 192.0.2.2 \
> + enc_key_id 1002 erspan_opts 2:0:1:63 action drop
> +
> + ep1mac=$(mac_get erspan1)
> + $MZ erspan1 -c 1 -p 64 -a $ep1mac -b $h2mac -t ip -q
> + tc_check_packets "dev ep-ex ingress" 101 1
> + check_err $? "ERSPAN Type II"
> +
> + ep2mac=$(mac_get erspan2)
> + $MZ erspan2 -c 1 -p 64 -a $ep1mac -b $h2mac -t ip -q
> + tc_check_packets "dev ep-ex ingress" 102 1
> + check_err $? "ERSPAN Type III"
> +
> + # h2 erspan cleanup
> + tc qdisc del dev ep-ex clsact
> + tunnel_destroy ep-ex
> + # h1 erspan cleanup
> + tunnel_destroy erspan2 # ERSPAN Type III
> + tunnel_destroy erspan1 # ERSPAN Type II
> +
> + log_test "erspan_opts match ($tcflags)"
> +}
> +
> setup_prepare()
> {
> h1=${NETIFS[p1]}
> --
> 2.50.1
>
Reviewed-by: Xin Long <lucien.xin@gmail.com>
It would be great to also add test cases for matching VXLAN and
GENEVE options in tc flower in the future.
Thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net-next] selftests: tc: Add generic erspan_opts matching support for tc-flower
2025-07-18 14:16 [PATCH net-next] selftests: tc: Add generic erspan_opts matching support for tc-flower shuali
2025-07-20 16:32 ` Xin Long
@ 2025-07-21 23:50 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-07-21 23:50 UTC (permalink / raw)
To: None
Cc: davem, edumazet, kuba, pabeni, shuah, horms, lucien.xin,
xiyou.wangcong, netdev, linux-kselftest, linux-kernel
Hello:
This patch was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Fri, 18 Jul 2025 22:16:12 +0800 you wrote:
> From: Li Shuang <shuali@redhat.com>
>
> Add test cases to tc_flower.sh to validate generic matching on ERSPAN
> options. Both ERSPAN Type II and Type III are covered.
>
> Also add check_tc_erspan_support() to verify whether tc supports
> erspan_opts.
>
> [...]
Here is the summary with links:
- [net-next] selftests: tc: Add generic erspan_opts matching support for tc-flower
https://git.kernel.org/netdev/net-next/c/ff3fbcdd4724
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-07-21 23:50 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-18 14:16 [PATCH net-next] selftests: tc: Add generic erspan_opts matching support for tc-flower shuali
2025-07-20 16:32 ` Xin Long
2025-07-21 23:50 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).