* [PATCH v2] selftests/net/openvswitch: add output truncation test
@ 2026-06-30 10:22 Minxi Hou
2026-07-01 17:26 ` Aaron Conole
0 siblings, 1 reply; 2+ messages in thread
From: Minxi Hou @ 2026-06-30 10:22 UTC (permalink / raw)
To: netdev; +Cc: Minxi Hou, aconole, echaudro, linux-kselftest
Add test_trunc exercising the OVS_ACTION_ATTR_TRUNC action. The test
verifies truncation in three steps: first confirm normal forwarding
works, then apply trunc(14) which truncates packets to the Ethernet
header and verify ping fails, then restore normal forwarding and
verify connectivity recovers.
The trunc action sets OVS_CB(skb)->cutlen, causing pskb_trim at
output time. With trunc(14) the IP payload is stripped, so the
receiver drops the frame and ICMP echo reply is never generated.
Signed-off-by: Minxi Hou <houminxi@gmail.com>
---
.../selftests/net/openvswitch/openvswitch.sh | 66 +++++++++++++++++++
1 file changed, 66 insertions(+)
diff --git a/tools/testing/selftests/net/openvswitch/openvswitch.sh b/tools/testing/selftests/net/openvswitch/openvswitch.sh
index 2954245129a2..fef21eb4a129 100755
--- a/tools/testing/selftests/net/openvswitch/openvswitch.sh
+++ b/tools/testing/selftests/net/openvswitch/openvswitch.sh
@@ -32,6 +32,7 @@ tests="
dec_ttl ttl: dec_ttl decrements IP TTL
flow_set flow-set: Flow modify
action_set set: SET action rewrites fields
+ trunc trunc: output truncation
psample psample: Sampling packets with psample"
info() {
@@ -443,6 +444,71 @@ test_action_set() {
return 0
}
+test_trunc() {
+ sbx_add "test_trunc" || return $?
+ ovs_add_dp "test_trunc" trunctest || return 1
+
+ info "create namespaces"
+ for ns in client server; do
+ ovs_add_netns_and_veths "test_trunc" "trunctest" "$ns" \
+ "${ns:0:1}0" "${ns:0:1}1" || return 1
+ done
+
+ ip netns exec client ip addr add 10.0.0.1/24 dev c1
+ ip netns exec client ip link set c1 up
+ ip netns exec server ip addr add 10.0.0.2/24 dev s1
+ ip netns exec server ip link set s1 up
+
+ ovs_add_flow "test_trunc" trunctest \
+ 'in_port(1),eth(),eth_type(0x0806),arp()' '2' || return 1
+ ovs_add_flow "test_trunc" trunctest \
+ 'in_port(2),eth(),eth_type(0x0806),arp()' '1' || return 1
+
+ ovs_add_flow "test_trunc" trunctest \
+ 'in_port(1),eth(),eth_type(0x0800),ipv4()' '2' || return 1
+ ovs_add_flow "test_trunc" trunctest \
+ 'in_port(2),eth(),eth_type(0x0800),ipv4()' '1' || return 1
+
+ info "verify connectivity without truncation"
+ ovs_sbx "test_trunc" ip netns exec client ping -c 1 -W 2 \
+ 10.0.0.2 || return 1
+
+ ovs_del_flows "test_trunc" trunctest
+ ovs_add_flow "test_trunc" trunctest \
+ 'in_port(1),eth(),eth_type(0x0806),arp()' '2' || return 1
+ ovs_add_flow "test_trunc" trunctest \
+ 'in_port(2),eth(),eth_type(0x0806),arp()' '1' || return 1
+
+ info "add truncated forwarding flow"
+ ovs_add_flow "test_trunc" trunctest \
+ 'in_port(1),eth(),eth_type(0x0800),ipv4()' \
+ 'trunc(14),2' || return 1
+ ovs_add_flow "test_trunc" trunctest \
+ 'in_port(2),eth(),eth_type(0x0800),ipv4()' '1' || return 1
+
+ info "verify ping fails with truncation"
+ ovs_sbx "test_trunc" ip netns exec client ping -c 1 -W 2 \
+ 10.0.0.2 >/dev/null 2>&1 \
+ && { info "FAIL: ping should fail with trunc(14)"
+ return 1; }
+
+ ovs_del_flows "test_trunc" trunctest
+ ovs_add_flow "test_trunc" trunctest \
+ 'in_port(1),eth(),eth_type(0x0806),arp()' '2' || return 1
+ ovs_add_flow "test_trunc" trunctest \
+ 'in_port(2),eth(),eth_type(0x0806),arp()' '1' || return 1
+ ovs_add_flow "test_trunc" trunctest \
+ 'in_port(1),eth(),eth_type(0x0800),ipv4()' '2' || return 1
+ ovs_add_flow "test_trunc" trunctest \
+ 'in_port(2),eth(),eth_type(0x0800),ipv4()' '1' || return 1
+
+ info "verify connectivity restored without truncation"
+ ovs_sbx "test_trunc" ip netns exec client ping -c 1 -W 2 \
+ 10.0.0.2 || return 1
+
+ return 0
+}
+
# psample test
# - use psample to observe packets
test_psample() {
base-commit: cef9d6804030793cf8b8796fd6936197d065dd3e
--
2.54.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] selftests/net/openvswitch: add output truncation test
2026-06-30 10:22 [PATCH v2] selftests/net/openvswitch: add output truncation test Minxi Hou
@ 2026-07-01 17:26 ` Aaron Conole
0 siblings, 0 replies; 2+ messages in thread
From: Aaron Conole @ 2026-07-01 17:26 UTC (permalink / raw)
To: Minxi Hou; +Cc: netdev, echaudro, linux-kselftest
Minxi Hou <houminxi@gmail.com> writes:
> Add test_trunc exercising the OVS_ACTION_ATTR_TRUNC action. The test
> verifies truncation in three steps: first confirm normal forwarding
> works, then apply trunc(14) which truncates packets to the Ethernet
> header and verify ping fails, then restore normal forwarding and
> verify connectivity recovers.
>
> The trunc action sets OVS_CB(skb)->cutlen, causing pskb_trim at
> output time. With trunc(14) the IP payload is stripped, so the
> receiver drops the frame and ICMP echo reply is never generated.
>
> Signed-off-by: Minxi Hou <houminxi@gmail.com>
> ---
NOTE: The subject should have had net-next I think
> .../selftests/net/openvswitch/openvswitch.sh | 66 +++++++++++++++++++
> 1 file changed, 66 insertions(+)
>
> diff --git a/tools/testing/selftests/net/openvswitch/openvswitch.sh b/tools/testing/selftests/net/openvswitch/openvswitch.sh
> index 2954245129a2..fef21eb4a129 100755
> --- a/tools/testing/selftests/net/openvswitch/openvswitch.sh
> +++ b/tools/testing/selftests/net/openvswitch/openvswitch.sh
> @@ -32,6 +32,7 @@ tests="
> dec_ttl ttl: dec_ttl decrements IP TTL
> flow_set flow-set: Flow modify
> action_set set: SET action rewrites fields
> + trunc trunc: output truncation
> psample psample: Sampling packets with psample"
>
> info() {
> @@ -443,6 +444,71 @@ test_action_set() {
> return 0
> }
>
Most of the tests have a comment in front of them that does some
description. I haven't been good about enforcing it, but at least I'd
like to see it here to describe what trunc limits are being tested (in
this case, just limiting to 14).
Perhaps we can also add testing for trunc(1) since that should reject
(or both trunc(1) and trunc(13))
> +test_trunc() {
> + sbx_add "test_trunc" || return $?
> + ovs_add_dp "test_trunc" trunctest || return 1
> +
> + info "create namespaces"
> + for ns in client server; do
> + ovs_add_netns_and_veths "test_trunc" "trunctest" "$ns" \
> + "${ns:0:1}0" "${ns:0:1}1" || return 1
> + done
> +
> + ip netns exec client ip addr add 10.0.0.1/24 dev c1
> + ip netns exec client ip link set c1 up
> + ip netns exec server ip addr add 10.0.0.2/24 dev s1
> + ip netns exec server ip link set s1 up
> +
> + ovs_add_flow "test_trunc" trunctest \
> + 'in_port(1),eth(),eth_type(0x0806),arp()' '2' || return 1
> + ovs_add_flow "test_trunc" trunctest \
> + 'in_port(2),eth(),eth_type(0x0806),arp()' '1' || return 1
> +
> + ovs_add_flow "test_trunc" trunctest \
> + 'in_port(1),eth(),eth_type(0x0800),ipv4()' '2' || return 1
> + ovs_add_flow "test_trunc" trunctest \
> + 'in_port(2),eth(),eth_type(0x0800),ipv4()' '1' || return 1
> +
> + info "verify connectivity without truncation"
> + ovs_sbx "test_trunc" ip netns exec client ping -c 1 -W 2 \
> + 10.0.0.2 || return 1
> +
> + ovs_del_flows "test_trunc" trunctest
> + ovs_add_flow "test_trunc" trunctest \
> + 'in_port(1),eth(),eth_type(0x0806),arp()' '2' || return 1
> + ovs_add_flow "test_trunc" trunctest \
> + 'in_port(2),eth(),eth_type(0x0806),arp()' '1' || return 1
> +
> + info "add truncated forwarding flow"
> + ovs_add_flow "test_trunc" trunctest \
> + 'in_port(1),eth(),eth_type(0x0800),ipv4()' \
> + 'trunc(14),2' || return 1
> + ovs_add_flow "test_trunc" trunctest \
> + 'in_port(2),eth(),eth_type(0x0800),ipv4()' '1' || return 1
> +
> + info "verify ping fails with truncation"
> + ovs_sbx "test_trunc" ip netns exec client ping -c 1 -W 2 \
> + 10.0.0.2 >/dev/null 2>&1 \
> + && { info "FAIL: ping should fail with trunc(14)"
> + return 1; }
> +
> + ovs_del_flows "test_trunc" trunctest
> + ovs_add_flow "test_trunc" trunctest \
> + 'in_port(1),eth(),eth_type(0x0806),arp()' '2' || return 1
> + ovs_add_flow "test_trunc" trunctest \
> + 'in_port(2),eth(),eth_type(0x0806),arp()' '1' || return 1
> + ovs_add_flow "test_trunc" trunctest \
> + 'in_port(1),eth(),eth_type(0x0800),ipv4()' '2' || return 1
> + ovs_add_flow "test_trunc" trunctest \
> + 'in_port(2),eth(),eth_type(0x0800),ipv4()' '1' || return 1
> +
> + info "verify connectivity restored without truncation"
> + ovs_sbx "test_trunc" ip netns exec client ping -c 1 -W 2 \
> + 10.0.0.2 || return 1
> +
> + return 0
> +}
> +
> # psample test
> # - use psample to observe packets
> test_psample() {
>
> base-commit: cef9d6804030793cf8b8796fd6936197d065dd3e
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-07-01 17:26 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-30 10:22 [PATCH v2] selftests/net/openvswitch: add output truncation test Minxi Hou
2026-07-01 17:26 ` Aaron Conole
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox