* [PATCH mptcp-next] selftests: mptcp: use offset to match RM_ADDR message
@ 2026-10-08 10:06 Hangbin Liu
2026-10-08 11:21 ` MPTCP CI
2026-10-08 11:46 ` Matthieu Baerts
0 siblings, 2 replies; 5+ messages in thread
From: Hangbin Liu @ 2026-10-08 10:06 UTC (permalink / raw)
To: MPTCP Linux; +Cc: Florian Westphal, Hangbin Liu, Hangbin Liu
From: Hangbin Liu <liuhangbin@kylinos.cn>
nft cannot match RM_ADDR when it is the second MPTCP option,
so we rely on hard-coded offsets. A tcpdump capture of the RM_ADDR
message looks like:
[TCP header: 20 bytes] [nop] [nop] [timestamp: 10 bytes] \
[MPTCP DSS: 12 bytes] [MPTCP RM_ADDR: 4 bytes]
We verify: TCP Data Offset (TCP[12] × 8) equals 48 bytes (12 x 4),
DSS length (TCP[33] x 8) is 12 bytes, and RM_ADDR subtype (TCP[46] × 8)
is 4. This matches the old cBPF check, which calculated offsets starting
from the IP header:
(ip[32] & 0xf0) == 0xc0 && ip[53] == 0x0c && (ip[66] & 0xf0) == 0x40
Also add MPTCP kind (30) checks for the DSS (TCP[32] x 8) and RM_ADDR
(TCP[44] x 8) options.
Signed-off-by: Hangbin Liu <liuhangbin@kylinos.cn>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index b16e24418e73..194b80277ae2 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -4375,7 +4375,12 @@ endpoint_tests()
local nft=1
ip netns exec "${ns2}" nft insert rule ip filter OUTPUT \
ip saddr 10.0.1.2 meta l4proto tcp \
- tcp option mptcp subtype remove-addr drop || nft=0
+ @th,96,4 == 12 \
+ @th,256,8 == 30 \
+ @th,264,8 == 12 \
+ @th,352,8 == 30 \
+ @th,368,4 == 4 \
+ drop || nft=0
local i
for i in $(seq 3); do
pm_nl_del_endpoint $ns2 1 10.0.1.2
@@ -4454,7 +4459,12 @@ endpoint_tests()
local nft=1
ip netns exec "${ns1}" nft insert rule ip filter OUTPUT \
ip saddr 10.0.1.1 meta l4proto tcp \
- tcp option mptcp subtype remove-addr drop || nft=0
+ @th,96,4 == 12 \
+ @th,256,8 == 30 \
+ @th,264,8 == 12 \
+ @th,352,8 == 30 \
+ @th,368,4 == 4 \
+ drop || nft=0
pm_nl_del_endpoint $ns1 42 10.0.1.1
sleep 0.5
chk_subflow_nr "after delete ID 0" 2
---
base-commit: 9651c766735c19e7a6b90d731bab53ef7959def8
change-id: 20261008-mptcp_rm_addr-92ab7ff3d94d
Best regards,
--
Hangbin Liu <liuhangbin@kylinos.cn>
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH mptcp-next] selftests: mptcp: use offset to match RM_ADDR message 2026-10-08 10:06 [PATCH mptcp-next] selftests: mptcp: use offset to match RM_ADDR message Hangbin Liu @ 2026-10-08 11:21 ` MPTCP CI 2026-10-08 11:46 ` Matthieu Baerts 1 sibling, 0 replies; 5+ messages in thread From: MPTCP CI @ 2026-10-08 11:21 UTC (permalink / raw) To: Hangbin Liu; +Cc: mptcp Hi Hangbin, Thank you for your modifications, that's great! Our CI did some validations and here is its report: - KVM Validation: normal (except selftest_mptcp_join): Success! ✅ - KVM Validation: normal (only selftest_mptcp_join): Success! ✅ - KVM Validation: debug (except selftest_mptcp_join): Success! ✅ - KVM Validation: debug (only selftest_mptcp_join): Success! ✅ - KVM Validation: btf-normal (only bpftest_all): Success! ✅ - KVM Validation: btf-debug (only bpftest_all): Success! ✅ - Perf: Success! ✅ - Task: https://github.com/multipath-tcp/mptcp_net-next/actions/runs/37761573416 Initiator: Patchew Applier Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/8bb8b9b41840 Patchwork: https://patchwork.kernel.org/project/mptcp/list/?series=1181526 If there are some issues, you can reproduce them using the same environment as the one used by the CI thanks to a docker image, e.g.: $ cd [kernel source code] $ docker run -v "${PWD}:${PWD}:rw" -w "${PWD}" --privileged --rm -it \ --pull always mptcp/mptcp-upstream-virtme-docker:latest \ auto-normal For more details: https://github.com/multipath-tcp/mptcp-upstream-virtme-docker Please note that despite all the efforts that have been already done to have a stable tests suite when executed on a public CI like here, it is possible some reported issues are not due to your modifications. Still, do not hesitate to help us improve that ;-) Cheers, MPTCP GH Action bot Bot operated by Matthieu Baerts (NGI0 Core) ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH mptcp-next] selftests: mptcp: use offset to match RM_ADDR message 2026-10-08 10:06 [PATCH mptcp-next] selftests: mptcp: use offset to match RM_ADDR message Hangbin Liu 2026-10-08 11:21 ` MPTCP CI @ 2026-10-08 11:46 ` Matthieu Baerts 2026-10-08 13:40 ` hangbin.liu 1 sibling, 1 reply; 5+ messages in thread From: Matthieu Baerts @ 2026-10-08 11:46 UTC (permalink / raw) To: Hangbin Liu, MPTCP Linux; +Cc: Florian Westphal, Hangbin Liu Hi Hangbin, Thank you for the follow-up! On 08/10/2026 12:06, Hangbin Liu wrote: > From: Hangbin Liu <liuhangbin@kylinos.cn> > > nft cannot match RM_ADDR when it is the second MPTCP option, Do you mind adding a short explanation why or just a ref to: https://lore.kernel.org/a391d81c-0bce-41e6-886e-a558765c6891@kernel.org Also, could you title this patch: Squash to "selftests: mptcp: convert iptables to nftables for mptcp_join.sh" And mention what should be added to the original commit message, please? > so we rely on hard-coded offsets. A tcpdump capture of the RM_ADDR > message looks like: > > [TCP header: 20 bytes] [nop] [nop] [timestamp: 10 bytes] \ > [MPTCP DSS: 12 bytes] [MPTCP RM_ADDR: 4 bytes] > > We verify: TCP Data Offset (TCP[12] × 8) equals 48 bytes (12 x 4), > DSS length (TCP[33] x 8) is 12 bytes, and RM_ADDR subtype (TCP[46] × 8) > is 4. This matches the old cBPF check, which calculated offsets starting > from the IP header: > > (ip[32] & 0xf0) == 0xc0 && ip[53] == 0x0c && (ip[66] & 0xf0) == 0x40 > > Also add MPTCP kind (30) checks for the DSS (TCP[32] x 8) and RM_ADDR > (TCP[44] x 8) options. Good idea. > > Signed-off-by: Hangbin Liu <liuhangbin@kylinos.cn> > --- > tools/testing/selftests/net/mptcp/mptcp_join.sh | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh > index b16e24418e73..194b80277ae2 100755 > --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh > +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh > @@ -4375,7 +4375,12 @@ endpoint_tests() > local nft=1 > ip netns exec "${ns2}" nft insert rule ip filter OUTPUT \ > ip saddr 10.0.1.2 meta l4proto tcp \ > - tcp option mptcp subtype remove-addr drop || nft=0 > + @th,96,4 == 12 \ > + @th,256,8 == 30 \ > + @th,264,8 == 12 \ > + @th,352,8 == 30 \ > + @th,368,4 == 4 \ > + drop || nft=0 > local i > for i in $(seq 3); do > pm_nl_del_endpoint $ns2 1 10.0.1.2 > @@ -4454,7 +4459,12 @@ endpoint_tests() > local nft=1 > ip netns exec "${ns1}" nft insert rule ip filter OUTPUT \ > ip saddr 10.0.1.1 meta l4proto tcp \ > - tcp option mptcp subtype remove-addr drop || nft=0 > + @th,96,4 == 12 \ > + @th,256,8 == 30 \ > + @th,264,8 == 12 \ > + @th,352,8 == 30 \ > + @th,368,4 == 4 \ Do you mind just adding this sequence to a global variable (an array?), similar to what was done before with the cBPF filter, with a short comment, please? That would be easier to understand here, and to avoid duplicated code. > + drop || nft=0 > pm_nl_del_endpoint $ns1 42 10.0.1.1 > sleep 0.5 > chk_subflow_nr "after delete ID 0" 2 > > --- > base-commit: 9651c766735c19e7a6b90d731bab53ef7959def8 > change-id: 20261008-mptcp_rm_addr-92ab7ff3d94d > > Best regards, Cheers, Matt -- Sponsored by the NGI0 Core fund. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH mptcp-next] selftests: mptcp: use offset to match RM_ADDR message 2026-10-08 11:46 ` Matthieu Baerts @ 2026-10-08 13:40 ` hangbin.liu 2026-10-08 13:43 ` Matthieu Baerts 0 siblings, 1 reply; 5+ messages in thread From: hangbin.liu @ 2026-10-08 13:40 UTC (permalink / raw) To: Matthieu Baerts, MPTCP Linux; +Cc: Florian Westphal, Hangbin Liu Hi Matthieu, October 8, 2026 at 7:46 PM, "Matthieu Baerts" <matttbe@kernel.org> wrote: > > Hi Hangbin, > > Thank you for the follow-up! > > On 08/10/2026 12:06, Hangbin Liu wrote: > > > > > From: Hangbin Liu <liuhangbin@kylinos.cn> > > > > nft cannot match RM_ADDR when it is the second MPTCP option, > > > Do you mind adding a short explanation why or just a ref to: > > https://lore.kernel.org/a391d81c-0bce-41e6-886e-a558765c6891@kernel.org OK, I will. > > Also, could you title this patch: > > Squash to "selftests: mptcp: convert iptables to nftables for > mptcp_join.sh" > > And mention what should be added to the original commit message, please? OK, no problem. > > > > > so we rely on hard-coded offsets. A tcpdump capture of the RM_ADDR > > message looks like: > > > > [TCP header: 20 bytes] [nop] [nop] [timestamp: 10 bytes] \ > > [MPTCP DSS: 12 bytes] [MPTCP RM_ADDR: 4 bytes] > > > > We verify: TCP Data Offset (TCP[12] × 8) equals 48 bytes (12 x 4), > > DSS length (TCP[33] x 8) is 12 bytes, and RM_ADDR subtype (TCP[46] × 8) > > is 4. This matches the old cBPF check, which calculated offsets starting > > from the IP header: > > > > (ip[32] & 0xf0) == 0xc0 && ip[53] == 0x0c && (ip[66] & 0xf0) == 0x40 > > > > Also add MPTCP kind (30) checks for the DSS (TCP[32] x 8) and RM_ADDR > > (TCP[44] x 8) options. > > > Good idea. > > > > > Signed-off-by: Hangbin Liu <liuhangbin@kylinos.cn> > > --- > > tools/testing/selftests/net/mptcp/mptcp_join.sh | 14 ++++++++++++-- > > 1 file changed, 12 insertions(+), 2 deletions(-) > > > > diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh > > index b16e24418e73..194b80277ae2 100755 > > --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh > > +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh > > @@ -4375,7 +4375,12 @@ endpoint_tests() > > local nft=1 > > ip netns exec "${ns2}" nft insert rule ip filter OUTPUT \ > > ip saddr 10.0.1.2 meta l4proto tcp \ > > - tcp option mptcp subtype remove-addr drop || nft=0 > > + @th,96,4 == 12 \ > > + @th,256,8 == 30 \ > > + @th,264,8 == 12 \ > > + @th,352,8 == 30 \ > > + @th,368,4 == 4 \ > > + drop || nft=0 > > local i > > for i in $(seq 3); do > > pm_nl_del_endpoint $ns2 1 10.0.1.2 > > @@ -4454,7 +4459,12 @@ endpoint_tests() > > local nft=1 > > ip netns exec "${ns1}" nft insert rule ip filter OUTPUT \ > > ip saddr 10.0.1.1 meta l4proto tcp \ > > - tcp option mptcp subtype remove-addr drop || nft=0 > > + @th,96,4 == 12 \ > > + @th,256,8 == 30 \ > > + @th,264,8 == 12 \ > > + @th,352,8 == 30 \ > > + @th,368,4 == 4 \ > > > Do you mind just adding this sequence to a global variable (an array?), > similar to what was done before with the cBPF filter, with a short > comment, please? > > That would be easier to understand here, and to avoid duplicated code. Yes, I will. BTW, For mptcp_sockopt.sh, # just to debug: check we have multiple subflows connection requests add rule $table filter OUTPUT \ tcp flags & (fin | syn | rst | ack) == syn \ meta mark $m accept do you think if there is a need to add counter or remove this rule? Thanks Hangbin ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH mptcp-next] selftests: mptcp: use offset to match RM_ADDR message 2026-10-08 13:40 ` hangbin.liu @ 2026-10-08 13:43 ` Matthieu Baerts 0 siblings, 0 replies; 5+ messages in thread From: Matthieu Baerts @ 2026-10-08 13:43 UTC (permalink / raw) To: hangbin.liu, MPTCP Linux; +Cc: Florian Westphal, Hangbin Liu On 08/10/2026 15:40, hangbin.liu@linux.dev wrote: (...) > BTW, For mptcp_sockopt.sh, > > # just to debug: check we have multiple subflows connection requests > add rule $table filter OUTPUT \ > tcp flags & (fin | syn | rst | ack) == syn \ > meta mark $m accept > > do you think if there is a need to add counter or remove this rule? Easier to remove it. It can be easily added when debugging. Cheers, Matt -- Sponsored by the NGI0 Core fund. ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-10-08 13:43 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-10-08 10:06 [PATCH mptcp-next] selftests: mptcp: use offset to match RM_ADDR message Hangbin Liu 2026-10-08 11:21 ` MPTCP CI 2026-10-08 11:46 ` Matthieu Baerts 2026-10-08 13:40 ` hangbin.liu 2026-10-08 13:43 ` Matthieu Baerts
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.