1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
v4:
4
- CI reports the following BUILD_BUG_ON fails on i386:
5
6
BUILD_BUG_ON(sizeof(struct bpf_iter_mptcp_subflow_kern) !=
7
     sizeof(struct bpf_iter_mptcp_subflow))
8
9
Just like in bpf_iter_task_new(), change this "!=" to ">".
10
11
v3:
12
- check sock_owned_by_user_nocheck(sk)/spin_is_locked(&sk->sk_lock.slock),
13
instead of lockdep_sock_is_held(sk).
14
- add "sizeof" and "alignof" checks.
15
- drop bpf_mptcp_sk() and bpf_mptcp_subflow_tcp_sock() definitions. Use
16
bpf_skc_to_mptcp_sock() and mptcp_subflow_tcp_sock() in mptcp_subflow
17
bpf_iter selftests instead.
18
3
v2:
19
v2:
4
- Drop bpf_skc_to_mptcp_sock
20
- add CONFIG_LOCKDEP check in patch 2 to fix the build error reported
5
- Check the owner before assigning the msk as Mat suggested.
21
by CI.
6
- Use bpf_core_cast() in mptcp_subflow bpf_iter subtest instead of
7
using bpf_skc_to_mptcp_sock().
8
22
9
Address Martin's suggestions for v2.
23
Address Martin's comments in v1.
10
24
11
Geliang Tang (5):
25
Geliang Tang (5):
12
Revert "bpf: Extend bpf_skc_to_mptcp_sock to MPTCP sock"
26
mptcp: update bpf_mptcp_sock_from_subflow
13
Revert "bpf: Allow use of skc_to_mptcp_sock in cg_sockopt"
27
bpf: Allow use of skc_to_mptcp_sock in cg_sockopt
28
Squash to "bpf: Register mptcp common kfunc set"
14
Squash to "bpf: Add mptcp_subflow bpf_iter"
29
Squash to "bpf: Add mptcp_subflow bpf_iter"
15
Revert "bpf: Acquire and release mptcp socket"
16
Squash to "selftests/bpf: Add mptcp_subflow bpf_iter subtest"
30
Squash to "selftests/bpf: Add mptcp_subflow bpf_iter subtest"
17
31
18
include/net/mptcp.h | 4 +-
32
include/net/mptcp.h | 4 +--
19
kernel/bpf/cgroup.c | 2 -
33
kernel/bpf/cgroup.c | 2 ++
20
net/core/filter.c | 2 +-
34
net/core/filter.c | 2 +-
21
net/mptcp/bpf.c | 43 +++++--------------
35
net/mptcp/bpf.c | 34 +++++++++----------
22
.../testing/selftests/bpf/bpf_experimental.h | 2 +-
36
tools/testing/selftests/bpf/progs/mptcp_bpf.h | 1 -
23
tools/testing/selftests/bpf/progs/mptcp_bpf.h | 3 --
37
.../selftests/bpf/progs/mptcp_bpf_iters.c | 11 +++---
24
.../selftests/bpf/progs/mptcp_bpf_iters.c | 8 +---
38
6 files changed, 27 insertions(+), 27 deletions(-)
25
7 files changed, 16 insertions(+), 48 deletions(-)
26
39
27
--
40
--
28
2.43.0
41
2.45.2
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
bpf_core_cast() can be used in mptcp_subflow bpf_iter selftests to get the
3
The input parameter of bpf_mptcp_sock_from_subflow() is an msk subsocket
4
msk, instead of using bpf_skc_to_mptcp_sock(). No need to add this patch
4
of type IPPROTO_TCP. This patch extends it to accept an IPPROTO_MPTCP
5
anymore, revert it.
5
socket. With this change, the function name bpf_mptcp_sock_from_subflow
6
is no longer appropriate, and it is renamed to bpf_mptcp_sock_from_sock.
6
7
7
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
8
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
8
---
9
---
9
include/net/mptcp.h | 4 ++--
10
include/net/mptcp.h | 4 ++--
10
net/core/filter.c | 2 +-
11
net/core/filter.c | 2 +-
11
net/mptcp/bpf.c | 10 ++--------
12
net/mptcp/bpf.c | 4 +++-
12
3 files changed, 5 insertions(+), 11 deletions(-)
13
3 files changed, 6 insertions(+), 4 deletions(-)
13
14
14
diff --git a/include/net/mptcp.h b/include/net/mptcp.h
15
diff --git a/include/net/mptcp.h b/include/net/mptcp.h
15
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
16
--- a/include/net/mptcp.h
17
--- a/include/net/mptcp.h
17
+++ b/include/net/mptcp.h
18
+++ b/include/net/mptcp.h
18
@@ -XXX,XX +XXX,XX @@ static inline void mptcpv6_handle_mapped(struct sock *sk, bool mapped) { }
19
@@ -XXX,XX +XXX,XX @@ static inline void mptcpv6_handle_mapped(struct sock *sk, bool mapped) { }
19
#endif
20
#endif
20
21
21
#if defined(CONFIG_MPTCP) && defined(CONFIG_BPF_SYSCALL)
22
#if defined(CONFIG_MPTCP) && defined(CONFIG_BPF_SYSCALL)
22
-struct mptcp_sock *bpf_mptcp_sock_from_sock(struct sock *sk);
23
-struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk);
23
+struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk);
24
+struct mptcp_sock *bpf_mptcp_sock_from_sock(struct sock *sk);
24
#else
25
#else
25
-static inline struct mptcp_sock *bpf_mptcp_sock_from_sock(struct sock *sk) { return NULL; }
26
-static inline struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk) { return NULL; }
26
+static inline struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk) { return NULL; }
27
+static inline struct mptcp_sock *bpf_mptcp_sock_from_sock(struct sock *sk) { return NULL; }
27
#endif
28
#endif
28
29
29
#if !IS_ENABLED(CONFIG_MPTCP)
30
#if !IS_ENABLED(CONFIG_MPTCP)
30
diff --git a/net/core/filter.c b/net/core/filter.c
31
diff --git a/net/core/filter.c b/net/core/filter.c
31
index XXXXXXX..XXXXXXX 100644
32
index XXXXXXX..XXXXXXX 100644
32
--- a/net/core/filter.c
33
--- a/net/core/filter.c
33
+++ b/net/core/filter.c
34
+++ b/net/core/filter.c
34
@@ -XXX,XX +XXX,XX @@ const struct bpf_func_proto bpf_skc_to_unix_sock_proto = {
35
@@ -XXX,XX +XXX,XX @@ const struct bpf_func_proto bpf_skc_to_unix_sock_proto = {
35
BPF_CALL_1(bpf_skc_to_mptcp_sock, struct sock *, sk)
36
BPF_CALL_1(bpf_skc_to_mptcp_sock, struct sock *, sk)
36
{
37
{
37
    BTF_TYPE_EMIT(struct mptcp_sock);
38
    BTF_TYPE_EMIT(struct mptcp_sock);
38
-    return (unsigned long)bpf_mptcp_sock_from_sock(sk);
39
-    return (unsigned long)bpf_mptcp_sock_from_subflow(sk);
39
+    return (unsigned long)bpf_mptcp_sock_from_subflow(sk);
40
+    return (unsigned long)bpf_mptcp_sock_from_sock(sk);
40
}
41
}
41
42
42
const struct bpf_func_proto bpf_skc_to_mptcp_sock_proto = {
43
const struct bpf_func_proto bpf_skc_to_mptcp_sock_proto = {
43
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
44
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
44
index XXXXXXX..XXXXXXX 100644
45
index XXXXXXX..XXXXXXX 100644
45
--- a/net/mptcp/bpf.c
46
--- a/net/mptcp/bpf.c
46
+++ b/net/mptcp/bpf.c
47
+++ b/net/mptcp/bpf.c
47
@@ -XXX,XX +XXX,XX @@ static struct bpf_struct_ops bpf_mptcp_sched_ops = {
48
@@ -XXX,XX +XXX,XX @@ static struct bpf_struct_ops bpf_mptcp_sched_ops = {
48
};
49
};
49
#endif /* CONFIG_BPF_JIT */
50
#endif /* CONFIG_BPF_JIT */
50
51
51
-struct mptcp_sock *bpf_mptcp_sock_from_sock(struct sock *sk)
52
-struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk)
52
+struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk)
53
+struct mptcp_sock *bpf_mptcp_sock_from_sock(struct sock *sk)
53
{
54
{
54
-    if (unlikely(!sk || !sk_fullsock(sk)))
55
+    if (sk && sk_fullsock(sk) && sk->sk_protocol == IPPROTO_MPTCP)
55
-        return NULL;
56
+        return mptcp_sk(sk);
56
-
57
    if (sk && sk_fullsock(sk) && sk->sk_protocol == IPPROTO_TCP && sk_is_mptcp(sk))
57
-    if (sk->sk_protocol == IPPROTO_MPTCP)
58
-        return mptcp_sk(sk);
59
-
60
-    if (sk->sk_protocol == IPPROTO_TCP && sk_is_mptcp(sk))
61
+    if (sk && sk_fullsock(sk) && sk->sk_protocol == IPPROTO_TCP && sk_is_mptcp(sk))
62
        return mptcp_sk(mptcp_subflow_ctx(sk)->conn);
58
        return mptcp_sk(mptcp_subflow_ctx(sk)->conn);
63
59
64
    return NULL;
65
--
60
--
66
2.43.0
61
2.45.2
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
bpf_core_cast() can be used in mptcp_subflow bpf_iter selftests to get the
3
Currently, bpf_skc_to_mptcp_sock() helper is not allowed to be used
4
msk, instead of using bpf_skc_to_mptcp_sock(). No need to add this patch
4
in cg_sockopt. This patch adds this permission.
5
anymore, revert it.
6
5
7
This reverts commit d8d42f5a4542c2dc31e4e00c58508a821c6ab789.
6
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
8
---
7
---
9
kernel/bpf/cgroup.c | 2 --
8
kernel/bpf/cgroup.c | 2 ++
10
1 file changed, 2 deletions(-)
9
1 file changed, 2 insertions(+)
11
10
12
diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
11
diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
13
index XXXXXXX..XXXXXXX 100644
12
index XXXXXXX..XXXXXXX 100644
14
--- a/kernel/bpf/cgroup.c
13
--- a/kernel/bpf/cgroup.c
15
+++ b/kernel/bpf/cgroup.c
14
+++ b/kernel/bpf/cgroup.c
16
@@ -XXX,XX +XXX,XX @@ cg_sockopt_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
15
@@ -XXX,XX +XXX,XX @@ cg_sockopt_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
17
#ifdef CONFIG_INET
16
#ifdef CONFIG_INET
18
    case BPF_FUNC_tcp_sock:
17
    case BPF_FUNC_tcp_sock:
19
        return &bpf_tcp_sock_proto;
18
        return &bpf_tcp_sock_proto;
20
-    case BPF_FUNC_skc_to_mptcp_sock:
19
+    case BPF_FUNC_skc_to_mptcp_sock:
21
-        return &bpf_skc_to_mptcp_sock_proto;
20
+        return &bpf_skc_to_mptcp_sock_proto;
22
#endif
21
#endif
23
    case BPF_FUNC_perf_event_output:
22
    case BPF_FUNC_perf_event_output:
24
        return &bpf_event_output_data_proto;
23
        return &bpf_event_output_data_proto;
25
--
24
--
26
2.43.0
25
2.45.2
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
Drop this patch as Martin suggested.
3
Drop bpf_mptcp_sk() and bpf_mptcp_subflow_tcp_sock() definitions. Use
4
bpf_skc_to_mptcp_sock() and mptcp_subflow_tcp_sock() in mptcp_subflow
5
bpf_iter selftests instead.
6
7
Address Martin's comments in v1:
8
9
- add null-check for bpf_mptcp_subflow_ctx.
10
- add KF_RET_NULL flags for bpf_mptcp_subflow_ctx.
11
- register this kfunc set to BPF_PROG_TYPE_CGROUP_SOCKOPT only,
12
not BPF_PROG_TYPE_UNSPEC.
4
13
5
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
14
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
6
---
15
---
7
net/mptcp/bpf.c | 19 -------------------
16
net/mptcp/bpf.c | 20 +++++---------------
8
1 file changed, 19 deletions(-)
17
1 file changed, 5 insertions(+), 15 deletions(-)
9
18
10
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
19
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
11
index XXXXXXX..XXXXXXX 100644
20
index XXXXXXX..XXXXXXX 100644
12
--- a/net/mptcp/bpf.c
21
--- a/net/mptcp/bpf.c
13
+++ b/net/mptcp/bpf.c
22
+++ b/net/mptcp/bpf.c
14
@@ -XXX,XX +XXX,XX @@ bpf_iter_mptcp_subflow_destroy(struct bpf_iter_mptcp_subflow *it)
23
@@ -XXX,XX +XXX,XX @@ struct bpf_iter_mptcp_subflow_kern {
15
{
24
16
}
25
__bpf_kfunc_start_defs();
17
26
18
-__bpf_kfunc static struct
27
-__bpf_kfunc static struct mptcp_sock *bpf_mptcp_sk(struct sock *sk)
19
-mptcp_sock *bpf_mptcp_sock_acquire(struct mptcp_sock *msk)
20
-{
28
-{
21
-    struct sock *sk = (struct sock *)msk;
29
-    return mptcp_sk(sk);
22
-
23
-    if (sk && refcount_inc_not_zero(&sk->sk_refcnt))
24
-        return msk;
25
-    return NULL;
26
-}
30
-}
27
-
31
-
28
-__bpf_kfunc static void bpf_mptcp_sock_release(struct mptcp_sock *msk)
32
__bpf_kfunc static struct mptcp_subflow_context *
33
bpf_mptcp_subflow_ctx(const struct sock *sk)
34
{
35
-    return mptcp_subflow_ctx(sk);
36
-}
37
+    if (!sk)
38
+        return NULL;
39
40
-__bpf_kfunc static struct sock *
41
-bpf_mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow)
29
-{
42
-{
30
-    struct sock *sk = (struct sock *)msk;
43
-    return mptcp_subflow_tcp_sock(subflow);
31
-
44
+    return mptcp_subflow_ctx(sk);
32
-    WARN_ON_ONCE(!sk || !refcount_dec_not_one(&sk->sk_refcnt));
45
}
33
-}
46
34
-
47
__bpf_kfunc static int
35
__bpf_kfunc struct mptcp_subflow_context *
48
@@ -XXX,XX +XXX,XX @@ __bpf_kfunc static bool bpf_mptcp_subflow_queues_empty(struct sock *sk)
36
bpf_mptcp_subflow_ctx_by_pos(const struct mptcp_sched_data *data, unsigned int pos)
49
__bpf_kfunc_end_defs();
37
{
50
38
@@ -XXX,XX +XXX,XX @@ BTF_ID_FLAGS(func, bpf_mptcp_subflow_ctx, KF_RET_NULL)
51
BTF_KFUNCS_START(bpf_mptcp_common_kfunc_ids)
52
-BTF_ID_FLAGS(func, bpf_mptcp_sk)
53
-BTF_ID_FLAGS(func, bpf_mptcp_subflow_ctx)
54
-BTF_ID_FLAGS(func, bpf_mptcp_subflow_tcp_sock)
55
+BTF_ID_FLAGS(func, bpf_mptcp_subflow_ctx, KF_RET_NULL)
39
BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_new, KF_ITER_NEW | KF_TRUSTED_ARGS)
56
BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_new, KF_ITER_NEW | KF_TRUSTED_ARGS)
40
BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_next, KF_ITER_NEXT | KF_RET_NULL)
57
BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_next, KF_ITER_NEXT | KF_RET_NULL)
41
BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_destroy, KF_ITER_DESTROY)
58
BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_destroy, KF_ITER_DESTROY)
42
-BTF_ID_FLAGS(func, bpf_mptcp_sock_acquire, KF_ACQUIRE | KF_RET_NULL)
59
@@ -XXX,XX +XXX,XX @@ static int __init bpf_mptcp_kfunc_init(void)
43
-BTF_ID_FLAGS(func, bpf_mptcp_sock_release, KF_RELEASE)
60
    int ret;
44
BTF_KFUNCS_END(bpf_mptcp_common_kfunc_ids)
61
45
62
    ret = register_btf_fmodret_id_set(&bpf_mptcp_fmodret_set);
46
static const struct btf_kfunc_id_set bpf_mptcp_common_kfunc_set = {
63
-    ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_UNSPEC,
64
+    ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_CGROUP_SOCKOPT,
65
                     &bpf_mptcp_common_kfunc_set);
66
    ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_STRUCT_OPS,
67
                     &bpf_mptcp_sched_kfunc_set);
47
--
68
--
48
2.43.0
69
2.45.2
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
Drop the NULL check as Martin suggested.
3
Add "sizeof" and "alignof" checks.
4
4
5
Use the "struct sock *sk" instead of "struct mptcp-sock *msk" as the
5
Address Martin's comments in v1:
6
argument in the bpf_iter_mptcp_subflow_new as Martin suggested.
7
6
8
Use msk_owned_by_me().
7
- bpf_iter_mptcp_subflow_new returns -EINVAL when msk socket lock isn't
9
8
held.
10
v2:
11
- check the owner before assigning the msk as Mat suggested.
12
9
13
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
10
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
14
---
11
---
15
net/mptcp/bpf.c | 14 ++++++++------
12
net/mptcp/bpf.c | 10 +++++++++-
16
1 file changed, 8 insertions(+), 6 deletions(-)
13
1 file changed, 9 insertions(+), 1 deletion(-)
17
14
18
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
15
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
19
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
20
--- a/net/mptcp/bpf.c
17
--- a/net/mptcp/bpf.c
21
+++ b/net/mptcp/bpf.c
18
+++ b/net/mptcp/bpf.c
22
@@ -XXX,XX +XXX,XX @@ bpf_mptcp_subflow_ctx(const struct sock *sk)
19
@@ -XXX,XX +XXX,XX @@ bpf_iter_mptcp_subflow_new(struct bpf_iter_mptcp_subflow *it,
23
20
             struct mptcp_sock *msk)
24
__bpf_kfunc static int
25
bpf_iter_mptcp_subflow_new(struct bpf_iter_mptcp_subflow *it,
26
-             struct mptcp_sock *msk)
27
+             struct sock *sk)
28
{
21
{
29
    struct bpf_iter_mptcp_subflow_kern *kit = (void *)it;
22
    struct bpf_iter_mptcp_subflow_kern *kit = (void *)it;
30
-    struct sock *sk = (struct sock *)msk;
23
+    struct sock *sk = (struct sock *)msk;
31
+    struct mptcp_sock *msk;
24
+
32
25
+    BUILD_BUG_ON(sizeof(struct bpf_iter_mptcp_subflow_kern) >
33
    BUILD_BUG_ON(sizeof(struct bpf_iter_mptcp_subflow_kern) >
26
+         sizeof(struct bpf_iter_mptcp_subflow));
34
         sizeof(struct bpf_iter_mptcp_subflow));
27
+    BUILD_BUG_ON(__alignof__(struct bpf_iter_mptcp_subflow_kern) !=
35
    BUILD_BUG_ON(__alignof__(struct bpf_iter_mptcp_subflow_kern) !=
28
+         __alignof__(struct bpf_iter_mptcp_subflow));
36
         __alignof__(struct bpf_iter_mptcp_subflow));
29
37
30
    kit->msk = msk;
38
-    kit->msk = msk;
31
    if (!msk)
39
-    if (!msk)
40
+    if (unlikely(!sk || !sk_fullsock(sk)))
41
        return -EINVAL;
32
        return -EINVAL;
42
33
43
-    if (!sock_owned_by_user_nocheck(sk) &&
34
-    msk_owned_by_me(msk);
44
-     !spin_is_locked(&sk->sk_lock.slock))
35
+    if (!sock_owned_by_user_nocheck(sk) &&
45
+    if (sk->sk_protocol != IPPROTO_MPTCP)
36
+     !spin_is_locked(&sk->sk_lock.slock))
46
        return -EINVAL;
37
+        return -EINVAL;
47
38
48
+    msk = mptcp_sk(sk);
49
+    msk_owned_by_me(msk);
50
+
51
+    kit->msk = msk;
52
    kit->pos = &msk->conn_list;
39
    kit->pos = &msk->conn_list;
53
    return 0;
40
    return 0;
54
}
55
--
41
--
56
2.43.0
42
2.45.2
diff view generated by jsdifflib
1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
2
3
Use bpf_core_cast() instead of bpf_skc_to_mptcp_sock().
3
Use bpf_skc_to_mptcp_sock() and mptcp_subflow_tcp_sock() instead of
4
Change the 2nd parameter type of bpf_for_each() as 'struct sock'.
4
bpf_mptcp_sk() and bpf_mptcp_subflow_tcp_sock().
5
Drop bpf_mptcp_sock_acquire/release.
5
6
IPPROTO_MPTCP is checked in bpf_skc_to_mptcp_sock(), no need to check
7
it in BPF program.
8
9
bpf_skc_to_mptcp_sock() and bpf_mptcp_subflow_ctx() may return NULL,
10
need to check the return values.
6
11
7
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
12
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
8
---
13
---
9
tools/testing/selftests/bpf/bpf_experimental.h | 2 +-
14
tools/testing/selftests/bpf/progs/mptcp_bpf.h | 1 -
10
tools/testing/selftests/bpf/progs/mptcp_bpf.h | 3 ---
15
tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c | 11 +++++------
11
tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c | 8 ++------
16
2 files changed, 5 insertions(+), 7 deletions(-)
12
3 files changed, 3 insertions(+), 10 deletions(-)
13
17
14
diff --git a/tools/testing/selftests/bpf/bpf_experimental.h b/tools/testing/selftests/bpf/bpf_experimental.h
15
index XXXXXXX..XXXXXXX 100644
16
--- a/tools/testing/selftests/bpf/bpf_experimental.h
17
+++ b/tools/testing/selftests/bpf/bpf_experimental.h
18
@@ -XXX,XX +XXX,XX @@ extern void bpf_iter_css_destroy(struct bpf_iter_css *it) __weak __ksym;
19
20
struct bpf_iter_mptcp_subflow;
21
extern int bpf_iter_mptcp_subflow_new(struct bpf_iter_mptcp_subflow *it,
22
-                 struct mptcp_sock *msk) __weak __ksym;
23
+                 struct sock *sk) __weak __ksym;
24
extern struct mptcp_subflow_context *
25
bpf_iter_mptcp_subflow_next(struct bpf_iter_mptcp_subflow *it) __weak __ksym;
26
extern void
27
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf.h b/tools/testing/selftests/bpf/progs/mptcp_bpf.h
18
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf.h b/tools/testing/selftests/bpf/progs/mptcp_bpf.h
28
index XXXXXXX..XXXXXXX 100644
19
index XXXXXXX..XXXXXXX 100644
29
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf.h
20
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf.h
30
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf.h
21
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf.h
31
@@ -XXX,XX +XXX,XX @@ mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow)
22
@@ -XXX,XX +XXX,XX @@ mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow)
32
}
23
extern struct mptcp_sock *bpf_mptcp_sock_acquire(struct mptcp_sock *msk) __ksym;
33
24
extern void bpf_mptcp_sock_release(struct mptcp_sock *msk) __ksym;
34
/* ksym */
25
35
-extern struct mptcp_sock *bpf_mptcp_sock_acquire(struct mptcp_sock *msk) __ksym;
26
-extern struct mptcp_sock *bpf_mptcp_sk(struct sock *sk) __ksym;
36
-extern void bpf_mptcp_sock_release(struct mptcp_sock *msk) __ksym;
37
-
38
extern struct mptcp_subflow_context *
27
extern struct mptcp_subflow_context *
39
bpf_mptcp_subflow_ctx(const struct sock *sk) __ksym;
28
bpf_mptcp_subflow_ctx(const struct sock *sk) __ksym;
40
extern struct sock *
29
extern struct sock *
41
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c
30
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c
42
index XXXXXXX..XXXXXXX 100644
31
index XXXXXXX..XXXXXXX 100644
43
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c
32
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c
44
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c
33
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c
45
@@ -XXX,XX +XXX,XX @@ int iters_subflow(struct bpf_sockopt *ctx)
34
@@ -XXX,XX +XXX,XX @@ int iters_subflow(struct bpf_sockopt *ctx)
46
    if (ctx->level != SOL_TCP || ctx->optname != TCP_IS_MPTCP)
35
    struct mptcp_sock *msk;
36
    int local_ids = 0;
37
38
-    if (!sk || sk->protocol != IPPROTO_MPTCP ||
39
-     ctx->level != SOL_TCP || ctx->optname != TCP_IS_MPTCP)
40
+    if (ctx->level != SOL_TCP || ctx->optname != TCP_IS_MPTCP)
47
        return 1;
41
        return 1;
48
42
49
-    msk = bpf_skc_to_mptcp_sock(sk);
43
-    msk = bpf_mptcp_sk((struct sock *)sk);
50
+    msk = bpf_core_cast(sk, struct mptcp_sock);
44
-    if (msk->pm.server_side || !msk->pm.subflows)
51
    if (!msk || msk->pm.server_side || !msk->pm.subflows)
45
+    msk = bpf_skc_to_mptcp_sock(sk);
46
+    if (!msk || msk->pm.server_side || !msk->pm.subflows)
52
        return 1;
47
        return 1;
53
48
54
-    msk = bpf_mptcp_sock_acquire(msk);
49
    msk = bpf_mptcp_sock_acquire(msk);
55
-    if (!msk)
56
-        return 1;
57
-    bpf_for_each(mptcp_subflow, subflow, msk) {
58
+    bpf_for_each(mptcp_subflow, subflow, (struct sock *)sk) {
59
        /* Here MPTCP-specific packet scheduler kfunc can be called:
60
         * this test is not doing anything really useful, only to
61
         * verify the iteration works.
62
@@ -XXX,XX +XXX,XX @@ int iters_subflow(struct bpf_sockopt *ctx)
50
@@ -XXX,XX +XXX,XX @@ int iters_subflow(struct bpf_sockopt *ctx)
51
        local_ids += subflow->subflow_id;
52
53
        /* only to check the following kfunc works */
54
-        ssk = bpf_mptcp_subflow_tcp_sock(subflow);
55
+        ssk = mptcp_subflow_tcp_sock(subflow);
56
    }
57
58
    if (!ssk)
59
@@ -XXX,XX +XXX,XX @@ int iters_subflow(struct bpf_sockopt *ctx)
60
61
    /* only to check the following kfunc works */
62
    subflow = bpf_mptcp_subflow_ctx(ssk);
63
-    if (subflow->token != msk->token)
64
+    if (!subflow || subflow->token != msk->token)
65
        goto out;
66
63
    ids = local_ids;
67
    ids = local_ids;
64
65
out:
66
-    bpf_mptcp_sock_release(msk);
67
    return 1;
68
}
69
--
68
--
70
2.43.0
69
2.45.2
diff view generated by jsdifflib