* [PATCH mptcp-next v6 1/7] mptcp: pass addr to mptcp_pm_alloc_anno_list
2023-04-13 9:12 [PATCH mptcp-next v6 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
@ 2023-04-13 9:12 ` Geliang Tang
2023-04-13 9:12 ` [PATCH mptcp-next v6 2/7] mptcp: don't clear userspace pm addr id Geliang Tang
` (5 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2023-04-13 9:12 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Pass addr to mptcp_pm_alloc_anno_list() instead of entry.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/pm_netlink.c | 8 ++++----
net/mptcp/pm_userspace.c | 2 +-
net/mptcp/protocol.h | 2 +-
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index e8336b8bd30e..a02822111218 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -342,7 +342,7 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk,
}
bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
- const struct mptcp_pm_addr_entry *entry)
+ const struct mptcp_addr_info *addr)
{
struct mptcp_pm_add_entry *add_entry = NULL;
struct sock *sk = (struct sock *)msk;
@@ -350,7 +350,7 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
lockdep_assert_held(&msk->pm.lock);
- add_entry = mptcp_lookup_anno_list_by_saddr(msk, &entry->addr);
+ add_entry = mptcp_lookup_anno_list_by_saddr(msk, addr);
if (add_entry) {
if (mptcp_pm_is_kernel(msk))
@@ -367,7 +367,7 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
list_add(&add_entry->list, &msk->pm.anno_list);
- add_entry->addr = entry->addr;
+ add_entry->addr = *addr;
add_entry->sock = msk;
add_entry->retrans_times = 0;
@@ -574,7 +574,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk)
return;
if (local) {
- if (mptcp_pm_alloc_anno_list(msk, local)) {
+ if (mptcp_pm_alloc_anno_list(msk, &local->addr)) {
__clear_bit(local->addr.id, msk->pm.id_avail_bitmap);
msk->pm.add_addr_signaled++;
mptcp_pm_announce_addr(msk, &local->addr, false);
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index 27a275805c06..4d0e54fab5cf 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -170,7 +170,7 @@ int mptcp_nl_cmd_announce(struct sk_buff *skb, struct genl_info *info)
lock_sock((struct sock *)msk);
spin_lock_bh(&msk->pm.lock);
- if (mptcp_pm_alloc_anno_list(msk, &addr_val)) {
+ if (mptcp_pm_alloc_anno_list(msk, &addr_val.addr)) {
mptcp_pm_announce_addr(msk, &addr_val.addr, false);
mptcp_pm_nl_addr_send_ack(msk);
}
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 5a35c77723e3..990c21a97975 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -822,7 +822,7 @@ int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *msk,
struct mptcp_addr_info *rem,
u8 bkup);
bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
- const struct mptcp_pm_addr_entry *entry);
+ const struct mptcp_addr_info *addr);
void mptcp_pm_free_anno_list(struct mptcp_sock *msk);
bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock *sk);
struct mptcp_pm_add_entry *
--
2.35.3
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH mptcp-next v6 2/7] mptcp: don't clear userspace pm addr id
2023-04-13 9:12 [PATCH mptcp-next v6 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
2023-04-13 9:12 ` [PATCH mptcp-next v6 1/7] mptcp: pass addr to mptcp_pm_alloc_anno_list Geliang Tang
@ 2023-04-13 9:12 ` Geliang Tang
2023-04-13 9:12 ` [PATCH mptcp-next v6 3/7] mptcp: add addr into userspace pm list Geliang Tang
` (4 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2023-04-13 9:12 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 a02822111218..ff27c9f1f843 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 4d0e54fab5cf..4a8ebf87ef02 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 v6 3/7] mptcp: add addr into userspace pm list
2023-04-13 9:12 [PATCH mptcp-next v6 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
2023-04-13 9:12 ` [PATCH mptcp-next v6 1/7] mptcp: pass addr to mptcp_pm_alloc_anno_list Geliang Tang
2023-04-13 9:12 ` [PATCH mptcp-next v6 2/7] mptcp: don't clear userspace pm addr id Geliang Tang
@ 2023-04-13 9:12 ` Geliang Tang
2023-04-13 9:12 ` [PATCH mptcp-next v6 4/7] mptcp: close remote subflow when destroying it Geliang Tang
` (3 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2023-04-13 9:12 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 4a8ebf87ef02..176c77a2a79d 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 v6 4/7] mptcp: close remote subflow when destroying it
2023-04-13 9:12 [PATCH mptcp-next v6 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
` (2 preceding siblings ...)
2023-04-13 9:12 ` [PATCH mptcp-next v6 3/7] mptcp: add addr into userspace pm list Geliang Tang
@ 2023-04-13 9:12 ` Geliang Tang
2023-04-13 9:12 ` [PATCH mptcp-next v6 5/7] mptcp: increase userspace pm add_addr_signaled Geliang Tang
` (2 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2023-04-13 9:12 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 | 1 +
tools/testing/selftests/net/mptcp/mptcp_join.sh | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index 176c77a2a79d..7d676daa89ba 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -308,6 +308,7 @@ int mptcp_nl_cmd_sf_create(struct sk_buff *skb, struct genl_info *info)
}
spin_lock_bh(&msk->pm.lock);
+ mptcp_pm_alloc_anno_list(msk, &addr_l);
msk->pm.local_addr_used++;
spin_unlock_bh(&msk->pm.lock);
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index fafd19ec7e1f..072f77b6b206 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -911,6 +911,7 @@ do_transfer()
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
+ ip netns exec ${connector_ns} ./pm_nl_ctl rem token $tk id $id
fi
counter=$((counter + 1))
add_nr_ns2=$((add_nr_ns2 - 1))
@@ -3123,7 +3124,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 v6 5/7] mptcp: increase userspace pm add_addr_signaled
2023-04-13 9:12 [PATCH mptcp-next v6 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
` (3 preceding siblings ...)
2023-04-13 9:12 ` [PATCH mptcp-next v6 4/7] mptcp: close remote subflow when destroying it Geliang Tang
@ 2023-04-13 9:12 ` Geliang Tang
2023-04-13 9:12 ` [PATCH mptcp-next v6 6/7] mptcp: update userspace pm subflows Geliang Tang
2023-04-13 9:12 ` [PATCH mptcp-next v6 7/7] selftests: mptcp: check userspace mptcp_info Geliang Tang
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2023-04-13 9:12 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Increase add_addr_signaled counter in mptcp_nl_cmd_announce() when the
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 7d676daa89ba..817b6f1eb013 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.addr)) {
+ 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 v6 6/7] mptcp: update userspace pm subflows
2023-04-13 9:12 [PATCH mptcp-next v6 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
` (4 preceding siblings ...)
2023-04-13 9:12 ` [PATCH mptcp-next v6 5/7] mptcp: increase userspace pm add_addr_signaled Geliang Tang
@ 2023-04-13 9:12 ` Geliang Tang
2023-04-13 9:12 ` [PATCH mptcp-next v6 7/7] selftests: mptcp: check userspace mptcp_info Geliang Tang
6 siblings, 0 replies; 9+ messages in thread
From: Geliang Tang @ 2023-04-13 9:12 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 817b6f1eb013..db063a6956bc 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -311,6 +311,7 @@ int mptcp_nl_cmd_sf_create(struct sk_buff *skb, struct genl_info *info)
spin_lock_bh(&msk->pm.lock);
mptcp_pm_alloc_anno_list(msk, &addr_l);
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 v6 7/7] selftests: mptcp: check userspace mptcp_info
2023-04-13 9:12 [PATCH mptcp-next v6 0/7] mptcp: update userspace pm mptcp_info fields Geliang Tang
` (5 preceding siblings ...)
2023-04-13 9:12 ` [PATCH mptcp-next v6 6/7] mptcp: update userspace pm subflows Geliang Tang
@ 2023-04-13 9:12 ` Geliang Tang
2023-04-13 10:22 ` selftests: mptcp: check userspace mptcp_info: Tests Results MPTCP CI
6 siblings, 1 reply; 9+ messages in thread
From: Geliang Tang @ 2023-04-13 9:12 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch invokes chk_mptcp_info() to check mptcp_info of userspace PM.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 072f77b6b206..a5dc64129422 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -842,8 +842,11 @@ 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
+ sleep 1
+ chk_mptcp_info subflows_0
fi
counter=$((counter + 1))
@@ -906,12 +909,15 @@ 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
ip netns exec ${connector_ns} ./pm_nl_ctl rem token $tk id $id
+ sleep 1
+ chk_mptcp_info subflows_0
fi
counter=$((counter + 1))
add_nr_ns2=$((add_nr_ns2 - 1))
@@ -3149,6 +3155,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