MPTCP Linux Development
 help / color / mirror / Atom feed
* [PATCH mptcp-next 0/4] userspace pm remove id 0 subflow & address
@ 2023-08-08  5:38 Geliang Tang
  2023-08-08  5:38 ` [PATCH mptcp-next 1/4] mptcp: allow creating id 0 subflow Geliang Tang
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Geliang Tang @ 2023-08-08  5:38 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

This patchset addresses #379 and #391, add the abilities to remove id 0
subflow and address for userspace PM. And a selftest.

Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/379
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/391

Geliang Tang (4):
  mptcp: allow creating id 0 subflow
  mptcp: remove id 0 subflow & address
  selftests: mptcp: add id argument for dsf
  selftests: mptcp: remove id 0 subflow & address

 net/mptcp/pm_userspace.c                      | 41 +++++++++++++++----
 .../testing/selftests/net/mptcp/mptcp_join.sh | 24 +++++++++++
 tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 33 ++++++++++++++-
 3 files changed, 90 insertions(+), 8 deletions(-)

-- 
2.35.3


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH mptcp-next 1/4] mptcp: allow creating id 0 subflow
  2023-08-08  5:38 [PATCH mptcp-next 0/4] userspace pm remove id 0 subflow & address Geliang Tang
@ 2023-08-08  5:38 ` Geliang Tang
  2023-08-08  5:38 ` [PATCH mptcp-next 2/4] mptcp: remove id 0 subflow & address Geliang Tang
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Geliang Tang @ 2023-08-08  5:38 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang, Matthieu Baerts

This patch drops id 0 limitation in mptcp_nl_cmd_sf_create() to allow
creating additional subflows with the local addr ID 0.

Fixes: 702c2f646d42 ("mptcp: netlink: allow userspace-driven subflow establishment")
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/391
Suggested-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/pm_userspace.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index b5a8aa4c1ebd..d042d32beb4d 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -307,12 +307,6 @@ int mptcp_nl_cmd_sf_create(struct sk_buff *skb, struct genl_info *info)
 		goto create_err;
 	}
 
-	if (addr_l.id == 0) {
-		NL_SET_ERR_MSG_ATTR(info->extack, laddr, "missing local addr id");
-		err = -EINVAL;
-		goto create_err;
-	}
-
 	err = mptcp_pm_parse_addr(raddr, info, &addr_r);
 	if (err < 0) {
 		NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr");
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH mptcp-next 2/4] mptcp: remove id 0 subflow & address
  2023-08-08  5:38 [PATCH mptcp-next 0/4] userspace pm remove id 0 subflow & address Geliang Tang
  2023-08-08  5:38 ` [PATCH mptcp-next 1/4] mptcp: allow creating id 0 subflow Geliang Tang
@ 2023-08-08  5:38 ` Geliang Tang
  2023-08-08  5:38 ` [PATCH mptcp-next 3/4] selftests: mptcp: add id argument for dsf Geliang Tang
  2023-08-08  5:38 ` [PATCH mptcp-next 4/4] selftests: mptcp: remove id 0 subflow & address Geliang Tang
  3 siblings, 0 replies; 6+ messages in thread
From: Geliang Tang @ 2023-08-08  5:38 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

This patch adds the ability to send RM_ADDR for local ID 0 and the
ability to remove id 0 subflow.

Put id 0 into a removing list, pass it to mptcp_pm_remove_addr() to
remve id 0 address and pass it to mptcp_pm_nl_rm_subflow_received() to
remove id 0 subflow.

Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/379
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/pm_userspace.c | 35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index d042d32beb4d..90472cd62342 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -241,6 +241,19 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info)
 
 	lock_sock((struct sock *)msk);
 
+	if (id_val == 0) {
+		struct mptcp_rm_list list = { .nr = 0 };
+
+		list.ids[list.nr++] = 0;
+
+		spin_lock_bh(&msk->pm.lock);
+		mptcp_pm_remove_addr(msk, &list);
+		spin_unlock_bh(&msk->pm.lock);
+		release_sock((struct sock *)msk);
+		err = 0;
+		goto remove_err;
+	}
+
 	list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) {
 		if (entry->addr.id == id_val) {
 			match = entry;
@@ -399,14 +412,16 @@ int mptcp_nl_cmd_sf_destroy(struct sk_buff *skb, struct genl_info *info)
 	struct nlattr *raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
 	struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
 	struct nlattr *laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
+	struct nlattr *id = info->attrs[MPTCP_PM_ATTR_LOC_ID];
 	struct mptcp_addr_info addr_l;
 	struct mptcp_addr_info addr_r;
 	struct mptcp_sock *msk;
 	struct sock *sk, *ssk;
 	int err = -EINVAL;
 	u32 token_val;
+	u8 id_val;
 
-	if (!laddr || !raddr || !token) {
+	if (((!laddr || !raddr) && !id) || !token) {
 		GENL_SET_ERR_MSG(info, "missing required inputs");
 		return err;
 	}
@@ -424,6 +439,24 @@ int mptcp_nl_cmd_sf_destroy(struct sk_buff *skb, struct genl_info *info)
 		goto destroy_err;
 	}
 
+	if (id) {
+		id_val = nla_get_u8(id);
+		if (id_val == 0) {
+			struct mptcp_rm_list list = { .nr = 0 };
+
+			list.ids[list.nr++] = 0;
+
+			sk = (struct sock *)msk;
+			lock_sock(sk);
+			spin_lock_bh(&msk->pm.lock);
+			mptcp_pm_nl_rm_subflow_received(msk, &list);
+			spin_unlock_bh(&msk->pm.lock);
+			release_sock(sk);
+			err = 0;
+			goto destroy_err;
+		}
+	}
+
 	err = mptcp_pm_parse_addr(laddr, info, &addr_l);
 	if (err < 0) {
 		NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr");
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH mptcp-next 3/4] selftests: mptcp: add id argument for dsf
  2023-08-08  5:38 [PATCH mptcp-next 0/4] userspace pm remove id 0 subflow & address Geliang Tang
  2023-08-08  5:38 ` [PATCH mptcp-next 1/4] mptcp: allow creating id 0 subflow Geliang Tang
  2023-08-08  5:38 ` [PATCH mptcp-next 2/4] mptcp: remove id 0 subflow & address Geliang Tang
@ 2023-08-08  5:38 ` Geliang Tang
  2023-08-08  5:38 ` [PATCH mptcp-next 4/4] selftests: mptcp: remove id 0 subflow & address Geliang Tang
  3 siblings, 0 replies; 6+ messages in thread
From: Geliang Tang @ 2023-08-08  5:38 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

This patch adds a id argument for userspace PM subflow removing
function dsf(), to remove id 0 subflow.

	./pm_nl_ctl dsf token $tk id 0

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 33 ++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
index 49369c4a5f26..6e078854f440 100644
--- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
+++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
@@ -358,9 +358,40 @@ int dsf(int fd, int pm_family, int argc, char *argv[])
 	off = init_genl_req(data, pm_family, MPTCP_PM_CMD_SUBFLOW_DESTROY,
 			    MPTCP_PM_VER);
 
-	if (argc < 12)
+	if (argc < 6)
 		syntax(argv);
 
+	if (argc < 12) {
+		u_int8_t id;
+
+		for (arg = 2; arg < argc; arg++) {
+			if (!strcmp(argv[arg], "id")) {
+				if (++arg >= argc)
+					error(1, 0, " missing id value");
+
+				id = atoi(argv[arg]);
+				rta = (void *)(data + off);
+				rta->rta_type = MPTCP_PM_ATTR_LOC_ID;
+				rta->rta_len = RTA_LENGTH(1);
+				memcpy(RTA_DATA(rta), &id, 1);
+				off += NLMSG_ALIGN(rta->rta_len);
+			} else if (!strcmp(argv[arg], "token")) {
+				if (++arg >= argc)
+					error(1, 0, " missing token value");
+
+				token = strtoul(argv[arg], NULL, 10);
+				rta = (void *)(data + off);
+				rta->rta_type = MPTCP_PM_ATTR_TOKEN;
+				rta->rta_len = RTA_LENGTH(4);
+				memcpy(RTA_DATA(rta), &token, 4);
+				off += NLMSG_ALIGN(rta->rta_len);
+			} else
+				error(1, 0, "unknown keyword %s", argv[arg]);
+		}
+		do_nl_req(fd, nh, off, 0);
+		return 0;
+	}
+
 	/* Params recorded in this order:
 	 * <local-ip>, <local-port>, <remote-ip>, <remote-port>, <token>
 	 */
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH mptcp-next 4/4] selftests: mptcp: remove id 0 subflow & address
  2023-08-08  5:38 [PATCH mptcp-next 0/4] userspace pm remove id 0 subflow & address Geliang Tang
                   ` (2 preceding siblings ...)
  2023-08-08  5:38 ` [PATCH mptcp-next 3/4] selftests: mptcp: add id argument for dsf Geliang Tang
@ 2023-08-08  5:38 ` Geliang Tang
  2023-08-08  7:15   ` selftests: mptcp: remove id 0 subflow & address: Tests Results MPTCP CI
  3 siblings, 1 reply; 6+ messages in thread
From: Geliang Tang @ 2023-08-08  5:38 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

This patch adds a selftest for userpsace PM to remove id 0 subflow and
id 0 address.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 .../testing/selftests/net/mptcp/mptcp_join.sh | 24 +++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index ee1f89a872b3..9bcfacaa4124 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -3434,6 +3434,30 @@ userspace_tests()
 		kill_events_pids
 		wait $tests_pid
 	fi
+
+	# userspace pm remove id 0 subflow & address
+	if reset_with_events "userspace pm remove id 0 subflow & address" &&
+	   continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
+		local tk
+
+		set_userspace_pm $ns2
+		pm_nl_set_limits $ns1 0 2
+		speed=10 \
+			run_tests $ns1 $ns2 10.0.1.1 &
+		local tests_pid=$!
+		wait_mpj $ns2
+		userspace_pm_add_sf 10.0.1.2 0
+		userspace_pm_add_sf 10.0.3.2 20
+		chk_join_nr 2 2 2
+		chk_mptcp_info subflows 2 subflows 2
+		tk=$(sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
+		ip netns exec $ns2 ./pm_nl_ctl rem token $tk id 0
+		ip netns exec $ns2 ./pm_nl_ctl dsf token $tk id 0
+		chk_rm_nr 2 2
+		chk_mptcp_info subflows 1 subflows 1
+		kill_events_pids
+		wait $tests_pid
+	fi
 }
 
 endpoint_tests()
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: selftests: mptcp: remove id 0 subflow & address: Tests Results
  2023-08-08  5:38 ` [PATCH mptcp-next 4/4] selftests: mptcp: remove id 0 subflow & address Geliang Tang
@ 2023-08-08  7:15   ` MPTCP CI
  0 siblings, 0 replies; 6+ messages in thread
From: MPTCP CI @ 2023-08-08  7:15 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/5332343926292480
  - Summary: https://api.cirrus-ci.com/v1/artifact/task/5332343926292480/summary/summary.txt

- KVM Validation: normal (only selftest_mptcp_join):
  - Unstable: 1 failed test(s): selftest_mptcp_join 🔴:
  - Task: https://cirrus-ci.com/task/6458243833135104
  - Summary: https://api.cirrus-ci.com/v1/artifact/task/6458243833135104/summary/summary.txt

- KVM Validation: debug (except selftest_mptcp_join):
  - Success! ✅:
  - Task: https://cirrus-ci.com/task/5050868949581824
  - Summary: https://api.cirrus-ci.com/v1/artifact/task/5050868949581824/summary/summary.txt

- KVM Validation: debug (only selftest_mptcp_join):
  - Unstable: 1 failed test(s): selftest_mptcp_join 🔴:
  - Task: https://cirrus-ci.com/task/6176768856424448
  - Summary: https://api.cirrus-ci.com/v1/artifact/task/6176768856424448/summary/summary.txt

Initiator: Patchew Applier
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/8b35cc97750c


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] 6+ messages in thread

end of thread, other threads:[~2023-08-08  7:15 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-08  5:38 [PATCH mptcp-next 0/4] userspace pm remove id 0 subflow & address Geliang Tang
2023-08-08  5:38 ` [PATCH mptcp-next 1/4] mptcp: allow creating id 0 subflow Geliang Tang
2023-08-08  5:38 ` [PATCH mptcp-next 2/4] mptcp: remove id 0 subflow & address Geliang Tang
2023-08-08  5:38 ` [PATCH mptcp-next 3/4] selftests: mptcp: add id argument for dsf Geliang Tang
2023-08-08  5:38 ` [PATCH mptcp-next 4/4] selftests: mptcp: remove id 0 subflow & address Geliang Tang
2023-08-08  7:15   ` selftests: mptcp: remove id 0 subflow & address: Tests Results MPTCP CI

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox