* [PATCH mptcp-next v13 0/7] update userspace pm mptcp_info fields pt 2
@ 2023-05-15 2:10 Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 1/7] mptcp: update userspace pm infos Geliang Tang
` (6 more replies)
0 siblings, 7 replies; 10+ messages in thread
From: Geliang Tang @ 2023-05-15 2:10 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
v13:
- fix all the failures the CI is complaining about with the debug kconfig.
- rename endpoint_manipulation to pm_nl_set_endpoint.
Geliang Tang (7):
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: set endpoint out of transfer
net/mptcp/pm.c | 23 +-
net/mptcp/pm_netlink.c | 8 +-
net/mptcp/pm_userspace.c | 13 +-
net/mptcp/protocol.h | 2 +-
.../testing/selftests/net/mptcp/mptcp_join.sh | 701 +++++++++++-------
5 files changed, 479 insertions(+), 268 deletions(-)
--
2.35.3
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH mptcp-next v13 1/7] mptcp: update userspace pm infos
2023-05-15 2:10 [PATCH mptcp-next v13 0/7] update userspace pm mptcp_info fields pt 2 Geliang Tang
@ 2023-05-15 2:10 ` Geliang Tang
2023-05-17 16:22 ` Matthieu Baerts
2023-05-15 2:10 ` [PATCH mptcp-next v13 2/7] selftests: mptcp: test userspace pm out of transfer Geliang Tang
` (5 subsequent siblings)
6 siblings, 1 reply; 10+ messages in thread
From: Geliang Tang @ 2023-05-15 2:10 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 016df47d7d6a..febf3cf0e935 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] 10+ messages in thread
* [PATCH mptcp-next v13 2/7] selftests: mptcp: test userspace pm out of transfer
2023-05-15 2:10 [PATCH mptcp-next v13 0/7] update userspace pm mptcp_info fields pt 2 Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 1/7] mptcp: update userspace pm infos Geliang Tang
@ 2023-05-15 2:10 ` Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 3/7] selftests: mptcp: check subflows infos Geliang Tang
` (4 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Geliang Tang @ 2023-05-15 2:10 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 | 122 +++++++++++-------
1 file changed, 76 insertions(+), 46 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 6aacffa32bb6..ac3fa8f0df0f 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
- 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
- ip netns exec ${listener_ns} ./pm_nl_ctl rem token $tk id $id
- 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 dsf lip $addr lport $sp \
- rip $da rport $dp token $tk
- ip netns exec ${connector_ns} ./pm_nl_ctl rem token $tk id $id
- fi
+ 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')
+ 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
+ ip netns exec $ns1 ./pm_nl_ctl rem token $tk id $id
+}
+
+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 dsf lip $addr lport $sp \
+ rip $da rport $dp token $tk
+ ip netns exec $ns2 ./pm_nl_ctl rem token $tk id $id
+}
+
userspace_tests()
{
# userspace pm type prevents add_addr
@@ -3140,21 +3157,34 @@ 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 speed_10 2>/dev/null &
+ local tests_pid=$!
+ 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
+ userspace_pm_rm_addr 10.0.2.1 10
+ wait_rm_addr $ns1 1
chk_rm_nr 1 1 invert
kill_events_pids
+ wait $tests_pid
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 speed_10 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ userspace_pm_add_sf 10.0.3.2 20
+ sleep 1
chk_join_nr 1 1 1
+ userspace_pm_rm_sf 10.0.3.2 20
chk_rm_nr 1 1
kill_events_pids
+ wait $tests_pid
fi
}
--
2.35.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH mptcp-next v13 3/7] selftests: mptcp: check subflows infos
2023-05-15 2:10 [PATCH mptcp-next v13 0/7] update userspace pm mptcp_info fields pt 2 Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 1/7] mptcp: update userspace pm infos Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 2/7] selftests: mptcp: test userspace pm out of transfer Geliang Tang
@ 2023-05-15 2:10 ` Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 4/7] selftests: mptcp: check add_addr infos Geliang Tang
` (3 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Geliang Tang @ 2023-05-15 2:10 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 | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index ac3fa8f0df0f..0e8124290c7a 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()
sleep 1
chk_join_nr 1 1 1
chk_add_nr 1 1
+ 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
wait $tests_pid
fi
@@ -3181,8 +3183,10 @@ userspace_tests()
userspace_pm_add_sf 10.0.3.2 20
sleep 1
chk_join_nr 1 1 1
+ chk_mptcp_info subflows_1
userspace_pm_rm_sf 10.0.3.2 20
chk_rm_nr 1 1
+ chk_mptcp_info subflows_0
kill_events_pids
wait $tests_pid
fi
@@ -3200,14 +3204,17 @@ 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
kill_tests_wait
fi
--
2.35.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH mptcp-next v13 4/7] selftests: mptcp: check add_addr infos
2023-05-15 2:10 [PATCH mptcp-next v13 0/7] update userspace pm mptcp_info fields pt 2 Geliang Tang
` (2 preceding siblings ...)
2023-05-15 2:10 ` [PATCH mptcp-next v13 3/7] selftests: mptcp: check subflows infos Geliang Tang
@ 2023-05-15 2:10 ` Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 5/7] mptcp: pass addr to mptcp_pm_alloc_anno_list Geliang Tang
` (2 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Geliang Tang @ 2023-05-15 2:10 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 0e8124290c7a..d8404d1354b7 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_join_nr 1 1 1
chk_add_nr 1 1
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
@@ -3205,6 +3210,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] 10+ messages in thread
* [PATCH mptcp-next v13 5/7] mptcp: pass addr to mptcp_pm_alloc_anno_list
2023-05-15 2:10 [PATCH mptcp-next v13 0/7] update userspace pm mptcp_info fields pt 2 Geliang Tang
` (3 preceding siblings ...)
2023-05-15 2:10 ` [PATCH mptcp-next v13 4/7] selftests: mptcp: check add_addr infos Geliang Tang
@ 2023-05-15 2:10 ` Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 6/7] selftests: mptcp: pass fastclose to sflags Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 7/7] selftests: mptcp: set endpoint out of transfer Geliang Tang
6 siblings, 0 replies; 10+ messages in thread
From: Geliang Tang @ 2023-05-15 2:10 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 febf3cf0e935..f0799cfb45c6 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] 10+ messages in thread
* [PATCH mptcp-next v13 6/7] selftests: mptcp: pass fastclose to sflags
2023-05-15 2:10 [PATCH mptcp-next v13 0/7] update userspace pm mptcp_info fields pt 2 Geliang Tang
` (4 preceding siblings ...)
2023-05-15 2:10 ` [PATCH mptcp-next v13 5/7] mptcp: pass addr to mptcp_pm_alloc_anno_list Geliang Tang
@ 2023-05-15 2:10 ` Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 7/7] selftests: mptcp: set endpoint out of transfer Geliang Tang
6 siblings, 0 replies; 10+ messages in thread
From: Geliang Tang @ 2023-05-15 2:10 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 d8404d1354b7..d749ab8627ca 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] 10+ messages in thread
* [PATCH mptcp-next v13 7/7] selftests: mptcp: set endpoint out of transfer
2023-05-15 2:10 [PATCH mptcp-next v13 0/7] update userspace pm mptcp_info fields pt 2 Geliang Tang
` (5 preceding siblings ...)
2023-05-15 2:10 ` [PATCH mptcp-next v13 6/7] selftests: mptcp: pass fastclose to sflags Geliang Tang
@ 2023-05-15 2:10 ` Geliang Tang
2023-05-17 16:41 ` Matthieu Baerts
6 siblings, 1 reply; 10+ messages in thread
From: Geliang Tang @ 2023-05-15 2:10 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
This patch moves endpoint settings out of do_transfer() into a new
function pm_nl_set_endpoint(), 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 | 549 +++++++++++-------
1 file changed, 347 insertions(+), 202 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index d749ab8627ca..3a4eca0714a0 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -699,137 +699,19 @@ pm_nl_check_endpoint()
fi
}
-filter_tcp_from()
+pm_nl_set_endpoint()
{
- local ns="${1}"
- local src="${2}"
- local target="${3}"
-
- ip netns exec "${ns}" iptables -A INPUT -s "${src}" -p tcp -j "${target}"
-}
-
-do_transfer()
-{
- local listener_ns="$1"
- local connector_ns="$2"
- local cl_proto="$3"
- 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 port=$((10000 + TEST_COUNT - 1))
- local cappid
-
- :> "$cout"
- :> "$sout"
- :> "$capout"
-
- if [ $capture -eq 1 ]; then
- local capuser
- if [ -z $SUDO_USER ] ; then
- capuser=""
- else
- capuser="-Z $SUDO_USER"
- fi
-
- capfile=$(printf "mp_join-%02u-%s.pcap" "$TEST_COUNT" "${listener_ns}")
-
- echo "Capturing traffic for test $TEST_COUNT into $capfile"
- ip netns exec ${listener_ns} tcpdump -i any -s 65535 -B 32768 $capuser -w $capfile > "$capout" 2>&1 &
- cappid=$!
-
- sleep 1
- fi
-
- NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \
- nstat -n
- NSTAT_HISTORY=/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \
- nstat -n
-
- local extra_args
- if [ $speed = "fast" ]; then
- extra_args="-j"
- elif [ $speed = "slow" ]; then
- extra_args="-r 50"
- elif [[ $speed = "speed_"* ]]; then
- extra_args="-r ${speed:6}"
- fi
+ local connect_addr="$1"
+ local addr_nr_ns1="$2"
+ local addr_nr_ns2="${3:-0}"
+ local sflags="${4:-""}"
local flags="subflow"
- local extra_cl_args=""
- local extra_srv_args=""
- local trunc_size=""
- if [[ "${sflags}" = "fastclose_"* ]]; then
- if [ ${test_link_fail} -le 1 ]; then
- echo "fastclose tests need test_link_fail argument"
- fail_test
- return 1
- fi
-
- # disconnect
- trunc_size=${test_link_fail}
- local side=${sflags:10}
-
- if [ ${side} = "client" ]; then
- extra_cl_args="-f ${test_link_fail}"
- extra_srv_args="-f -1"
- elif [ ${side} = "server" ]; then
- extra_srv_args="-f ${test_link_fail}"
- extra_cl_args="-f -1"
- else
- echo "wrong/unknown fastclose spec ${side}"
- 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"
- if [ "$test_link_fail" -gt 1 ];then
- timeout ${timeout_test} \
- ip netns exec ${listener_ns} \
- ./mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \
- $extra_srv_args "::" < "$sinfail" > "$sout" &
- else
- timeout ${timeout_test} \
- ip netns exec ${listener_ns} \
- ./mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \
- $extra_srv_args "::" < "$sin" > "$sout" &
- fi
- local spid=$!
-
- wait_local_port_listen "${listener_ns}" "${port}"
-
- extra_cl_args="$extra_args $extra_cl_args"
- if [ "$test_link_fail" -eq 0 ];then
- timeout ${timeout_test} \
- ip netns exec ${connector_ns} \
- ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
- $extra_cl_args $connect_addr < "$cin" > "$cout" &
- elif [ "$test_link_fail" -eq 1 ] || [ "$test_link_fail" -eq 2 ];then
- ( cat "$cinfail" ; sleep 2; link_failure $listener_ns ; cat "$cinfail" ) | \
- tee "$cinsent" | \
- timeout ${timeout_test} \
- ip netns exec ${connector_ns} \
- ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
- $extra_cl_args $connect_addr > "$cout" &
- else
- tee "$cinsent" < "$cinfail" | \
- timeout ${timeout_test} \
- ip netns exec ${connector_ns} \
- ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
- $extra_cl_args $connect_addr > "$cout" &
- 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
@@ -857,7 +739,7 @@ do_transfer()
if [ $rm_nr_ns1 -lt 8 ]; then
local counter=0
local line
- pm_nl_show_endpoints ${listener_ns} | while read -r line; do
+ 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
@@ -869,18 +751,18 @@ do_transfer()
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}
+ 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 ${listener_ns}
+ pm_nl_flush_endpoint $ns1
elif [ $rm_nr_ns1 -eq 9 ]; then
- pm_nl_del_endpoint ${listener_ns} 0 ${connect_addr}
+ pm_nl_del_endpoint $ns1 0 ${connect_addr}
fi
fi
@@ -909,7 +791,7 @@ do_transfer()
if [ $rm_nr_ns2 -lt 8 ]; then
local counter=0
local line
- pm_nl_show_endpoints ${connector_ns} | while read -r line; do
+ 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
@@ -924,16 +806,16 @@ do_transfer()
# 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}
+ 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 ${connector_ns}
+ pm_nl_flush_endpoint $ns2
elif [ $rm_nr_ns2 -eq 9 ]; then
local addr
if is_v6 "${connect_addr}"; then
@@ -941,7 +823,7 @@ do_transfer()
else
addr="10.0.1.2"
fi
- pm_nl_del_endpoint ${connector_ns} 0 $addr
+ pm_nl_del_endpoint $ns2 0 $addr
fi
fi
@@ -968,6 +850,130 @@ do_transfer()
done
done
fi
+}
+
+filter_tcp_from()
+{
+ local ns="${1}"
+ local src="${2}"
+ local target="${3}"
+
+ ip netns exec "${ns}" iptables -A INPUT -s "${src}" -p tcp -j "${target}"
+}
+
+do_transfer()
+{
+ local listener_ns="$1"
+ local connector_ns="$2"
+ local cl_proto="$3"
+ local srv_proto="$4"
+ local connect_addr="$5"
+ local test_link_fail="$6"
+ local speed="$7"
+ local sflags="${8}"
+
+ local port=$((10000 + TEST_COUNT - 1))
+ local cappid
+
+ :> "$cout"
+ :> "$sout"
+ :> "$capout"
+
+ if [ $capture -eq 1 ]; then
+ local capuser
+ if [ -z $SUDO_USER ] ; then
+ capuser=""
+ else
+ capuser="-Z $SUDO_USER"
+ fi
+
+ capfile=$(printf "mp_join-%02u-%s.pcap" "$TEST_COUNT" "${listener_ns}")
+
+ echo "Capturing traffic for test $TEST_COUNT into $capfile"
+ ip netns exec ${listener_ns} tcpdump -i any -s 65535 -B 32768 $capuser -w $capfile > "$capout" 2>&1 &
+ cappid=$!
+
+ sleep 1
+ fi
+
+ NSTAT_HISTORY=/tmp/${listener_ns}.nstat ip netns exec ${listener_ns} \
+ nstat -n
+ NSTAT_HISTORY=/tmp/${connector_ns}.nstat ip netns exec ${connector_ns} \
+ nstat -n
+
+ local extra_args
+ if [ $speed = "fast" ]; then
+ extra_args="-j"
+ elif [ $speed = "slow" ]; then
+ extra_args="-r 50"
+ elif [[ $speed = "speed_"* ]]; then
+ extra_args="-r ${speed:6}"
+ fi
+
+ local extra_cl_args=""
+ local extra_srv_args=""
+ local trunc_size=""
+ if [[ "${sflags}" = "fastclose_"* ]]; then
+ if [ ${test_link_fail} -le 1 ]; then
+ echo "fastclose tests need test_link_fail argument"
+ fail_test
+ return 1
+ fi
+
+ # disconnect
+ trunc_size=${test_link_fail}
+ local side=${sflags:10}
+
+ if [ ${side} = "client" ]; then
+ extra_cl_args="-f ${test_link_fail}"
+ extra_srv_args="-f -1"
+ elif [ ${side} = "server" ]; then
+ extra_srv_args="-f ${test_link_fail}"
+ extra_cl_args="-f -1"
+ else
+ echo "wrong/unknown fastclose spec ${side}"
+ fail_test
+ return 1
+ fi
+ fi
+
+ extra_srv_args="$extra_args $extra_srv_args"
+ if [ "$test_link_fail" -gt 1 ];then
+ timeout ${timeout_test} \
+ ip netns exec ${listener_ns} \
+ ./mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \
+ $extra_srv_args "::" < "$sinfail" > "$sout" &
+ else
+ timeout ${timeout_test} \
+ ip netns exec ${listener_ns} \
+ ./mptcp_connect -t ${timeout_poll} -l -p $port -s ${srv_proto} \
+ $extra_srv_args "::" < "$sin" > "$sout" &
+ fi
+ local spid=$!
+
+ wait_local_port_listen "${listener_ns}" "${port}"
+
+ extra_cl_args="$extra_args $extra_cl_args"
+ if [ "$test_link_fail" -eq 0 ];then
+ timeout ${timeout_test} \
+ ip netns exec ${connector_ns} \
+ ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
+ $extra_cl_args $connect_addr < "$cin" > "$cout" &
+ elif [ "$test_link_fail" -eq 1 ] || [ "$test_link_fail" -eq 2 ];then
+ ( cat "$cinfail" ; sleep 2; link_failure $listener_ns ; cat "$cinfail" ) | \
+ tee "$cinsent" | \
+ timeout ${timeout_test} \
+ ip netns exec ${connector_ns} \
+ ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
+ $extra_cl_args $connect_addr > "$cout" &
+ else
+ tee "$cinsent" < "$cinfail" | \
+ timeout ${timeout_test} \
+ ip netns exec ${connector_ns} \
+ ./mptcp_connect -t ${timeout_poll} -p $port -s ${cl_proto} \
+ $extra_cl_args $connect_addr > "$cout" &
+ fi
+ local cpid=$!
wait $cpid
local retc=$?
@@ -1038,10 +1044,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 +1090,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()
@@ -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,14 @@ 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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 0 -1
+ wait_mpj $ns2
chk_join_nr 1 1 1
chk_rm_tx_nr 1
chk_rm_nr 1 1
+ wait $tests_pid
fi
# multiple subflows, remove
@@ -2160,9 +2168,12 @@ 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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 0 -2
chk_join_nr 2 2 2
chk_rm_nr 2 2
+ wait $tests_pid
fi
# single address, remove
@@ -2170,10 +2181,13 @@ 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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 -1
chk_join_nr 1 1 1
chk_add_nr 1 1
chk_rm_nr 1 1 invert
+ wait $tests_pid
fi
# subflow and signal, remove
@@ -2182,10 +2196,13 @@ 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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 -1 -1
chk_join_nr 2 2 2
chk_add_nr 1 1
chk_rm_nr 1 1
+ wait $tests_pid
fi
# subflows and signal, remove
@@ -2195,10 +2212,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 -1 -2 speed_10
+ run_tests $ns1 $ns2 10.0.1.1 0 speed_30 2>/dev/null &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 -1 -2
chk_join_nr 3 3 3
chk_add_nr 1 1
chk_rm_nr 2 2
+ wait $tests_pid
fi
# addresses remove
@@ -2208,10 +2228,13 @@ 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_30 2>/dev/null &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 -3
chk_join_nr 3 3 3
chk_add_nr 3 3
chk_rm_nr 3 3 invert
+ wait $tests_pid
fi
# invalid addresses remove
@@ -2221,10 +2244,13 @@ 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_30 2>/dev/null &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 -3
chk_join_nr 1 1 1
chk_add_nr 3 3
chk_rm_nr 3 1 invert
+ wait $tests_pid
fi
# subflows and signal, flush
@@ -2234,10 +2260,15 @@ 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 speed_30 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ pm_nl_set_endpoint 10.0.1.1 -8 -8
chk_join_nr 3 3 3
chk_add_nr 1 1
+ wait_rm_addr ${ns2} 1
chk_rm_nr 1 3 invert simult
+ wait $tests_pid
fi
# subflows flush
@@ -2247,10 +2278,15 @@ 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 speed_30 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ pm_nl_set_endpoint 10.0.1.1 -8 -8
chk_join_nr 3 3 3
chk_rm_tx_nr 0
+ wait_rm_addr ${ns2} 1
chk_rm_nr 0 3 simult
+ wait $tests_pid
fi
# addresses flush
@@ -2260,10 +2296,15 @@ 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 speed_30 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ pm_nl_set_endpoint 10.0.1.1 -8 -8
chk_join_nr 3 3 3
chk_add_nr 3 3
+ wait_rm_addr ${ns2} 1
chk_rm_nr 3 3 invert simult
+ wait $tests_pid
fi
# invalid addresses flush
@@ -2273,10 +2314,15 @@ 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 speed_30 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ pm_nl_set_endpoint 10.0.1.1 -8
chk_join_nr 1 1 1
chk_add_nr 3 3
+ wait_rm_addr ${ns2} 1
chk_rm_nr 3 1 invert
+ wait $tests_pid
fi
# remove id 0 subflow
@@ -2284,9 +2330,14 @@ 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 speed_30 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ pm_nl_set_endpoint 10.0.1.1 0 -9
chk_join_nr 1 1 1
+ wait_rm_addr ${ns2} 1
chk_rm_nr 1 1
+ wait $tests_pid
fi
# remove id 0 address
@@ -2294,10 +2345,15 @@ 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 speed_30 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ pm_nl_set_endpoint 10.0.1.1 -9
chk_join_nr 1 1 1
chk_add_nr 1 1
+ wait_rm_addr ${ns2} 1
chk_rm_nr 1 1 invert
+ wait $tests_pid
fi
}
@@ -2307,42 +2363,61 @@ 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 speed_30 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ pm_nl_set_endpoint 10.0.1.1 0 1
chk_join_nr 1 1 1
+ wait $tests_pid
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 speed_30 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ pm_nl_set_endpoint 10.0.1.1 1
chk_join_nr 1 1 1
chk_add_nr 1 1
+ wait $tests_pid
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 speed_30 2>/dev/null &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 0 2
chk_join_nr 2 2 2
+ wait $tests_pid
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 speed_30 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ pm_nl_set_endpoint dead:beef:1::1 0 2
chk_join_nr 2 2 2
+ wait $tests_pid
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 speed_30 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ pm_nl_set_endpoint dead:beef:1::1 2
chk_join_nr 2 2 2
chk_add_nr 2 2
+ wait $tests_pid
fi
}
@@ -2353,14 +2428,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 +2445,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 +2455,13 @@ 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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint dead:beef:1::1 -1
chk_join_nr 1 1 1
chk_add_nr 1 1
chk_rm_nr 1 1 invert
+ wait $tests_pid
fi
# subflow and signal IPv6, remove
@@ -2392,10 +2470,15 @@ 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 speed_20 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ pm_nl_set_endpoint dead:beef:1::1 -1 -1
chk_join_nr 2 2 2
chk_add_nr 1 1
+ wait_rm_addr ${ns2} 1
chk_rm_nr 1 1
+ wait $tests_pid
fi
}
@@ -2492,7 +2575,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 +2584,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 +2594,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 +2605,13 @@ 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 &
+ local tests_pid=$!
+ wait_mpj $ns1
+ pm_nl_set_endpoint dead:beef:1::1 0 fullmesh_1
+ wait_mpj $ns1
chk_join_nr 4 4 4
+ wait $tests_pid
fi
}
@@ -2534,9 +2622,12 @@ 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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 0 0 nobackup
chk_join_nr 1 1 1
chk_prio_nr 0 1
+ wait $tests_pid
fi
# single address, backup
@@ -2544,10 +2635,14 @@ 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 speed_20 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ pm_nl_set_endpoint 10.0.1.1 0 0 backup
chk_join_nr 1 1 1
chk_add_nr 1 1
chk_prio_nr 1 1
+ wait $tests_pid
fi
# single address with port, backup
@@ -2555,15 +2650,19 @@ 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 speed_20 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ pm_nl_set_endpoint 10.0.1.1 0 0 backup
chk_join_nr 1 1 1
chk_add_nr 1 1
chk_prio_nr 1 1
+ wait $tests_pid
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 +2670,30 @@ 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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 0 0 backup
chk_join_nr 0 0 0
chk_prio_nr 0 1
+ wait $tests_pid
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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 0 0 backup
chk_join_nr 0 0 0
chk_prio_nr 1 1
+ wait $tests_pid
fi
}
@@ -2672,7 +2777,9 @@ 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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 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 +2787,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
+ wait $tests_pid
fi
# subflow and signal with port, remove
@@ -2688,10 +2796,13 @@ 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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 -1 -1
chk_join_nr 2 2 2
chk_add_nr 1 1 1
chk_rm_nr 1 1
+ wait $tests_pid
fi
# subflows and signal with port, flush
@@ -2701,10 +2812,15 @@ 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 speed_20 2>/dev/null &
+ local tests_pid=$!
+ wait_mpj $ns2
+ pm_nl_set_endpoint 10.0.1.1 -8 -2
chk_join_nr 3 3 3
chk_add_nr 1 1
+ wait_rm_addr $ns2 1
chk_rm_nr 1 3 invert simult
+ wait $tests_pid
fi
# multiple addresses with port
@@ -2903,9 +3019,13 @@ 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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 1
+ wait_mpj $ns2
chk_join_nr 4 4 4
chk_add_nr 1 1
+ wait $tests_pid
fi
# fullmesh 2
@@ -2915,9 +3035,13 @@ 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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 0 fullmesh_1
+ wait_mpj $ns2
chk_join_nr 3 3 3
chk_add_nr 1 1
+ wait $tests_pid
fi
# fullmesh 3
@@ -2927,9 +3051,12 @@ 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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 0 fullmesh_2
chk_join_nr 5 5 5
chk_add_nr 1 1
+ wait $tests_pid
fi
# fullmesh 4
@@ -2940,9 +3067,12 @@ 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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 0 fullmesh_2
chk_join_nr 4 4 4
chk_add_nr 1 1
+ wait $tests_pid
fi
# set fullmesh flag
@@ -2950,9 +3080,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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 0 1 fullmesh
chk_join_nr 2 2 2
chk_rm_nr 0 1
+ wait $tests_pid
fi
# set nofullmesh flag
@@ -2960,9 +3093,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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 0 fullmesh_1 nofullmesh
chk_join_nr 2 2 2
chk_rm_nr 0 1
+ wait $tests_pid
fi
# set backup,fullmesh flags
@@ -2970,10 +3106,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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 0 1 backup,fullmesh
chk_join_nr 2 2 2
chk_prio_nr 0 1
chk_rm_nr 0 1
+ wait $tests_pid
fi
# set nobackup,nofullmesh flags
@@ -2981,24 +3120,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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 0 0 nobackup,nofullmesh
chk_join_nr 2 2 2
chk_prio_nr 0 1
chk_rm_nr 0 1
+ wait $tests_pid
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 +3283,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 +3295,19 @@ 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 &
+ local tests_pid=$!
+ pm_nl_set_endpoint 10.0.1.1 0 -1
chk_join_nr 0 0 0
chk_rm_nr 0 0
+ wait $tests_pid
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 speed_10 2>/dev/null &
+ run_tests $ns1 $ns2 10.0.1.1 0 speed_10 2>/dev/null &
local tests_pid=$!
wait_mpj $ns1
userspace_pm_add_addr 10.0.2.1 10
@@ -3183,7 +3328,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 speed_10 2>/dev/null &
+ run_tests $ns1 $ns2 10.0.1.1 0 speed_10 2>/dev/null &
local tests_pid=$!
wait_mpj $ns2
userspace_pm_add_sf 10.0.3.2 20
@@ -3205,7 +3350,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" \
@@ -3229,7 +3374,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] 10+ messages in thread
* Re: [PATCH mptcp-next v13 1/7] mptcp: update userspace pm infos
2023-05-15 2:10 ` [PATCH mptcp-next v13 1/7] mptcp: update userspace pm infos Geliang Tang
@ 2023-05-17 16:22 ` Matthieu Baerts
0 siblings, 0 replies; 10+ messages in thread
From: Matthieu Baerts @ 2023-05-17 16:22 UTC (permalink / raw)
To: Geliang Tang, mptcp
Hi Geliang,
On 15/05/2023 04:10, Geliang Tang wrote:
> 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
You can now use the "Closes:" tag here instead of the Link one: if you
are using the version from v6.14-rc1 that is in our export branches or
net/net-next, checkpatch no longer complains about this tag. We can use
it to automatically close the issue 329.
Cheers,
Matt
--
Tessares | Belgium | Hybrid Access Solutions
www.tessares.net
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH mptcp-next v13 7/7] selftests: mptcp: set endpoint out of transfer
2023-05-15 2:10 ` [PATCH mptcp-next v13 7/7] selftests: mptcp: set endpoint out of transfer Geliang Tang
@ 2023-05-17 16:41 ` Matthieu Baerts
0 siblings, 0 replies; 10+ messages in thread
From: Matthieu Baerts @ 2023-05-17 16:41 UTC (permalink / raw)
To: Geliang Tang, mptcp
Hi Geliang,
On 15/05/2023 04:10, Geliang Tang wrote:
> This patch moves endpoint settings out of do_transfer() into a new
> function pm_nl_set_endpoint(), then addr_nr_ns1 and addr_nr_ns2
> arguments can be removed for do_transfer() and run_tests().
(...)
Good idea, it looks clearer!
I only did a very quick review, please see below.
> @@ -2148,10 +2152,14 @@ 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 &
> + local tests_pid=$!
> + pm_nl_set_endpoint 10.0.1.1 0 -1
> + wait_mpj $ns2
> chk_join_nr 1 1 1
> chk_rm_tx_nr 1
> chk_rm_nr 1 1
> + wait $tests_pid
I think this will cause some issues:
- if you run in a slow environment, not all events might be triggered
before checking the join and remove addresses: I guess you should wait
for the transfer to finish before checking the different conditions, no?
run_tests (...)
pm_nl_set_endpoint (...)
wait (...)
chk_(...)
- if you launch run_tests() in the background, we will no longer detect
errors during the transfer I think. Plus it sounds like a bad idea to
use "2>/dev/null". I think you should have 2 new helpers that would
split do_transfer in 2:
- the first part to launch "mptcp_connect": what you have now up to
"wait $cpid"
- and the second part from "wait $cpid" to wait for the transfer to be
over, stop captures and check the transfer.
→ run_tests() would then call the two new helper so we would no need
to change all subtests
→ in the tests requiring pm_nl_set_endpoint, you can then have
something like:
start_transfer $ns1 $ns2 10.0.1.1 0 slow
pm_nl_set_endpoint 10.0.1.1 0 -1
wait_transfer
chk_XXX
WDYT?
Cheers,
Matt
--
Tessares | Belgium | Hybrid Access Solutions
www.tessares.net
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2023-05-17 16:41 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-15 2:10 [PATCH mptcp-next v13 0/7] update userspace pm mptcp_info fields pt 2 Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 1/7] mptcp: update userspace pm infos Geliang Tang
2023-05-17 16:22 ` Matthieu Baerts
2023-05-15 2:10 ` [PATCH mptcp-next v13 2/7] selftests: mptcp: test userspace pm out of transfer Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 3/7] selftests: mptcp: check subflows infos Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 4/7] selftests: mptcp: check add_addr infos Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 5/7] mptcp: pass addr to mptcp_pm_alloc_anno_list Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 6/7] selftests: mptcp: pass fastclose to sflags Geliang Tang
2023-05-15 2:10 ` [PATCH mptcp-next v13 7/7] selftests: mptcp: set endpoint out of transfer Geliang Tang
2023-05-17 16:41 ` Matthieu Baerts
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.