* [PATCH mptcp-next v4 0/7] mptcp: update userspace pm mptcp_info fields
@ 2023-03-14 3:01 Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 1/7] mptcp: don't clear userspace pm addr id Geliang Tang
` (6 more replies)
0 siblings, 7 replies; 9+ messages in thread
From: Geliang Tang @ 2023-03-14 3:01 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
v4:
- add more patches
- add selftests
v3:
- update local_addr_used and add_addr_signaled
v2:
- hold pm locks
Geliang Tang (7):
mptcp: don't clear userspace pm addr id
mptcp: add addr into userspace pm list
mptcp: close remote subflow when destroying it
mptcp: increase userspace pm add_addr_signaled
mptcp: update userspace pm subflows
mptcp: make userspace_pm_append_new_local_addr static
selftests: mptcp: check userspace mptcp_info
net/mptcp/pm.c | 21 +++++++++---
net/mptcp/pm_netlink.c | 2 +-
net/mptcp/pm_userspace.c | 32 +++++++++++++++++--
net/mptcp/protocol.h | 2 --
.../testing/selftests/net/mptcp/mptcp_join.sh | 10 +++++-
5 files changed, 56 insertions(+), 11 deletions(-)
--
2.35.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH mptcp-next v4 1/7] mptcp: don't clear userspace pm addr id
2023-03-14 3:01 [PATCH mptcp-next v4 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
@ 2023-03-14 3:01 ` Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 2/7] mptcp: add addr into userspace pm list Geliang Tang
` (5 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2023-03-14 3:01 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Don't clear the addr id in mptcp_userspace_pm_get_local_id(), clear it
in mptcp_pm_nl_get_local_id() instead.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/pm_netlink.c | 2 +-
net/mptcp/pm_userspace.c | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 67995cb4f8b8..df15d846e7db 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -1055,8 +1055,8 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct sock_common *skc)
{
+ struct mptcp_addr_info skc_local = { 0 };
struct mptcp_pm_addr_entry *entry;
- struct mptcp_addr_info skc_local;
struct mptcp_addr_info msk_local;
struct pm_nl_pernet *pernet;
int ret = -1;
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index a02d3cbf2a1b..fe4c29a17466 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -113,7 +113,6 @@ int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk,
memset(&new_entry, 0, sizeof(struct mptcp_pm_addr_entry));
new_entry.addr = *skc;
- new_entry.addr.id = 0;
new_entry.flags = MPTCP_PM_ADDR_FLAG_IMPLICIT;
if (new_entry.addr.port == msk_sport)
--
2.35.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH mptcp-next v4 2/7] mptcp: add addr into userspace pm list
2023-03-14 3:01 [PATCH mptcp-next v4 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 1/7] mptcp: don't clear userspace pm addr id Geliang Tang
@ 2023-03-14 3:01 ` Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 3/7] mptcp: close remote subflow when destroying it Geliang Tang
` (4 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2023-03-14 3:01 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Add the address into userspace_pm_local_addr_list when the subflow is
created.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/pm_userspace.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index fe4c29a17466..49f41a040485 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -301,6 +301,16 @@ int mptcp_nl_cmd_sf_create(struct sk_buff *skb, struct genl_info *info)
goto create_err;
}
+ err = mptcp_userspace_pm_get_local_id(msk, &addr_l);
+ if (err < 0) {
+ GENL_SET_ERR_MSG(info, "did not match address and id");
+ goto create_err;
+ }
+
+ spin_lock_bh(&msk->pm.lock);
+ msk->pm.local_addr_used++;
+ spin_unlock_bh(&msk->pm.lock);
+
lock_sock(sk);
err = __mptcp_subflow_connect(sk, &addr_l, &addr_r);
--
2.35.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH mptcp-next v4 3/7] mptcp: close remote subflow when destroying it
2023-03-14 3:01 [PATCH mptcp-next v4 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 1/7] mptcp: don't clear userspace pm addr id Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 2/7] mptcp: add addr into userspace pm list Geliang Tang
@ 2023-03-14 3:01 ` Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 4/7] mptcp: increase userspace pm add_addr_signaled Geliang Tang
` (3 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2023-03-14 3:01 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Not only close the local subflow but also send RM_ADDR by invoking
mptcp_pm_remove_addr() to close the remote subflow when a subflow is
destroyed by userspace PM.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/pm_userspace.c | 15 +++++++++++++++
tools/testing/selftests/net/mptcp/mptcp_join.sh | 2 +-
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index 49f41a040485..ebadfafaa203 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -429,6 +429,21 @@ int mptcp_nl_cmd_sf_destroy(struct sk_buff *skb, struct genl_info *info)
ssk = mptcp_nl_find_ssk(msk, &addr_l, &addr_r);
if (ssk) {
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
+ struct mptcp_pm_addr_entry *entry, *tmp;
+
+ spin_lock_bh(&msk->pm.lock);
+ list_for_each_entry_safe(entry, tmp, &msk->pm.userspace_pm_local_addr_list, list) {
+ if (mptcp_addresses_equal(&entry->addr, &addr_l, false)) {
+ struct mptcp_rm_list list = { .nr = 0 };
+
+ list.ids[list.nr++] = entry->addr.id;
+ mptcp_pm_remove_addr(msk, &list);
+ list_del_rcu(&entry->list);
+ msk->pm.local_addr_used--;
+ break;
+ }
+ }
+ spin_unlock_bh(&msk->pm.lock);
mptcp_subflow_shutdown(sk, ssk, RCV_SHUTDOWN | SEND_SHUTDOWN);
mptcp_close_ssk(sk, ssk, subflow);
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index fafd19ec7e1f..506120401abe 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -3123,7 +3123,7 @@ userspace_tests()
pm_nl_set_limits $ns1 0 1
run_tests $ns1 $ns2 10.0.1.1 0 0 userspace_1 slow
chk_join_nr 1 1 1
- chk_rm_nr 0 1
+ chk_rm_nr 1 1
kill_events_pids
fi
}
--
2.35.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH mptcp-next v4 4/7] mptcp: increase userspace pm add_addr_signaled
2023-03-14 3:01 [PATCH mptcp-next v4 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
` (2 preceding siblings ...)
2023-03-14 3:01 ` [PATCH mptcp-next v4 3/7] mptcp: close remote subflow when destroying it Geliang Tang
@ 2023-03-14 3:01 ` Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 5/7] mptcp: update userspace pm subflows Geliang Tang
` (2 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2023-03-14 3:01 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Increase add_addr_signaled counter in mptcp_nl_cmd_announce() when the
userspace address is announced by userspace PM.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/pm_userspace.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index ebadfafaa203..1e5c2753c4ea 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -170,6 +170,7 @@ int mptcp_nl_cmd_announce(struct sk_buff *skb, struct genl_info *info)
spin_lock_bh(&msk->pm.lock);
if (mptcp_pm_alloc_anno_list(msk, &addr_val)) {
+ msk->pm.add_addr_signaled++;
mptcp_pm_announce_addr(msk, &addr_val.addr, false);
mptcp_pm_nl_addr_send_ack(msk);
}
--
2.35.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH mptcp-next v4 5/7] mptcp: update userspace pm subflows
2023-03-14 3:01 [PATCH mptcp-next v4 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
` (3 preceding siblings ...)
2023-03-14 3:01 ` [PATCH mptcp-next v4 4/7] mptcp: increase userspace pm add_addr_signaled Geliang Tang
@ 2023-03-14 3:01 ` Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 6/7] mptcp: make userspace_pm_append_new_local_addr static Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 7/7] selftests: mptcp: check userspace mptcp_info Geliang Tang
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2023-03-14 3:01 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Increase pm subflows counter on both server side and client side when
userspace pm creates a new subflow, and decrease the counter when it
closes a subflow.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/pm.c | 21 +++++++++++++++++----
net/mptcp/pm_userspace.c | 1 +
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
index 4ed4d29d9c11..bb01f15d8e0a 100644
--- a/net/mptcp/pm.c
+++ b/net/mptcp/pm.c
@@ -87,8 +87,15 @@ bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk)
unsigned int subflows_max;
int ret = 0;
- if (mptcp_pm_is_userspace(msk))
- return mptcp_userspace_pm_active(msk);
+ if (mptcp_pm_is_userspace(msk)) {
+ if (mptcp_userspace_pm_active(msk)) {
+ spin_lock_bh(&pm->lock);
+ pm->subflows++;
+ spin_unlock_bh(&pm->lock);
+ return true;
+ }
+ return false;
+ }
subflows_max = mptcp_pm_get_subflows_max(msk);
@@ -181,8 +188,14 @@ void mptcp_pm_subflow_check_next(struct mptcp_sock *msk, const struct sock *ssk,
struct mptcp_pm_data *pm = &msk->pm;
bool update_subflows;
- update_subflows = (subflow->request_join || subflow->mp_join) &&
- mptcp_pm_is_kernel(msk);
+ if (mptcp_pm_is_userspace(msk)) {
+ spin_lock_bh(&pm->lock);
+ pm->subflows--;
+ spin_unlock_bh(&pm->lock);
+ return;
+ }
+
+ update_subflows = (subflow->request_join || subflow->mp_join);
if (!READ_ONCE(pm->work_pending) && !update_subflows)
return;
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index 1e5c2753c4ea..a2fce8486d60 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -310,6 +310,7 @@ int mptcp_nl_cmd_sf_create(struct sk_buff *skb, struct genl_info *info)
spin_lock_bh(&msk->pm.lock);
msk->pm.local_addr_used++;
+ msk->pm.subflows++;
spin_unlock_bh(&msk->pm.lock);
lock_sock(sk);
--
2.35.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH mptcp-next v4 6/7] mptcp: make userspace_pm_append_new_local_addr static
2023-03-14 3:01 [PATCH mptcp-next v4 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
` (4 preceding siblings ...)
2023-03-14 3:01 ` [PATCH mptcp-next v4 5/7] mptcp: update userspace pm subflows Geliang Tang
@ 2023-03-14 3:01 ` Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 7/7] selftests: mptcp: check userspace mptcp_info Geliang Tang
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2023-03-14 3:01 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
mptcp_userspace_pm_append_new_local_addr is only used in pm_userspace.c,
so make it static.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/pm_userspace.c | 4 ++--
net/mptcp/protocol.h | 2 --
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index a2fce8486d60..d2749225f391 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -25,8 +25,8 @@ void mptcp_free_local_addr_list(struct mptcp_sock *msk)
}
}
-int mptcp_userspace_pm_append_new_local_addr(struct mptcp_sock *msk,
- struct mptcp_pm_addr_entry *entry)
+static int mptcp_userspace_pm_append_new_local_addr(struct mptcp_sock *msk,
+ struct mptcp_pm_addr_entry *entry)
{
DECLARE_BITMAP(id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1);
struct mptcp_pm_addr_entry *match = NULL;
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 46962a2581b4..421e587a4d62 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -849,8 +849,6 @@ int mptcp_pm_remove_subflow(struct mptcp_sock *msk, const struct mptcp_rm_list *
void mptcp_pm_remove_addrs_and_subflows(struct mptcp_sock *msk,
struct list_head *rm_list);
-int mptcp_userspace_pm_append_new_local_addr(struct mptcp_sock *msk,
- struct mptcp_pm_addr_entry *entry);
void mptcp_free_local_addr_list(struct mptcp_sock *msk);
int mptcp_nl_cmd_announce(struct sk_buff *skb, struct genl_info *info);
int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info);
--
2.35.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH mptcp-next v4 7/7] selftests: mptcp: check userspace mptcp_info
2023-03-14 3:01 [PATCH mptcp-next v4 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
` (5 preceding siblings ...)
2023-03-14 3:01 ` [PATCH mptcp-next v4 6/7] mptcp: make userspace_pm_append_new_local_addr static Geliang Tang
@ 2023-03-14 3:01 ` Geliang Tang
2023-03-14 4:23 ` selftests: mptcp: check userspace mptcp_info: Tests Results MPTCP CI
6 siblings, 1 reply; 9+ messages in thread
From: Geliang Tang @ 2023-03-14 3:01 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch invokes chk_mptcp_info to check userspace PM mptcp_info.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 506120401abe..63ceaa613bdc 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -842,8 +842,10 @@ do_transfer()
tk=$(grep "type:1," "$evts_ns1" |
sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q')
ip netns exec ${listener_ns} ./pm_nl_ctl ann $addr token $tk id $id
+ chk_mptcp_info subflows_1
sleep 1
ip netns exec ${listener_ns} ./pm_nl_ctl rem token $tk id $id
+ chk_mptcp_info subflows_0
fi
counter=$((counter + 1))
@@ -906,11 +908,13 @@ do_transfer()
dp=$(sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
ip netns exec ${connector_ns} ./pm_nl_ctl csf lip $addr lid $id \
rip $da rport $dp token $tk
+ chk_mptcp_info subflows_1
sleep 1
sp=$(grep "type:10" "$evts_ns2" |
sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
ip netns exec ${connector_ns} ./pm_nl_ctl dsf lip $addr lport $sp \
rip $da rport $dp token $tk
+ chk_mptcp_info subflows_0
fi
counter=$((counter + 1))
add_nr_ns2=$((add_nr_ns2 - 1))
@@ -3148,6 +3152,10 @@ endpoint_tests()
pm_nl_add_endpoint $ns2 10.0.2.2 flags signal
pm_nl_check_endpoint 0 "modif is allowed" \
$ns2 10.0.2.2 id 1 flags signal
+
+ chk_mptcp_info subflows_1
+ pm_nl_del_endpoint $ns2 1 10.0.2.2
+ chk_mptcp_info subflows_0
kill_tests_wait
fi
--
2.35.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: selftests: mptcp: check userspace mptcp_info: Tests Results
2023-03-14 3:01 ` [PATCH mptcp-next v4 7/7] selftests: mptcp: check userspace mptcp_info Geliang Tang
@ 2023-03-14 4:23 ` MPTCP CI
0 siblings, 0 replies; 9+ messages in thread
From: MPTCP CI @ 2023-03-14 4:23 UTC (permalink / raw)
To: Geliang Tang; +Cc: mptcp
Hi Geliang,
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! ✅:
- Task: https://cirrus-ci.com/task/4876870689226752
- Summary: https://api.cirrus-ci.com/v1/artifact/task/4876870689226752/summary/summary.txt
- KVM Validation: debug (only selftest_mptcp_join):
- Unstable: 1 failed test(s): selftest_mptcp_join 🔴:
- Task: https://cirrus-ci.com/task/6565720549490688
- Summary: https://api.cirrus-ci.com/v1/artifact/task/6565720549490688/summary/summary.txt
- KVM Validation: debug (except selftest_mptcp_join):
- Critical: KMemLeak ❌:
- Task: https://cirrus-ci.com/task/5439820642648064
- Summary: https://api.cirrus-ci.com/v1/artifact/task/5439820642648064/summary/summary.txt
- KVM Validation: normal (only selftest_mptcp_join):
- Unstable: 1 failed test(s): selftest_mptcp_join 🔴:
- Task: https://cirrus-ci.com/task/6002770596069376
- Summary: https://api.cirrus-ci.com/v1/artifact/task/6002770596069376/summary/summary.txt
Initiator: Patchew Applier
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/3c5779e08e74
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-debug
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 (Tessares)
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2023-03-14 4:24 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-14 3:01 [PATCH mptcp-next v4 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 1/7] mptcp: don't clear userspace pm addr id Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 2/7] mptcp: add addr into userspace pm list Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 3/7] mptcp: close remote subflow when destroying it Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 4/7] mptcp: increase userspace pm add_addr_signaled Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 5/7] mptcp: update userspace pm subflows Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 6/7] mptcp: make userspace_pm_append_new_local_addr static Geliang Tang
2023-03-14 3:01 ` [PATCH mptcp-next v4 7/7] selftests: mptcp: check userspace mptcp_info Geliang Tang
2023-03-14 4:23 ` selftests: mptcp: check userspace mptcp_info: Tests Results MPTCP CI
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.