* [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.