1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
3
v6:
4
- add "name" in struct mptcp_pm_ops.
5
- add some "sysctl" patches.
6
- drop "struct mptcp_pm_param".
7
- drop "pm_type" in mptcp_pm_data.
2
8
3
v5:
9
v5:
4
- use "struct mptcp_pm_param *param" as unified parameters for all
10
- use "struct mptcp_pm_param *param" as unified parameters for all
5
interfaces.
11
interfaces.
6
- register in-kernel mptcp_pm_ops too.
12
- register in-kernel mptcp_pm_ops too.
...
...
42
In order to implement BPF path manager, it's necessary to unify the
48
In order to implement BPF path manager, it's necessary to unify the
43
interfaces of the path manager. This set contains some cleanups and
49
interfaces of the path manager. This set contains some cleanups and
44
refactoring to unify the interfaces in kernel space. Finally, define
50
refactoring to unify the interfaces in kernel space. Finally, define
45
a struct mptcp_pm_ops for a path manager.
51
a struct mptcp_pm_ops for a path manager.
46
52
47
Geliang Tang (9):
53
Geliang Tang (13):
54
mptcp: sysctl: use index for sysctl table
55
mptcp: sysctl: add path_manager to set pm name
48
mptcp: pm: use addr entry for get_local_id
56
mptcp: pm: use addr entry for get_local_id
49
mptcp: pm: add struct mptcp_pm_param
50
mptcp: pm: pass pm_param to get_local_id
51
mptcp: pm: define struct mptcp_pm_ops
57
mptcp: pm: define struct mptcp_pm_ops
52
mptcp: pm: in-kernel: register mptcp_netlink_pm
58
mptcp: pm: in-kernel: register mptcp_in_kernel_pm
53
mptcp: pm: userspace: register mptcp_userspace_pm
59
mptcp: pm: userspace: register mptcp_userspace_pm
54
mptcp: pm: initialize and release mptcp_pm_ops
60
mptcp: pm: initialize and release mptcp_pm_ops
61
mptcp: pm: drop pm_type in mptcp_pm_data
62
mptcp: sysctl: drop old pm_type sysctl
63
mptcp: sysctl: add available_path_managers
55
mptcp: pm: drop get_local_id helpers
64
mptcp: pm: drop get_local_id helpers
56
mptcp: pm: drop is_backup helpers
65
mptcp: pm: drop is_backup helpers
66
selftests/mptcp: use path_manager instead of pm_type
57
67
58
include/net/mptcp.h | 42 +++++++++++++
68
Documentation/networking/mptcp-sysctl.rst | 14 +-
59
net/mptcp/pm.c | 131 ++++++++++++++++++++++++++++++++++++---
69
include/net/mptcp.h | 39 +++++
60
net/mptcp/pm_netlink.c | 23 +++++--
70
net/mptcp/ctrl.c | 104 ++++++++++---
61
net/mptcp/pm_userspace.c | 37 ++++++-----
71
net/mptcp/pm.c | 141 ++++++++++++++++--
62
net/mptcp/protocol.c | 1 +
72
net/mptcp/pm_netlink.c | 24 ++-
63
net/mptcp/protocol.h | 24 +++----
73
net/mptcp/pm_userspace.c | 36 +++--
64
6 files changed, 216 insertions(+), 42 deletions(-)
74
net/mptcp/protocol.c | 1 +
75
net/mptcp/protocol.h | 23 ++-
76
.../testing/selftests/net/mptcp/mptcp_join.sh | 26 ++--
77
.../selftests/net/mptcp/userspace_pm.sh | 4 +-
78
10 files changed, 324 insertions(+), 88 deletions(-)
65
79
66
--
80
--
67
2.43.0
81
2.43.0
diff view generated by jsdifflib
New patch
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
2
3
The sysctl table needs to be updated when a new sysctl is added or an old
4
sysctl is deleted. It's inconvenient to use fixed index numbers, since the
5
index number that needs to be changed and all subsequent index numbers need
6
to be updated accordingly.
7
8
This patch adds an "i" variable to access each sysctl in the sysctl table
9
incrementally.
10
11
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
12
---
13
net/mptcp/ctrl.c | 23 ++++++++++++-----------
14
1 file changed, 12 insertions(+), 11 deletions(-)
15
16
diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c
17
index XXXXXXX..XXXXXXX 100644
18
--- a/net/mptcp/ctrl.c
19
+++ b/net/mptcp/ctrl.c
20
@@ -XXX,XX +XXX,XX @@ static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pernet)
21
{
22
    struct ctl_table_header *hdr;
23
    struct ctl_table *table;
24
+    int i = 0;
25
26
    table = mptcp_sysctl_table;
27
    if (!net_eq(net, &init_net)) {
28
@@ -XXX,XX +XXX,XX @@ static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pernet)
29
            goto err_alloc;
30
    }
31
32
-    table[0].data = &pernet->mptcp_enabled;
33
-    table[1].data = &pernet->add_addr_timeout;
34
-    table[2].data = &pernet->checksum_enabled;
35
-    table[3].data = &pernet->allow_join_initial_addr_port;
36
-    table[4].data = &pernet->stale_loss_cnt;
37
-    table[5].data = &pernet->pm_type;
38
-    table[6].data = &pernet->scheduler;
39
-    /* table[7] is for available_schedulers which is read-only info */
40
-    table[8].data = &pernet->close_timeout;
41
-    table[9].data = &pernet->blackhole_timeout;
42
-    table[10].data = &pernet->syn_retrans_before_tcp_fallback;
43
+    table[i++].data = &pernet->mptcp_enabled;
44
+    table[i++].data = &pernet->add_addr_timeout;
45
+    table[i++].data = &pernet->checksum_enabled;
46
+    table[i++].data = &pernet->allow_join_initial_addr_port;
47
+    table[i++].data = &pernet->stale_loss_cnt;
48
+    table[i++].data = &pernet->pm_type;
49
+    table[i++].data = &pernet->scheduler;
50
+    i++; /* table[i] is for available_schedulers which is read-only info */
51
+    table[i++].data = &pernet->close_timeout;
52
+    table[i++].data = &pernet->blackhole_timeout;
53
+    table[i++].data = &pernet->syn_retrans_before_tcp_fallback;
54
55
    hdr = register_net_sysctl_sz(net, MPTCP_SYSCTL_PATH, table,
56
                 ARRAY_SIZE(mptcp_sysctl_table));
57
--
58
2.43.0
diff view generated by jsdifflib
New patch
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
2
3
A new net.mptcp.path_manager sysctl is added to determine which path
4
manager will be used by each newly-created MPTCP socket by setting the
5
name of it. This sysctl will replace the old one pm_type.
6
7
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
8
---
9
Documentation/networking/mptcp-sysctl.rst | 17 ++++++++
10
net/mptcp/ctrl.c | 50 +++++++++++++++++++++++
11
net/mptcp/protocol.h | 1 +
12
3 files changed, 68 insertions(+)
13
14
diff --git a/Documentation/networking/mptcp-sysctl.rst b/Documentation/networking/mptcp-sysctl.rst
15
index XXXXXXX..XXXXXXX 100644
16
--- a/Documentation/networking/mptcp-sysctl.rst
17
+++ b/Documentation/networking/mptcp-sysctl.rst
18
@@ -XXX,XX +XXX,XX @@ pm_type - INTEGER
19
20
    Default: 0
21
22
+path_manager - STRING
23
+    Set the default path manager name to use for each new MPTCP
24
+    socket. In-kernel path management will control subflow
25
+    connections and address advertisements according to
26
+    per-namespace values configured over the MPTCP netlink
27
+    API. Userspace path management puts per-MPTCP-connection subflow
28
+    connection decisions and address advertisements under control of
29
+    a privileged userspace program, at the cost of more netlink
30
+    traffic to propagate all of the related events and commands.
31
+
32
+    This is a per-namespace sysctl.
33
+
34
+    * "in-kernel" - In-kernel path manager
35
+    * "userspace" - Userspace path manager
36
+
37
+    Default: "in-kernel"
38
+
39
scheduler - STRING
40
    Select the scheduler of your choice.
41
42
diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c
43
index XXXXXXX..XXXXXXX 100644
44
--- a/net/mptcp/ctrl.c
45
+++ b/net/mptcp/ctrl.c
46
@@ -XXX,XX +XXX,XX @@ struct mptcp_pernet {
47
    u8 checksum_enabled;
48
    u8 allow_join_initial_addr_port;
49
    u8 pm_type;
50
+    char path_manager[MPTCP_PM_NAME_MAX];
51
    char scheduler[MPTCP_SCHED_NAME_MAX];
52
};
53
54
@@ -XXX,XX +XXX,XX @@ int mptcp_get_pm_type(const struct net *net)
55
    return mptcp_get_pernet(net)->pm_type;
56
}
57
58
+const char *mptcp_get_path_manager(const struct net *net)
59
+{
60
+    return mptcp_get_pernet(net)->path_manager;
61
+}
62
+
63
const char *mptcp_get_scheduler(const struct net *net)
64
{
65
    return mptcp_get_pernet(net)->scheduler;
66
@@ -XXX,XX +XXX,XX @@ static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet)
67
    pernet->allow_join_initial_addr_port = 1;
68
    pernet->stale_loss_cnt = 4;
69
    pernet->pm_type = MPTCP_PM_TYPE_KERNEL;
70
+    strscpy(pernet->path_manager, "in-kernel", sizeof(pernet->path_manager));
71
    strscpy(pernet->scheduler, "default", sizeof(pernet->scheduler));
72
}
73
74
#ifdef CONFIG_SYSCTL
75
+static int mptcp_set_path_manager(char *path_manager, const char *name)
76
+{
77
+    struct mptcp_pm_ops *pm;
78
+    int ret = 0;
79
+
80
+    rcu_read_lock();
81
+    pm = mptcp_pm_find(name);
82
+    if (pm)
83
+        strscpy(path_manager, name, MPTCP_PM_NAME_MAX);
84
+    else
85
+        ret = -ENOENT;
86
+    rcu_read_unlock();
87
+
88
+    return ret;
89
+}
90
+
91
+static int proc_path_manager(const struct ctl_table *ctl, int write,
92
+             void *buffer, size_t *lenp, loff_t *ppos)
93
+{
94
+    char (*path_manager)[MPTCP_PM_NAME_MAX] = ctl->data;
95
+    char val[MPTCP_PM_NAME_MAX];
96
+    const struct ctl_table tbl = {
97
+        .data = val,
98
+        .maxlen = MPTCP_PM_NAME_MAX,
99
+    };
100
+    int ret;
101
+
102
+    strscpy(val, *path_manager, MPTCP_PM_NAME_MAX);
103
+
104
+    ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
105
+    if (write && ret == 0)
106
+        ret = mptcp_set_path_manager(*path_manager, val);
107
+
108
+    return ret;
109
+}
110
+
111
static int mptcp_set_scheduler(char *scheduler, const char *name)
112
{
113
    struct mptcp_sched_ops *sched;
114
@@ -XXX,XX +XXX,XX @@ static struct ctl_table mptcp_sysctl_table[] = {
115
        .extra1 = SYSCTL_ZERO,
116
        .extra2 = &mptcp_pm_type_max
117
    },
118
+    {
119
+        .procname = "path_manager",
120
+        .maxlen    = MPTCP_PM_NAME_MAX,
121
+        .mode = 0644,
122
+        .proc_handler = proc_path_manager,
123
+    },
124
    {
125
        .procname = "scheduler",
126
        .maxlen    = MPTCP_SCHED_NAME_MAX,
127
@@ -XXX,XX +XXX,XX @@ static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pernet)
128
    table[i++].data = &pernet->allow_join_initial_addr_port;
129
    table[i++].data = &pernet->stale_loss_cnt;
130
    table[i++].data = &pernet->pm_type;
131
+    table[i++].data = &pernet->path_manager;
132
    table[i++].data = &pernet->scheduler;
133
    i++; /* table[i] is for available_schedulers which is read-only info */
134
    table[i++].data = &pernet->close_timeout;
135
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
136
index XXXXXXX..XXXXXXX 100644
137
--- a/net/mptcp/protocol.h
138
+++ b/net/mptcp/protocol.h
139
@@ -XXX,XX +XXX,XX @@ int mptcp_allow_join_id0(const struct net *net);
140
unsigned int mptcp_stale_loss_cnt(const struct net *net);
141
unsigned int mptcp_close_timeout(const struct sock *sk);
142
int mptcp_get_pm_type(const struct net *net);
143
+const char *mptcp_get_path_manager(const struct net *net);
144
const char *mptcp_get_scheduler(const struct net *net);
145
146
void mptcp_active_disable(struct sock *sk);
147
--
148
2.43.0
diff view generated by jsdifflib
...
...
13
to mptcp_pm_get_local_id(), and then passing "new_entry" as a parameter to
13
to mptcp_pm_get_local_id(), and then passing "new_entry" as a parameter to
14
both mptcp_pm_nl_get_local_id() and mptcp_userspace_pm_get_local_id().
14
both mptcp_pm_nl_get_local_id() and mptcp_userspace_pm_get_local_id().
15
15
16
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
16
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
17
---
17
---
18
net/mptcp/pm.c | 11 ++++++++---
18
net/mptcp/pm.c | 9 ++++++---
19
net/mptcp/pm_netlink.c | 9 ++++-----
19
net/mptcp/pm_netlink.c | 11 ++++-------
20
net/mptcp/pm_userspace.c | 17 ++++++-----------
20
net/mptcp/pm_userspace.c | 17 ++++++-----------
21
net/mptcp/protocol.h | 6 ++++--
21
net/mptcp/protocol.h | 6 ++++--
22
4 files changed, 22 insertions(+), 21 deletions(-)
22
4 files changed, 20 insertions(+), 23 deletions(-)
23
23
24
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
24
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
25
index XXXXXXX..XXXXXXX 100644
25
index XXXXXXX..XXXXXXX 100644
26
--- a/net/mptcp/pm.c
26
--- a/net/mptcp/pm.c
27
+++ b/net/mptcp/pm.c
27
+++ b/net/mptcp/pm.c
28
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
28
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
29
29
30
int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc)
30
int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc)
31
{
31
{
32
-    struct mptcp_addr_info skc_local;
32
-    struct mptcp_addr_info skc_local;
33
+    struct mptcp_pm_addr_entry skc_local;
33
+    struct mptcp_pm_addr_entry skc_local = { 0 };
34
    struct mptcp_addr_info msk_local;
34
    struct mptcp_addr_info msk_local;
35
35
36
    if (WARN_ON_ONCE(!msk))
36
    if (WARN_ON_ONCE(!msk))
37
        return -1;
37
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc)
38
39
+    memset(&skc_local, 0, sizeof(struct mptcp_pm_addr_entry));
40
+
41
    /* The 0 ID mapping is defined by the first subflow, copied into the msk
42
     * addr
38
     * addr
43
     */
39
     */
44
    mptcp_local_address((struct sock_common *)msk, &msk_local);
40
    mptcp_local_address((struct sock_common *)msk, &msk_local);
45
-    mptcp_local_address((struct sock_common *)skc, &skc_local);
41
-    mptcp_local_address((struct sock_common *)skc, &skc_local);
46
-    if (mptcp_addresses_equal(&msk_local, &skc_local, false))
42
-    if (mptcp_addresses_equal(&msk_local, &skc_local, false))
...
...
83
79
84
-    entry->addr = *skc;
80
-    entry->addr = *skc;
85
-    entry->addr.id = 0;
81
-    entry->addr.id = 0;
86
+    *entry = *skc;
82
+    *entry = *skc;
87
    entry->addr.port = 0;
83
    entry->addr.port = 0;
88
    entry->ifindex = 0;
84
-    entry->ifindex = 0;
89
-    entry->flags = MPTCP_PM_ADDR_FLAG_IMPLICIT;
85
-    entry->flags = MPTCP_PM_ADDR_FLAG_IMPLICIT;
90
    entry->lsk = NULL;
86
-    entry->lsk = NULL;
91
    ret = mptcp_pm_nl_append_new_local_addr(pernet, entry, true);
87
    ret = mptcp_pm_nl_append_new_local_addr(pernet, entry, true);
92
    if (ret < 0)
88
    if (ret < 0)
89
        kfree(entry);
93
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
90
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
94
index XXXXXXX..XXXXXXX 100644
91
index XXXXXXX..XXXXXXX 100644
95
--- a/net/mptcp/pm_userspace.c
92
--- a/net/mptcp/pm_userspace.c
96
+++ b/net/mptcp/pm_userspace.c
93
+++ b/net/mptcp/pm_userspace.c
97
@@ -XXX,XX +XXX,XX @@ mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int id)
94
@@ -XXX,XX +XXX,XX @@ mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int id)
...
...
diff view generated by jsdifflib
...
...
7
Add a set of functions to register, unregister, find and validate a
7
Add a set of functions to register, unregister, find and validate a
8
given struct ops.
8
given struct ops.
9
9
10
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
10
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
11
---
11
---
12
include/net/mptcp.h | 29 ++++++++++++++++++++++
12
include/net/mptcp.h | 37 +++++++++++++++++++++++++++++
13
net/mptcp/pm.c | 59 ++++++++++++++++++++++++++++++++++++++++++++
13
net/mptcp/pm.c | 55 ++++++++++++++++++++++++++++++++++++++++++++
14
net/mptcp/protocol.h | 5 ++++
14
net/mptcp/protocol.h | 5 ++++
15
3 files changed, 93 insertions(+)
15
3 files changed, 97 insertions(+)
16
16
17
diff --git a/include/net/mptcp.h b/include/net/mptcp.h
17
diff --git a/include/net/mptcp.h b/include/net/mptcp.h
18
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
19
--- a/include/net/mptcp.h
19
--- a/include/net/mptcp.h
20
+++ b/include/net/mptcp.h
20
+++ b/include/net/mptcp.h
21
@@ -XXX,XX +XXX,XX @@ struct mptcp_pm_param {
21
@@ -XXX,XX +XXX,XX @@
22
    struct mptcp_addr_info        addr;
22
23
};
23
struct mptcp_info;
24
24
struct mptcp_sock;
25
+struct mptcp_pm_addr_entry;
26
struct seq_file;
27
28
/* MPTCP sk_buff extension data */
29
@@ -XXX,XX +XXX,XX @@ struct mptcp_sched_ops {
30
    void (*release)(struct mptcp_sock *msk);
31
} ____cacheline_aligned_in_smp;
32
33
+#define MPTCP_PM_NAME_MAX    16
34
+
25
+struct mptcp_pm_ops {
35
+struct mptcp_pm_ops {
26
+    int (*created)(struct mptcp_sock *msk);
36
+    int (*created)(struct mptcp_sock *msk);
27
+    int (*established)(struct mptcp_sock *msk);
37
+    int (*established)(struct mptcp_sock *msk);
28
+    int (*closed)(struct mptcp_sock *msk);
38
+    int (*closed)(struct mptcp_sock *msk);
39
+    int (*get_local_id)(struct mptcp_sock *msk,
40
+             struct mptcp_pm_addr_entry *skc);
41
+    bool (*get_priority)(struct mptcp_sock *msk,
42
+             struct mptcp_addr_info *skc);
29
+    int (*address_announced)(struct mptcp_sock *msk,
43
+    int (*address_announced)(struct mptcp_sock *msk,
30
+                 struct mptcp_pm_param *param);
44
+                 struct mptcp_pm_addr_entry *local);
31
+    int (*address_removed)(struct mptcp_sock *msk,
45
+    int (*address_removed)(struct mptcp_sock *msk,
32
+             struct mptcp_pm_param *param);
46
+             struct mptcp_pm_addr_entry *local);
33
+    int (*subflow_established)(struct mptcp_sock *msk,
47
+    int (*subflow_established)(struct mptcp_sock *msk,
34
+                 struct mptcp_pm_param *param);
48
+                 struct mptcp_pm_addr_entry *local,
49
+                 struct mptcp_addr_info *remote);
35
+    int (*subflow_closed)(struct mptcp_sock *msk,
50
+    int (*subflow_closed)(struct mptcp_sock *msk,
36
+             struct mptcp_pm_param *param);
51
+             struct mptcp_pm_addr_entry *local,
37
+    int (*get_local_id)(struct mptcp_sock *msk,
52
+             struct mptcp_addr_info *remote);
38
+             struct mptcp_pm_param *param);
39
+    bool (*get_priority)(struct mptcp_sock *msk,
40
+             struct mptcp_pm_param *param);
41
+    int (*set_priority)(struct mptcp_sock *msk,
53
+    int (*set_priority)(struct mptcp_sock *msk,
42
+             struct mptcp_pm_param *param);
54
+             struct mptcp_pm_addr_entry *local,
55
+             struct mptcp_addr_info *remote,
56
+             u8 changed);
43
+    int (*listener_created)(struct mptcp_sock *msk);
57
+    int (*listener_created)(struct mptcp_sock *msk);
44
+    int (*listener_closed)(struct mptcp_sock *msk);
58
+    int (*listener_closed)(struct mptcp_sock *msk);
45
+
59
+
46
+    u8            type;
60
+    u8            type;
61
+    char            name[MPTCP_PM_NAME_MAX];
47
+    struct module        *owner;
62
+    struct module        *owner;
48
+    struct list_head    list;
63
+    struct list_head    list;
49
+
64
+
50
+    void (*init)(struct mptcp_sock *msk);
65
+    void (*init)(struct mptcp_sock *msk);
51
+    void (*release)(struct mptcp_sock *msk);
66
+    void (*release)(struct mptcp_sock *msk);
...
...
80
{
95
{
81
    mptcp_pm_nl_init();
96
    mptcp_pm_nl_init();
82
}
97
}
83
+
98
+
84
+/* Must be called with rcu read lock held */
99
+/* Must be called with rcu read lock held */
85
+struct mptcp_pm_ops *mptcp_pm_find(enum mptcp_pm_type type)
100
+struct mptcp_pm_ops *mptcp_pm_find(const char *name)
86
+{
101
+{
87
+    struct mptcp_pm_ops *pm;
102
+    struct mptcp_pm_ops *pm;
88
+
103
+
89
+    list_for_each_entry_rcu(pm, &mptcp_pm_list, list) {
104
+    list_for_each_entry_rcu(pm, &mptcp_pm_list, list) {
90
+        if (pm->type == type)
105
+        if (!strcmp(pm->name, name))
91
+            return pm;
106
+            return pm;
92
+    }
107
+    }
93
+
108
+
94
+    return NULL;
109
+    return NULL;
95
+}
110
+}
96
+
111
+
97
+int mptcp_pm_validate(struct mptcp_pm_ops *pm)
112
+int mptcp_pm_validate(struct mptcp_pm_ops *pm)
98
+{
113
+{
99
+    if (!pm->created && !pm->established && !pm->closed &&
114
+    if (!pm->get_local_id || !pm->get_priority) {
100
+     !pm->address_announced && !pm->address_removed &&
101
+     !pm->subflow_established && !pm->subflow_closed &&
102
+     !pm->get_local_id && !pm->get_priority && !pm->set_priority &&
103
+     !pm->listener_created && !pm->listener_closed) {
104
+        pr_err("%u does not implement required ops\n", pm->type);
115
+        pr_err("%u does not implement required ops\n", pm->type);
105
+        return -EINVAL;
116
+        return -EINVAL;
106
+    }
117
+    }
107
+
118
+
108
+    return 0;
119
+    return 0;
...
...
115
+    ret = mptcp_pm_validate(pm);
126
+    ret = mptcp_pm_validate(pm);
116
+    if (ret)
127
+    if (ret)
117
+        return ret;
128
+        return ret;
118
+
129
+
119
+    spin_lock(&mptcp_pm_list_lock);
130
+    spin_lock(&mptcp_pm_list_lock);
120
+    if (mptcp_pm_find(pm->type)) {
131
+    if (mptcp_pm_find(pm->name)) {
121
+        spin_unlock(&mptcp_pm_list_lock);
132
+        spin_unlock(&mptcp_pm_list_lock);
122
+        return -EEXIST;
133
+        return -EEXIST;
123
+    }
134
+    }
124
+    list_add_tail_rcu(&pm->list, &mptcp_pm_list);
135
+    list_add_tail_rcu(&pm->list, &mptcp_pm_list);
125
+    spin_unlock(&mptcp_pm_list_lock);
136
+    spin_unlock(&mptcp_pm_list_lock);
126
+
137
+
127
+    pr_debug("userspace_pm type %u registered\n", pm->type);
138
+    pr_debug("%s registered\n", pm->name);
128
+    return 0;
139
+    return 0;
129
+}
140
+}
130
+
141
+
131
+void mptcp_pm_unregister(struct mptcp_pm_ops *pm)
142
+void mptcp_pm_unregister(struct mptcp_pm_ops *pm)
132
+{
143
+{
...
...
140
+++ b/net/mptcp/protocol.h
151
+++ b/net/mptcp/protocol.h
141
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_
152
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_
142
void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk,
153
void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk,
143
                struct mptcp_pm_addr_entry *entry);
154
                struct mptcp_pm_addr_entry *entry);
144
155
145
+struct mptcp_pm_ops *mptcp_pm_find(enum mptcp_pm_type type);
156
+struct mptcp_pm_ops *mptcp_pm_find(const char *name);
146
+int mptcp_pm_validate(struct mptcp_pm_ops *pm);
157
+int mptcp_pm_validate(struct mptcp_pm_ops *pm);
147
+int mptcp_pm_register(struct mptcp_pm_ops *pm);
158
+int mptcp_pm_register(struct mptcp_pm_ops *pm);
148
+void mptcp_pm_unregister(struct mptcp_pm_ops *pm);
159
+void mptcp_pm_unregister(struct mptcp_pm_ops *pm);
149
+
160
+
150
void mptcp_free_local_addr_list(struct mptcp_sock *msk);
161
void mptcp_free_local_addr_list(struct mptcp_sock *msk);
151
162
152
void mptcp_event(enum mptcp_event_type type, const struct mptcp_sock *msk,
163
void mptcp_event(enum mptcp_event_type type, const struct mptcp_sock *msk,
153
--
164
--
154
2.43.0
165
2.43.0
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
This patch defines the original in-kernel netlink path manager as a new
3
This patch defines the original in-kernel netlink path manager as a new
4
struct mptcp_pm_ops named "mptcp_netlink_pm", and register it in
4
struct mptcp_pm_ops named "mptcp_in_kernel_pm", and register it in
5
mptcp_pm_nl_init().
5
mptcp_pm_nl_init().
6
7
This mptcp_pm_ops will be skipped in mptcp_pm_unregister().
6
8
7
Only get_local_id() and get_priority() interfaces are implemented here.
9
Only get_local_id() and get_priority() interfaces are implemented here.
8
mptcp_pm_nl_is_backup() becomes a wrapper of get_priority().
10
mptcp_pm_nl_is_backup() becomes a wrapper of get_priority().
9
11
10
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
12
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
11
---
13
---
12
net/mptcp/pm_netlink.c | 21 ++++++++++++++++++++-
14
net/mptcp/pm.c | 3 +++
13
1 file changed, 20 insertions(+), 1 deletion(-)
15
net/mptcp/pm_netlink.c | 18 +++++++++++++++++-
16
net/mptcp/protocol.h | 2 ++
17
3 files changed, 22 insertions(+), 1 deletion(-)
14
18
19
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
20
index XXXXXXX..XXXXXXX 100644
21
--- a/net/mptcp/pm.c
22
+++ b/net/mptcp/pm.c
23
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_register(struct mptcp_pm_ops *pm)
24
25
void mptcp_pm_unregister(struct mptcp_pm_ops *pm)
26
{
27
+    if (pm == &mptcp_in_kernel_pm)
28
+        return;
29
+
30
    spin_lock(&mptcp_pm_list_lock);
31
    list_del_rcu(&pm->list);
32
    spin_unlock(&mptcp_pm_list_lock);
15
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
33
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
16
index XXXXXXX..XXXXXXX 100644
34
index XXXXXXX..XXXXXXX 100644
17
--- a/net/mptcp/pm_netlink.c
35
--- a/net/mptcp/pm_netlink.c
18
+++ b/net/mptcp/pm_netlink.c
36
+++ b/net/mptcp/pm_netlink.c
19
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk,
37
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk,
20
    return ret;
38
    return ret;
21
}
39
}
22
40
23
-bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc)
41
-bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc)
24
+static bool mptcp_pm_nl_get_priority(struct mptcp_sock *msk,
42
+static bool mptcp_pm_nl_get_priority(struct mptcp_sock *msk,
25
+                 struct mptcp_pm_param *param)
43
+                 struct mptcp_addr_info *skc)
26
{
44
{
27
    struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
45
    struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
28
+    struct mptcp_addr_info *skc = &param->addr;
29
    struct mptcp_pm_addr_entry *entry;
46
    struct mptcp_pm_addr_entry *entry;
30
    bool backup;
31
32
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc)
47
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc)
33
    return backup;
48
    return backup;
34
}
49
}
35
50
36
+bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc)
51
+bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc)
37
+{
52
+{
38
+    struct mptcp_pm_param param;
53
+    return mptcp_pm_nl_get_priority(msk, skc);
39
+
40
+    mptcp_pm_param_set_contexts(&param, NULL, skc);
41
+    return mptcp_pm_nl_get_priority(msk, &param);
42
+}
54
+}
43
+
55
+
44
#define MPTCP_PM_CMD_GRP_OFFSET 0
56
#define MPTCP_PM_CMD_GRP_OFFSET 0
45
#define MPTCP_PM_EV_GRP_OFFSET 1
57
#define MPTCP_PM_EV_GRP_OFFSET 1
46
58
47
@@ -XXX,XX +XXX,XX @@ static struct pernet_operations mptcp_pm_pernet_ops = {
59
@@ -XXX,XX +XXX,XX @@ static struct pernet_operations mptcp_pm_pernet_ops = {
48
    .size = sizeof(struct pm_nl_pernet),
60
    .size = sizeof(struct pm_nl_pernet),
49
};
61
};
50
62
51
+static struct mptcp_pm_ops mptcp_netlink_pm = {
63
+struct mptcp_pm_ops mptcp_in_kernel_pm = {
52
+    .get_local_id        = mptcp_pm_nl_get_local_id,
64
+    .get_local_id        = mptcp_pm_nl_get_local_id,
53
+    .get_priority        = mptcp_pm_nl_get_priority,
65
+    .get_priority        = mptcp_pm_nl_get_priority,
54
+    .type            = MPTCP_PM_TYPE_KERNEL,
66
+    .type            = MPTCP_PM_TYPE_KERNEL,
67
+    .name            = "in-kernel",
55
+    .owner            = THIS_MODULE,
68
+    .owner            = THIS_MODULE,
56
+};
69
+};
57
+
70
+
58
void __init mptcp_pm_nl_init(void)
71
void __init mptcp_pm_nl_init(void)
59
{
72
{
60
    if (register_pernet_subsys(&mptcp_pm_pernet_ops) < 0)
73
    if (register_pernet_subsys(&mptcp_pm_pernet_ops) < 0)
61
@@ -XXX,XX +XXX,XX @@ void __init mptcp_pm_nl_init(void)
74
@@ -XXX,XX +XXX,XX @@ void __init mptcp_pm_nl_init(void)
62
75
63
    if (genl_register_family(&mptcp_genl_family))
76
    if (genl_register_family(&mptcp_genl_family))
64
        panic("Failed to register MPTCP PM netlink family\n");
77
        panic("Failed to register MPTCP PM netlink family\n");
65
+
78
+
66
+    mptcp_pm_register(&mptcp_netlink_pm);
79
+    mptcp_pm_register(&mptcp_in_kernel_pm);
67
}
80
}
81
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
82
index XXXXXXX..XXXXXXX 100644
83
--- a/net/mptcp/protocol.h
84
+++ b/net/mptcp/protocol.h
85
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_
86
void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk,
87
                struct mptcp_pm_addr_entry *entry);
88
89
+extern struct mptcp_pm_ops mptcp_in_kernel_pm;
90
+
91
struct mptcp_pm_ops *mptcp_pm_find(const char *name);
92
int mptcp_pm_validate(struct mptcp_pm_ops *pm);
93
int mptcp_pm_register(struct mptcp_pm_ops *pm);
68
--
94
--
69
2.43.0
95
2.43.0
diff view generated by jsdifflib
...
...
8
mptcp_userspace_pm_is_backup() becomes a wrapper of get_priority().
8
mptcp_userspace_pm_is_backup() becomes a wrapper of get_priority().
9
9
10
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
10
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
11
---
11
---
12
net/mptcp/pm.c | 1 +
12
net/mptcp/pm.c | 1 +
13
net/mptcp/pm_userspace.c | 26 ++++++++++++++++++++++++--
13
net/mptcp/pm_userspace.c | 23 +++++++++++++++++++++--
14
net/mptcp/protocol.h | 1 +
14
net/mptcp/protocol.h | 1 +
15
3 files changed, 26 insertions(+), 2 deletions(-)
15
3 files changed, 23 insertions(+), 2 deletions(-)
16
16
17
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
17
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
18
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
19
--- a/net/mptcp/pm.c
19
--- a/net/mptcp/pm.c
20
+++ b/net/mptcp/pm.c
20
+++ b/net/mptcp/pm.c
...
...
35
}
35
}
36
36
37
-bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk,
37
-bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk,
38
-                 struct mptcp_addr_info *skc)
38
-                 struct mptcp_addr_info *skc)
39
+static bool mptcp_userspace_pm_get_priority(struct mptcp_sock *msk,
39
+static bool mptcp_userspace_pm_get_priority(struct mptcp_sock *msk,
40
+                     struct mptcp_pm_param *param)
40
+                     struct mptcp_addr_info *skc)
41
{
41
{
42
+    struct mptcp_addr_info *skc = &param->addr;
43
    struct mptcp_pm_addr_entry *entry;
42
    struct mptcp_pm_addr_entry *entry;
44
    bool backup;
43
    bool backup;
45
46
@@ -XXX,XX +XXX,XX @@ bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk,
44
@@ -XXX,XX +XXX,XX @@ bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk,
47
    return backup;
45
    return backup;
48
}
46
}
49
47
50
+bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk,
48
+bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk,
51
+                 struct mptcp_addr_info *skc)
49
+                 struct mptcp_addr_info *skc)
52
+{
50
+{
53
+    struct mptcp_pm_param param;
51
+    return mptcp_userspace_pm_get_priority(msk, skc);
54
+
55
+    mptcp_pm_param_set_contexts(&param, NULL, skc);
56
+    return mptcp_userspace_pm_get_priority(msk, &param);
57
+}
52
+}
58
+
53
+
59
static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *info)
54
static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *info)
60
{
55
{
61
    struct mptcp_sock *msk;
56
    struct mptcp_sock *msk;
...
...
66
+
61
+
67
+static struct mptcp_pm_ops mptcp_userspace_pm = {
62
+static struct mptcp_pm_ops mptcp_userspace_pm = {
68
+    .get_local_id        = mptcp_userspace_pm_get_local_id,
63
+    .get_local_id        = mptcp_userspace_pm_get_local_id,
69
+    .get_priority        = mptcp_userspace_pm_get_priority,
64
+    .get_priority        = mptcp_userspace_pm_get_priority,
70
+    .type            = MPTCP_PM_TYPE_USERSPACE,
65
+    .type            = MPTCP_PM_TYPE_USERSPACE,
66
+    .name            = "userspace",
71
+    .owner            = THIS_MODULE,
67
+    .owner            = THIS_MODULE,
72
+};
68
+};
73
+
69
+
74
+void __init mptcp_userspace_pm_init(void)
70
+void __init mptcp_userspace_pm_init(void)
75
+{
71
+{
...
...
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
Add a struct mptcp_pm_ops pointer "ops" in struct mptcp_pm_data, and two
3
Add a struct mptcp_pm_ops pointer "ops" in struct mptcp_pm_data, and two
4
functions mptcp_pm_initialize() and mptcp_pm_release(), to set and release
4
functions mptcp_pm_initialize() and mptcp_pm_release(), to set and release
5
this pointer. mptcp_pm_initialize() is invoked in mptcp_pm_data_reset(),
5
this pointer. mptcp_pm_initialize() is invoked in mptcp_pm_data_reset(),
6
while mptcp_pm_release() is invoked in __mptcp_destroy_sock().
6
while mptcp_pm_release() is invoked in mptcp_destroy_common().
7
7
8
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
8
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
9
---
9
---
10
net/mptcp/pm.c | 33 +++++++++++++++++++++++++++++++++
10
net/mptcp/pm.c | 38 ++++++++++++++++++++++++++++++++++++++
11
net/mptcp/protocol.c | 1 +
11
net/mptcp/protocol.c | 1 +
12
net/mptcp/protocol.h | 3 +++
12
net/mptcp/protocol.h | 3 +++
13
3 files changed, 37 insertions(+)
13
3 files changed, 42 insertions(+)
14
14
15
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
15
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
16
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
17
--- a/net/mptcp/pm.c
17
--- a/net/mptcp/pm.c
18
+++ b/net/mptcp/pm.c
18
+++ b/net/mptcp/pm.c
19
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_addr_families_match(const struct sock *sk,
20
21
void mptcp_pm_data_reset(struct mptcp_sock *msk)
22
{
23
+    const char *path_manager = mptcp_get_path_manager(sock_net((struct sock *)msk));
24
    u8 pm_type = mptcp_get_pm_type(sock_net((struct sock *)msk));
25
    struct mptcp_pm_data *pm = &msk->pm;
26
+    int ret;
27
28
    pm->add_addr_signaled = 0;
29
    pm->add_addr_accepted = 0;
19
@@ -XXX,XX +XXX,XX @@ void mptcp_pm_data_reset(struct mptcp_sock *msk)
30
@@ -XXX,XX +XXX,XX @@ void mptcp_pm_data_reset(struct mptcp_sock *msk)
20
    pm->rm_list_tx.nr = 0;
21
    pm->rm_list_rx.nr = 0;
31
    pm->rm_list_rx.nr = 0;
22
    WRITE_ONCE(pm->pm_type, pm_type);
32
    WRITE_ONCE(pm->pm_type, pm_type);
33
23
+    rcu_read_lock();
34
+    rcu_read_lock();
24
+    mptcp_pm_initialize(msk, mptcp_pm_find(pm_type));
35
+    ret = mptcp_pm_initialize(msk, mptcp_pm_find(path_manager));
25
+    rcu_read_unlock();
36
+    rcu_read_unlock();
26
37
+    if (ret)
38
+        return;
39
+
27
    if (pm_type == MPTCP_PM_TYPE_KERNEL) {
40
    if (pm_type == MPTCP_PM_TYPE_KERNEL) {
28
        bool subflows_allowed = !!mptcp_pm_get_subflows_max(msk);
41
        bool subflows_allowed = !!mptcp_pm_get_subflows_max(msk);
42
29
@@ -XXX,XX +XXX,XX @@ void mptcp_pm_unregister(struct mptcp_pm_ops *pm)
43
@@ -XXX,XX +XXX,XX @@ void mptcp_pm_unregister(struct mptcp_pm_ops *pm)
30
    list_del_rcu(&pm->list);
44
    list_del_rcu(&pm->list);
31
    spin_unlock(&mptcp_pm_list_lock);
45
    spin_unlock(&mptcp_pm_list_lock);
32
}
46
}
33
+
47
+
34
+int mptcp_pm_initialize(struct mptcp_sock *msk, struct mptcp_pm_ops *pm)
48
+int mptcp_pm_initialize(struct mptcp_sock *msk, struct mptcp_pm_ops *pm)
35
+{
49
+{
36
+    if (!pm)
50
+    if (!pm)
37
+        return -EINVAL;
51
+        pm = &mptcp_in_kernel_pm;
38
+
52
+
39
+    if (!bpf_try_module_get(pm, pm->owner))
53
+    if (!bpf_try_module_get(pm, pm->owner))
40
+        return -EBUSY;
54
+        return -EBUSY;
41
+
55
+
42
+    msk->pm.ops = pm;
56
+    msk->pm.ops = pm;
43
+    if (msk->pm.ops->init)
57
+    if (msk->pm.ops->init)
44
+        msk->pm.ops->init(msk);
58
+        msk->pm.ops->init(msk);
45
+
59
+
46
+    pr_debug("userspace_pm type %u initialized\n", msk->pm.ops->type);
60
+    pr_debug("pm %s initialized\n", pm->name);
47
+    return 0;
61
+    return 0;
48
+}
62
+}
49
+
63
+
50
+void mptcp_pm_release(struct mptcp_sock *msk)
64
+void mptcp_pm_release(struct mptcp_sock *msk)
51
+{
65
+{
...
...
62
+}
76
+}
63
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
77
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
64
index XXXXXXX..XXXXXXX 100644
78
index XXXXXXX..XXXXXXX 100644
65
--- a/net/mptcp/protocol.c
79
--- a/net/mptcp/protocol.c
66
+++ b/net/mptcp/protocol.c
80
+++ b/net/mptcp/protocol.c
67
@@ -XXX,XX +XXX,XX @@ static void __mptcp_destroy_sock(struct sock *sk)
81
@@ -XXX,XX +XXX,XX @@ void mptcp_destroy_common(struct mptcp_sock *msk, unsigned int flags)
68
    sk_stop_timer(sk, &sk->sk_timer);
82
    mptcp_token_destroy(msk);
69
    msk->pm.status = 0;
83
    mptcp_pm_free_anno_list(msk);
70
    mptcp_release_sched(msk);
84
    mptcp_free_local_addr_list(msk);
71
+    mptcp_pm_release(msk);
85
+    mptcp_pm_release(msk);
72
86
}
73
    sk->sk_prot->destroy(sk);
87
74
88
static void mptcp_destroy(struct sock *sk)
75
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
89
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
76
index XXXXXXX..XXXXXXX 100644
90
index XXXXXXX..XXXXXXX 100644
77
--- a/net/mptcp/protocol.h
91
--- a/net/mptcp/protocol.h
78
+++ b/net/mptcp/protocol.h
92
+++ b/net/mptcp/protocol.h
79
@@ -XXX,XX +XXX,XX @@ struct mptcp_pm_data {
93
@@ -XXX,XX +XXX,XX @@ struct mptcp_pm_data {
...
...
82
    struct list_head userspace_pm_local_addr_list;
96
    struct list_head userspace_pm_local_addr_list;
83
+    struct mptcp_pm_ops *ops;
97
+    struct mptcp_pm_ops *ops;
84
98
85
    spinlock_t    lock;        /*protects the whole PM data */
99
    spinlock_t    lock;        /*protects the whole PM data */
86
100
87
@@ -XXX,XX +XXX,XX @@ struct mptcp_pm_ops *mptcp_pm_find(enum mptcp_pm_type type);
101
@@ -XXX,XX +XXX,XX @@ struct mptcp_pm_ops *mptcp_pm_find(const char *name);
88
int mptcp_pm_validate(struct mptcp_pm_ops *pm);
102
int mptcp_pm_validate(struct mptcp_pm_ops *pm);
89
int mptcp_pm_register(struct mptcp_pm_ops *pm);
103
int mptcp_pm_register(struct mptcp_pm_ops *pm);
90
void mptcp_pm_unregister(struct mptcp_pm_ops *pm);
104
void mptcp_pm_unregister(struct mptcp_pm_ops *pm);
91
+int mptcp_pm_initialize(struct mptcp_sock *msk, struct mptcp_pm_ops *pm);
105
+int mptcp_pm_initialize(struct mptcp_sock *msk, struct mptcp_pm_ops *pm);
92
+void mptcp_pm_release(struct mptcp_sock *msk);
106
+void mptcp_pm_release(struct mptcp_sock *msk);
93
107
94
void mptcp_free_local_addr_list(struct mptcp_sock *msk);
108
void mptcp_free_local_addr_list(struct mptcp_sock *msk);
95
109
96
--
110
--
97
2.43.0
111
2.43.0
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
This patch changes the 2nd parameter of get_local_id() interface as
3
Now pm->pm_type can be replaced by pm->ops->type, then "pm_type" filed
4
"struct mptcp_pm_param" type. Only "entry" member of this struct is
4
of struct mptcp_pm_data can be dropped.
5
used.
6
5
7
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
6
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
8
---
7
---
9
net/mptcp/pm.c | 6 ++++--
8
net/mptcp/pm.c | 6 ++----
10
net/mptcp/pm_netlink.c | 3 ++-
9
net/mptcp/protocol.h | 5 ++---
11
net/mptcp/pm_userspace.c | 3 ++-
10
2 files changed, 4 insertions(+), 7 deletions(-)
12
net/mptcp/protocol.h | 4 ++--
13
4 files changed, 10 insertions(+), 6 deletions(-)
14
11
15
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
12
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
16
index XXXXXXX..XXXXXXX 100644
13
index XXXXXXX..XXXXXXX 100644
17
--- a/net/mptcp/pm.c
14
--- a/net/mptcp/pm.c
18
+++ b/net/mptcp/pm.c
15
+++ b/net/mptcp/pm.c
19
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc)
16
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_addr_families_match(const struct sock *sk,
17
void mptcp_pm_data_reset(struct mptcp_sock *msk)
20
{
18
{
21
    struct mptcp_pm_addr_entry skc_local;
19
    const char *path_manager = mptcp_get_path_manager(sock_net((struct sock *)msk));
22
    struct mptcp_addr_info msk_local;
20
-    u8 pm_type = mptcp_get_pm_type(sock_net((struct sock *)msk));
23
+    struct mptcp_pm_param param;
21
    struct mptcp_pm_data *pm = &msk->pm;
24
25
    if (WARN_ON_ONCE(!msk))
26
        return -1;
27
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc)
28
    skc_local.addr.id = 0;
29
    skc_local.flags = MPTCP_PM_ADDR_FLAG_IMPLICIT;
30
31
+    mptcp_pm_param_set_contexts(&param, &skc_local, NULL);
32
    if (mptcp_pm_is_userspace(msk))
33
-        return mptcp_userspace_pm_get_local_id(msk, &skc_local);
34
-    return mptcp_pm_nl_get_local_id(msk, &skc_local);
35
+        return mptcp_userspace_pm_get_local_id(msk, &param);
36
+    return mptcp_pm_nl_get_local_id(msk, &param);
37
}
38
39
bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc)
40
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
41
index XXXXXXX..XXXXXXX 100644
42
--- a/net/mptcp/pm_netlink.c
43
+++ b/net/mptcp/pm_netlink.c
44
@@ -XXX,XX +XXX,XX @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
45
}
46
47
int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk,
48
-             struct mptcp_pm_addr_entry *skc)
49
+             struct mptcp_pm_param *param)
50
{
51
+    struct mptcp_pm_addr_entry *skc = &param->entry;
52
    struct mptcp_pm_addr_entry *entry;
53
    struct pm_nl_pernet *pernet;
54
    int ret;
22
    int ret;
55
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
23
56
index XXXXXXX..XXXXXXX 100644
24
@@ -XXX,XX +XXX,XX @@ void mptcp_pm_data_reset(struct mptcp_sock *msk)
57
--- a/net/mptcp/pm_userspace.c
25
    pm->subflows = 0;
58
+++ b/net/mptcp/pm_userspace.c
26
    pm->rm_list_tx.nr = 0;
59
@@ -XXX,XX +XXX,XX @@ mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int id)
27
    pm->rm_list_rx.nr = 0;
60
}
28
-    WRITE_ONCE(pm->pm_type, pm_type);
61
29
62
int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk,
30
    rcu_read_lock();
63
-                 struct mptcp_pm_addr_entry *skc)
31
    ret = mptcp_pm_initialize(msk, mptcp_pm_find(path_manager));
64
+                 struct mptcp_pm_param *param)
32
@@ -XXX,XX +XXX,XX @@ void mptcp_pm_data_reset(struct mptcp_sock *msk)
65
{
33
    if (ret)
66
    __be16 msk_sport = ((struct inet_sock *)
34
        return;
67
             inet_sk((struct sock *)msk))->inet_sport;
35
68
+    struct mptcp_pm_addr_entry *skc = &param->entry;
36
-    if (pm_type == MPTCP_PM_TYPE_KERNEL) {
69
    struct mptcp_pm_addr_entry *entry;
37
+    if (pm->ops->type == MPTCP_PM_TYPE_KERNEL) {
70
38
        bool subflows_allowed = !!mptcp_pm_get_subflows_max(msk);
71
    spin_lock_bh(&msk->pm.lock);
39
40
        /* pm->work_pending must be only be set to 'true' when
41
-         * pm->pm_type is set to MPTCP_PM_TYPE_KERNEL
42
+         * pm->ops->type is set to MPTCP_PM_TYPE_KERNEL
43
         */
44
        WRITE_ONCE(pm->work_pending,
45
             (!!mptcp_pm_get_local_addr_max(msk) &&
72
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
46
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
73
index XXXXXXX..XXXXXXX 100644
47
index XXXXXXX..XXXXXXX 100644
74
--- a/net/mptcp/protocol.h
48
--- a/net/mptcp/protocol.h
75
+++ b/net/mptcp/protocol.h
49
+++ b/net/mptcp/protocol.h
76
@@ -XXX,XX +XXX,XX @@ void mptcp_pm_param_set_contexts(struct mptcp_pm_param *param,
50
@@ -XXX,XX +XXX,XX @@ struct mptcp_pm_data {
77
                 const struct mptcp_addr_info *addr);
51
    u8        add_addr_signaled;
78
int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
52
    u8        add_addr_accepted;
79
int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk,
53
    u8        local_addr_used;
80
-             struct mptcp_pm_addr_entry *skc);
54
-    u8        pm_type;
81
+             struct mptcp_pm_param *param);
55
    u8        subflows;
82
int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk,
56
    u8        status;
83
-                 struct mptcp_pm_addr_entry *skc);
57
    DECLARE_BITMAP(id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1);
84
+                 struct mptcp_pm_param *param);
58
@@ -XXX,XX +XXX,XX @@ static inline bool mptcp_pm_should_rm_signal(struct mptcp_sock *msk)
85
bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc);
59
86
bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
60
static inline bool mptcp_pm_is_userspace(const struct mptcp_sock *msk)
87
bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
61
{
62
-    return READ_ONCE(msk->pm.pm_type) == MPTCP_PM_TYPE_USERSPACE;
63
+    return msk->pm.ops->type == MPTCP_PM_TYPE_USERSPACE;
64
}
65
66
static inline bool mptcp_pm_is_kernel(const struct mptcp_sock *msk)
67
{
68
-    return READ_ONCE(msk->pm.pm_type) == MPTCP_PM_TYPE_KERNEL;
69
+    return msk->pm.ops->type == MPTCP_PM_TYPE_KERNEL;
70
}
71
72
static inline unsigned int mptcp_add_addr_len(int family, bool echo, bool port)
88
--
73
--
89
2.43.0
74
2.43.0
diff view generated by jsdifflib
New patch
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
2
3
Old path manager sysctl "pm_type" can be replaced by the newly added
4
"path_manager". Drop it together with mptcp_get_pm_type() helper.
5
6
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
7
---
8
Documentation/networking/mptcp-sysctl.rst | 17 -----------------
9
net/mptcp/ctrl.c | 20 --------------------
10
net/mptcp/protocol.h | 1 -
11
3 files changed, 38 deletions(-)
12
13
diff --git a/Documentation/networking/mptcp-sysctl.rst b/Documentation/networking/mptcp-sysctl.rst
14
index XXXXXXX..XXXXXXX 100644
15
--- a/Documentation/networking/mptcp-sysctl.rst
16
+++ b/Documentation/networking/mptcp-sysctl.rst
17
@@ -XXX,XX +XXX,XX @@ enabled - BOOLEAN
18
19
    Default: 1 (enabled)
20
21
-pm_type - INTEGER
22
-    Set the default path manager type to use for each new MPTCP
23
-    socket. In-kernel path management will control subflow
24
-    connections and address advertisements according to
25
-    per-namespace values configured over the MPTCP netlink
26
-    API. Userspace path management puts per-MPTCP-connection subflow
27
-    connection decisions and address advertisements under control of
28
-    a privileged userspace program, at the cost of more netlink
29
-    traffic to propagate all of the related events and commands.
30
-
31
-    This is a per-namespace sysctl.
32
-
33
-    * 0 - In-kernel path manager
34
-    * 1 - Userspace path manager
35
-
36
-    Default: 0
37
-
38
path_manager - STRING
39
    Set the default path manager name to use for each new MPTCP
40
    socket. In-kernel path management will control subflow
41
diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c
42
index XXXXXXX..XXXXXXX 100644
43
--- a/net/mptcp/ctrl.c
44
+++ b/net/mptcp/ctrl.c
45
@@ -XXX,XX +XXX,XX @@
46
47
static int mptcp_pernet_id;
48
49
-#ifdef CONFIG_SYSCTL
50
-static int mptcp_pm_type_max = __MPTCP_PM_TYPE_MAX;
51
-#endif
52
-
53
struct mptcp_pernet {
54
#ifdef CONFIG_SYSCTL
55
    struct ctl_table_header *ctl_table_hdr;
56
@@ -XXX,XX +XXX,XX @@ struct mptcp_pernet {
57
    u8 mptcp_enabled;
58
    u8 checksum_enabled;
59
    u8 allow_join_initial_addr_port;
60
-    u8 pm_type;
61
    char path_manager[MPTCP_PM_NAME_MAX];
62
    char scheduler[MPTCP_SCHED_NAME_MAX];
63
};
64
@@ -XXX,XX +XXX,XX @@ unsigned int mptcp_close_timeout(const struct sock *sk)
65
    return mptcp_get_pernet(sock_net(sk))->close_timeout;
66
}
67
68
-int mptcp_get_pm_type(const struct net *net)
69
-{
70
-    return mptcp_get_pernet(net)->pm_type;
71
-}
72
-
73
const char *mptcp_get_path_manager(const struct net *net)
74
{
75
    return mptcp_get_pernet(net)->path_manager;
76
@@ -XXX,XX +XXX,XX @@ static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet)
77
    pernet->checksum_enabled = 0;
78
    pernet->allow_join_initial_addr_port = 1;
79
    pernet->stale_loss_cnt = 4;
80
-    pernet->pm_type = MPTCP_PM_TYPE_KERNEL;
81
    strscpy(pernet->path_manager, "in-kernel", sizeof(pernet->path_manager));
82
    strscpy(pernet->scheduler, "default", sizeof(pernet->scheduler));
83
}
84
@@ -XXX,XX +XXX,XX @@ static struct ctl_table mptcp_sysctl_table[] = {
85
        .mode = 0644,
86
        .proc_handler = proc_douintvec_minmax,
87
    },
88
-    {
89
-        .procname = "pm_type",
90
-        .maxlen = sizeof(u8),
91
-        .mode = 0644,
92
-        .proc_handler = proc_dou8vec_minmax,
93
-        .extra1 = SYSCTL_ZERO,
94
-        .extra2 = &mptcp_pm_type_max
95
-    },
96
    {
97
        .procname = "path_manager",
98
        .maxlen    = MPTCP_PM_NAME_MAX,
99
@@ -XXX,XX +XXX,XX @@ static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pernet)
100
    table[i++].data = &pernet->checksum_enabled;
101
    table[i++].data = &pernet->allow_join_initial_addr_port;
102
    table[i++].data = &pernet->stale_loss_cnt;
103
-    table[i++].data = &pernet->pm_type;
104
    table[i++].data = &pernet->path_manager;
105
    table[i++].data = &pernet->scheduler;
106
    i++; /* table[i] is for available_schedulers which is read-only info */
107
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
108
index XXXXXXX..XXXXXXX 100644
109
--- a/net/mptcp/protocol.h
110
+++ b/net/mptcp/protocol.h
111
@@ -XXX,XX +XXX,XX @@ int mptcp_is_checksum_enabled(const struct net *net);
112
int mptcp_allow_join_id0(const struct net *net);
113
unsigned int mptcp_stale_loss_cnt(const struct net *net);
114
unsigned int mptcp_close_timeout(const struct sock *sk);
115
-int mptcp_get_pm_type(const struct net *net);
116
const char *mptcp_get_path_manager(const struct net *net);
117
const char *mptcp_get_scheduler(const struct net *net);
118
119
--
120
2.43.0
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
Generally, in the path manager interfaces, the local address is defined
3
Similarly to net.mptcp.available_schedulers, this patch adds a new one
4
as an mptcp_pm_addr_entry type address, while the remote address is
4
net.mptcp.available_path_managers to list the available path mangers.
5
defined as an mptcp_addr_info type one:
6
7
(struct mptcp_pm_addr_entry *local, struct mptcp_addr_info *remote)
8
9
In order to make these interfaces more flexible and extensible, a struct
10
mptcp_pm_param is defined here to pass parameters. "entry" can be used
11
as the local address entry, and "addr" can be used as the remote address.
12
13
Also add a new helper mptcp_pm_param_set_contexts() to set a struct
14
mptcp_pm_param type parameter.
15
5
16
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
6
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
17
---
7
---
18
include/net/mptcp.h | 13 +++++++++++++
8
Documentation/networking/mptcp-sysctl.rst | 4 ++++
19
net/mptcp/pm.c | 10 ++++++++++
9
include/net/mptcp.h | 2 ++
20
net/mptcp/protocol.h | 11 +++--------
10
net/mptcp/ctrl.c | 25 +++++++++++++++++++++++
21
3 files changed, 26 insertions(+), 8 deletions(-)
11
net/mptcp/pm.c | 20 ++++++++++++++++++
12
net/mptcp/protocol.h | 1 +
13
5 files changed, 52 insertions(+)
22
14
15
diff --git a/Documentation/networking/mptcp-sysctl.rst b/Documentation/networking/mptcp-sysctl.rst
16
index XXXXXXX..XXXXXXX 100644
17
--- a/Documentation/networking/mptcp-sysctl.rst
18
+++ b/Documentation/networking/mptcp-sysctl.rst
19
@@ -XXX,XX +XXX,XX @@ path_manager - STRING
20
21
    Default: "in-kernel"
22
23
+available_path_managers - STRING
24
+    Shows the available path managers choices that are registered. More
25
+ path managers may be available, but not loaded.
26
+
27
scheduler - STRING
28
    Select the scheduler of your choice.
29
23
diff --git a/include/net/mptcp.h b/include/net/mptcp.h
30
diff --git a/include/net/mptcp.h b/include/net/mptcp.h
24
index XXXXXXX..XXXXXXX 100644
31
index XXXXXXX..XXXXXXX 100644
25
--- a/include/net/mptcp.h
32
--- a/include/net/mptcp.h
26
+++ b/include/net/mptcp.h
33
+++ b/include/net/mptcp.h
27
@@ -XXX,XX +XXX,XX @@ struct mptcp_sched_ops {
34
@@ -XXX,XX +XXX,XX @@ struct mptcp_sched_ops {
28
    void (*release)(struct mptcp_sock *msk);
29
} ____cacheline_aligned_in_smp;
35
} ____cacheline_aligned_in_smp;
30
36
31
+struct mptcp_pm_addr_entry {
37
#define MPTCP_PM_NAME_MAX    16
32
+    struct list_head    list;
38
+#define MPTCP_PM_MAX        128
33
+    struct mptcp_addr_info    addr;
39
+#define MPTCP_PM_BUF_MAX    (MPTCP_PM_NAME_MAX * MPTCP_PM_MAX)
34
+    u8            flags;
40
35
+    int            ifindex;
41
struct mptcp_pm_ops {
36
+    struct socket        *lsk;
42
    int (*created)(struct mptcp_sock *msk);
37
+};
43
diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c
44
index XXXXXXX..XXXXXXX 100644
45
--- a/net/mptcp/ctrl.c
46
+++ b/net/mptcp/ctrl.c
47
@@ -XXX,XX +XXX,XX @@ static int proc_path_manager(const struct ctl_table *ctl, int write,
48
    return ret;
49
}
50
51
+static int proc_available_path_managers(const struct ctl_table *ctl,
52
+                    int write, void *buffer,
53
+                    size_t *lenp, loff_t *ppos)
54
+{
55
+    struct ctl_table tbl = { .maxlen = MPTCP_PM_BUF_MAX, };
56
+    int ret;
38
+
57
+
39
+struct mptcp_pm_param {
58
+    tbl.data = kmalloc(tbl.maxlen, GFP_USER);
40
+    struct mptcp_pm_addr_entry    entry;
59
+    if (!tbl.data)
41
+    struct mptcp_addr_info        addr;
60
+        return -ENOMEM;
42
+};
43
+
61
+
44
#ifdef CONFIG_MPTCP
62
+    mptcp_pm_get_available(tbl.data, MPTCP_PM_BUF_MAX);
45
void mptcp_init(void);
63
+    ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
46
64
+    kfree(tbl.data);
65
+
66
+    return ret;
67
+}
68
+
69
static int mptcp_set_scheduler(char *scheduler, const char *name)
70
{
71
    struct mptcp_sched_ops *sched;
72
@@ -XXX,XX +XXX,XX @@ static struct ctl_table mptcp_sysctl_table[] = {
73
        .mode = 0644,
74
        .proc_handler = proc_path_manager,
75
    },
76
+    {
77
+        .procname = "available_path_managers",
78
+        .maxlen    = MPTCP_PM_BUF_MAX,
79
+        .mode = 0444,
80
+        .proc_handler = proc_available_path_managers,
81
+    },
82
    {
83
        .procname = "scheduler",
84
        .maxlen    = MPTCP_SCHED_NAME_MAX,
85
@@ -XXX,XX +XXX,XX @@ static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pernet)
86
    table[i++].data = &pernet->allow_join_initial_addr_port;
87
    table[i++].data = &pernet->stale_loss_cnt;
88
    table[i++].data = &pernet->path_manager;
89
+    i++; /* table[i] is for available_path_managers which is read-only info */
90
    table[i++].data = &pernet->scheduler;
91
    i++; /* table[i] is for available_schedulers which is read-only info */
92
    table[i++].data = &pernet->close_timeout;
47
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
93
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
48
index XXXXXXX..XXXXXXX 100644
94
index XXXXXXX..XXXXXXX 100644
49
--- a/net/mptcp/pm.c
95
--- a/net/mptcp/pm.c
50
+++ b/net/mptcp/pm.c
96
+++ b/net/mptcp/pm.c
51
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
97
@@ -XXX,XX +XXX,XX @@ struct mptcp_pm_ops *mptcp_pm_find(const char *name)
52
    return ret;
98
    return NULL;
53
}
99
}
54
100
55
+void mptcp_pm_param_set_contexts(struct mptcp_pm_param *param,
101
+/* Build string with list of available path manager values.
56
+                 const struct mptcp_pm_addr_entry *entry,
102
+ * Similar to tcp_get_available_congestion_control()
57
+                 const struct mptcp_addr_info *addr)
103
+ */
104
+void mptcp_pm_get_available(char *buf, size_t maxlen)
58
+{
105
+{
59
+    if (entry)
106
+    struct mptcp_pm_ops *pm;
60
+        param->entry = *entry;
107
+    size_t offs = 0;
61
+    if (addr)
108
+
62
+        param->addr = *addr;
109
+    rcu_read_lock();
110
+    list_for_each_entry_rcu(pm, &mptcp_pm_list, list) {
111
+        offs += snprintf(buf + offs, maxlen - offs,
112
+                 "%s%s",
113
+                 offs == 0 ? "" : " ", pm->name);
114
+
115
+        if (WARN_ON_ONCE(offs >= maxlen))
116
+            break;
117
+    }
118
+    rcu_read_unlock();
63
+}
119
+}
64
+
120
+
65
int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc)
121
int mptcp_pm_validate(struct mptcp_pm_ops *pm)
66
{
122
{
67
    struct mptcp_pm_addr_entry skc_local;
123
    if (!pm->get_local_id || !pm->get_priority) {
68
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
124
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
69
index XXXXXXX..XXXXXXX 100644
125
index XXXXXXX..XXXXXXX 100644
70
--- a/net/mptcp/protocol.h
126
--- a/net/mptcp/protocol.h
71
+++ b/net/mptcp/protocol.h
127
+++ b/net/mptcp/protocol.h
72
@@ -XXX,XX +XXX,XX @@ struct mptcp_pm_local {
128
@@ -XXX,XX +XXX,XX @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk,
73
    int            ifindex;
129
extern struct mptcp_pm_ops mptcp_in_kernel_pm;
74
};
130
75
131
struct mptcp_pm_ops *mptcp_pm_find(const char *name);
76
-struct mptcp_pm_addr_entry {
132
+void mptcp_pm_get_available(char *buf, size_t maxlen);
77
-    struct list_head    list;
133
int mptcp_pm_validate(struct mptcp_pm_ops *pm);
78
-    struct mptcp_addr_info    addr;
134
int mptcp_pm_register(struct mptcp_pm_ops *pm);
79
-    u8            flags;
135
void mptcp_pm_unregister(struct mptcp_pm_ops *pm);
80
-    int            ifindex;
81
-    struct socket        *lsk;
82
-};
83
-
84
struct mptcp_data_frag {
85
    struct list_head list;
86
    u64 data_seq;
87
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff *skb,
88
             bool *drop_other_suboptions);
89
bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
90
             struct mptcp_rm_list *rm_list);
91
+void mptcp_pm_param_set_contexts(struct mptcp_pm_param *param,
92
+                 const struct mptcp_pm_addr_entry *entry,
93
+                 const struct mptcp_addr_info *addr);
94
int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
95
int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk,
96
             struct mptcp_pm_addr_entry *skc);
97
--
136
--
98
2.43.0
137
2.43.0
diff view generated by jsdifflib
...
...
4
helpers can be dropped, and mptcp_pm_get_local_id() can directly invoke
4
helpers can be dropped, and mptcp_pm_get_local_id() can directly invoke
5
get_local_id() interface through "ops" of "msk->pm".
5
get_local_id() interface through "ops" of "msk->pm".
6
6
7
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
7
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
8
---
8
---
9
net/mptcp/pm.c | 6 +++---
9
net/mptcp/pm.c | 4 +---
10
net/mptcp/pm_netlink.c | 4 ++--
10
net/mptcp/pm_netlink.c | 4 ++--
11
net/mptcp/pm_userspace.c | 4 ++--
11
net/mptcp/pm_userspace.c | 4 ++--
12
net/mptcp/protocol.h | 4 ----
12
net/mptcp/protocol.h | 4 ----
13
4 files changed, 7 insertions(+), 11 deletions(-)
13
4 files changed, 5 insertions(+), 11 deletions(-)
14
14
15
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
15
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
16
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
17
--- a/net/mptcp/pm.c
17
--- a/net/mptcp/pm.c
18
+++ b/net/mptcp/pm.c
18
+++ b/net/mptcp/pm.c
19
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc)
19
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc)
20
    skc_local.addr.id = 0;
20
    skc_local.addr.id = 0;
21
    skc_local.flags = MPTCP_PM_ADDR_FLAG_IMPLICIT;
21
    skc_local.flags = MPTCP_PM_ADDR_FLAG_IMPLICIT;
22
22
23
+    if (!msk->pm.ops || !msk->pm.ops->get_local_id)
24
+        return -ENOTSUPP;
25
    mptcp_pm_param_set_contexts(&param, &skc_local, NULL);
26
-    if (mptcp_pm_is_userspace(msk))
23
-    if (mptcp_pm_is_userspace(msk))
27
-        return mptcp_userspace_pm_get_local_id(msk, &param);
24
-        return mptcp_userspace_pm_get_local_id(msk, &skc_local);
28
-    return mptcp_pm_nl_get_local_id(msk, &param);
25
-    return mptcp_pm_nl_get_local_id(msk, &skc_local);
29
+    return msk->pm.ops->get_local_id(msk, &param);
26
+    return msk->pm.ops->get_local_id(msk, &skc_local);
30
}
27
}
31
28
32
bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc)
29
bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc)
33
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
30
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
34
index XXXXXXX..XXXXXXX 100644
31
index XXXXXXX..XXXXXXX 100644
...
...
37
@@ -XXX,XX +XXX,XX @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
34
@@ -XXX,XX +XXX,XX @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
38
    return err;
35
    return err;
39
}
36
}
40
37
41
-int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk,
38
-int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk,
42
-             struct mptcp_pm_param *param)
39
-             struct mptcp_pm_addr_entry *skc)
43
+static int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk,
40
+static int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk,
44
+                 struct mptcp_pm_param *param)
41
+                 struct mptcp_pm_addr_entry *skc)
45
{
42
{
46
    struct mptcp_pm_addr_entry *skc = &param->entry;
47
    struct mptcp_pm_addr_entry *entry;
43
    struct mptcp_pm_addr_entry *entry;
44
    struct pm_nl_pernet *pernet;
48
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
45
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
49
index XXXXXXX..XXXXXXX 100644
46
index XXXXXXX..XXXXXXX 100644
50
--- a/net/mptcp/pm_userspace.c
47
--- a/net/mptcp/pm_userspace.c
51
+++ b/net/mptcp/pm_userspace.c
48
+++ b/net/mptcp/pm_userspace.c
52
@@ -XXX,XX +XXX,XX @@ mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int id)
49
@@ -XXX,XX +XXX,XX @@ mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int id)
53
    return NULL;
50
    return NULL;
54
}
51
}
55
52
56
-int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk,
53
-int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk,
57
-                 struct mptcp_pm_param *param)
54
-                 struct mptcp_pm_addr_entry *skc)
58
+static int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk,
55
+static int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk,
59
+                     struct mptcp_pm_param *param)
56
+                     struct mptcp_pm_addr_entry *skc)
60
{
57
{
61
    __be16 msk_sport = ((struct inet_sock *)
58
    __be16 msk_sport = ((struct inet_sock *)
62
             inet_sk((struct sock *)msk))->inet_sport;
59
             inet_sk((struct sock *)msk))->inet_sport;
63
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
60
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
64
index XXXXXXX..XXXXXXX 100644
61
index XXXXXXX..XXXXXXX 100644
65
--- a/net/mptcp/protocol.h
62
--- a/net/mptcp/protocol.h
66
+++ b/net/mptcp/protocol.h
63
+++ b/net/mptcp/protocol.h
67
@@ -XXX,XX +XXX,XX @@ void mptcp_pm_param_set_contexts(struct mptcp_pm_param *param,
64
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff *skb,
68
                 const struct mptcp_pm_addr_entry *entry,
65
bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
69
                 const struct mptcp_addr_info *addr);
66
             struct mptcp_rm_list *rm_list);
70
int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
67
int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
71
-int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk,
68
-int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk,
72
-             struct mptcp_pm_param *param);
69
-             struct mptcp_pm_addr_entry *skc);
73
-int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk,
70
-int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk,
74
-                 struct mptcp_pm_param *param);
71
-                 struct mptcp_pm_addr_entry *skc);
75
bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc);
72
bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc);
76
bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
73
bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
77
bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
74
bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
78
--
75
--
79
2.43.0
76
2.43.0
diff view generated by jsdifflib
...
...
4
helpers can be dropped, and mptcp_pm_is_backup() can directly
4
helpers can be dropped, and mptcp_pm_is_backup() can directly
5
invoke get_priority() interface through "ops" of "msk->pm".
5
invoke get_priority() interface through "ops" of "msk->pm".
6
6
7
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
7
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
8
---
8
---
9
net/mptcp/pm.c | 9 +++++----
9
net/mptcp/pm.c | 5 +----
10
net/mptcp/pm_netlink.c | 8 --------
10
net/mptcp/pm_netlink.c | 5 -----
11
net/mptcp/pm_userspace.c | 9 ---------
11
net/mptcp/pm_userspace.c | 6 ------
12
net/mptcp/protocol.h | 2 --
12
net/mptcp/protocol.h | 2 --
13
4 files changed, 5 insertions(+), 23 deletions(-)
13
4 files changed, 1 insertion(+), 17 deletions(-)
14
14
15
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
15
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
16
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
17
--- a/net/mptcp/pm.c
17
--- a/net/mptcp/pm.c
18
+++ b/net/mptcp/pm.c
18
+++ b/net/mptcp/pm.c
19
@@ -XXX,XX +XXX,XX @@ int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc)
19
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc)
20
bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc)
21
{
22
    struct mptcp_addr_info skc_local;
23
+    struct mptcp_pm_param param;
24
20
25
    mptcp_local_address((struct sock_common *)skc, &skc_local);
21
    mptcp_local_address((struct sock_common *)skc, &skc_local);
26
22
27
-    if (mptcp_pm_is_userspace(msk))
23
-    if (mptcp_pm_is_userspace(msk))
28
-        return mptcp_userspace_pm_is_backup(msk, &skc_local);
24
-        return mptcp_userspace_pm_is_backup(msk, &skc_local);
29
-
25
-
30
-    return mptcp_pm_nl_is_backup(msk, &skc_local);
26
-    return mptcp_pm_nl_is_backup(msk, &skc_local);
31
+    if (!msk->pm.ops || !msk->pm.ops->get_priority)
27
+    return msk->pm.ops->get_priority(msk, &skc_local);
32
+        return -ENOTSUPP;
33
+    mptcp_pm_param_set_contexts(&param, NULL, &skc_local);
34
+    return msk->pm.ops->get_priority(msk, &param);
35
}
28
}
36
29
37
static int mptcp_pm_get_addr(u8 id, struct mptcp_pm_addr_entry *addr,
30
static int mptcp_pm_get_addr(u8 id, struct mptcp_pm_addr_entry *addr,
38
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
31
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
39
index XXXXXXX..XXXXXXX 100644
32
index XXXXXXX..XXXXXXX 100644
...
...
43
    return backup;
36
    return backup;
44
}
37
}
45
38
46
-bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc)
39
-bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc)
47
-{
40
-{
48
-    struct mptcp_pm_param param;
41
-    return mptcp_pm_nl_get_priority(msk, skc);
49
-
50
-    mptcp_pm_param_set_contexts(&param, NULL, skc);
51
-    return mptcp_pm_nl_get_priority(msk, &param);
52
-}
42
-}
53
-
43
-
54
#define MPTCP_PM_CMD_GRP_OFFSET 0
44
#define MPTCP_PM_CMD_GRP_OFFSET 0
55
#define MPTCP_PM_EV_GRP_OFFSET 1
45
#define MPTCP_PM_EV_GRP_OFFSET 1
56
46
...
...
63
}
53
}
64
54
65
-bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk,
55
-bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk,
66
-                 struct mptcp_addr_info *skc)
56
-                 struct mptcp_addr_info *skc)
67
-{
57
-{
68
-    struct mptcp_pm_param param;
58
-    return mptcp_userspace_pm_get_priority(msk, skc);
69
-
70
-    mptcp_pm_param_set_contexts(&param, NULL, skc);
71
-    return mptcp_userspace_pm_get_priority(msk, &param);
72
-}
59
-}
73
-
60
-
74
static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *info)
61
static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *info)
75
{
62
{
76
    struct mptcp_sock *msk;
63
    struct mptcp_sock *msk;
77
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
64
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
78
index XXXXXXX..XXXXXXX 100644
65
index XXXXXXX..XXXXXXX 100644
79
--- a/net/mptcp/protocol.h
66
--- a/net/mptcp/protocol.h
80
+++ b/net/mptcp/protocol.h
67
+++ b/net/mptcp/protocol.h
81
@@ -XXX,XX +XXX,XX @@ void mptcp_pm_param_set_contexts(struct mptcp_pm_param *param,
68
@@ -XXX,XX +XXX,XX @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
82
                 const struct mptcp_addr_info *addr);
69
             struct mptcp_rm_list *rm_list);
83
int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
70
int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
84
bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc);
71
bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc);
85
-bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
72
-bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
86
-bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
73
-bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
87
int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
74
int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
88
             struct netlink_callback *cb);
75
             struct netlink_callback *cb);
89
int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
76
int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
90
--
77
--
91
2.43.0
78
2.43.0
diff view generated by jsdifflib
New patch
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
2
3
This patch uses the newly added net.mptcp.path_manager instead of the
4
old net.mptcp.pm_type for all path manager selftests in mptcp_join.sh
5
and userspace_pm.sh.
6
7
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
8
---
9
.../testing/selftests/net/mptcp/mptcp_join.sh | 26 +++++++++----------
10
.../selftests/net/mptcp/userspace_pm.sh | 4 +--
11
2 files changed, 15 insertions(+), 15 deletions(-)
12
13
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
14
index XXXXXXX..XXXXXXX 100755
15
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
16
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
17
@@ -XXX,XX +XXX,XX @@ init_partial()
18
19
    local netns
20
    for netns in "$ns1" "$ns2"; do
21
-        ip netns exec $netns sysctl -q net.mptcp.pm_type=0 2>/dev/null || true
22
+        ip netns exec $netns sysctl -q net.mptcp.path_manager="in-kernel" 2>/dev/null || true
23
        if $checksum; then
24
            ip netns exec $netns sysctl -q net.mptcp.checksum_enabled=1
25
        fi
26
@@ -XXX,XX +XXX,XX @@ set_userspace_pm()
27
{
28
    local ns=$1
29
30
-    ip netns exec $ns sysctl -q net.mptcp.pm_type=1
31
+    ip netns exec $ns sysctl -q net.mptcp.path_manager="userspace"
32
}
33
34
subflows_tests()
35
@@ -XXX,XX +XXX,XX @@ userspace_tests()
36
{
37
    # userspace pm type prevents add_addr
38
    if reset "userspace pm type prevents add_addr" &&
39
-     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
40
+     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/path_manager'; then
41
        set_userspace_pm $ns1
42
        pm_nl_set_limits $ns1 0 2
43
        pm_nl_set_limits $ns2 0 2
44
@@ -XXX,XX +XXX,XX @@ userspace_tests()
45
46
    # userspace pm type does not echo add_addr without daemon
47
    if reset "userspace pm no echo w/o daemon" &&
48
-     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
49
+     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/path_manager'; then
50
        set_userspace_pm $ns2
51
        pm_nl_set_limits $ns1 0 2
52
        pm_nl_set_limits $ns2 0 2
53
@@ -XXX,XX +XXX,XX @@ userspace_tests()
54
55
    # userspace pm type rejects join
56
    if reset "userspace pm type rejects join" &&
57
-     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
58
+     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/path_manager'; then
59
        set_userspace_pm $ns1
60
        pm_nl_set_limits $ns1 1 1
61
        pm_nl_set_limits $ns2 1 1
62
@@ -XXX,XX +XXX,XX @@ userspace_tests()
63
64
    # userspace pm type does not send join
65
    if reset "userspace pm type does not send join" &&
66
-     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
67
+     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/path_manager'; then
68
        set_userspace_pm $ns2
69
        pm_nl_set_limits $ns1 1 1
70
        pm_nl_set_limits $ns2 1 1
71
@@ -XXX,XX +XXX,XX @@ userspace_tests()
72
73
    # userspace pm type prevents mp_prio
74
    if reset "userspace pm type prevents mp_prio" &&
75
-     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
76
+     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/path_manager'; then
77
        set_userspace_pm $ns1
78
        pm_nl_set_limits $ns1 1 1
79
        pm_nl_set_limits $ns2 1 1
80
@@ -XXX,XX +XXX,XX @@ userspace_tests()
81
82
    # userspace pm type prevents rm_addr
83
    if reset "userspace pm type prevents rm_addr" &&
84
-     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
85
+     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/path_manager'; then
86
        set_userspace_pm $ns1
87
        set_userspace_pm $ns2
88
        pm_nl_set_limits $ns1 0 1
89
@@ -XXX,XX +XXX,XX @@ userspace_tests()
90
91
    # userspace pm add & remove address
92
    if reset_with_events "userspace pm add & remove address" &&
93
-     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
94
+     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/path_manager'; then
95
        set_userspace_pm $ns1
96
        pm_nl_set_limits $ns2 2 2
97
        { speed=5 \
98
@@ -XXX,XX +XXX,XX @@ userspace_tests()
99
100
    # userspace pm create destroy subflow
101
    if reset_with_events "userspace pm create destroy subflow" &&
102
-     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
103
+     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/path_manager'; then
104
        set_userspace_pm $ns2
105
        pm_nl_set_limits $ns1 0 1
106
        { speed=5 \
107
@@ -XXX,XX +XXX,XX @@ userspace_tests()
108
109
    # userspace pm create id 0 subflow
110
    if reset_with_events "userspace pm create id 0 subflow" &&
111
-     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
112
+     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/path_manager'; then
113
        set_userspace_pm $ns2
114
        pm_nl_set_limits $ns1 0 1
115
        { speed=5 \
116
@@ -XXX,XX +XXX,XX @@ userspace_tests()
117
118
    # userspace pm remove initial subflow
119
    if reset_with_events "userspace pm remove initial subflow" &&
120
-     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
121
+     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/path_manager'; then
122
        set_userspace_pm $ns2
123
        pm_nl_set_limits $ns1 0 1
124
        { speed=5 \
125
@@ -XXX,XX +XXX,XX @@ userspace_tests()
126
127
    # userspace pm send RM_ADDR for ID 0
128
    if reset_with_events "userspace pm send RM_ADDR for ID 0" &&
129
-     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
130
+     continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/path_manager'; then
131
        set_userspace_pm $ns1
132
        pm_nl_set_limits $ns2 1 1
133
        { speed=5 \
134
diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/testing/selftests/net/mptcp/userspace_pm.sh
135
index XXXXXXX..XXXXXXX 100755
136
--- a/tools/testing/selftests/net/mptcp/userspace_pm.sh
137
+++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh
138
@@ -XXX,XX +XXX,XX @@
139
mptcp_lib_check_mptcp
140
mptcp_lib_check_kallsyms
141
142
-if ! mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then
143
+if ! mptcp_lib_has_file '/proc/sys/net/mptcp/path_manager'; then
144
    echo "userspace pm tests are not supported by the kernel: SKIP"
145
    exit ${KSFT_SKIP}
146
fi
147
@@ -XXX,XX +XXX,XX @@ trap cleanup EXIT
148
# Create and configure network namespaces for testing
149
mptcp_lib_ns_init ns1 ns2
150
for i in "$ns1" "$ns2" ;do
151
-    ip netns exec "$i" sysctl -q net.mptcp.pm_type=1
152
+    ip netns exec "$i" sysctl -q net.mptcp.path_manager="userspace"
153
done
154
155
# "$ns1" ns2
156
--
157
2.43.0
diff view generated by jsdifflib