1 | From: Geliang Tang <tanggeliang@kylinos.cn> | 1 | From: Geliang Tang <tanggeliang@kylinos.cn> |
---|---|---|---|
2 | |||
3 | v2: | ||
4 | - squash patch 1 into patch 2 as Mat suggested. | ||
2 | 5 | ||
3 | Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/403 | 6 | Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/403 |
4 | 7 | ||
5 | Geliang Tang (3): | 8 | Geliang Tang (2): |
6 | mptcp: pm: userspace: local_addr_used-- after sending REMOVE_ADDR | ||
7 | mptcp: pm: userspace: drop delete_local_addr helper | 9 | mptcp: pm: userspace: drop delete_local_addr helper |
8 | selftests: mptcp: send REMOVE_ADDR after subflow is deleted | 10 | selftests: mptcp: send REMOVE_ADDR after subflow is deleted |
9 | 11 | ||
10 | net/mptcp/pm_userspace.c | 37 +++---------------- | 12 | net/mptcp/pm_userspace.c | 37 +++---------------- |
11 | .../testing/selftests/net/mptcp/mptcp_join.sh | 4 +- | 13 | .../testing/selftests/net/mptcp/mptcp_join.sh | 4 +- |
12 | .../selftests/net/mptcp/userspace_pm.sh | 6 +++ | 14 | .../selftests/net/mptcp/userspace_pm.sh | 6 +++ |
13 | 3 files changed, 14 insertions(+), 33 deletions(-) | 15 | 3 files changed, 14 insertions(+), 33 deletions(-) |
14 | 16 | ||
15 | -- | 17 | -- |
16 | 2.43.0 | 18 | 2.43.0 | diff view generated by jsdifflib |
Deleted patch | |||
---|---|---|---|
1 | From: Geliang Tang <tanggeliang@kylinos.cn> | ||
2 | 1 | ||
3 | Address entries are removed from local_addr_list when sending a REMOVE_ADDR | ||
4 | by the userspace PM, the local_addr_used counter of PM should also be | ||
5 | decremented accordingly. | ||
6 | |||
7 | Fixes: d9a4594edabf ("mptcp: netlink: Add MPTCP_PM_CMD_REMOVE") | ||
8 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> | ||
9 | --- | ||
10 | net/mptcp/pm_userspace.c | 1 + | ||
11 | 1 file changed, 1 insertion(+) | ||
12 | |||
13 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c | ||
14 | index XXXXXXX..XXXXXXX 100644 | ||
15 | --- a/net/mptcp/pm_userspace.c | ||
16 | +++ b/net/mptcp/pm_userspace.c | ||
17 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) | ||
18 | } | ||
19 | |||
20 | list_del_rcu(&match->list); | ||
21 | + msk->pm.local_addr_used--; | ||
22 | spin_unlock_bh(&msk->pm.lock); | ||
23 | |||
24 | mptcp_pm_remove_addr_entry(msk, match); | ||
25 | -- | ||
26 | 2.43.0 | diff view generated by jsdifflib |
... | ... | ||
---|---|---|---|
8 | mptcp_pm_nl_subflow_create_doit() and mptcp_pm_nl_subflow_destroy_doit(). | 8 | mptcp_pm_nl_subflow_create_doit() and mptcp_pm_nl_subflow_destroy_doit(). |
9 | 9 | ||
10 | Since this helper is open-coding in mptcp_pm_nl_remove_doit(), it can be | 10 | Since this helper is open-coding in mptcp_pm_nl_remove_doit(), it can be |
11 | dropped now. | 11 | dropped now. |
12 | 12 | ||
13 | Address entries are removed from local_addr_list when sending a REMOVE_ADDR | ||
14 | by the userspace PM, the local_addr_used counter of PM should also be | ||
15 | decremented accordingly. | ||
16 | |||
13 | Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/403 | 17 | Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/403 |
14 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> | 18 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> |
15 | --- | 19 | --- |
16 | net/mptcp/pm_userspace.c | 36 ++++-------------------------------- | 20 | net/mptcp/pm_userspace.c | 37 +++++-------------------------------- |
17 | 1 file changed, 4 insertions(+), 32 deletions(-) | 21 | 1 file changed, 5 insertions(+), 32 deletions(-) |
18 | 22 | ||
19 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c | 23 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c |
20 | index XXXXXXX..XXXXXXX 100644 | 24 | index XXXXXXX..XXXXXXX 100644 |
21 | --- a/net/mptcp/pm_userspace.c | 25 | --- a/net/mptcp/pm_userspace.c |
22 | +++ b/net/mptcp/pm_userspace.c | 26 | +++ b/net/mptcp/pm_userspace.c |
... | ... | ||
49 | -} | 53 | -} |
50 | - | 54 | - |
51 | static struct mptcp_pm_addr_entry * | 55 | static struct mptcp_pm_addr_entry * |
52 | mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int id) | 56 | mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int id) |
53 | { | 57 | { |
58 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) | ||
59 | } | ||
60 | |||
61 | list_del_rcu(&match->list); | ||
62 | + msk->pm.local_addr_used--; | ||
63 | spin_unlock_bh(&msk->pm.lock); | ||
64 | |||
65 | mptcp_pm_remove_addr_entry(msk, match); | ||
54 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) | 66 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) |
55 | err = __mptcp_subflow_connect(sk, &local, &addr_r); | 67 | err = __mptcp_subflow_connect(sk, &local, &addr_r); |
56 | release_sock(sk); | 68 | release_sock(sk); |
57 | 69 | ||
58 | - if (err) | 70 | - if (err) |
... | ... | diff view generated by jsdifflib |
1 | From: Geliang Tang <tanggeliang@kylinos.cn> | 1 | From: Geliang Tang <tanggeliang@kylinos.cn> |
---|---|---|---|
2 | 2 | ||
3 | Now address entries only be removed from local_addr_list when sending a | 3 | Now address entries only be removed from local_addr_list when sending a |
4 | REMOVE_ADDR by the userspace PM, they're no longer removed when a subflow | 4 | REMOVE_ADDR by the userspace PM, they're no longer removed when a subflow |
5 | is deleted. | 5 | is deleted. |
6 | 6 | ||
7 | To make the original userspace PM selftests pass, this patch always sends | 7 | To make the original userspace PM selftests pass, this patch always sends |
8 | a REMOVE_ADDR when a subflow is deleted. | 8 | a REMOVE_ADDR when a subflow is deleted. |
9 | 9 | ||
10 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> | 10 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> |
11 | --- | 11 | --- |
12 | tools/testing/selftests/net/mptcp/mptcp_join.sh | 4 +++- | 12 | tools/testing/selftests/net/mptcp/mptcp_join.sh | 4 +++- |
13 | tools/testing/selftests/net/mptcp/userspace_pm.sh | 6 ++++++ | 13 | tools/testing/selftests/net/mptcp/userspace_pm.sh | 6 ++++++ |
14 | 2 files changed, 9 insertions(+), 1 deletion(-) | 14 | 2 files changed, 9 insertions(+), 1 deletion(-) |
15 | 15 | ||
16 | diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh | 16 | diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh |
17 | index XXXXXXX..XXXXXXX 100755 | 17 | index XXXXXXX..XXXXXXX 100755 |
18 | --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh | 18 | --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh |
19 | +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh | 19 | +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh |
20 | @@ -XXX,XX +XXX,XX @@ userspace_tests() | 20 | @@ -XXX,XX +XXX,XX @@ userspace_tests() |
21 | userspace_pm_chk_get_addr "${ns1}" "10" "id 10 flags signal 10.0.2.1" | 21 | userspace_pm_chk_get_addr "${ns1}" "10" "id 10 flags signal 10.0.2.1" |
22 | userspace_pm_chk_get_addr "${ns1}" "20" "id 20 flags signal 10.0.3.1" | 22 | userspace_pm_chk_get_addr "${ns1}" "20" "id 20 flags signal 10.0.3.1" |
23 | userspace_pm_rm_sf $ns1 "::ffff:10.0.2.1" $MPTCP_LIB_EVENT_SUB_ESTABLISHED | 23 | userspace_pm_rm_sf $ns1 "::ffff:10.0.2.1" $MPTCP_LIB_EVENT_SUB_ESTABLISHED |
24 | + userspace_pm_rm_addr $ns1 10 | 24 | + userspace_pm_rm_addr $ns1 10 |
25 | userspace_pm_chk_dump_addr "${ns1}" \ | 25 | userspace_pm_chk_dump_addr "${ns1}" \ |
26 | "id 20 flags signal 10.0.3.1" "after rm_sf 10" | 26 | "id 20 flags signal 10.0.3.1" "after rm_sf 10" |
27 | userspace_pm_rm_addr $ns1 20 | 27 | userspace_pm_rm_addr $ns1 20 |
28 | userspace_pm_chk_dump_addr "${ns1}" "" "after rm_addr 20" | 28 | userspace_pm_chk_dump_addr "${ns1}" "" "after rm_addr 20" |
29 | - chk_rm_nr 1 1 invert | 29 | - chk_rm_nr 1 1 invert |
30 | + chk_rm_nr 2 1 invert | 30 | + chk_rm_nr 2 1 invert |
31 | chk_mptcp_info subflows 0 subflows 0 | 31 | chk_mptcp_info subflows 0 subflows 0 |
32 | chk_subflows_total 1 1 | 32 | chk_subflows_total 1 1 |
33 | kill_events_pids | 33 | kill_events_pids |
34 | @@ -XXX,XX +XXX,XX @@ userspace_tests() | 34 | @@ -XXX,XX +XXX,XX @@ userspace_tests() |
35 | "subflow" | 35 | "subflow" |
36 | userspace_pm_chk_get_addr "${ns2}" "20" "id 20 flags subflow 10.0.3.2" | 36 | userspace_pm_chk_get_addr "${ns2}" "20" "id 20 flags subflow 10.0.3.2" |
37 | userspace_pm_rm_sf $ns2 10.0.3.2 $MPTCP_LIB_EVENT_SUB_ESTABLISHED | 37 | userspace_pm_rm_sf $ns2 10.0.3.2 $MPTCP_LIB_EVENT_SUB_ESTABLISHED |
38 | + userspace_pm_rm_addr $ns2 20 | 38 | + userspace_pm_rm_addr $ns2 20 |
39 | userspace_pm_chk_dump_addr "${ns2}" \ | 39 | userspace_pm_chk_dump_addr "${ns2}" \ |
40 | "" \ | 40 | "" \ |
41 | "after rm_sf 20" | 41 | "after rm_sf 20" |
42 | diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/testing/selftests/net/mptcp/userspace_pm.sh | 42 | diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/testing/selftests/net/mptcp/userspace_pm.sh |
43 | index XXXXXXX..XXXXXXX 100755 | 43 | index XXXXXXX..XXXXXXX 100755 |
44 | --- a/tools/testing/selftests/net/mptcp/userspace_pm.sh | 44 | --- a/tools/testing/selftests/net/mptcp/userspace_pm.sh |
45 | +++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh | 45 | +++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh |
46 | @@ -XXX,XX +XXX,XX @@ test_subflows() | 46 | @@ -XXX,XX +XXX,XX @@ test_subflows() |
47 | :>"$server_evts" | 47 | :>"$server_evts" |
48 | ip netns exec "$ns1" ./pm_nl_ctl dsf lip dead:beef:2::1 lport "$sport" rip\ | 48 | ip netns exec "$ns1" ./pm_nl_ctl dsf lip dead:beef:2::1 lport "$sport" rip\ |
49 | dead:beef:2::2 rport "$client6_port" token "$server6_token" | 49 | dead:beef:2::2 rport "$client6_port" token "$server6_token" |
50 | + ip netns exec "$ns1" ./pm_nl_ctl rem id 23 token "$server6_token" | 50 | + ip netns exec "$ns1" ./pm_nl_ctl rem id 23 token "$server6_token" |
51 | sleep 0.5 | 51 | sleep 0.5 |
52 | verify_subflow_events "$server_evts" "$SUB_CLOSED" "$server6_token" "$AF_INET6"\ | 52 | verify_subflow_events "$server_evts" "$SUB_CLOSED" "$server6_token" "$AF_INET6"\ |
53 | "dead:beef:2::1" "dead:beef:2::2" "$client6_port" "23"\ | 53 | "dead:beef:2::1" "dead:beef:2::2" "$client6_port" "23"\ |
54 | @@ -XXX,XX +XXX,XX @@ test_subflows() | 54 | @@ -XXX,XX +XXX,XX @@ test_subflows() |
55 | :>"$server_evts" | 55 | :>"$server_evts" |
56 | ip netns exec "$ns1" ./pm_nl_ctl dsf lip 10.0.2.1 lport "$sport" rip 10.0.2.2 rport\ | 56 | ip netns exec "$ns1" ./pm_nl_ctl dsf lip 10.0.2.1 lport "$sport" rip 10.0.2.2 rport\ |
57 | $new4_port token "$server4_token" | 57 | $new4_port token "$server4_token" |
58 | + ip netns exec "$ns1" ./pm_nl_ctl rem id 23 token "$server4_token" | 58 | + ip netns exec "$ns1" ./pm_nl_ctl rem id 23 token "$server4_token" |
59 | sleep 0.5 | 59 | sleep 0.5 |
60 | verify_subflow_events "$server_evts" "$SUB_CLOSED" "$server4_token" "$AF_INET" "10.0.2.1"\ | 60 | verify_subflow_events "$server_evts" "$SUB_CLOSED" "$server4_token" "$AF_INET" "10.0.2.1"\ |
61 | "10.0.2.2" "$new4_port" "23" "$client_addr_id" "ns1" "ns2" | 61 | "10.0.2.2" "$new4_port" "23" "$client_addr_id" "ns1" "ns2" |
62 | @@ -XXX,XX +XXX,XX @@ test_subflows() | 62 | @@ -XXX,XX +XXX,XX @@ test_subflows() |
63 | :>"$client_evts" | 63 | :>"$client_evts" |
64 | ip netns exec "$ns2" ./pm_nl_ctl dsf lip 10.0.2.2 lport "$sport" rip 10.0.2.1 rport\ | 64 | ip netns exec "$ns2" ./pm_nl_ctl dsf lip 10.0.2.2 lport "$sport" rip 10.0.2.1 rport\ |
65 | $app4_port token "$client4_token" | 65 | $app4_port token "$client4_token" |
66 | + ip netns exec "$ns2" ./pm_nl_ctl rem id 23 token "$client4_token" | 66 | + ip netns exec "$ns2" ./pm_nl_ctl rem id 23 token "$client4_token" |
67 | sleep 0.5 | 67 | sleep 0.5 |
68 | verify_subflow_events "$client_evts" "$SUB_CLOSED" "$client4_token" "$AF_INET" "10.0.2.2"\ | 68 | verify_subflow_events "$client_evts" "$SUB_CLOSED" "$client4_token" "$AF_INET" "10.0.2.2"\ |
69 | "10.0.2.1" "$app4_port" "23" "$server_addr_id" "ns2" "ns1" | 69 | "10.0.2.1" "$app4_port" "23" "$server_addr_id" "ns2" "ns1" |
70 | @@ -XXX,XX +XXX,XX @@ test_subflows() | 70 | @@ -XXX,XX +XXX,XX @@ test_subflows() |
71 | :>"$client_evts" | 71 | :>"$client_evts" |
72 | ip netns exec "$ns2" ./pm_nl_ctl dsf lip dead:beef:2::2 lport "$sport" rip\ | 72 | ip netns exec "$ns2" ./pm_nl_ctl dsf lip dead:beef:2::2 lport "$sport" rip\ |
73 | dead:beef:2::1 rport $app6_port token "$client6_token" | 73 | dead:beef:2::1 rport $app6_port token "$client6_token" |
74 | + ip netns exec "$ns2" ./pm_nl_ctl rem id 23 token "$client6_token" | 74 | + ip netns exec "$ns2" ./pm_nl_ctl rem id 23 token "$client6_token" |
75 | sleep 0.5 | 75 | sleep 0.5 |
76 | verify_subflow_events $client_evts $SUB_CLOSED $client6_token $AF_INET6 "dead:beef:2::2"\ | 76 | verify_subflow_events $client_evts $SUB_CLOSED $client6_token $AF_INET6 "dead:beef:2::2"\ |
77 | "dead:beef:2::1" "$app6_port" "23" "$server_addr_id" "ns2" "ns1" | 77 | "dead:beef:2::1" "$app6_port" "23" "$server_addr_id" "ns2" "ns1" |
78 | @@ -XXX,XX +XXX,XX @@ test_subflows() | 78 | @@ -XXX,XX +XXX,XX @@ test_subflows() |
79 | :>"$client_evts" | 79 | :>"$client_evts" |
80 | ip netns exec "$ns2" ./pm_nl_ctl dsf lip 10.0.2.2 lport "$sport" rip 10.0.2.1 rport\ | 80 | ip netns exec "$ns2" ./pm_nl_ctl dsf lip 10.0.2.2 lport "$sport" rip 10.0.2.1 rport\ |
81 | $new4_port token "$client4_token" | 81 | $new4_port token "$client4_token" |
82 | + ip netns exec "$ns2" ./pm_nl_ctl rem id 23 token "$client4_token" | 82 | + ip netns exec "$ns2" ./pm_nl_ctl rem id 23 token "$client4_token" |
83 | sleep 0.5 | 83 | sleep 0.5 |
84 | verify_subflow_events "$client_evts" "$SUB_CLOSED" "$client4_token" "$AF_INET" "10.0.2.2"\ | 84 | verify_subflow_events "$client_evts" "$SUB_CLOSED" "$client4_token" "$AF_INET" "10.0.2.2"\ |
85 | "10.0.2.1" "$new4_port" "23" "$server_addr_id" "ns2" "ns1" | 85 | "10.0.2.1" "$new4_port" "23" "$server_addr_id" "ns2" "ns1" |
86 | @@ -XXX,XX +XXX,XX @@ test_subflows_v4_v6_mix() | 86 | @@ -XXX,XX +XXX,XX @@ test_subflows_v4_v6_mix() |
87 | :>"$client_evts" | 87 | :>"$client_evts" |
88 | ip netns exec "$ns2" ./pm_nl_ctl dsf lip 10.0.2.2 lport "$sport" rip 10.0.2.1 rport\ | 88 | ip netns exec "$ns2" ./pm_nl_ctl dsf lip 10.0.2.2 lport "$sport" rip 10.0.2.1 rport\ |
89 | $app6_port token "$client6_token" | 89 | $app6_port token "$client6_token" |
90 | + ip netns exec "$ns2" ./pm_nl_ctl rem id 23 token "$client6_token" | 90 | + ip netns exec "$ns2" ./pm_nl_ctl rem id 23 token "$client6_token" |
91 | sleep 0.5 | 91 | sleep 0.5 |
92 | verify_subflow_events "$client_evts" "$SUB_CLOSED" "$client6_token" \ | 92 | verify_subflow_events "$client_evts" "$SUB_CLOSED" "$client6_token" \ |
93 | "$AF_INET" "10.0.2.2" "10.0.2.1" "$app6_port" "23"\ | 93 | "$AF_INET" "10.0.2.2" "10.0.2.1" "$app6_port" "23"\ |
94 | -- | 94 | -- |
95 | 2.43.0 | 95 | 2.43.0 | diff view generated by jsdifflib |