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 |