* [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