* [PATCH mptcp-next v12 00/12] update userspace pm mptcp_info fields
@ 2023-05-06 5:08 Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 01/12] mptcp: only send RM_ADDR in nl_cmd_remove Geliang Tang
` (11 more replies)
0 siblings, 12 replies; 14+ messages in thread
From: Geliang Tang @ 2023-05-06 5:08 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
v12:
- address Matt's commits in v11.
v11:
- #1-#5 part 1, address Matt's comments in v10.
- #6-#9 part 2, update pm mptcp_info
- #10-#12 part 3, some cleanups.
v10:
- fix userspace_pm.sh errors reported by CI.
- fix the bug in mptcp_pm_remove_addrs in patch 1.
- drop msk->pm.subflow == 1 in mptcp_userspace_pm_delete_local_addr in
patch 3.
- exchange the order of "pm_nl_ctl rem" and "pm_nl_ctl dsf" in patch 2
and 6.
- update the commit logs.
v9:
- address Matt's commets in v8.
v8:
- address Matt's comments.
- split into two series, pt 2 will send later.
v7:
- fix userspace_pm.sh errors reported by CI.
- only remove addrs in mptcp_nl_cmd_remove().
v6:
- send a RM ADDR from userspace.
v5:
- fix a memleak error reported by CI.
- add more delay for userspace pm tests.
v4:
- add more patches
- add selftests
v3:
- update local_addr_used and add_addr_signaled
v2:
- hold pm locks
Geliang Tang (12):
mptcp: only send RM_ADDR in nl_cmd_remove
selftests: mptcp: update userspace pm addr tests
mptcp: export remove_anno_list_by_saddr
mptcp: add addr into userspace pm list
selftests: mptcp: update userspace pm subflow tests
mptcp: update userspace pm infos
selftests: mptcp: test userspace pm out of transfer
selftests: mptcp: check subflows infos
selftests: mptcp: check add_addr infos
mptcp: pass addr to mptcp_pm_alloc_anno_list
selftests: mptcp: pass fastclose to sflags
selftests: mptcp: do endpoint manipulation out of transfer
net/mptcp/pm.c | 23 +-
net/mptcp/pm_netlink.c | 34 +-
net/mptcp/pm_userspace.c | 63 +-
net/mptcp/protocol.h | 5 +-
.../testing/selftests/net/mptcp/mptcp_join.sh | 673 +++++++++++-------
5 files changed, 522 insertions(+), 276 deletions(-)
--
2.35.3
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v12 01/12] mptcp: only send RM_ADDR in nl_cmd_remove
2023-05-06 5:08 [PATCH mptcp-next v12 00/12] update userspace pm mptcp_info fields Geliang Tang
@ 2023-05-06 5:08 ` Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 02/12] selftests: mptcp: update userspace pm addr tests Geliang Tang
` (10 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2023-05-06 5:08 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
The specifications from [1] about the "REMOVE" command say:
Announce that an address has been lost to the peer
It was then only supposed to send a RM_ADDR and not trying to delete
associated subflows.
A new helper mptcp_pm_remove_addrs() is then introduced to do just
that, compared to mptcp_pm_remove_addrs_and_subflows() also removing
subflows.
To delete a subflow, the userspace daemon can use the "SUB_DESTROY"
command, see mptcp_nl_cmd_sf_destroy().
Fixes: d9a4594edabf ("mptcp: netlink: Add MPTCP_PM_CMD_REMOVE")
Link: https://github.com/multipath-tcp/mptcp/blob/mptcp_v0.96/include/uapi/linux/mptcp.h [1]
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/pm_netlink.c | 18 ++++++++++++++++++
net/mptcp/pm_userspace.c | 2 +-
net/mptcp/protocol.h | 1 +
3 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index e8336b8bd30e..784145e6a314 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -1555,6 +1555,24 @@ static int mptcp_nl_cmd_del_addr(struct sk_buff *skb, struct genl_info *info)
return ret;
}
+void mptcp_pm_remove_addrs(struct mptcp_sock *msk, struct list_head *rm_list)
+{
+ struct mptcp_rm_list alist = { .nr = 0 };
+ struct mptcp_pm_addr_entry *entry;
+
+ list_for_each_entry(entry, rm_list, list) {
+ if (remove_anno_list_by_saddr(msk, &entry->addr) &&
+ alist.nr < MPTCP_RM_IDS_MAX)
+ alist.ids[alist.nr++] = entry->addr.id;
+ }
+
+ if (alist.nr) {
+ spin_lock_bh(&msk->pm.lock);
+ mptcp_pm_remove_addr(msk, &alist);
+ spin_unlock_bh(&msk->pm.lock);
+ }
+}
+
void mptcp_pm_remove_addrs_and_subflows(struct mptcp_sock *msk,
struct list_head *rm_list)
{
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index 27a275805c06..6beadea8c67d 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -232,7 +232,7 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info)
list_move(&match->list, &free_list);
- mptcp_pm_remove_addrs_and_subflows(msk, &free_list);
+ mptcp_pm_remove_addrs(msk, &free_list);
release_sock((struct sock *)msk);
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index c39e172c95db..1a2772902e9d 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -845,6 +845,7 @@ int mptcp_pm_announce_addr(struct mptcp_sock *msk,
bool echo);
int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list);
int mptcp_pm_remove_subflow(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_list);
+void mptcp_pm_remove_addrs(struct mptcp_sock *msk, struct list_head *rm_list);
void mptcp_pm_remove_addrs_and_subflows(struct mptcp_sock *msk,
struct list_head *rm_list);
--
2.35.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v12 02/12] selftests: mptcp: update userspace pm addr tests
2023-05-06 5:08 [PATCH mptcp-next v12 00/12] update userspace pm mptcp_info fields Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 01/12] mptcp: only send RM_ADDR in nl_cmd_remove Geliang Tang
@ 2023-05-06 5:08 ` Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 03/12] mptcp: export remove_anno_list_by_saddr Geliang Tang
` (9 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2023-05-06 5:08 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch is linked to the previous commit ("mptcp: only send RM_ADDR in
nl_cmd_remove").
To align with what is done by the in-kernel PM, update userspace pm addr
selftests, by sending a remove_subflows command together after the
remove_addrs command.
Fixes: d9a4594edabf ("mptcp: netlink: Add MPTCP_PM_CMD_REMOVE")
Fixes: 97040cf9806e ("selftests: mptcp: userspace pm address tests")
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 627daeb513a0..cb0ae133f5ed 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -864,6 +864,14 @@ do_transfer()
ip netns exec ${listener_ns} ./pm_nl_ctl ann $addr token $tk id $id
sleep 1
ip netns exec ${listener_ns} ./pm_nl_ctl rem token $tk id $id
+ sp=$(grep "type:10" "$evts_ns1" |
+ sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
+ da=$(grep "type:10" "$evts_ns1" |
+ sed -n 's/.*\(daddr6:\)\([0-9a-f:.]*\).*$/\2/p;q')
+ dp=$(grep "type:10" "$evts_ns1" |
+ sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q')
+ ip netns exec ${listener_ns} ./pm_nl_ctl dsf lip "::ffff:$addr" \
+ lport $sp rip $da rport $dp token $tk
fi
counter=$((counter + 1))
--
2.35.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v12 03/12] mptcp: export remove_anno_list_by_saddr
2023-05-06 5:08 [PATCH mptcp-next v12 00/12] update userspace pm mptcp_info fields Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 01/12] mptcp: only send RM_ADDR in nl_cmd_remove Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 02/12] selftests: mptcp: update userspace pm addr tests Geliang Tang
@ 2023-05-06 5:08 ` Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 04/12] mptcp: add addr into userspace pm list Geliang Tang
` (8 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2023-05-06 5:08 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Rename remove_anno_list_by_saddr() with "mptcp_pm_" prefix and export it
in protocol.h.
This function will be re-used in the userspace PM code in the following
commit.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/pm_netlink.c | 10 +++++-----
net/mptcp/protocol.h | 2 ++
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 784145e6a314..0b34b57fc8bc 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -1399,8 +1399,8 @@ int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id
return 0;
}
-static bool remove_anno_list_by_saddr(struct mptcp_sock *msk,
- const struct mptcp_addr_info *addr)
+bool mptcp_pm_remove_anno_list_by_saddr(struct mptcp_sock *msk,
+ const struct mptcp_addr_info *addr)
{
struct mptcp_pm_add_entry *entry;
@@ -1423,7 +1423,7 @@ static bool mptcp_pm_remove_anno_addr(struct mptcp_sock *msk,
list.ids[list.nr++] = addr->id;
- ret = remove_anno_list_by_saddr(msk, addr);
+ ret = mptcp_pm_remove_anno_list_by_saddr(msk, addr);
if (ret || force) {
spin_lock_bh(&msk->pm.lock);
mptcp_pm_remove_addr(msk, &list);
@@ -1561,7 +1561,7 @@ void mptcp_pm_remove_addrs(struct mptcp_sock *msk, struct list_head *rm_list)
struct mptcp_pm_addr_entry *entry;
list_for_each_entry(entry, rm_list, list) {
- if (remove_anno_list_by_saddr(msk, &entry->addr) &&
+ if (mptcp_pm_remove_anno_list_by_saddr(msk, &entry->addr) &&
alist.nr < MPTCP_RM_IDS_MAX)
alist.ids[alist.nr++] = entry->addr.id;
}
@@ -1584,7 +1584,7 @@ void mptcp_pm_remove_addrs_and_subflows(struct mptcp_sock *msk,
slist.nr < MPTCP_RM_IDS_MAX)
slist.ids[slist.nr++] = entry->addr.id;
- if (remove_anno_list_by_saddr(msk, &entry->addr) &&
+ if (mptcp_pm_remove_anno_list_by_saddr(msk, &entry->addr) &&
alist.nr < MPTCP_RM_IDS_MAX)
alist.ids[alist.nr++] = entry->addr.id;
}
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 1a2772902e9d..bfa7d93a1c1a 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -831,6 +831,8 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk,
struct mptcp_pm_add_entry *
mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk,
const struct mptcp_addr_info *addr);
+bool mptcp_pm_remove_anno_list_by_saddr(struct mptcp_sock *msk,
+ const struct mptcp_addr_info *addr);
int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk,
unsigned int id,
u8 *flags, int *ifindex);
--
2.35.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v12 04/12] mptcp: add addr into userspace pm list
2023-05-06 5:08 [PATCH mptcp-next v12 00/12] update userspace pm mptcp_info fields Geliang Tang
` (2 preceding siblings ...)
2023-05-06 5:08 ` [PATCH mptcp-next v12 03/12] mptcp: export remove_anno_list_by_saddr Geliang Tang
@ 2023-05-06 5:08 ` Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 05/12] selftests: mptcp: update userspace pm subflow tests Geliang Tang
` (7 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2023-05-06 5:08 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Add the address into userspace_pm_local_addr_list when the subflow is
created. Make sure it can be found in mptcp_nl_cmd_remove(). And delete
it in the new helper mptcp_userspace_pm_delete_local_addr().
Add address into pm anno_list in mptcp_nl_cmd_sf_create(). Remove
it when connecting fails.
By doing this, the "REMOVE" command also works with subflows that have
been created via the "SUB_CREATE" command instead of restricting to
the addresses that have been announced via the "ANNOUNCE" command.
Fixes: d9a4594edabf ("mptcp: netlink: Add MPTCP_PM_CMD_REMOVE")
Link: https://github.com/multipath-tcp/mptcp_net-next/issues/379
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/pm_userspace.c | 52 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index 6beadea8c67d..ec26a3f0bc64 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -79,6 +79,25 @@ static int mptcp_userspace_pm_append_new_local_addr(struct mptcp_sock *msk,
return ret;
}
+static int mptcp_userspace_pm_delete_local_addr(struct mptcp_sock *msk,
+ struct mptcp_pm_addr_entry *addr)
+{
+ struct mptcp_pm_addr_entry *entry, *tmp;
+
+ list_for_each_entry_safe(entry, tmp, &msk->pm.userspace_pm_local_addr_list, list) {
+ if (mptcp_addresses_equal(&entry->addr, &addr->addr, false)) {
+ /* TODO: a refcount is needed because the entry can
+ * be used multiple times (e.g. fullmesh mode).
+ */
+ list_del_rcu(&entry->list);
+ kfree(entry);
+ return 0;
+ }
+ }
+
+ return -EINVAL;
+}
+
int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk,
unsigned int id,
u8 *flags, int *ifindex)
@@ -246,11 +265,17 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info)
return err;
}
+/* If the subflow is closed from the other peer (not via a
+ * subflow destroy command then), we want to keep the entry
+ * not to assign the same ID to another address and to be
+ * able to send RM_ADDR after the removal of the subflow.
+ */
int mptcp_nl_cmd_sf_create(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 mptcp_pm_addr_entry local = { 0 };
struct mptcp_addr_info addr_r;
struct mptcp_addr_info addr_l;
struct mptcp_sock *msk;
@@ -302,12 +327,35 @@ int mptcp_nl_cmd_sf_create(struct sk_buff *skb, struct genl_info *info)
goto create_err;
}
+ local.addr = addr_l;
+ err = mptcp_userspace_pm_append_new_local_addr(msk, &local);
+ if (err < 0) {
+ GENL_SET_ERR_MSG(info, "did not match address and id");
+ goto create_err;
+ }
+
+ spin_lock_bh(&msk->pm.lock);
+ if (!mptcp_pm_alloc_anno_list(msk, &local)) {
+ GENL_SET_ERR_MSG(info, "cannot alloc address list");
+ err = -EINVAL;
+ goto anno_list_err;
+ }
+ spin_unlock_bh(&msk->pm.lock);
+
lock_sock(sk);
err = __mptcp_subflow_connect(sk, &addr_l, &addr_r);
release_sock(sk);
+ if (err) {
+ spin_lock_bh(&msk->pm.lock);
+ mptcp_pm_remove_anno_list_by_saddr(msk, &addr_l);
+anno_list_err:
+ mptcp_userspace_pm_delete_local_addr(msk, &local);
+ spin_unlock_bh(&msk->pm.lock);
+ }
+
create_err:
sock_put((struct sock *)msk);
return err;
@@ -420,7 +468,11 @@ 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 = { .addr = addr_l };
+ spin_lock_bh(&msk->pm.lock);
+ mptcp_userspace_pm_delete_local_addr(msk, &entry);
+ spin_unlock_bh(&msk->pm.lock);
mptcp_subflow_shutdown(sk, ssk, RCV_SHUTDOWN | SEND_SHUTDOWN);
mptcp_close_ssk(sk, ssk, subflow);
MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_RMSUBFLOW);
--
2.35.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v12 05/12] selftests: mptcp: update userspace pm subflow tests
2023-05-06 5:08 [PATCH mptcp-next v12 00/12] update userspace pm mptcp_info fields Geliang Tang
` (3 preceding siblings ...)
2023-05-06 5:08 ` [PATCH mptcp-next v12 04/12] mptcp: add addr into userspace pm list Geliang Tang
@ 2023-05-06 5:08 ` Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 06/12] mptcp: update userspace pm infos Geliang Tang
` (6 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2023-05-06 5:08 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
To align with what is done by the in-kernel PM, update userspace pm
subflow selftests, by sending the a remove_addrs command together
before the remove_subflows command. This will get a RM_ADDR in
chk_rm_nr().
Fixes: d9a4594edabf ("mptcp: netlink: Add MPTCP_PM_CMD_REMOVE")
Fixes: 5e986ec46874 ("selftests: mptcp: userspace pm subflow tests")
Link: https://github.com/multipath-tcp/mptcp_net-next/issues/379
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index cb0ae133f5ed..2dee1c6ea932 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -937,6 +937,7 @@ do_transfer()
sleep 1
sp=$(grep "type:10" "$evts_ns2" |
sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
+ ip netns exec ${connector_ns} ./pm_nl_ctl rem token $tk id $id
ip netns exec ${connector_ns} ./pm_nl_ctl dsf lip $addr lport $sp \
rip $da rport $dp token $tk
fi
@@ -3152,7 +3153,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] 14+ messages in thread
* [PATCH mptcp-next v12 06/12] mptcp: update userspace pm infos
2023-05-06 5:08 [PATCH mptcp-next v12 00/12] update userspace pm mptcp_info fields Geliang Tang
` (4 preceding siblings ...)
2023-05-06 5:08 ` [PATCH mptcp-next v12 05/12] selftests: mptcp: update userspace pm subflow tests Geliang Tang
@ 2023-05-06 5:08 ` Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 07/12] selftests: mptcp: test userspace pm out of transfer Geliang Tang
` (5 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2023-05-06 5:08 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.
Increase add_addr_signaled counter in mptcp_nl_cmd_announce() when the
address is announced by userspace PM.
This modification is similar to how the in-kernel PM is updating the
counter: when additional subflows are created/removed.
Fixes: 9ab4807c84a4 ("mptcp: netlink: Add MPTCP_PM_CMD_ANNOUNCE")
Fixes: 702c2f646d42 ("mptcp: netlink: allow userspace-driven subflow establishment")
Link: https://github.com/multipath-tcp/mptcp_net-next/issues/329
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/pm.c | 23 +++++++++++++++++++----
net/mptcp/pm_userspace.c | 9 ++++++++-
2 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
index 7539137719ef..e7f944d09fcd 100644
--- a/net/mptcp/pm.c
+++ b/net/mptcp/pm.c
@@ -89,8 +89,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);
@@ -183,8 +190,16 @@ 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);
+ update_subflows = subflow->request_join || subflow->mp_join;
+ if (mptcp_pm_is_userspace(msk)) {
+ if (update_subflows) {
+ spin_lock_bh(&pm->lock);
+ pm->subflows--;
+ spin_unlock_bh(&pm->lock);
+ }
+ return;
+ }
+
if (!READ_ONCE(pm->work_pending) && !update_subflows)
return;
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index ec26a3f0bc64..df09ebcc7a35 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -69,6 +69,7 @@ static int mptcp_userspace_pm_append_new_local_addr(struct mptcp_sock *msk,
MPTCP_PM_MAX_ADDR_ID + 1,
1);
list_add_tail_rcu(&e->list, &msk->pm.userspace_pm_local_addr_list);
+ msk->pm.local_addr_used++;
ret = e->addr.id;
} else if (match) {
ret = entry->addr.id;
@@ -89,6 +90,7 @@ static int mptcp_userspace_pm_delete_local_addr(struct mptcp_sock *msk,
/* TODO: a refcount is needed because the entry can
* be used multiple times (e.g. fullmesh mode).
*/
+ msk->pm.local_addr_used--;
list_del_rcu(&entry->list);
kfree(entry);
return 0;
@@ -190,6 +192,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);
}
@@ -348,7 +351,11 @@ int mptcp_nl_cmd_sf_create(struct sk_buff *skb, struct genl_info *info)
release_sock(sk);
- if (err) {
+ if (!err) {
+ spin_lock_bh(&msk->pm.lock);
+ msk->pm.subflows++;
+ spin_unlock_bh(&msk->pm.lock);
+ } else {
spin_lock_bh(&msk->pm.lock);
mptcp_pm_remove_anno_list_by_saddr(msk, &addr_l);
anno_list_err:
--
2.35.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v12 07/12] selftests: mptcp: test userspace pm out of transfer
2023-05-06 5:08 [PATCH mptcp-next v12 00/12] update userspace pm mptcp_info fields Geliang Tang
` (5 preceding siblings ...)
2023-05-06 5:08 ` [PATCH mptcp-next v12 06/12] mptcp: update userspace pm infos Geliang Tang
@ 2023-05-06 5:08 ` Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 08/12] selftests: mptcp: check subflows infos Geliang Tang
` (4 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2023-05-06 5:08 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch moves userspace pm tests out of do_transfer(). Move add
addrese test into a new function userspace_pm_add_addr(), and remove
address test into userspace_pm_rm_addr(). Move add subflow test into
userspace_pm_add_sf() and remove subflow into userspace_pm_rm_sf().
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
.../testing/selftests/net/mptcp/mptcp_join.sh | 123 +++++++++++-------
1 file changed, 77 insertions(+), 46 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 2dee1c6ea932..92b226260ed9 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -723,7 +723,6 @@ do_transfer()
local port=$((10000 + TEST_COUNT - 1))
local cappid
- local userspace_pm=0
:> "$cout"
:> "$sout"
@@ -760,11 +759,6 @@ do_transfer()
extra_args="-r ${speed:6}"
fi
- if [[ "${addr_nr_ns1}" = "userspace_"* ]]; then
- userspace_pm=1
- addr_nr_ns1=${addr_nr_ns1:10}
- fi
-
local flags="subflow"
local extra_cl_args=""
local extra_srv_args=""
@@ -792,9 +786,6 @@ do_transfer()
return 1
fi
addr_nr_ns2=0
- elif [[ "${addr_nr_ns2}" = "userspace_"* ]]; then
- userspace_pm=1
- addr_nr_ns2=${addr_nr_ns2:10}
elif [[ "${addr_nr_ns2}" = "fullmesh_"* ]]; then
flags="${flags},fullmesh"
addr_nr_ns2=${addr_nr_ns2:9}
@@ -848,7 +839,6 @@ do_transfer()
local counter=2
local add_nr_ns1=${addr_nr_ns1}
local id=10
- local tk
while [ $add_nr_ns1 -gt 0 ]; do
local addr
if is_v6 "${connect_addr}"; then
@@ -856,24 +846,7 @@ do_transfer()
else
addr="10.0.$counter.1"
fi
- if [ $userspace_pm -eq 0 ]; then
- pm_nl_add_endpoint $ns1 $addr flags signal
- else
- 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
- sleep 1
- ip netns exec ${listener_ns} ./pm_nl_ctl rem token $tk id $id
- sp=$(grep "type:10" "$evts_ns1" |
- sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
- da=$(grep "type:10" "$evts_ns1" |
- sed -n 's/.*\(daddr6:\)\([0-9a-f:.]*\).*$/\2/p;q')
- dp=$(grep "type:10" "$evts_ns1" |
- sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q')
- ip netns exec ${listener_ns} ./pm_nl_ctl dsf lip "::ffff:$addr" \
- lport $sp rip $da rport $dp token $tk
- fi
-
+ pm_nl_add_endpoint $ns1 $addr flags signal
counter=$((counter + 1))
add_nr_ns1=$((add_nr_ns1 - 1))
id=$((id + 1))
@@ -918,7 +891,6 @@ do_transfer()
local add_nr_ns2=${addr_nr_ns2}
local counter=3
local id=20
- local tk da dp sp
while [ $add_nr_ns2 -gt 0 ]; do
local addr
if is_v6 "${connect_addr}"; then
@@ -926,21 +898,7 @@ do_transfer()
else
addr="10.0.$counter.2"
fi
- if [ $userspace_pm -eq 0 ]; then
- pm_nl_add_endpoint $ns2 $addr flags $flags
- else
- tk=$(sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
- da=$(sed -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evts_ns2")
- 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
- sleep 1
- sp=$(grep "type:10" "$evts_ns2" |
- sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
- ip netns exec ${connector_ns} ./pm_nl_ctl rem token $tk id $id
- ip netns exec ${connector_ns} ./pm_nl_ctl dsf lip $addr lport $sp \
- rip $da rport $dp token $tk
- fi
+ pm_nl_add_endpoint $ns2 $addr flags $flags
counter=$((counter + 1))
add_nr_ns2=$((add_nr_ns2 - 1))
id=$((id + 1))
@@ -3069,6 +3027,65 @@ fail_tests()
fi
}
+userspace_pm_add_addr()
+{
+ local addr=$1
+ local id=$2
+ local tk
+
+ tk=$(grep "type:1," "$evts_ns1" |
+ sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q')
+ ip netns exec $ns1 ./pm_nl_ctl ann $addr token $tk id $id
+}
+
+userspace_pm_rm_addr()
+{
+ local addr=$1
+ local id=$2
+ local tk sp da dp
+
+ tk=$(grep "type:1," "$evts_ns1" |
+ sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q')
+ ip netns exec $ns1 ./pm_nl_ctl rem token $tk id $id
+ sp=$(grep "type:10" "$evts_ns1" |
+ sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
+ da=$(grep "type:10" "$evts_ns1" |
+ sed -n 's/.*\(daddr6:\)\([0-9a-f:.]*\).*$/\2/p;q')
+ dp=$(grep "type:10" "$evts_ns1" |
+ sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q')
+ ip netns exec $ns1 ./pm_nl_ctl dsf lip "::ffff:$addr" \
+ lport $sp rip $da rport $dp token $tk
+}
+
+userspace_pm_add_sf()
+{
+ local addr=$1
+ local id=$2
+ local tk da dp
+
+ tk=$(sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
+ da=$(sed -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evts_ns2")
+ dp=$(sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
+ ip netns exec $ns2 ./pm_nl_ctl csf lip $addr lid $id \
+ rip $da rport $dp token $tk
+}
+
+userspace_pm_rm_sf()
+{
+ local addr=$1
+ local id=$2
+ local tk da dp sp
+
+ tk=$(sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
+ da=$(sed -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evts_ns2")
+ dp=$(sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2")
+ sp=$(grep "type:10" "$evts_ns2" |
+ sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q')
+ ip netns exec $ns2 ./pm_nl_ctl rem token $tk id $id
+ ip netns exec $ns2 ./pm_nl_ctl dsf lip $addr lport $sp \
+ rip $da rport $dp token $tk
+}
+
userspace_tests()
{
# userspace pm type prevents add_addr
@@ -3140,21 +3157,35 @@ userspace_tests()
if reset_with_events "userspace pm add & remove address"; then
set_userspace_pm $ns1
pm_nl_set_limits $ns2 1 1
- run_tests $ns1 $ns2 10.0.1.1 0 userspace_1 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow 2>/dev/null &
+ wait_mpj $ns1
+ userspace_pm_add_addr 10.0.2.1 10
+ sleep 1
chk_join_nr 1 1 1
chk_add_nr 1 1
+ sleep 0.5
+ userspace_pm_rm_addr 10.0.2.1 10
+ wait_rm_addr $ns1 1
chk_rm_nr 1 1 invert
kill_events_pids
+ kill_tests_wait
fi
# userspace pm create destroy subflow
if reset_with_events "userspace pm create destroy subflow"; then
set_userspace_pm $ns2
pm_nl_set_limits $ns1 0 1
- run_tests $ns1 $ns2 10.0.1.1 0 0 userspace_1 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow 2>/dev/null &
+ wait_mpj $ns2
+ userspace_pm_add_sf 10.0.3.2 20
+ sleep 1
chk_join_nr 1 1 1
+ sleep 0.5
+ userspace_pm_rm_sf 10.0.3.2 20
+ wait_rm_addr $ns2 1
chk_rm_nr 1 1
kill_events_pids
+ kill_tests_wait
fi
}
--
2.35.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v12 08/12] selftests: mptcp: check subflows infos
2023-05-06 5:08 [PATCH mptcp-next v12 00/12] update userspace pm mptcp_info fields Geliang Tang
` (6 preceding siblings ...)
2023-05-06 5:08 ` [PATCH mptcp-next v12 07/12] selftests: mptcp: test userspace pm out of transfer Geliang Tang
@ 2023-05-06 5:08 ` Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 09/12] selftests: mptcp: check add_addr infos Geliang Tang
` (3 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2023-05-06 5:08 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch invokes chk_mptcp_info() to check subflows infos of userspace
PM tests and endpoint tests.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 92b226260ed9..e0ae26670809 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -3164,9 +3164,11 @@ userspace_tests()
chk_join_nr 1 1 1
chk_add_nr 1 1
sleep 0.5
+ chk_mptcp_info subflows_1
userspace_pm_rm_addr 10.0.2.1 10
wait_rm_addr $ns1 1
chk_rm_nr 1 1 invert
+ chk_mptcp_info subflows_0
kill_events_pids
kill_tests_wait
fi
@@ -3181,9 +3183,11 @@ userspace_tests()
sleep 1
chk_join_nr 1 1 1
sleep 0.5
+ chk_mptcp_info subflows_1
userspace_pm_rm_sf 10.0.3.2 20
wait_rm_addr $ns2 1
chk_rm_nr 1 1
+ chk_mptcp_info subflows_0
kill_events_pids
kill_tests_wait
fi
@@ -3201,14 +3205,21 @@ endpoint_tests()
wait_mpj $ns1
pm_nl_check_endpoint 1 "creation" \
$ns2 10.0.2.2 id 1 flags implicit
+ chk_mptcp_info subflows_1
pm_nl_add_endpoint $ns2 10.0.2.2 id 33
pm_nl_check_endpoint 0 "ID change is prevented" \
$ns2 10.0.2.2 id 1 flags implicit
+ chk_mptcp_info subflows_1
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
+ wait_rm_addr ${ns2} 1
+ chk_mptcp_info subflows_0
kill_tests_wait
fi
--
2.35.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v12 09/12] selftests: mptcp: check add_addr infos
2023-05-06 5:08 [PATCH mptcp-next v12 00/12] update userspace pm mptcp_info fields Geliang Tang
` (7 preceding siblings ...)
2023-05-06 5:08 ` [PATCH mptcp-next v12 08/12] selftests: mptcp: check subflows infos Geliang Tang
@ 2023-05-06 5:08 ` Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 10/12] mptcp: pass addr to mptcp_pm_alloc_anno_list Geliang Tang
` (2 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2023-05-06 5:08 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch checks add_addr_signal and add_addr_accepted in
chk_mptcp_info(), and do this checks in userspace_tests()
and endpoint_tests().
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
.../testing/selftests/net/mptcp/mptcp_join.sh | 26 ++++++++++++-------
1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index e0ae26670809..2973a4ca0833 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -1707,13 +1707,17 @@ chk_subflow_nr()
chk_mptcp_info()
{
local nr_info=$1
- local info
- local cnt1
- local cnt2
+ local info1 info2
+ local cnt1 cnt2
local dump_stats
if [[ $nr_info = "subflows_"* ]]; then
- info="subflows"
+ info1="subflows"
+ info2="subflows"
+ nr_info=${nr_info:9}
+ elif [[ $nr_info = "add_addr_"* ]]; then
+ info1="add_addr_signal"
+ info2="add_addr_accepted"
nr_info=${nr_info:9}
else
echo "[fail] unsupported argument: $nr_info"
@@ -1721,16 +1725,16 @@ chk_mptcp_info()
return 1
fi
- printf "%-${nr_blank}s %-30s" " " "mptcp_info $info=$nr_info"
+ printf "%-${nr_blank}s %-30s" " " "mptcp_info $info1:$info2=$nr_info"
- cnt1=$(ss -N $ns1 -inmHM | grep "$info:" |
- sed -n 's/.*\('"$info"':\)\([[:digit:]]*\).*$/\2/p;q')
+ cnt1=$(ss -N $ns1 -inmHM | grep "$info1:" |
+ sed -n 's/.*\('"$info1"':\)\([[:digit:]]*\).*$/\2/p;q')
[ -z "$cnt1" ] && cnt1=0
- cnt2=$(ss -N $ns2 -inmHM | grep "$info:" |
- sed -n 's/.*\('"$info"':\)\([[:digit:]]*\).*$/\2/p;q')
+ cnt2=$(ss -N $ns2 -inmHM | grep "$info2:" |
+ sed -n 's/.*\('"$info2"':\)\([[:digit:]]*\).*$/\2/p;q')
[ -z "$cnt2" ] && cnt2=0
if [ "$cnt1" != "$nr_info" ] || [ "$cnt2" != "$nr_info" ]; then
- echo "[fail] got $cnt1:$cnt2 $info expected $nr_info"
+ echo "[fail] got $cnt1:$cnt2 $info1:$info2 expected $nr_info"
fail_test
dump_stats=1
else
@@ -3165,6 +3169,7 @@ userspace_tests()
chk_add_nr 1 1
sleep 0.5
chk_mptcp_info subflows_1
+ chk_mptcp_info add_addr_1
userspace_pm_rm_addr 10.0.2.1 10
wait_rm_addr $ns1 1
chk_rm_nr 1 1 invert
@@ -3206,6 +3211,7 @@ endpoint_tests()
pm_nl_check_endpoint 1 "creation" \
$ns2 10.0.2.2 id 1 flags implicit
chk_mptcp_info subflows_1
+ chk_mptcp_info add_addr_1
pm_nl_add_endpoint $ns2 10.0.2.2 id 33
pm_nl_check_endpoint 0 "ID change is prevented" \
--
2.35.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v12 10/12] mptcp: pass addr to mptcp_pm_alloc_anno_list
2023-05-06 5:08 [PATCH mptcp-next v12 00/12] update userspace pm mptcp_info fields Geliang Tang
` (8 preceding siblings ...)
2023-05-06 5:08 ` [PATCH mptcp-next v12 09/12] selftests: mptcp: check add_addr infos Geliang Tang
@ 2023-05-06 5:08 ` Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 11/12] selftests: mptcp: pass fastclose to sflags Geliang Tang
2023-05-06 5:09 ` [PATCH mptcp-next v12 12/12] selftests: mptcp: do endpoint manipulation out of transfer Geliang Tang
11 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2023-05-06 5:08 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Pass addr parameter to mptcp_pm_alloc_anno_list() instead of entry. We
can reduce the scope, e.g. in mptcp_pm_alloc_anno_list(), we only access
"entry->addr", we can then restrict to the pointer to "addr" then.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
net/mptcp/pm_netlink.c | 8 ++++----
net/mptcp/pm_userspace.c | 4 ++--
net/mptcp/protocol.h | 2 +-
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 0b34b57fc8bc..ac68c8a5b8ae 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 df09ebcc7a35..c15cb751e25e 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -191,7 +191,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)) {
msk->pm.add_addr_signaled++;
mptcp_pm_announce_addr(msk, &addr_val.addr, false);
mptcp_pm_nl_addr_send_ack(msk);
@@ -338,7 +338,7 @@ int mptcp_nl_cmd_sf_create(struct sk_buff *skb, struct genl_info *info)
}
spin_lock_bh(&msk->pm.lock);
- if (!mptcp_pm_alloc_anno_list(msk, &local)) {
+ if (!mptcp_pm_alloc_anno_list(msk, &local.addr)) {
GENL_SET_ERR_MSG(info, "cannot alloc address list");
err = -EINVAL;
goto anno_list_err;
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index bfa7d93a1c1a..c08d05f48372 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] 14+ messages in thread
* [PATCH mptcp-next v12 11/12] selftests: mptcp: pass fastclose to sflags
2023-05-06 5:08 [PATCH mptcp-next v12 00/12] update userspace pm mptcp_info fields Geliang Tang
` (9 preceding siblings ...)
2023-05-06 5:08 ` [PATCH mptcp-next v12 10/12] mptcp: pass addr to mptcp_pm_alloc_anno_list Geliang Tang
@ 2023-05-06 5:08 ` Geliang Tang
2023-05-06 5:09 ` [PATCH mptcp-next v12 12/12] selftests: mptcp: do endpoint manipulation out of transfer Geliang Tang
11 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2023-05-06 5:08 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
Pass fastclose flag to the sflags argument instead of addr_nr_ns2.
Then addr_nr_ns1 and addr_nr_ns2 can be removed in the next commit.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
tools/testing/selftests/net/mptcp/mptcp_join.sh | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 2973a4ca0833..6c4c1dc817f5 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -763,7 +763,7 @@ do_transfer()
local extra_cl_args=""
local extra_srv_args=""
local trunc_size=""
- if [[ "${addr_nr_ns2}" = "fastclose_"* ]]; then
+ if [[ "${sflags}" = "fastclose_"* ]]; then
if [ ${test_link_fail} -le 1 ]; then
echo "fastclose tests need test_link_fail argument"
fail_test
@@ -772,7 +772,7 @@ do_transfer()
# disconnect
trunc_size=${test_link_fail}
- local side=${addr_nr_ns2:10}
+ local side=${sflags:10}
if [ ${side} = "client" ]; then
extra_cl_args="-f ${test_link_fail}"
@@ -785,8 +785,9 @@ do_transfer()
fail_test
return 1
fi
- addr_nr_ns2=0
- elif [[ "${addr_nr_ns2}" = "fullmesh_"* ]]; then
+ sflags=0
+ fi
+ if [[ "${addr_nr_ns2}" = "fullmesh_"* ]]; then
flags="${flags},fullmesh"
addr_nr_ns2=${addr_nr_ns2:9}
fi
@@ -2990,14 +2991,14 @@ fullmesh_tests()
fastclose_tests()
{
if reset "fastclose test"; then
- run_tests $ns1 $ns2 10.0.1.1 1024 0 fastclose_client
+ run_tests $ns1 $ns2 10.0.1.1 1024 0 0 fast fastclose_client
chk_join_nr 0 0 0
chk_fclose_nr 1 1
chk_rst_nr 1 1 invert
fi
if reset "fastclose server test"; then
- run_tests $ns1 $ns2 10.0.1.1 1024 0 fastclose_server
+ run_tests $ns1 $ns2 10.0.1.1 1024 0 0 fast fastclose_server
chk_join_nr 0 0 0
chk_fclose_nr 1 1 invert
chk_rst_nr 1 1
--
2.35.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v12 12/12] selftests: mptcp: do endpoint manipulation out of transfer
2023-05-06 5:08 [PATCH mptcp-next v12 00/12] update userspace pm mptcp_info fields Geliang Tang
` (10 preceding siblings ...)
2023-05-06 5:08 ` [PATCH mptcp-next v12 11/12] selftests: mptcp: pass fastclose to sflags Geliang Tang
@ 2023-05-06 5:09 ` Geliang Tang
2023-05-06 6:04 ` selftests: mptcp: do endpoint manipulation out of transfer: Tests Results MPTCP CI
11 siblings, 1 reply; 14+ messages in thread
From: Geliang Tang @ 2023-05-06 5:09 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch moves endpoint manipulation out of do_transfer() into a new
function endpoint_manipulation(), then addr_nr_ns1 and addr_nr_ns2
arguments can be removed for do_transfer() and run_tests().
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
.../testing/selftests/net/mptcp/mptcp_join.sh | 525 +++++++++++-------
1 file changed, 309 insertions(+), 216 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 6c4c1dc817f5..1f04a9627ece 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -716,10 +716,8 @@ do_transfer()
local srv_proto="$4"
local connect_addr="$5"
local test_link_fail="$6"
- local addr_nr_ns1="$7"
- local addr_nr_ns2="$8"
- local speed="$9"
- local sflags="${10}"
+ local speed="$7"
+ local sflags="${8}"
local port=$((10000 + TEST_COUNT - 1))
local cappid
@@ -759,7 +757,6 @@ do_transfer()
extra_args="-r ${speed:6}"
fi
- local flags="subflow"
local extra_cl_args=""
local extra_srv_args=""
local trunc_size=""
@@ -785,11 +782,6 @@ do_transfer()
fail_test
return 1
fi
- sflags=0
- fi
- if [[ "${addr_nr_ns2}" = "fullmesh_"* ]]; then
- flags="${flags},fullmesh"
- addr_nr_ns2=${addr_nr_ns2:9}
fi
extra_srv_args="$extra_args $extra_srv_args"
@@ -830,145 +822,6 @@ do_transfer()
fi
local cpid=$!
- # let the mptcp subflow be established in background before
- # do endpoint manipulation
- if [ $addr_nr_ns1 != "0" ] || [ $addr_nr_ns2 != "0" ]; then
- sleep 1
- fi
-
- if [ $addr_nr_ns1 -gt 0 ]; then
- local counter=2
- local add_nr_ns1=${addr_nr_ns1}
- local id=10
- while [ $add_nr_ns1 -gt 0 ]; do
- local addr
- if is_v6 "${connect_addr}"; then
- addr="dead:beef:$counter::1"
- else
- addr="10.0.$counter.1"
- fi
- pm_nl_add_endpoint $ns1 $addr flags signal
- counter=$((counter + 1))
- add_nr_ns1=$((add_nr_ns1 - 1))
- id=$((id + 1))
- done
- elif [ $addr_nr_ns1 -lt 0 ]; then
- local rm_nr_ns1=$((-addr_nr_ns1))
- if [ $rm_nr_ns1 -lt 8 ]; then
- local counter=0
- local line
- pm_nl_show_endpoints ${listener_ns} | while read -r line; do
- # shellcheck disable=SC2206 # we do want to split per word
- local arr=($line)
- local nr=0
-
- local i
- for i in "${arr[@]}"; do
- if [ $i = "id" ]; then
- if [ $counter -eq $rm_nr_ns1 ]; then
- break
- fi
- id=${arr[$nr+1]}
- rm_addr=$(rm_addr_count ${connector_ns})
- pm_nl_del_endpoint ${listener_ns} $id
- wait_rm_addr ${connector_ns} ${rm_addr}
- counter=$((counter + 1))
- fi
- nr=$((nr + 1))
- done
- done
- elif [ $rm_nr_ns1 -eq 8 ]; then
- pm_nl_flush_endpoint ${listener_ns}
- elif [ $rm_nr_ns1 -eq 9 ]; then
- pm_nl_del_endpoint ${listener_ns} 0 ${connect_addr}
- fi
- fi
-
- # if newly added endpoints must be deleted, give the background msk
- # some time to created them
- [ $addr_nr_ns1 -gt 0 ] && [ $addr_nr_ns2 -lt 0 ] && sleep 1
-
- if [ $addr_nr_ns2 -gt 0 ]; then
- local add_nr_ns2=${addr_nr_ns2}
- local counter=3
- local id=20
- while [ $add_nr_ns2 -gt 0 ]; do
- local addr
- if is_v6 "${connect_addr}"; then
- addr="dead:beef:$counter::2"
- else
- addr="10.0.$counter.2"
- fi
- pm_nl_add_endpoint $ns2 $addr flags $flags
- counter=$((counter + 1))
- add_nr_ns2=$((add_nr_ns2 - 1))
- id=$((id + 1))
- done
- elif [ $addr_nr_ns2 -lt 0 ]; then
- local rm_nr_ns2=$((-addr_nr_ns2))
- if [ $rm_nr_ns2 -lt 8 ]; then
- local counter=0
- local line
- pm_nl_show_endpoints ${connector_ns} | while read -r line; do
- # shellcheck disable=SC2206 # we do want to split per word
- local arr=($line)
- local nr=0
-
- local i
- for i in "${arr[@]}"; do
- if [ $i = "id" ]; then
- if [ $counter -eq $rm_nr_ns2 ]; then
- break
- fi
- local id rm_addr
- # rm_addr are serialized, allow the previous one to
- # complete
- id=${arr[$nr+1]}
- rm_addr=$(rm_addr_count ${listener_ns})
- pm_nl_del_endpoint ${connector_ns} $id
- wait_rm_addr ${listener_ns} ${rm_addr}
- counter=$((counter + 1))
- fi
- nr=$((nr + 1))
- done
- done
- elif [ $rm_nr_ns2 -eq 8 ]; then
- pm_nl_flush_endpoint ${connector_ns}
- elif [ $rm_nr_ns2 -eq 9 ]; then
- local addr
- if is_v6 "${connect_addr}"; then
- addr="dead:beef:1::2"
- else
- addr="10.0.1.2"
- fi
- pm_nl_del_endpoint ${connector_ns} 0 $addr
- fi
- fi
-
- if [ -n "${sflags}" ]; then
- sleep 1
-
- local netns
- for netns in "$ns1" "$ns2"; do
- local line
- pm_nl_show_endpoints $netns | while read -r line; do
- # shellcheck disable=SC2206 # we do want to split per word
- local arr=($line)
- local nr=0
- local id
-
- local i
- for i in "${arr[@]}"; do
- if [ $i = "id" ]; then
- id=${arr[$nr+1]}
- fi
- nr=$((nr + 1))
- done
- pm_nl_change_endpoint $netns $id $sflags
- done
- done
- fi
-
wait $cpid
local retc=$?
wait $spid
@@ -1038,10 +891,8 @@ run_tests()
local connector_ns="$2"
local connect_addr="$3"
local test_linkfail="${4:-0}"
- local addr_nr_ns1="${5:-0}"
- local addr_nr_ns2="${6:-0}"
- local speed="${7:-fast}"
- local sflags="${8:-""}"
+ local speed="${5:-fast}"
+ local sflags="${6:-""}"
local size
@@ -1086,7 +937,7 @@ run_tests()
fi
do_transfer ${listener_ns} ${connector_ns} MPTCP MPTCP ${connect_addr} \
- ${test_linkfail} ${addr_nr_ns1} ${addr_nr_ns2} ${speed} ${sflags}
+ ${test_linkfail} ${speed} ${sflags}
}
dump_stats()
@@ -1796,6 +1647,159 @@ set_userspace_pm()
ip netns exec $ns sysctl -q net.mptcp.pm_type=1
}
+endpoint_manipulation()
+{
+ local connect_addr="$1"
+ local addr_nr_ns1="$2"
+ local addr_nr_ns2="${3:-0}"
+ local sflags="${4:-""}"
+
+ local flags="subflow"
+ if [[ "${addr_nr_ns2}" = "fullmesh_"* ]]; then
+ flags="${flags},fullmesh"
+ addr_nr_ns2=${addr_nr_ns2:9}
+ fi
+
+ # let the mptcp subflow be established in background before
+ # do endpoint manipulation
+ if [ $addr_nr_ns1 != "0" ] || [ $addr_nr_ns2 != "0" ]; then
+ sleep 1
+ fi
+
+ if [ $addr_nr_ns1 -gt 0 ]; then
+ local counter=2
+ local add_nr_ns1=${addr_nr_ns1}
+ local id=10
+ while [ $add_nr_ns1 -gt 0 ]; do
+ local addr
+ if is_v6 "${connect_addr}"; then
+ addr="dead:beef:$counter::1"
+ else
+ addr="10.0.$counter.1"
+ fi
+ pm_nl_add_endpoint $ns1 $addr flags signal
+ counter=$((counter + 1))
+ add_nr_ns1=$((add_nr_ns1 - 1))
+ id=$((id + 1))
+ done
+ elif [ $addr_nr_ns1 -lt 0 ]; then
+ local rm_nr_ns1=$((-addr_nr_ns1))
+ if [ $rm_nr_ns1 -lt 8 ]; then
+ local counter=0
+ local line
+ pm_nl_show_endpoints $ns1 | while read -r line; do
+ # shellcheck disable=SC2206 # we do want to split per word
+ local arr=($line)
+ local nr=0
+
+ local i
+ for i in "${arr[@]}"; do
+ if [ $i = "id" ]; then
+ if [ $counter -eq $rm_nr_ns1 ]; then
+ break
+ fi
+ id=${arr[$nr+1]}
+ rm_addr=$(rm_addr_count $ns2)
+ pm_nl_del_endpoint $ns1 $id
+ wait_rm_addr $ns2 ${rm_addr}
+ counter=$((counter + 1))
+ fi
+ nr=$((nr + 1))
+ done
+ done
+ elif [ $rm_nr_ns1 -eq 8 ]; then
+ pm_nl_flush_endpoint $ns1
+ elif [ $rm_nr_ns1 -eq 9 ]; then
+ pm_nl_del_endpoint $ns1 0 ${connect_addr}
+ fi
+ fi
+
+ # if newly added endpoints must be deleted, give the background msk
+ # some time to created them
+ [ $addr_nr_ns1 -gt 0 ] && [ $addr_nr_ns2 -lt 0 ] && sleep 1
+
+ if [ $addr_nr_ns2 -gt 0 ]; then
+ local add_nr_ns2=${addr_nr_ns2}
+ local counter=3
+ local id=20
+ while [ $add_nr_ns2 -gt 0 ]; do
+ local addr
+ if is_v6 "${connect_addr}"; then
+ addr="dead:beef:$counter::2"
+ else
+ addr="10.0.$counter.2"
+ fi
+ pm_nl_add_endpoint $ns2 $addr flags $flags
+ counter=$((counter + 1))
+ add_nr_ns2=$((add_nr_ns2 - 1))
+ id=$((id + 1))
+ done
+ elif [ $addr_nr_ns2 -lt 0 ]; then
+ local rm_nr_ns2=$((-addr_nr_ns2))
+ if [ $rm_nr_ns2 -lt 8 ]; then
+ local counter=0
+ local line
+ pm_nl_show_endpoints $ns2 | while read -r line; do
+ # shellcheck disable=SC2206 # we do want to split per word
+ local arr=($line)
+ local nr=0
+
+ local i
+ for i in "${arr[@]}"; do
+ if [ $i = "id" ]; then
+ if [ $counter -eq $rm_nr_ns2 ]; then
+ break
+ fi
+ local id rm_addr
+ # rm_addr are serialized, allow the previous one to
+ # complete
+ id=${arr[$nr+1]}
+ rm_addr=$(rm_addr_count $ns1)
+ pm_nl_del_endpoint $ns2 $id
+ wait_rm_addr $ns1 ${rm_addr}
+ counter=$((counter + 1))
+ fi
+ nr=$((nr + 1))
+ done
+ done
+ elif [ $rm_nr_ns2 -eq 8 ]; then
+ pm_nl_flush_endpoint $ns2
+ elif [ $rm_nr_ns2 -eq 9 ]; then
+ local addr
+ if is_v6 "${connect_addr}"; then
+ addr="dead:beef:1::2"
+ else
+ addr="10.0.1.2"
+ fi
+ pm_nl_del_endpoint $ns2 0 $addr
+ fi
+ fi
+
+ if [ -n "${sflags}" ]; then
+ sleep 1
+
+ local netns
+ for netns in "$ns1" "$ns2"; do
+ local line
+ pm_nl_show_endpoints $netns | while read -r line; do
+ # shellcheck disable=SC2206 # we do want to split per word
+ local arr=($line)
+ local nr=0
+ local id
+
+ local i
+ for i in "${arr[@]}"; do
+ if [ $i = "id" ]; then
+ id=${arr[$nr+1]}
+ fi
+ nr=$((nr + 1))
+ done
+ pm_nl_change_endpoint $netns $id $sflags
+ done
+ done
+ fi
+}
+
subflows_tests()
{
if reset "no JOIN"; then
@@ -1868,7 +1872,7 @@ subflows_error_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_set_limits $ns2 0 1
pm_nl_add_endpoint $ns2 10.0.1.2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow
chk_join_nr 0 0 0
fi
@@ -1879,7 +1883,7 @@ subflows_error_tests()
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow
filter_tcp_from $ns1 10.0.3.2 REJECT
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow
chk_join_nr 1 1 1
fi
@@ -1890,7 +1894,7 @@ subflows_error_tests()
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow
filter_tcp_from $ns1 10.0.3.2 DROP
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow
chk_join_nr 1 1 1
fi
@@ -1902,7 +1906,7 @@ subflows_error_tests()
pm_nl_set_limits $ns2 0 1
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
filter_tcp_from $ns1 10.0.3.2 REJECT
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow &
+ run_tests $ns1 $ns2 10.0.1.1 0 slow &
# mpj subflow will be in TW after the reset
wait_attempt_fail $ns2
@@ -2001,7 +2005,7 @@ signal_address_tests()
# the peer could possibly miss some addr notification, allow retransmission
ip netns exec $ns1 sysctl -q net.mptcp.add_addr_timeout=1
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow
chk_join_nr 3 3 3
# the server will not signal the address terminating
@@ -2102,7 +2106,7 @@ add_addr_timeout_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_set_limits $ns2 1 1
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow
chk_join_nr 1 1 1
chk_add_tx_nr 4 4
chk_add_nr 4 0
@@ -2113,7 +2117,7 @@ add_addr_timeout_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_set_limits $ns2 1 1
pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
- run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
+ run_tests $ns1 $ns2 dead:beef:1::1 0 slow
chk_join_nr 1 1 1
chk_add_nr 4 0
fi
@@ -2124,7 +2128,7 @@ add_addr_timeout_tests()
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal
pm_nl_set_limits $ns2 2 2
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 speed_10
+ run_tests $ns1 $ns2 10.0.1.1 0 speed_10
chk_join_nr 2 2 2
chk_add_nr 8 0
fi
@@ -2135,7 +2139,7 @@ add_addr_timeout_tests()
pm_nl_add_endpoint $ns1 10.0.12.1 flags signal
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal
pm_nl_set_limits $ns2 2 2
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 speed_10
+ run_tests $ns1 $ns2 10.0.1.1 0 speed_10
chk_join_nr 1 1 1
chk_add_nr 8 0
fi
@@ -2148,10 +2152,12 @@ remove_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_set_limits $ns2 0 1
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 0 0 -1 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 -1
chk_join_nr 1 1 1
chk_rm_tx_nr 1
chk_rm_nr 1 1
+ kill_tests_wait
fi
# multiple subflows, remove
@@ -2160,9 +2166,11 @@ remove_tests()
pm_nl_set_limits $ns2 0 2
pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 0 0 -2 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 -2
chk_join_nr 2 2 2
chk_rm_nr 2 2
+ kill_tests_wait
fi
# single address, remove
@@ -2170,10 +2178,12 @@ remove_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
pm_nl_set_limits $ns2 1 1
- run_tests $ns1 $ns2 10.0.1.1 0 -1 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 -1
chk_join_nr 1 1 1
chk_add_nr 1 1
chk_rm_nr 1 1 invert
+ kill_tests_wait
fi
# subflow and signal, remove
@@ -2182,10 +2192,12 @@ remove_tests()
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
pm_nl_set_limits $ns2 1 2
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 0 -1 -1 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 -1 -1
chk_join_nr 2 2 2
chk_add_nr 1 1
chk_rm_nr 1 1
+ kill_tests_wait
fi
# subflows and signal, remove
@@ -2195,10 +2207,12 @@ remove_tests()
pm_nl_set_limits $ns2 1 3
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 0 -1 -2 speed_10
+ run_tests $ns1 $ns2 10.0.1.1 0 speed_10 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 -1 -2
chk_join_nr 3 3 3
chk_add_nr 1 1
chk_rm_nr 2 2
+ kill_tests_wait
fi
# addresses remove
@@ -2208,10 +2222,12 @@ remove_tests()
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal
pm_nl_add_endpoint $ns1 10.0.4.1 flags signal
pm_nl_set_limits $ns2 3 3
- run_tests $ns1 $ns2 10.0.1.1 0 -3 0 speed_10
+ run_tests $ns1 $ns2 10.0.1.1 0 speed_10 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 -3
chk_join_nr 3 3 3
chk_add_nr 3 3
chk_rm_nr 3 3 invert
+ kill_tests_wait
fi
# invalid addresses remove
@@ -2221,10 +2237,12 @@ remove_tests()
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal
pm_nl_add_endpoint $ns1 10.0.14.1 flags signal
pm_nl_set_limits $ns2 3 3
- run_tests $ns1 $ns2 10.0.1.1 0 -3 0 speed_10
+ run_tests $ns1 $ns2 10.0.1.1 0 speed_10 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 -3
chk_join_nr 1 1 1
chk_add_nr 3 3
chk_rm_nr 3 1 invert
+ kill_tests_wait
fi
# subflows and signal, flush
@@ -2234,10 +2252,13 @@ remove_tests()
pm_nl_set_limits $ns2 1 3
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ wait_mpj $ns2
+ endpoint_manipulation 10.0.1.1 -8 -8
chk_join_nr 3 3 3
chk_add_nr 1 1
chk_rm_nr 1 3 invert simult
+ kill_tests_wait
fi
# subflows flush
@@ -2247,10 +2268,13 @@ remove_tests()
pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow id 150
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ wait_mpj $ns2
+ endpoint_manipulation 10.0.1.1 -8 -8
chk_join_nr 3 3 3
chk_rm_tx_nr 0
chk_rm_nr 0 3 simult
+ kill_tests_wait
fi
# addresses flush
@@ -2260,10 +2284,12 @@ remove_tests()
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal
pm_nl_add_endpoint $ns1 10.0.4.1 flags signal
pm_nl_set_limits $ns2 3 3
- run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 -8 -8
chk_join_nr 3 3 3
chk_add_nr 3 3
chk_rm_nr 3 3 invert simult
+ kill_tests_wait
fi
# invalid addresses flush
@@ -2273,10 +2299,12 @@ remove_tests()
pm_nl_add_endpoint $ns1 10.0.3.1 flags signal
pm_nl_add_endpoint $ns1 10.0.14.1 flags signal
pm_nl_set_limits $ns2 3 3
- run_tests $ns1 $ns2 10.0.1.1 0 -8 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 -8
chk_join_nr 1 1 1
chk_add_nr 3 3
chk_rm_nr 3 1 invert
+ kill_tests_wait
fi
# remove id 0 subflow
@@ -2284,9 +2312,11 @@ remove_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_set_limits $ns2 0 1
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 0 0 -9 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 -9
chk_join_nr 1 1 1
chk_rm_nr 1 1
+ kill_tests_wait
fi
# remove id 0 address
@@ -2294,10 +2324,12 @@ remove_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
pm_nl_set_limits $ns2 1 1
- run_tests $ns1 $ns2 10.0.1.1 0 -9 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 -9
chk_join_nr 1 1 1
chk_add_nr 1 1
chk_rm_nr 1 1 invert
+ kill_tests_wait
fi
}
@@ -2307,42 +2339,54 @@ add_tests()
if reset "add single subflow"; then
pm_nl_set_limits $ns1 0 1
pm_nl_set_limits $ns2 0 1
- run_tests $ns1 $ns2 10.0.1.1 0 0 1 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 1
chk_join_nr 1 1 1
+ kill_tests_wait
fi
# add signal address
if reset "add signal address"; then
pm_nl_set_limits $ns1 0 1
pm_nl_set_limits $ns2 1 1
- run_tests $ns1 $ns2 10.0.1.1 0 1 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 1
chk_join_nr 1 1 1
chk_add_nr 1 1
+ kill_tests_wait
fi
# add multiple subflows
if reset "add multiple subflows"; then
pm_nl_set_limits $ns1 0 2
pm_nl_set_limits $ns2 0 2
- run_tests $ns1 $ns2 10.0.1.1 0 0 2 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 2
chk_join_nr 2 2 2
+ kill_tests_wait
fi
# add multiple subflows IPv6
if reset "add multiple subflows IPv6"; then
pm_nl_set_limits $ns1 0 2
pm_nl_set_limits $ns2 0 2
- run_tests $ns1 $ns2 dead:beef:1::1 0 0 2 slow
+ run_tests $ns1 $ns2 dead:beef:1::1 0 slow 2>/dev/null &
+ wait_mpj $ns2
+ endpoint_manipulation dead:beef:1::1 0 2
+ wait_mpj $ns2
chk_join_nr 2 2 2
+ kill_tests_wait
fi
# add multiple addresses IPv6
if reset "add multiple addresses IPv6"; then
pm_nl_set_limits $ns1 0 2
pm_nl_set_limits $ns2 2 2
- run_tests $ns1 $ns2 dead:beef:1::1 0 2 0 slow
+ run_tests $ns1 $ns2 dead:beef:1::1 0 slow 2>/dev/null &
+ endpoint_manipulation dead:beef:1::1 2
chk_join_nr 2 2 2
chk_add_nr 2 2
+ kill_tests_wait
fi
}
@@ -2353,14 +2397,14 @@ ipv6_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_set_limits $ns2 0 1
pm_nl_add_endpoint $ns2 dead:beef:3::2 dev ns2eth3 flags subflow
- run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
+ run_tests $ns1 $ns2 dead:beef:1::1 0 slow
chk_join_nr 1 1 1
fi
# add_address, unused IPv6
if reset "unused signal address IPv6"; then
pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
- run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
+ run_tests $ns1 $ns2 dead:beef:1::1 0 slow
chk_join_nr 0 0 0
chk_add_nr 1 1
fi
@@ -2370,7 +2414,7 @@ ipv6_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
pm_nl_set_limits $ns2 1 1
- run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
+ run_tests $ns1 $ns2 dead:beef:1::1 0 slow
chk_join_nr 1 1 1
chk_add_nr 1 1
fi
@@ -2380,10 +2424,12 @@ ipv6_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
pm_nl_set_limits $ns2 1 1
- run_tests $ns1 $ns2 dead:beef:1::1 0 -1 0 slow
+ run_tests $ns1 $ns2 dead:beef:1::1 0 slow 2>/dev/null &
+ endpoint_manipulation dead:beef:1::1 -1
chk_join_nr 1 1 1
chk_add_nr 1 1
chk_rm_nr 1 1 invert
+ kill_tests_wait
fi
# subflow and signal IPv6, remove
@@ -2392,10 +2438,12 @@ ipv6_tests()
pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
pm_nl_set_limits $ns2 1 2
pm_nl_add_endpoint $ns2 dead:beef:3::2 dev ns2eth3 flags subflow
- run_tests $ns1 $ns2 dead:beef:1::1 0 -1 -1 slow
+ run_tests $ns1 $ns2 dead:beef:1::1 0 slow 2>/dev/null &
+ endpoint_manipulation dead:beef:1::1 -1 -1
chk_join_nr 2 2 2
chk_add_nr 1 1
chk_rm_nr 1 1
+ kill_tests_wait
fi
}
@@ -2492,7 +2540,7 @@ mixed_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_set_limits $ns2 1 1
pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow
chk_join_nr 0 0 0
fi
@@ -2501,7 +2549,7 @@ mixed_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_set_limits $ns2 1 1
pm_nl_add_endpoint $ns1 10.0.1.1 flags signal
- run_tests $ns1 $ns2 dead:beef:2::1 0 0 0 slow
+ run_tests $ns1 $ns2 dead:beef:2::1 0 slow
chk_join_nr 1 1 1
fi
@@ -2511,7 +2559,7 @@ mixed_tests()
pm_nl_set_limits $ns2 1 4
pm_nl_add_endpoint $ns2 dead:beef:2::2 flags subflow,fullmesh
pm_nl_add_endpoint $ns1 10.0.1.1 flags signal
- run_tests $ns1 $ns2 dead:beef:2::1 0 0 0 slow
+ run_tests $ns1 $ns2 dead:beef:2::1 0 slow
chk_join_nr 1 1 1
fi
@@ -2522,8 +2570,11 @@ mixed_tests()
pm_nl_set_limits $ns2 2 4
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
pm_nl_add_endpoint $ns1 dead:beef:2::1 flags signal
- run_tests $ns1 $ns2 dead:beef:1::1 0 0 fullmesh_1 slow
+ run_tests $ns1 $ns2 dead:beef:1::1 0 slow 2>/dev/null &
+ endpoint_manipulation dead:beef:1::1 0 fullmesh_1
+ wait_mpj $ns1
chk_join_nr 4 4 4
+ kill_tests_wait
fi
}
@@ -2534,9 +2585,11 @@ backup_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_set_limits $ns2 0 1
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow,backup
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow nobackup
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 0 nobackup
chk_join_nr 1 1 1
chk_prio_nr 0 1
+ kill_tests_wait
fi
# single address, backup
@@ -2544,10 +2597,13 @@ backup_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
pm_nl_set_limits $ns2 1 1
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow backup
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ wait_mpj $ns1
+ endpoint_manipulation 10.0.1.1 0 0 backup
chk_join_nr 1 1 1
chk_add_nr 1 1
chk_prio_nr 1 1
+ kill_tests_wait
fi
# single address with port, backup
@@ -2555,15 +2611,18 @@ backup_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100
pm_nl_set_limits $ns2 1 1
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow backup
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ wait_mpj $ns1
+ endpoint_manipulation 10.0.1.1 0 0 backup
chk_join_nr 1 1 1
chk_add_nr 1 1
chk_prio_nr 1 1
+ kill_tests_wait
fi
if reset "mpc backup"; then
pm_nl_add_endpoint $ns2 10.0.1.2 flags subflow,backup
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow
chk_join_nr 0 0 0
chk_prio_nr 0 1
fi
@@ -2571,24 +2630,28 @@ backup_tests()
if reset "mpc backup both sides"; then
pm_nl_add_endpoint $ns1 10.0.1.1 flags subflow,backup
pm_nl_add_endpoint $ns2 10.0.1.2 flags subflow,backup
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow
chk_join_nr 0 0 0
chk_prio_nr 1 1
fi
if reset "mpc switch to backup"; then
pm_nl_add_endpoint $ns2 10.0.1.2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow backup
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 0 backup
chk_join_nr 0 0 0
chk_prio_nr 0 1
+ kill_tests_wait
fi
if reset "mpc switch to backup both sides"; then
pm_nl_add_endpoint $ns1 10.0.1.1 flags subflow
pm_nl_add_endpoint $ns2 10.0.1.2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow backup
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 0 backup
chk_join_nr 0 0 0
chk_prio_nr 1 1
+ kill_tests_wait
fi
}
@@ -2672,7 +2735,8 @@ add_addr_ports_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100
pm_nl_set_limits $ns2 1 1
- run_tests $ns1 $ns2 10.0.1.1 0 -1 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 -1
chk_join_nr 1 1 1
chk_add_nr 1 1 1
chk_rm_nr 1 1 invert
@@ -2680,6 +2744,7 @@ add_addr_ports_tests()
verify_listener_events $evts_ns1 $LISTENER_CREATED $AF_INET 10.0.2.1 10100
verify_listener_events $evts_ns1 $LISTENER_CLOSED $AF_INET 10.0.2.1 10100
kill_events_pids
+ kill_tests_wait
fi
# subflow and signal with port, remove
@@ -2688,10 +2753,12 @@ add_addr_ports_tests()
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal port 10100
pm_nl_set_limits $ns2 1 2
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 0 -1 -1 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 -1 -1
chk_join_nr 2 2 2
chk_add_nr 1 1 1
chk_rm_nr 1 1
+ kill_tests_wait
fi
# subflows and signal with port, flush
@@ -2701,10 +2768,13 @@ add_addr_ports_tests()
pm_nl_set_limits $ns2 1 3
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 0 -8 -2 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ wait_mpj $ns2
+ endpoint_manipulation 10.0.1.1 -8 -2
chk_join_nr 3 3 3
chk_add_nr 1 1
chk_rm_nr 1 3 invert simult
+ kill_tests_wait
fi
# multiple addresses with port
@@ -2903,9 +2973,11 @@ fullmesh_tests()
pm_nl_set_limits $ns2 1 4
pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow,fullmesh
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow,fullmesh
- run_tests $ns1 $ns2 10.0.1.1 0 1 0 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 1
chk_join_nr 4 4 4
chk_add_nr 1 1
+ kill_tests_wait
fi
# fullmesh 2
@@ -2915,9 +2987,12 @@ fullmesh_tests()
pm_nl_set_limits $ns1 1 3
pm_nl_set_limits $ns2 1 3
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
- run_tests $ns1 $ns2 10.0.1.1 0 0 fullmesh_1 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ wait_mpj $ns1
+ endpoint_manipulation 10.0.1.1 0 fullmesh_1
chk_join_nr 3 3 3
chk_add_nr 1 1
+ kill_tests_wait
fi
# fullmesh 3
@@ -2927,9 +3002,11 @@ fullmesh_tests()
pm_nl_set_limits $ns1 2 5
pm_nl_set_limits $ns2 1 5
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
- run_tests $ns1 $ns2 10.0.1.1 0 0 fullmesh_2 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 fullmesh_2
chk_join_nr 5 5 5
chk_add_nr 1 1
+ kill_tests_wait
fi
# fullmesh 4
@@ -2940,9 +3017,11 @@ fullmesh_tests()
pm_nl_set_limits $ns1 2 4
pm_nl_set_limits $ns2 1 4
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
- run_tests $ns1 $ns2 10.0.1.1 0 0 fullmesh_2 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 fullmesh_2
chk_join_nr 4 4 4
chk_add_nr 1 1
+ kill_tests_wait
fi
# set fullmesh flag
@@ -2950,9 +3029,12 @@ fullmesh_tests()
pm_nl_set_limits $ns1 4 4
pm_nl_add_endpoint $ns1 10.0.2.1 flags subflow
pm_nl_set_limits $ns2 4 4
- run_tests $ns1 $ns2 10.0.1.1 0 0 1 slow fullmesh
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 1 fullmesh
+ wait_mpj $ns1
chk_join_nr 2 2 2
chk_rm_nr 0 1
+ kill_tests_wait
fi
# set nofullmesh flag
@@ -2960,9 +3042,12 @@ fullmesh_tests()
pm_nl_set_limits $ns1 4 4
pm_nl_add_endpoint $ns1 10.0.2.1 flags subflow,fullmesh
pm_nl_set_limits $ns2 4 4
- run_tests $ns1 $ns2 10.0.1.1 0 0 fullmesh_1 slow nofullmesh
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 fullmesh_1 nofullmesh
+ wait_mpj $ns1
chk_join_nr 2 2 2
chk_rm_nr 0 1
+ kill_tests_wait
fi
# set backup,fullmesh flags
@@ -2970,10 +3055,13 @@ fullmesh_tests()
pm_nl_set_limits $ns1 4 4
pm_nl_add_endpoint $ns1 10.0.2.1 flags subflow
pm_nl_set_limits $ns2 4 4
- run_tests $ns1 $ns2 10.0.1.1 0 0 1 slow backup,fullmesh
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 1 backup,fullmesh
+ wait_mpj $ns1
chk_join_nr 2 2 2
chk_prio_nr 0 1
chk_rm_nr 0 1
+ kill_tests_wait
fi
# set nobackup,nofullmesh flags
@@ -2981,24 +3069,27 @@ fullmesh_tests()
pm_nl_set_limits $ns1 4 4
pm_nl_set_limits $ns2 4 4
pm_nl_add_endpoint $ns2 10.0.2.2 flags subflow,backup,fullmesh
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow nobackup,nofullmesh
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 0 nobackup,nofullmesh
+ wait_mpj $ns1
chk_join_nr 2 2 2
chk_prio_nr 0 1
chk_rm_nr 0 1
+ kill_tests_wait
fi
}
fastclose_tests()
{
if reset "fastclose test"; then
- run_tests $ns1 $ns2 10.0.1.1 1024 0 0 fast fastclose_client
+ run_tests $ns1 $ns2 10.0.1.1 1024 fast fastclose_client
chk_join_nr 0 0 0
chk_fclose_nr 1 1
chk_rst_nr 1 1 invert
fi
if reset "fastclose server test"; then
- run_tests $ns1 $ns2 10.0.1.1 1024 0 0 fast fastclose_server
+ run_tests $ns1 $ns2 10.0.1.1 1024 fast fastclose_server
chk_join_nr 0 0 0
chk_fclose_nr 1 1 invert
chk_rst_nr 1 1
@@ -3141,7 +3232,7 @@ userspace_tests()
pm_nl_set_limits $ns1 1 1
pm_nl_set_limits $ns2 1 1
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow backup
+ run_tests $ns1 $ns2 10.0.1.1 0 slow backup
chk_join_nr 1 1 0
chk_prio_nr 0 0
fi
@@ -3153,16 +3244,18 @@ userspace_tests()
pm_nl_set_limits $ns1 0 1
pm_nl_set_limits $ns2 0 1
pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 0 0 -1 slow
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
+ endpoint_manipulation 10.0.1.1 0 -1
chk_join_nr 0 0 0
chk_rm_nr 0 0
+ kill_tests_wait
fi
# userspace pm add & remove address
if reset_with_events "userspace pm add & remove address"; then
set_userspace_pm $ns1
pm_nl_set_limits $ns2 1 1
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow 2>/dev/null &
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
wait_mpj $ns1
userspace_pm_add_addr 10.0.2.1 10
sleep 1
@@ -3183,7 +3276,7 @@ userspace_tests()
if reset_with_events "userspace pm create destroy subflow"; then
set_userspace_pm $ns2
pm_nl_set_limits $ns1 0 1
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow 2>/dev/null &
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
wait_mpj $ns2
userspace_pm_add_sf 10.0.3.2 20
sleep 1
@@ -3206,7 +3299,7 @@ endpoint_tests()
pm_nl_set_limits $ns1 2 2
pm_nl_set_limits $ns2 2 2
pm_nl_add_endpoint $ns1 10.0.2.1 flags signal
- run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow 2>/dev/null &
+ run_tests $ns1 $ns2 10.0.1.1 0 slow 2>/dev/null &
wait_mpj $ns1
pm_nl_check_endpoint 1 "creation" \
@@ -3234,7 +3327,7 @@ endpoint_tests()
pm_nl_set_limits $ns1 1 1
pm_nl_set_limits $ns2 1 1
pm_nl_add_endpoint $ns2 10.0.2.2 id 2 dev ns2eth2 flags subflow
- run_tests $ns1 $ns2 10.0.1.1 4 0 0 speed_20 2>/dev/null &
+ run_tests $ns1 $ns2 10.0.1.1 4 speed_20 2>/dev/null &
wait_mpj $ns2
chk_subflow_nr needtitle "before delete" 2
--
2.35.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: selftests: mptcp: do endpoint manipulation out of transfer: Tests Results
2023-05-06 5:09 ` [PATCH mptcp-next v12 12/12] selftests: mptcp: do endpoint manipulation out of transfer Geliang Tang
@ 2023-05-06 6:04 ` MPTCP CI
0 siblings, 0 replies; 14+ messages in thread
From: MPTCP CI @ 2023-05-06 6:04 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):
- Unstable: 1 failed test(s): selftest_simult_flows 🔴:
- Task: https://cirrus-ci.com/task/4872423376420864
- Summary: https://api.cirrus-ci.com/v1/artifact/task/4872423376420864/summary/summary.txt
- KVM Validation: debug (only selftest_mptcp_join):
- Unstable: 1 failed test(s): selftest_mptcp_join 🔴:
- Task: https://cirrus-ci.com/task/6561273236684800
- Summary: https://api.cirrus-ci.com/v1/artifact/task/6561273236684800/summary/summary.txt
- KVM Validation: normal (only selftest_mptcp_join):
- Unstable: 1 failed test(s): selftest_mptcp_join 🔴:
- Task: https://cirrus-ci.com/task/5998323283263488
- Summary: https://api.cirrus-ci.com/v1/artifact/task/5998323283263488/summary/summary.txt
- KVM Validation: debug (except selftest_mptcp_join):
- Success! ✅:
- Task: https://cirrus-ci.com/task/5435373329842176
- Summary: https://api.cirrus-ci.com/v1/artifact/task/5435373329842176/summary/summary.txt
Initiator: Patchew Applier
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/ff090e8a1d83
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] 14+ messages in thread
end of thread, other threads:[~2023-05-06 6:04 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-06 5:08 [PATCH mptcp-next v12 00/12] update userspace pm mptcp_info fields Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 01/12] mptcp: only send RM_ADDR in nl_cmd_remove Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 02/12] selftests: mptcp: update userspace pm addr tests Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 03/12] mptcp: export remove_anno_list_by_saddr Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 04/12] mptcp: add addr into userspace pm list Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 05/12] selftests: mptcp: update userspace pm subflow tests Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 06/12] mptcp: update userspace pm infos Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 07/12] selftests: mptcp: test userspace pm out of transfer Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 08/12] selftests: mptcp: check subflows infos Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 09/12] selftests: mptcp: check add_addr infos Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 10/12] mptcp: pass addr to mptcp_pm_alloc_anno_list Geliang Tang
2023-05-06 5:08 ` [PATCH mptcp-next v12 11/12] selftests: mptcp: pass fastclose to sflags Geliang Tang
2023-05-06 5:09 ` [PATCH mptcp-next v12 12/12] selftests: mptcp: do endpoint manipulation out of transfer Geliang Tang
2023-05-06 6:04 ` selftests: mptcp: do endpoint manipulation out of transfer: 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