1
From: Geliang Tang <tanggeliang@kylinos.cn>
1
From: Geliang Tang <tanggeliang@kylinos.cn>
2
3
v4:
4
- drop sock_owned_by_user_nocheck and spin_is_locked. According to
5
comments from Mat and Martin, in this set mptcp_subflow
6
bpf_iter only used from a cg sockopt bpf prog, no need to add these
7
check at this moment.
2
8
3
v3:
9
v3:
4
- patch 3, continue to use sock_owned_by_user_nocheck() and spin_is_locked()
10
- patch 3, continue to use sock_owned_by_user_nocheck() and spin_is_locked()
5
checks instead of using msk_owned_by_me().
11
checks instead of using msk_owned_by_me().
6
- patch 5, drop declaration of bpf_mptcp_subflow_tcp_sock. It's no longer
12
- patch 5, drop declaration of bpf_mptcp_subflow_tcp_sock. It's no longer
...
...
39
Squash to "selftests/bpf: Add mptcp_subflow bpf_iter subtest"
45
Squash to "selftests/bpf: Add mptcp_subflow bpf_iter subtest"
40
46
41
include/net/mptcp.h | 4 +-
47
include/net/mptcp.h | 4 +-
42
kernel/bpf/cgroup.c | 2 -
48
kernel/bpf/cgroup.c | 2 -
43
net/core/filter.c | 2 +-
49
net/core/filter.c | 2 +-
44
net/mptcp/bpf.c | 41 +++++--------------
50
net/mptcp/bpf.c | 41 ++++---------------
45
.../testing/selftests/bpf/bpf_experimental.h | 2 +-
51
.../testing/selftests/bpf/bpf_experimental.h | 2 +-
46
tools/testing/selftests/bpf/progs/mptcp_bpf.h | 5 ---
52
tools/testing/selftests/bpf/progs/mptcp_bpf.h | 5 ---
47
.../selftests/bpf/progs/mptcp_bpf_iters.c | 10 ++---
53
.../selftests/bpf/progs/mptcp_bpf_iters.c | 10 ++---
48
7 files changed, 17 insertions(+), 49 deletions(-)
54
7 files changed, 15 insertions(+), 51 deletions(-)
49
55
50
--
56
--
51
2.43.0
57
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
bpf_core_cast() can be used in mptcp_subflow bpf_iter selftests to get the
3
bpf_core_cast() can be used in mptcp_subflow bpf_iter selftests to get the
4
msk, instead of using bpf_skc_to_mptcp_sock(). No need to add this patch
4
msk, instead of using bpf_skc_to_mptcp_sock(). No need to add this patch
5
anymore, revert it.
5
anymore, revert it.
6
6
7
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
7
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
8
---
8
---
9
include/net/mptcp.h | 4 ++--
9
include/net/mptcp.h | 4 ++--
10
net/core/filter.c | 2 +-
10
net/core/filter.c | 2 +-
11
net/mptcp/bpf.c | 10 ++--------
11
net/mptcp/bpf.c | 10 ++--------
12
3 files changed, 5 insertions(+), 11 deletions(-)
12
3 files changed, 5 insertions(+), 11 deletions(-)
13
13
14
diff --git a/include/net/mptcp.h b/include/net/mptcp.h
14
diff --git a/include/net/mptcp.h b/include/net/mptcp.h
15
index XXXXXXX..XXXXXXX 100644
15
index XXXXXXX..XXXXXXX 100644
16
--- a/include/net/mptcp.h
16
--- a/include/net/mptcp.h
17
+++ b/include/net/mptcp.h
17
+++ b/include/net/mptcp.h
18
@@ -XXX,XX +XXX,XX @@ static inline void mptcpv6_handle_mapped(struct sock *sk, bool mapped) { }
18
@@ -XXX,XX +XXX,XX @@ static inline void mptcpv6_handle_mapped(struct sock *sk, bool mapped) { }
19
#endif
19
#endif
20
20
21
#if defined(CONFIG_MPTCP) && defined(CONFIG_BPF_SYSCALL)
21
#if defined(CONFIG_MPTCP) && defined(CONFIG_BPF_SYSCALL)
22
-struct mptcp_sock *bpf_mptcp_sock_from_sock(struct sock *sk);
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
#else
24
#else
25
-static inline struct mptcp_sock *bpf_mptcp_sock_from_sock(struct sock *sk) { return NULL; }
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
#endif
27
#endif
28
28
29
#if !IS_ENABLED(CONFIG_MPTCP)
29
#if !IS_ENABLED(CONFIG_MPTCP)
30
diff --git a/net/core/filter.c b/net/core/filter.c
30
diff --git a/net/core/filter.c b/net/core/filter.c
31
index XXXXXXX..XXXXXXX 100644
31
index XXXXXXX..XXXXXXX 100644
32
--- a/net/core/filter.c
32
--- a/net/core/filter.c
33
+++ b/net/core/filter.c
33
+++ b/net/core/filter.c
34
@@ -XXX,XX +XXX,XX @@ const struct bpf_func_proto bpf_skc_to_unix_sock_proto = {
34
@@ -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)
35
BPF_CALL_1(bpf_skc_to_mptcp_sock, struct sock *, sk)
36
{
36
{
37
    BTF_TYPE_EMIT(struct mptcp_sock);
37
    BTF_TYPE_EMIT(struct mptcp_sock);
38
-    return (unsigned long)bpf_mptcp_sock_from_sock(sk);
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
}
40
}
41
41
42
const struct bpf_func_proto bpf_skc_to_mptcp_sock_proto = {
42
const struct bpf_func_proto bpf_skc_to_mptcp_sock_proto = {
43
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
43
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
44
index XXXXXXX..XXXXXXX 100644
44
index XXXXXXX..XXXXXXX 100644
45
--- a/net/mptcp/bpf.c
45
--- a/net/mptcp/bpf.c
46
+++ b/net/mptcp/bpf.c
46
+++ b/net/mptcp/bpf.c
47
@@ -XXX,XX +XXX,XX @@ static struct bpf_struct_ops bpf_mptcp_sched_ops = {
47
@@ -XXX,XX +XXX,XX @@ static struct bpf_struct_ops bpf_mptcp_sched_ops = {
48
};
48
};
49
#endif /* CONFIG_BPF_JIT */
49
#endif /* CONFIG_BPF_JIT */
50
50
51
-struct mptcp_sock *bpf_mptcp_sock_from_sock(struct sock *sk)
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
{
53
{
54
-    if (unlikely(!sk || !sk_fullsock(sk)))
54
-    if (unlikely(!sk || !sk_fullsock(sk)))
55
-        return NULL;
55
-        return NULL;
56
-
56
-
57
-    if (sk->sk_protocol == IPPROTO_MPTCP)
57
-    if (sk->sk_protocol == IPPROTO_MPTCP)
58
-        return mptcp_sk(sk);
58
-        return mptcp_sk(sk);
59
-
59
-
60
-    if (sk->sk_protocol == IPPROTO_TCP && sk_is_mptcp(sk))
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))
61
+    if (sk && sk_fullsock(sk) && sk->sk_protocol == IPPROTO_TCP && sk_is_mptcp(sk))
62
        return mptcp_sk(mptcp_subflow_ctx(sk)->conn);
62
        return mptcp_sk(mptcp_subflow_ctx(sk)->conn);
63
63
64
    return NULL;
64
    return NULL;
65
--
65
--
66
2.43.0
66
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
bpf_core_cast() can be used in mptcp_subflow bpf_iter selftests to get the
3
bpf_core_cast() can be used in mptcp_subflow bpf_iter selftests to get the
4
msk, instead of using bpf_skc_to_mptcp_sock(). No need to add this patch
4
msk, instead of using bpf_skc_to_mptcp_sock(). No need to add this patch
5
anymore, revert it.
5
anymore, revert it.
6
6
7
This reverts commit d8d42f5a4542c2dc31e4e00c58508a821c6ab789.
7
This reverts commit d8d42f5a4542c2dc31e4e00c58508a821c6ab789.
8
---
8
---
9
kernel/bpf/cgroup.c | 2 --
9
kernel/bpf/cgroup.c | 2 --
10
1 file changed, 2 deletions(-)
10
1 file changed, 2 deletions(-)
11
11
12
diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
12
diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
13
index XXXXXXX..XXXXXXX 100644
13
index XXXXXXX..XXXXXXX 100644
14
--- a/kernel/bpf/cgroup.c
14
--- a/kernel/bpf/cgroup.c
15
+++ b/kernel/bpf/cgroup.c
15
+++ 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)
16
@@ -XXX,XX +XXX,XX @@ cg_sockopt_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
17
#ifdef CONFIG_INET
17
#ifdef CONFIG_INET
18
    case BPF_FUNC_tcp_sock:
18
    case BPF_FUNC_tcp_sock:
19
        return &bpf_tcp_sock_proto;
19
        return &bpf_tcp_sock_proto;
20
-    case BPF_FUNC_skc_to_mptcp_sock:
20
-    case BPF_FUNC_skc_to_mptcp_sock:
21
-        return &bpf_skc_to_mptcp_sock_proto;
21
-        return &bpf_skc_to_mptcp_sock_proto;
22
#endif
22
#endif
23
    case BPF_FUNC_perf_event_output:
23
    case BPF_FUNC_perf_event_output:
24
        return &bpf_event_output_data_proto;
24
        return &bpf_event_output_data_proto;
25
--
25
--
26
2.43.0
26
2.43.0
diff view generated by jsdifflib
...
...
3
Drop the NULL check for 'msk' as Martin suggested, add more checks
3
Drop the NULL check for 'msk' as Martin suggested, add more checks
4
for 'sk'.
4
for 'sk'.
5
5
6
Use the "struct sock *sk" instead of "struct mptcp-sock *msk" as the
6
Use the "struct sock *sk" instead of "struct mptcp-sock *msk" as the
7
argument in the bpf_iter_mptcp_subflow_new as Martin suggested.
7
argument in the bpf_iter_mptcp_subflow_new as Martin suggested.
8
9
v4:
10
- drop sock_owned_by_user_nocheck and spin_is_locked. According to
11
comments from Mat [2] and Martin [1], in this set mptcp_subflow
12
bpf_iter only used from a cg sockopt bpf prog, no need to add these
13
check at this moment.
14
15
[1]
16
https://lore.kernel.org/all/fdf0ddbe-e007-4a5f-bbdf-9a144e8fbe35@linux.dev/
17
[2]
18
https://patchwork.kernel.org/project/mptcp/patch/f6469225598beecbf0bda12a4c33fafa86c0ff15.1739787744.git.tanggeliang@kylinos.cn/
8
19
9
v3:
20
v3:
10
- continue to use sock_owned_by_user_nocheck and spin_is_locked
21
- continue to use sock_owned_by_user_nocheck and spin_is_locked
11
checks instead of using msk_owned_by_me().
22
checks instead of using msk_owned_by_me().
12
23
13
v2:
24
v2:
14
- check the owner before assigning the msk as Mat suggested.
25
- check the owner before assigning the msk as Mat suggested.
15
26
16
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
27
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
17
---
28
---
18
net/mptcp/bpf.c | 12 ++++++++----
29
net/mptcp/bpf.c | 12 ++++++------
19
1 file changed, 8 insertions(+), 4 deletions(-)
30
1 file changed, 6 insertions(+), 6 deletions(-)
20
31
21
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
32
diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c
22
index XXXXXXX..XXXXXXX 100644
33
index XXXXXXX..XXXXXXX 100644
23
--- a/net/mptcp/bpf.c
34
--- a/net/mptcp/bpf.c
24
+++ b/net/mptcp/bpf.c
35
+++ b/net/mptcp/bpf.c
...
...
39
         __alignof__(struct bpf_iter_mptcp_subflow));
50
         __alignof__(struct bpf_iter_mptcp_subflow));
40
51
41
-    kit->msk = msk;
52
-    kit->msk = msk;
42
-    if (!msk)
53
-    if (!msk)
43
+    if (unlikely(!sk || !sk_fullsock(sk)))
54
+    if (unlikely(!sk || !sk_fullsock(sk)))
44
+        return -EINVAL;
55
        return -EINVAL;
45
+
56
57
-    if (!sock_owned_by_user_nocheck(sk) &&
58
-     !spin_is_locked(&sk->sk_lock.slock))
46
+    if (sk->sk_protocol != IPPROTO_MPTCP)
59
+    if (sk->sk_protocol != IPPROTO_MPTCP)
47
        return -EINVAL;
60
        return -EINVAL;
48
49
    if (!sock_owned_by_user_nocheck(sk) &&
50
     !spin_is_locked(&sk->sk_lock.slock))
51
        return -EINVAL;
52
61
53
+    msk = mptcp_sk(sk);
62
+    msk = mptcp_sk(sk);
54
+    kit->msk = msk;
63
+    kit->msk = msk;
55
    kit->pos = &msk->conn_list;
64
    kit->pos = &msk->conn_list;
56
    return 0;
65
    return 0;
57
}
66
}
58
--
67
--
59
2.43.0
68
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
Drop this patch as Martin suggested.
3
Drop this patch as Martin suggested.
4
5
From Martin's review [1], this mptcp_sock_acquire() helper was a workaround
6
only to please the verifier, but they were not needed.
7
8
[1]
9
https://lore.kernel.org/9b373a23-c093-42d8-b4ae-99f2e62e7681@linux.dev
4
10
5
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
11
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
6
---
12
---
7
net/mptcp/bpf.c | 19 -------------------
13
net/mptcp/bpf.c | 19 -------------------
8
1 file changed, 19 deletions(-)
14
1 file changed, 19 deletions(-)
...
...
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_core_cast() instead of bpf_skc_to_mptcp_sock().
4
Change the 2nd parameter type of bpf_for_each() as 'struct sock'.
4
Change the 2nd parameter type of bpf_for_each() as 'struct sock'.
5
Drop use of bpf_mptcp_sock_acquire/release.
5
Drop use of bpf_mptcp_sock_acquire/release.
6
Drop declaration of bpf_mptcp_subflow_tcp_sock. It's no longer used.
6
Drop declaration of bpf_mptcp_subflow_tcp_sock. It's no longer used.
7
Update the comment for mptcp_subflow_tcp_sock(), which is a BPF helper,
7
Update the comment for mptcp_subflow_tcp_sock(), which is a BPF helper,
8
not a kfunc.
8
not a kfunc.
9
9
10
Please update the commit log as:
10
Please update the commit log as:
11
11
12
'''
12
'''
13
This patch adds a "cgroup/getsockopt" program "iters_subflow" to test the
13
This patch adds a "cgroup/getsockopt" program "iters_subflow" to test the
14
newly added mptcp_subflow bpf_iter.
14
newly added mptcp_subflow bpf_iter.
15
15
16
Export mptcp_subflow helpers bpf_iter_mptcp_subflow_new/_next/_destroy
16
Export mptcp_subflow helpers bpf_iter_mptcp_subflow_new/_next/_destroy
17
and other helpers into bpf_experimental.h.
17
and other helpers into bpf_experimental.h.
18
18
19
Use bpf_for_each() to walk the subflow list of this msk. MPTCP-specific
19
Use bpf_for_each() to walk the subflow list of this msk. MPTCP-specific
20
packet scheduler kfunc can be called in the loop. In this test, just
20
packet scheduler kfunc can be called in the loop. In this test, just
21
add all subflow ids to local variable local_ids, then invoke the helper
21
add all subflow ids to local variable local_ids, then invoke the helper
22
mptcp_subflow_tcp_sock() in the loop to pick a subsocket.
22
mptcp_subflow_tcp_sock() in the loop to pick a subsocket.
23
23
24
Out of the loop, use bpf_mptcp_subflow_ctx() to get the subflow context
24
Out of the loop, use bpf_mptcp_subflow_ctx() to get the subflow context
25
of the picked subsocket and do some verification. Finally, assign
25
of the picked subsocket and do some verification. Finally, assign
26
local_ids to global variable ids so that the application can obtain this
26
local_ids to global variable ids so that the application can obtain this
27
value.
27
value.
28
28
29
Add a subtest named test_iters_subflow to load and verify the newly added
29
Add a subtest named test_iters_subflow to load and verify the newly added
30
mptcp_subflow type bpf_iter example in test_mptcp. Use the helper
30
mptcp_subflow type bpf_iter example in test_mptcp. Use the helper
31
endpoint_init() to add 3 new subflow endpoints. Send a byte of message
31
endpoint_init() to add 3 new subflow endpoints. Send a byte of message
32
to start the mptcp connection, and wait for new subflows to be added.
32
to start the mptcp connection, and wait for new subflows to be added.
33
getsockopt() is invoked to trigger the "cgroup/getsockopt" test program
33
getsockopt() is invoked to trigger the "cgroup/getsockopt" test program
34
"iters_subflow". Check if skel->bss->ids equals 10 to verify whether this
34
"iters_subflow". Check if skel->bss->ids equals 10 to verify whether this
35
mptcp_subflow bpf_iter loops correctly as expected.
35
mptcp_subflow bpf_iter loops correctly as expected.
36
'''
36
'''
37
37
38
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
38
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
39
---
39
---
40
tools/testing/selftests/bpf/bpf_experimental.h | 2 +-
40
tools/testing/selftests/bpf/bpf_experimental.h | 2 +-
41
tools/testing/selftests/bpf/progs/mptcp_bpf.h | 5 -----
41
tools/testing/selftests/bpf/progs/mptcp_bpf.h | 5 -----
42
tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c | 10 +++-------
42
tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c | 10 +++-------
43
3 files changed, 4 insertions(+), 13 deletions(-)
43
3 files changed, 4 insertions(+), 13 deletions(-)
44
44
45
diff --git a/tools/testing/selftests/bpf/bpf_experimental.h b/tools/testing/selftests/bpf/bpf_experimental.h
45
diff --git a/tools/testing/selftests/bpf/bpf_experimental.h b/tools/testing/selftests/bpf/bpf_experimental.h
46
index XXXXXXX..XXXXXXX 100644
46
index XXXXXXX..XXXXXXX 100644
47
--- a/tools/testing/selftests/bpf/bpf_experimental.h
47
--- a/tools/testing/selftests/bpf/bpf_experimental.h
48
+++ b/tools/testing/selftests/bpf/bpf_experimental.h
48
+++ b/tools/testing/selftests/bpf/bpf_experimental.h
49
@@ -XXX,XX +XXX,XX @@ extern void bpf_iter_css_destroy(struct bpf_iter_css *it) __weak __ksym;
49
@@ -XXX,XX +XXX,XX @@ extern void bpf_iter_css_destroy(struct bpf_iter_css *it) __weak __ksym;
50
50
51
struct bpf_iter_mptcp_subflow;
51
struct bpf_iter_mptcp_subflow;
52
extern int bpf_iter_mptcp_subflow_new(struct bpf_iter_mptcp_subflow *it,
52
extern int bpf_iter_mptcp_subflow_new(struct bpf_iter_mptcp_subflow *it,
53
-                 struct mptcp_sock *msk) __weak __ksym;
53
-                 struct mptcp_sock *msk) __weak __ksym;
54
+                 struct sock *sk) __weak __ksym;
54
+                 struct sock *sk) __weak __ksym;
55
extern struct mptcp_subflow_context *
55
extern struct mptcp_subflow_context *
56
bpf_iter_mptcp_subflow_next(struct bpf_iter_mptcp_subflow *it) __weak __ksym;
56
bpf_iter_mptcp_subflow_next(struct bpf_iter_mptcp_subflow *it) __weak __ksym;
57
extern void
57
extern void
58
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf.h b/tools/testing/selftests/bpf/progs/mptcp_bpf.h
58
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf.h b/tools/testing/selftests/bpf/progs/mptcp_bpf.h
59
index XXXXXXX..XXXXXXX 100644
59
index XXXXXXX..XXXXXXX 100644
60
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf.h
60
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf.h
61
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf.h
61
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf.h
62
@@ -XXX,XX +XXX,XX @@ mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow)
62
@@ -XXX,XX +XXX,XX @@ mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow)
63
}
63
}
64
64
65
/* ksym */
65
/* ksym */
66
-extern struct mptcp_sock *bpf_mptcp_sock_acquire(struct mptcp_sock *msk) __ksym;
66
-extern struct mptcp_sock *bpf_mptcp_sock_acquire(struct mptcp_sock *msk) __ksym;
67
-extern void bpf_mptcp_sock_release(struct mptcp_sock *msk) __ksym;
67
-extern void bpf_mptcp_sock_release(struct mptcp_sock *msk) __ksym;
68
-
68
-
69
extern struct mptcp_subflow_context *
69
extern struct mptcp_subflow_context *
70
bpf_mptcp_subflow_ctx(const struct sock *sk) __ksym;
70
bpf_mptcp_subflow_ctx(const struct sock *sk) __ksym;
71
-extern struct sock *
71
-extern struct sock *
72
-bpf_mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow) __ksym;
72
-bpf_mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow) __ksym;
73
73
74
extern void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
74
extern void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
75
                    bool scheduled) __ksym;
75
                    bool scheduled) __ksym;
76
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c
76
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c
77
index XXXXXXX..XXXXXXX 100644
77
index XXXXXXX..XXXXXXX 100644
78
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c
78
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c
79
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c
79
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c
80
@@ -XXX,XX +XXX,XX @@ int iters_subflow(struct bpf_sockopt *ctx)
80
@@ -XXX,XX +XXX,XX @@ int iters_subflow(struct bpf_sockopt *ctx)
81
    if (ctx->level != SOL_TCP || ctx->optname != TCP_IS_MPTCP)
81
    if (ctx->level != SOL_TCP || ctx->optname != TCP_IS_MPTCP)
82
        return 1;
82
        return 1;
83
83
84
-    msk = bpf_skc_to_mptcp_sock(sk);
84
-    msk = bpf_skc_to_mptcp_sock(sk);
85
+    msk = bpf_core_cast(sk, struct mptcp_sock);
85
+    msk = bpf_core_cast(sk, struct mptcp_sock);
86
    if (!msk || msk->pm.server_side || !msk->pm.subflows)
86
    if (!msk || msk->pm.server_side || !msk->pm.subflows)
87
        return 1;
87
        return 1;
88
88
89
-    msk = bpf_mptcp_sock_acquire(msk);
89
-    msk = bpf_mptcp_sock_acquire(msk);
90
-    if (!msk)
90
-    if (!msk)
91
-        return 1;
91
-        return 1;
92
-    bpf_for_each(mptcp_subflow, subflow, msk) {
92
-    bpf_for_each(mptcp_subflow, subflow, msk) {
93
+    bpf_for_each(mptcp_subflow, subflow, (struct sock *)sk) {
93
+    bpf_for_each(mptcp_subflow, subflow, (struct sock *)sk) {
94
        /* Here MPTCP-specific packet scheduler kfunc can be called:
94
        /* Here MPTCP-specific packet scheduler kfunc can be called:
95
         * this test is not doing anything really useful, only to
95
         * this test is not doing anything really useful, only to
96
         * verify the iteration works.
96
         * verify the iteration works.
97
@@ -XXX,XX +XXX,XX @@ int iters_subflow(struct bpf_sockopt *ctx)
97
@@ -XXX,XX +XXX,XX @@ int iters_subflow(struct bpf_sockopt *ctx)
98
98
99
        local_ids += subflow->subflow_id;
99
        local_ids += subflow->subflow_id;
100
100
101
-        /* only to check the following kfunc works */
101
-        /* only to check the following kfunc works */
102
+        /* only to check the following helper works */
102
+        /* only to check the following helper works */
103
        ssk = mptcp_subflow_tcp_sock(subflow);
103
        ssk = mptcp_subflow_tcp_sock(subflow);
104
    }
104
    }
105
105
106
@@ -XXX,XX +XXX,XX @@ int iters_subflow(struct bpf_sockopt *ctx)
106
@@ -XXX,XX +XXX,XX @@ int iters_subflow(struct bpf_sockopt *ctx)
107
    ids = local_ids;
107
    ids = local_ids;
108
108
109
out:
109
out:
110
-    bpf_mptcp_sock_release(msk);
110
-    bpf_mptcp_sock_release(msk);
111
    return 1;
111
    return 1;
112
}
112
}
113
--
113
--
114
2.43.0
114
2.43.0
diff view generated by jsdifflib