* [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers
@ 2025-03-06 2:15 Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 1/8] mptcp: add mptcp_validate_scheduler helper Geliang Tang
` (9 more replies)
0 siblings, 10 replies; 14+ messages in thread
From: Geliang Tang @ 2025-03-06 2:15 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
1. Add validate_scheduler.
2. Drop mptcp_sched_find in bpf_mptcp_sched_init_member.
3. Drop mptcp_sock_type and mptcp_subflow_type.
4. Move netns_new() out of sched_init().
5. Use .struct_ops.link instead of .struct_ops.
Geliang Tang (8):
mptcp: add mptcp_validate_scheduler helper
Squash to "bpf: Add bpf_mptcp_sched_ops"
Squash to "selftests/bpf: Add bpf scheduler test"
Squash to "selftests/bpf: Add bpf_first scheduler & test"
Squash to "selftests/bpf: Add bpf_bkup scheduler & test"
Squash to "selftests/bpf: Add bpf_rr scheduler & test"
Squash to "selftests/bpf: Add bpf_red scheduler & test"
Squash to "selftests/bpf: Add bpf_burst scheduler & test"
net/mptcp/bpf.c | 32 +++++++------
net/mptcp/protocol.h | 1 +
net/mptcp/sched.c | 17 ++++++-
.../testing/selftests/bpf/prog_tests/mptcp.c | 45 ++++++++++---------
tools/testing/selftests/bpf/progs/mptcp_bpf.h | 3 --
.../selftests/bpf/progs/mptcp_bpf_bkup.c | 2 +-
.../selftests/bpf/progs/mptcp_bpf_burst.c | 10 ++---
.../selftests/bpf/progs/mptcp_bpf_first.c | 2 +-
.../selftests/bpf/progs/mptcp_bpf_red.c | 2 +-
.../selftests/bpf/progs/mptcp_bpf_rr.c | 2 +-
10 files changed, 63 insertions(+), 53 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v1 1/8] mptcp: add mptcp_validate_scheduler helper
2025-03-06 2:15 [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers Geliang Tang
@ 2025-03-06 2:15 ` Geliang Tang
2025-03-18 1:09 ` Mat Martineau
2025-03-06 2:15 ` [PATCH mptcp-next v1 2/8] Squash to "bpf: Add bpf_mptcp_sched_ops" Geliang Tang
` (8 subsequent siblings)
9 siblings, 1 reply; 14+ messages in thread
From: Geliang Tang @ 2025-03-06 2:15 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
New interface .validate is added in struct bpf_struct_ops recently, this
patch implements it as a new helper mptcp_validate_scheduler() for struct
mptcp_sched_ops.
In this helper, check whether the required ops "get_subflow" of struct
mptcp_sched_ops has been implemented.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
net/mptcp/protocol.h | 1 +
net/mptcp/sched.c | 17 +++++++++++++++--
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 3492b256ecba..77b4ec0b0dd8 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -740,6 +740,7 @@ void mptcp_info2sockaddr(const struct mptcp_addr_info *info,
struct sockaddr_storage *addr,
unsigned short family);
struct mptcp_sched_ops *mptcp_sched_find(const char *name);
+int mptcp_validate_scheduler(struct mptcp_sched_ops *sched);
int mptcp_register_scheduler(struct mptcp_sched_ops *sched);
void mptcp_unregister_scheduler(struct mptcp_sched_ops *sched);
void mptcp_sched_init(void);
diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
index f09f7eb1d63f..1e59072d478c 100644
--- a/net/mptcp/sched.c
+++ b/net/mptcp/sched.c
@@ -82,10 +82,23 @@ void mptcp_get_available_schedulers(char *buf, size_t maxlen)
rcu_read_unlock();
}
-int mptcp_register_scheduler(struct mptcp_sched_ops *sched)
+int mptcp_validate_scheduler(struct mptcp_sched_ops *sched)
{
- if (!sched->get_send)
+ if (!sched->get_send) {
+ pr_err("%s does not implement required ops\n", sched->name);
return -EINVAL;
+ }
+
+ return 0;
+}
+
+int mptcp_register_scheduler(struct mptcp_sched_ops *sched)
+{
+ int ret;
+
+ ret = mptcp_validate_scheduler(sched);
+ if (ret)
+ return ret;
spin_lock(&mptcp_sched_list_lock);
if (mptcp_sched_find(sched->name)) {
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v1 2/8] Squash to "bpf: Add bpf_mptcp_sched_ops"
2025-03-06 2:15 [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 1/8] mptcp: add mptcp_validate_scheduler helper Geliang Tang
@ 2025-03-06 2:15 ` Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 3/8] Squash to "selftests/bpf: Add bpf scheduler test" Geliang Tang
` (7 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2025-03-06 2:15 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Please update the subject to
bpf: Add mptcp packet scheduler struct_ops
1. validate interface is added in bpf_struct_ops by commit 68b04864ca42
("bpf: Create links for BPF struct_ops maps."), implement it in
mptcp_sched_ops.
2. Drop mptcp_sched_find. This part of mptcp_sched_find() code comes from
bpf_tcp_ca_init_member, but it was recently deleted by commit 68b04864ca42.
3. Drop mptcp_sock_type and mptcp_subflow_type.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
net/mptcp/bpf.c | 32 +++++++++++++++-----------------
1 file changed, 15 insertions(+), 17 deletions(-)
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
index c0da9ac077e4..2b0cfb57df8c 100644
--- a/net/mptcp/bpf.c
+++ b/net/mptcp/bpf.c
@@ -18,8 +18,10 @@
#ifdef CONFIG_BPF_JIT
static struct bpf_struct_ops bpf_mptcp_sched_ops;
-static const struct btf_type *mptcp_sock_type, *mptcp_subflow_type __read_mostly;
-static u32 mptcp_sock_id, mptcp_subflow_id;
+static u32 mptcp_sock_id,
+ mptcp_subflow_id;
+
+/* MPTCP BPF packet scheduler */
static const struct bpf_func_proto *
bpf_mptcp_sched_get_func_proto(enum bpf_func_id func_id,
@@ -43,12 +45,10 @@ static int bpf_mptcp_sched_btf_struct_access(struct bpf_verifier_log *log,
const struct bpf_reg_state *reg,
int off, int size)
{
- const struct btf_type *t;
+ u32 id = reg->btf_id;
size_t end;
- t = btf_type_by_id(reg->btf, reg->btf_id);
-
- if (t == mptcp_sock_type) {
+ if (id == mptcp_sock_id) {
switch (off) {
case offsetof(struct mptcp_sock, snd_burst):
end = offsetofend(struct mptcp_sock, snd_burst);
@@ -58,7 +58,7 @@ static int bpf_mptcp_sched_btf_struct_access(struct bpf_verifier_log *log,
off);
return -EACCES;
}
- } else if (t == mptcp_subflow_type) {
+ } else if (id == mptcp_subflow_id) {
switch (off) {
case offsetof(struct mptcp_subflow_context, avg_pacing_rate):
end = offsetofend(struct mptcp_subflow_context, avg_pacing_rate);
@@ -75,7 +75,7 @@ static int bpf_mptcp_sched_btf_struct_access(struct bpf_verifier_log *log,
if (off + size > end) {
bpf_log(log, "access beyond %s at off %u size %u ended at %zu",
- t == mptcp_sock_type ? "mptcp_sock" : "mptcp_subflow_context",
+ id == mptcp_sock_id ? "mptcp_sock" : "mptcp_subflow_context",
off, size, end);
return -EACCES;
}
@@ -113,7 +113,6 @@ static int bpf_mptcp_sched_init_member(const struct btf_type *t,
const struct mptcp_sched_ops *usched;
struct mptcp_sched_ops *sched;
u32 moff;
- int ret;
usched = (const struct mptcp_sched_ops *)udata;
sched = (struct mptcp_sched_ops *)kdata;
@@ -124,12 +123,7 @@ static int bpf_mptcp_sched_init_member(const struct btf_type *t,
if (bpf_obj_name_cpy(sched->name, usched->name,
sizeof(sched->name)) <= 0)
return -EINVAL;
-
- rcu_read_lock();
- ret = mptcp_sched_find(usched->name) ? -EEXIST : 1;
- rcu_read_unlock();
-
- return ret;
+ return 1;
}
return 0;
@@ -144,18 +138,21 @@ static int bpf_mptcp_sched_init(struct btf *btf)
if (type_id < 0)
return -EINVAL;
mptcp_sock_id = type_id;
- mptcp_sock_type = btf_type_by_id(btf, mptcp_sock_id);
type_id = btf_find_by_name_kind(btf, "mptcp_subflow_context",
BTF_KIND_STRUCT);
if (type_id < 0)
return -EINVAL;
mptcp_subflow_id = type_id;
- mptcp_subflow_type = btf_type_by_id(btf, mptcp_subflow_id);
return 0;
}
+static int bpf_mptcp_sched_validate(void *kdata)
+{
+ return mptcp_validate_scheduler(kdata);
+}
+
static int __bpf_mptcp_sched_get_send(struct mptcp_sock *msk)
{
return 0;
@@ -188,6 +185,7 @@ static struct bpf_struct_ops bpf_mptcp_sched_ops = {
.check_member = bpf_mptcp_sched_check_member,
.init_member = bpf_mptcp_sched_init_member,
.init = bpf_mptcp_sched_init,
+ .validate = bpf_mptcp_sched_validate,
.name = "mptcp_sched_ops",
.cfi_stubs = &__bpf_mptcp_sched_ops,
};
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v1 3/8] Squash to "selftests/bpf: Add bpf scheduler test"
2025-03-06 2:15 [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 1/8] mptcp: add mptcp_validate_scheduler helper Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 2/8] Squash to "bpf: Add bpf_mptcp_sched_ops" Geliang Tang
@ 2025-03-06 2:15 ` Geliang Tang
2025-03-18 1:11 ` Mat Martineau
2025-03-06 2:15 ` [PATCH mptcp-next v1 4/8] Squash to "selftests/bpf: Add bpf_first scheduler & test" Geliang Tang
` (6 subsequent siblings)
9 siblings, 1 reply; 14+ messages in thread
From: Geliang Tang @ 2025-03-06 2:15 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
A cleanup, move netns_new() out of sched_init().
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
.../testing/selftests/bpf/prog_tests/mptcp.c | 22 +++++++++----------
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index ac6f6a6f7700..bd824b19ee13 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -562,23 +562,16 @@ static void test_iters_subflow(void)
close(cgroup_fd);
}
-static struct netns_obj *sched_init(char *flags, char *sched)
+static int sched_init(char *flags, char *sched)
{
- struct netns_obj *netns;
-
- netns = netns_new(NS_TEST, true);
- if (!ASSERT_OK_PTR(netns, "netns_new"))
- return NULL;
-
- if (endpoint_init("subflow", 2) < 0)
+ if (endpoint_init(flags, 2) < 0)
goto fail;
SYS(fail, "ip netns exec %s sysctl -qw net.mptcp.scheduler=%s", NS_TEST, sched);
- return netns;
+ return 0;
fail:
- netns_free(netns);
- return NULL;
+ return -1;
}
static int ss_search(char *src, char *dst, char *port, char *keyword)
@@ -636,11 +629,16 @@ static void send_data_and_verify(char *sched, bool addr1, bool addr2)
static void test_default(void)
{
struct netns_obj *netns;
+ int err;
- netns = sched_init("subflow", "default");
+ netns = netns_new(NS_TEST, true);
if (!netns)
goto fail;
+ err = sched_init("subflow", "default");
+ if (!ASSERT_OK(err, "sched_init"))
+ goto fail;
+
send_data_and_verify("default", WITH_DATA, WITH_DATA);
fail:
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v1 4/8] Squash to "selftests/bpf: Add bpf_first scheduler & test"
2025-03-06 2:15 [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers Geliang Tang
` (2 preceding siblings ...)
2025-03-06 2:15 ` [PATCH mptcp-next v1 3/8] Squash to "selftests/bpf: Add bpf scheduler test" Geliang Tang
@ 2025-03-06 2:15 ` Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 5/8] Squash to "selftests/bpf: Add bpf_bkup " Geliang Tang
` (5 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2025-03-06 2:15 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
1. Update sched_init.
2. For drop bpf_object__find_map_by_name in test_bpf_sched(), change the
first parameter of it as bpf_map.
3. Use .struct_ops.link instead of .struct_ops.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
tools/testing/selftests/bpf/prog_tests/mptcp.c | 15 +++++++++------
.../testing/selftests/bpf/progs/mptcp_bpf_first.c | 2 +-
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index bd824b19ee13..15f7a2b97623 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -645,27 +645,30 @@ static void test_default(void)
netns_free(netns);
}
-static void test_bpf_sched(struct bpf_object *obj, char *sched,
+static void test_bpf_sched(struct bpf_map *map, char *sched,
bool addr1, bool addr2)
{
char bpf_sched[MPTCP_SCHED_NAME_MAX] = "bpf_";
struct netns_obj *netns;
struct bpf_link *link;
- struct bpf_map *map;
+ int err;
if (!ASSERT_LT(strlen(bpf_sched) + strlen(sched),
MPTCP_SCHED_NAME_MAX, "Scheduler name too long"))
return;
- map = bpf_object__find_map_by_name(obj, sched);
link = bpf_map__attach_struct_ops(map);
- if (CHECK(!link, sched, "attach_struct_ops: %d\n", errno))
+ if (!ASSERT_OK_PTR(link, "attach_struct_ops"))
return;
- netns = sched_init("subflow", strcat(bpf_sched, sched));
+ netns = netns_new(NS_TEST, true);
if (!netns)
goto fail;
+ err = sched_init("subflow", strcat(bpf_sched, sched));
+ if (!ASSERT_OK(err, "sched_init"))
+ goto fail;
+
send_data_and_verify(sched, addr1, addr2);
fail:
@@ -681,7 +684,7 @@ static void test_first(void)
if (!ASSERT_OK_PTR(skel, "open_and_load: first"))
return;
- test_bpf_sched(skel->obj, "first", WITH_DATA, WITHOUT_DATA);
+ test_bpf_sched(skel->maps.first, "first", WITH_DATA, WITHOUT_DATA);
mptcp_bpf_first__destroy(skel);
}
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
index d71c50c7f441..96b002808ce7 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
@@ -29,7 +29,7 @@ int BPF_PROG(bpf_first_get_send, struct mptcp_sock *msk)
return 0;
}
-SEC(".struct_ops")
+SEC(".struct_ops.link")
struct mptcp_sched_ops first = {
.init = (void *)mptcp_sched_first_init,
.release = (void *)mptcp_sched_first_release,
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v1 5/8] Squash to "selftests/bpf: Add bpf_bkup scheduler & test"
2025-03-06 2:15 [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers Geliang Tang
` (3 preceding siblings ...)
2025-03-06 2:15 ` [PATCH mptcp-next v1 4/8] Squash to "selftests/bpf: Add bpf_first scheduler & test" Geliang Tang
@ 2025-03-06 2:15 ` Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 6/8] Squash to "selftests/bpf: Add bpf_rr " Geliang Tang
` (4 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2025-03-06 2:15 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Update test_bpf_sched().
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
tools/testing/selftests/bpf/prog_tests/mptcp.c | 2 +-
tools/testing/selftests/bpf/progs/mptcp_bpf.h | 3 ---
tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c | 2 +-
3 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 15f7a2b97623..ea31b3b28367 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -696,7 +696,7 @@ static void test_bkup(void)
if (!ASSERT_OK_PTR(skel, "open_and_load: bkup"))
return;
- test_bpf_sched(skel->obj, "bkup", WITH_DATA, WITHOUT_DATA);
+ test_bpf_sched(skel->maps.bkup, "bkup", WITH_DATA, WITHOUT_DATA);
mptcp_bpf_bkup__destroy(skel);
}
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf.h b/tools/testing/selftests/bpf/progs/mptcp_bpf.h
index badcffe0942c..4e901941d5dd 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf.h
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf.h
@@ -4,9 +4,6 @@
#include "bpf_experimental.h"
-/* mptcp helpers from include/net/mptcp.h */
-#define MPTCP_SUBFLOWS_MAX 8
-
/* list helpers from include/linux/list.h */
static inline int list_is_head(const struct list_head *list,
const struct list_head *head)
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
index 284cca708de0..b62ffdb7e2dd 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
@@ -32,7 +32,7 @@ int BPF_PROG(bpf_bkup_get_send, struct mptcp_sock *msk)
return 0;
}
-SEC(".struct_ops")
+SEC(".struct_ops.link")
struct mptcp_sched_ops bkup = {
.init = (void *)mptcp_sched_bkup_init,
.release = (void *)mptcp_sched_bkup_release,
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v1 6/8] Squash to "selftests/bpf: Add bpf_rr scheduler & test"
2025-03-06 2:15 [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers Geliang Tang
` (4 preceding siblings ...)
2025-03-06 2:15 ` [PATCH mptcp-next v1 5/8] Squash to "selftests/bpf: Add bpf_bkup " Geliang Tang
@ 2025-03-06 2:15 ` Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 7/8] Squash to "selftests/bpf: Add bpf_red " Geliang Tang
` (3 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2025-03-06 2:15 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Update test_bpf_sched().
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
tools/testing/selftests/bpf/prog_tests/mptcp.c | 2 +-
tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index ea31b3b28367..ddbf69145d22 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -708,7 +708,7 @@ static void test_rr(void)
if (!ASSERT_OK_PTR(skel, "open_and_load: rr"))
return;
- test_bpf_sched(skel->obj, "rr", WITH_DATA, WITH_DATA);
+ test_bpf_sched(skel->maps.rr, "rr", WITH_DATA, WITH_DATA);
mptcp_bpf_rr__destroy(skel);
}
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
index 5128a886119d..3c685c77f67f 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
@@ -65,7 +65,7 @@ int BPF_PROG(bpf_rr_get_send, struct mptcp_sock *msk)
return 0;
}
-SEC(".struct_ops")
+SEC(".struct_ops.link")
struct mptcp_sched_ops rr = {
.init = (void *)mptcp_sched_rr_init,
.release = (void *)mptcp_sched_rr_release,
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v1 7/8] Squash to "selftests/bpf: Add bpf_red scheduler & test"
2025-03-06 2:15 [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers Geliang Tang
` (5 preceding siblings ...)
2025-03-06 2:15 ` [PATCH mptcp-next v1 6/8] Squash to "selftests/bpf: Add bpf_rr " Geliang Tang
@ 2025-03-06 2:15 ` Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 8/8] Squash to "selftests/bpf: Add bpf_burst " Geliang Tang
` (2 subsequent siblings)
9 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2025-03-06 2:15 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Update test_bpf_sched().
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
tools/testing/selftests/bpf/prog_tests/mptcp.c | 2 +-
tools/testing/selftests/bpf/progs/mptcp_bpf_red.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index ddbf69145d22..c069c08371e4 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -720,7 +720,7 @@ static void test_red(void)
if (!ASSERT_OK_PTR(skel, "open_and_load: red"))
return;
- test_bpf_sched(skel->obj, "red", WITH_DATA, WITH_DATA);
+ test_bpf_sched(skel->maps.red, "red", WITH_DATA, WITH_DATA);
mptcp_bpf_red__destroy(skel);
}
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
index b2efd6db7f8b..cbee97a6e7fc 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
@@ -27,7 +27,7 @@ int BPF_PROG(bpf_red_get_send, struct mptcp_sock *msk)
return 0;
}
-SEC(".struct_ops")
+SEC(".struct_ops.link")
struct mptcp_sched_ops red = {
.init = (void *)mptcp_sched_red_init,
.release = (void *)mptcp_sched_red_release,
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH mptcp-next v1 8/8] Squash to "selftests/bpf: Add bpf_burst scheduler & test"
2025-03-06 2:15 [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers Geliang Tang
` (6 preceding siblings ...)
2025-03-06 2:15 ` [PATCH mptcp-next v1 7/8] Squash to "selftests/bpf: Add bpf_red " Geliang Tang
@ 2025-03-06 2:15 ` Geliang Tang
2025-03-06 3:26 ` [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers MPTCP CI
2025-03-20 17:31 ` Matthieu Baerts
9 siblings, 0 replies; 14+ messages in thread
From: Geliang Tang @ 2025-03-06 2:15 UTC (permalink / raw)
To: mptcp; +Cc: Geliang Tang
From: Geliang Tang <tanggeliang@kylinos.cn>
Update test_bpf_sched().
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
tools/testing/selftests/bpf/prog_tests/mptcp.c | 2 +-
tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index c069c08371e4..0951313b1189 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -741,7 +741,7 @@ static void test_burst(void)
if (!ASSERT_OK(mptcp_bpf_burst__load(skel), "load: burst"))
goto skel_destroy;
- test_bpf_sched(skel->obj, "burst", WITH_DATA, WITH_DATA);
+ test_bpf_sched(skel->maps.burst, "burst", WITH_DATA, WITH_DATA);
skel_destroy:
mptcp_bpf_burst__destroy(skel);
}
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
index 6d930ff0f09f..693fab55f7be 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
@@ -9,6 +9,10 @@ char _license[] SEC("license") = "GPL";
#define MPTCP_SEND_BURST_SIZE 65428
+#define SSK_MODE_ACTIVE 0
+#define SSK_MODE_BACKUP 1
+#define SSK_MODE_MAX 2
+
#define min(a, b) ((a) < (b) ? (a) : (b))
extern bool mptcp_subflow_active(struct mptcp_subflow_context *subflow) __ksym;
@@ -18,10 +22,6 @@ extern bool bpf_sk_stream_memory_free(const struct sock *sk) __ksym;
extern bool bpf_mptcp_subflow_queues_empty(struct sock *sk) __ksym;
extern void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk) __ksym;
-#define SSK_MODE_ACTIVE 0
-#define SSK_MODE_BACKUP 1
-#define SSK_MODE_MAX 2
-
static __always_inline __u64 div_u64(__u64 dividend, __u32 divisor)
{
return dividend / divisor;
@@ -163,7 +163,7 @@ int BPF_PROG(bpf_burst_get_retrans, struct mptcp_sock *msk)
return 0;
}
-SEC(".struct_ops")
+SEC(".struct_ops.link")
struct mptcp_sched_ops burst = {
.init = (void *)mptcp_sched_burst_init,
.release = (void *)mptcp_sched_burst_release,
--
2.43.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers
2025-03-06 2:15 [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers Geliang Tang
` (7 preceding siblings ...)
2025-03-06 2:15 ` [PATCH mptcp-next v1 8/8] Squash to "selftests/bpf: Add bpf_burst " Geliang Tang
@ 2025-03-06 3:26 ` MPTCP CI
2025-03-20 17:31 ` Matthieu Baerts
9 siblings, 0 replies; 14+ messages in thread
From: MPTCP CI @ 2025-03-06 3:26 UTC (permalink / raw)
To: Geliang Tang; +Cc: mptcp
Hi Geliang,
Thank you for your modifications, that's great!
Our CI did some validations and here is its report:
- KVM Validation: normal: Success! ✅
- KVM Validation: debug: Success! ✅
- KVM Validation: btf-normal (only bpftest_all): Success! ✅
- KVM Validation: btf-debug (only bpftest_all): Success! ✅
- Task: https://github.com/multipath-tcp/mptcp_net-next/actions/runs/13689905745
Initiator: Patchew Applier
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/4b6403c184b4
Patchwork: https://patchwork.kernel.org/project/mptcp/list/?series=940810
If there are some issues, you can reproduce them using the same environment as
the one used by the CI thanks to a docker image, e.g.:
$ cd [kernel source code]
$ docker run -v "${PWD}:${PWD}:rw" -w "${PWD}" --privileged --rm -it \
--pull always mptcp/mptcp-upstream-virtme-docker:latest \
auto-normal
For more details:
https://github.com/multipath-tcp/mptcp-upstream-virtme-docker
Please note that despite all the efforts that have been already done to have a
stable tests suite when executed on a public CI like here, it is possible some
reported issues are not due to your modifications. Still, do not hesitate to
help us improve that ;-)
Cheers,
MPTCP GH Action bot
Bot operated by Matthieu Baerts (NGI0 Core)
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH mptcp-next v1 1/8] mptcp: add mptcp_validate_scheduler helper
2025-03-06 2:15 ` [PATCH mptcp-next v1 1/8] mptcp: add mptcp_validate_scheduler helper Geliang Tang
@ 2025-03-18 1:09 ` Mat Martineau
0 siblings, 0 replies; 14+ messages in thread
From: Mat Martineau @ 2025-03-18 1:09 UTC (permalink / raw)
To: Geliang Tang; +Cc: mptcp, Geliang Tang
On Thu, 6 Mar 2025, Geliang Tang wrote:
> From: Geliang Tang <tanggeliang@kylinos.cn>
>
> New interface .validate is added in struct bpf_struct_ops recently, this
> patch implements it as a new helper mptcp_validate_scheduler() for struct
> mptcp_sched_ops.
>
> In this helper, check whether the required ops "get_subflow" of struct
> mptcp_sched_ops has been implemented.
>
> Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
This patch LGTM:
Reviewed-by: Mat Martineau <martineau@kernel.org>
The rest of the series looks ok to squash, with one note on patch 3.
- Mat
> ---
> net/mptcp/protocol.h | 1 +
> net/mptcp/sched.c | 17 +++++++++++++++--
> 2 files changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
> index 3492b256ecba..77b4ec0b0dd8 100644
> --- a/net/mptcp/protocol.h
> +++ b/net/mptcp/protocol.h
> @@ -740,6 +740,7 @@ void mptcp_info2sockaddr(const struct mptcp_addr_info *info,
> struct sockaddr_storage *addr,
> unsigned short family);
> struct mptcp_sched_ops *mptcp_sched_find(const char *name);
> +int mptcp_validate_scheduler(struct mptcp_sched_ops *sched);
> int mptcp_register_scheduler(struct mptcp_sched_ops *sched);
> void mptcp_unregister_scheduler(struct mptcp_sched_ops *sched);
> void mptcp_sched_init(void);
> diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
> index f09f7eb1d63f..1e59072d478c 100644
> --- a/net/mptcp/sched.c
> +++ b/net/mptcp/sched.c
> @@ -82,10 +82,23 @@ void mptcp_get_available_schedulers(char *buf, size_t maxlen)
> rcu_read_unlock();
> }
>
> -int mptcp_register_scheduler(struct mptcp_sched_ops *sched)
> +int mptcp_validate_scheduler(struct mptcp_sched_ops *sched)
> {
> - if (!sched->get_send)
> + if (!sched->get_send) {
> + pr_err("%s does not implement required ops\n", sched->name);
> return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> +int mptcp_register_scheduler(struct mptcp_sched_ops *sched)
> +{
> + int ret;
> +
> + ret = mptcp_validate_scheduler(sched);
> + if (ret)
> + return ret;
>
> spin_lock(&mptcp_sched_list_lock);
> if (mptcp_sched_find(sched->name)) {
> --
> 2.43.0
>
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH mptcp-next v1 3/8] Squash to "selftests/bpf: Add bpf scheduler test"
2025-03-06 2:15 ` [PATCH mptcp-next v1 3/8] Squash to "selftests/bpf: Add bpf scheduler test" Geliang Tang
@ 2025-03-18 1:11 ` Mat Martineau
2025-03-20 19:38 ` Matthieu Baerts
0 siblings, 1 reply; 14+ messages in thread
From: Mat Martineau @ 2025-03-18 1:11 UTC (permalink / raw)
To: Geliang Tang; +Cc: mptcp, Geliang Tang
On Thu, 6 Mar 2025, Geliang Tang wrote:
> From: Geliang Tang <tanggeliang@kylinos.cn>
>
> A cleanup, move netns_new() out of sched_init().
>
> Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
> ---
> .../testing/selftests/bpf/prog_tests/mptcp.c | 22 +++++++++----------
> 1 file changed, 10 insertions(+), 12 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> index ac6f6a6f7700..bd824b19ee13 100644
> --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
> +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> @@ -562,23 +562,16 @@ static void test_iters_subflow(void)
> close(cgroup_fd);
> }
>
> -static struct netns_obj *sched_init(char *flags, char *sched)
> +static int sched_init(char *flags, char *sched)
> {
> - struct netns_obj *netns;
> -
> - netns = netns_new(NS_TEST, true);
> - if (!ASSERT_OK_PTR(netns, "netns_new"))
> - return NULL;
> -
> - if (endpoint_init("subflow", 2) < 0)
> + if (endpoint_init(flags, 2) < 0)
> goto fail;
>
> SYS(fail, "ip netns exec %s sysctl -qw net.mptcp.scheduler=%s", NS_TEST, sched);
>
> - return netns;
> + return 0;
> fail:
> - netns_free(netns);
> - return NULL;
> + return -1;
A small thing: since there's now only the 'return' on this error path, I
suggest removing the goto and directly returning -1 above. Matthieu do you
want to do this when applying, or just leave it as-is?
- Mat
> }
>
> static int ss_search(char *src, char *dst, char *port, char *keyword)
> @@ -636,11 +629,16 @@ static void send_data_and_verify(char *sched, bool addr1, bool addr2)
> static void test_default(void)
> {
> struct netns_obj *netns;
> + int err;
>
> - netns = sched_init("subflow", "default");
> + netns = netns_new(NS_TEST, true);
> if (!netns)
> goto fail;
>
> + err = sched_init("subflow", "default");
> + if (!ASSERT_OK(err, "sched_init"))
> + goto fail;
> +
> send_data_and_verify("default", WITH_DATA, WITH_DATA);
>
> fail:
> --
> 2.43.0
>
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers
2025-03-06 2:15 [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers Geliang Tang
` (8 preceding siblings ...)
2025-03-06 3:26 ` [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers MPTCP CI
@ 2025-03-20 17:31 ` Matthieu Baerts
9 siblings, 0 replies; 14+ messages in thread
From: Matthieu Baerts @ 2025-03-20 17:31 UTC (permalink / raw)
To: Geliang Tang, mptcp; +Cc: Geliang Tang
Hi Geliang, Mat,
On 06/03/2025 03:15, Geliang Tang wrote:
> From: Geliang Tang <tanggeliang@kylinos.cn>
>
> 1. Add validate_scheduler.
> 2. Drop mptcp_sched_find in bpf_mptcp_sched_init_member.
> 3. Drop mptcp_sock_type and mptcp_subflow_type.
> 4. Move netns_new() out of sched_init().
> 5. Use .struct_ops.link instead of .struct_ops.
Thank you for this series and the reviews!
Now in our tree (feat. for net-next for the first patch):
New patches for t/upstream:
- d4c306a43b3f: mptcp: add mptcp_validate_scheduler helper
- Results: f919d66019d7..3401ddbacc79 (export)
- 59ab4747927b: "squashed" patch 2/8 in "bpf: Add bpf_mptcp_sched_ops"
- 38fdfd5cba1b: tg:msg: adapt 'bpf: Add mptcp packet scheduler struct_ops'
- a1aaa0e29d01: "squashed" patch 3/8 in "selftests/bpf: Add bpf
scheduler test"
- 99b384565fb2: return directly as suggested by Mat
- 354174f5423a: "squashed" patch 4/8 in "selftests/bpf: Add bpf_first
scheduler & test"
- 7f16e3788029: "squashed" patch 5/8 in "selftests/bpf: Add bpf_bkup
scheduler & test"
- 8d85ef2f3be9: "squashed" patch 6/8 in "selftests/bpf: Add bpf_rr
scheduler & test"
- 72ecea93b815: "squashed" patch 7/8 in "selftests/bpf: Add bpf_red
scheduler & test"
- 16789699fd1b: "squashed" patch 8/8 in "selftests/bpf: Add bpf_burst
scheduler & test"
- Results: 3401ddbacc79..35f3f56f1201 (export)
Tests are now in progress:
- export:
https://github.com/multipath-tcp/mptcp_net-next/commit/0404035380f85690b46bcb554e872f638ca9ee56/checks
Cheers,
Matt
--
Sponsored by the NGI0 Core fund.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH mptcp-next v1 3/8] Squash to "selftests/bpf: Add bpf scheduler test"
2025-03-18 1:11 ` Mat Martineau
@ 2025-03-20 19:38 ` Matthieu Baerts
0 siblings, 0 replies; 14+ messages in thread
From: Matthieu Baerts @ 2025-03-20 19:38 UTC (permalink / raw)
To: Mat Martineau, Geliang Tang; +Cc: mptcp, Geliang Tang
Hi Mat,
On 18/03/2025 02:11, Mat Martineau wrote:
> On Thu, 6 Mar 2025, Geliang Tang wrote:
>
>> From: Geliang Tang <tanggeliang@kylinos.cn>
>>
>> A cleanup, move netns_new() out of sched_init().
>>
>> Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
>> ---
>> .../testing/selftests/bpf/prog_tests/mptcp.c | 22 +++++++++----------
>> 1 file changed, 10 insertions(+), 12 deletions(-)
>>
>> diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/
>> testing/selftests/bpf/prog_tests/mptcp.c
>> index ac6f6a6f7700..bd824b19ee13 100644
>> --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
>> +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
>> @@ -562,23 +562,16 @@ static void test_iters_subflow(void)
>> close(cgroup_fd);
>> }
>>
>> -static struct netns_obj *sched_init(char *flags, char *sched)
>> +static int sched_init(char *flags, char *sched)
>> {
>> - struct netns_obj *netns;
>> -
>> - netns = netns_new(NS_TEST, true);
>> - if (!ASSERT_OK_PTR(netns, "netns_new"))
>> - return NULL;
>> -
>> - if (endpoint_init("subflow", 2) < 0)
>> + if (endpoint_init(flags, 2) < 0)
>> goto fail;
>>
>> SYS(fail, "ip netns exec %s sysctl -qw net.mptcp.scheduler=%s",
>> NS_TEST, sched);
>>
>> - return netns;
>> + return 0;
>> fail:
>> - netns_free(netns);
>> - return NULL;
>> + return -1;
>
> A small thing: since there's now only the 'return' on this error path, I
> suggest removing the goto and directly returning -1 above. Matthieu do
> you want to do this when applying, or just leave it as-is?
I did the modification, but I missed the fact SYS() still needs the
'fail' label. So I just added these two commit to keep the 'fail' label,
and to return -1 directly.
a7522f3888cd: Revert "Squash to "selftests/bpf: Add bpf scheduler test""
cc33eee80a21: Squash to "selftests/bpf: Add bpf scheduler test"
Cheers,
Matt
--
Sponsored by the NGI0 Core fund.
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2025-03-20 19:38 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-06 2:15 [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 1/8] mptcp: add mptcp_validate_scheduler helper Geliang Tang
2025-03-18 1:09 ` Mat Martineau
2025-03-06 2:15 ` [PATCH mptcp-next v1 2/8] Squash to "bpf: Add bpf_mptcp_sched_ops" Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 3/8] Squash to "selftests/bpf: Add bpf scheduler test" Geliang Tang
2025-03-18 1:11 ` Mat Martineau
2025-03-20 19:38 ` Matthieu Baerts
2025-03-06 2:15 ` [PATCH mptcp-next v1 4/8] Squash to "selftests/bpf: Add bpf_first scheduler & test" Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 5/8] Squash to "selftests/bpf: Add bpf_bkup " Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 6/8] Squash to "selftests/bpf: Add bpf_rr " Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 7/8] Squash to "selftests/bpf: Add bpf_red " Geliang Tang
2025-03-06 2:15 ` [PATCH mptcp-next v1 8/8] Squash to "selftests/bpf: Add bpf_burst " Geliang Tang
2025-03-06 3:26 ` [PATCH mptcp-next v1 0/8] cleanups for bpf schedulers MPTCP CI
2025-03-20 17:31 ` Matthieu Baerts
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.