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