1*cb730e4aSJiayuan Chen // SPDX-License-Identifier: GPL-2.0
2*cb730e4aSJiayuan Chen
3*cb730e4aSJiayuan Chen #include "bpf_tracing_net.h"
4*cb730e4aSJiayuan Chen
5*cb730e4aSJiayuan Chen char _license[] SEC("license") = "GPL";
6*cb730e4aSJiayuan Chen
7*cb730e4aSJiayuan Chen int sk_index;
8*cb730e4aSJiayuan Chen int redirect_idx;
9*cb730e4aSJiayuan Chen int trace_port;
10*cb730e4aSJiayuan Chen int helper_ret;
11*cb730e4aSJiayuan Chen struct {
12*cb730e4aSJiayuan Chen __uint(type, BPF_MAP_TYPE_SOCKMAP);
13*cb730e4aSJiayuan Chen __uint(key_size, sizeof(__u32));
14*cb730e4aSJiayuan Chen __uint(value_size, sizeof(__u32));
15*cb730e4aSJiayuan Chen __uint(max_entries, 100);
16*cb730e4aSJiayuan Chen } sock_map SEC(".maps");
17*cb730e4aSJiayuan Chen
18*cb730e4aSJiayuan Chen SEC("sockops")
mptcp_sockmap_inject(struct bpf_sock_ops * skops)19*cb730e4aSJiayuan Chen int mptcp_sockmap_inject(struct bpf_sock_ops *skops)
20*cb730e4aSJiayuan Chen {
21*cb730e4aSJiayuan Chen struct bpf_sock *sk;
22*cb730e4aSJiayuan Chen
23*cb730e4aSJiayuan Chen /* only accept specified connection */
24*cb730e4aSJiayuan Chen if (skops->local_port != trace_port ||
25*cb730e4aSJiayuan Chen skops->op != BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB)
26*cb730e4aSJiayuan Chen return 1;
27*cb730e4aSJiayuan Chen
28*cb730e4aSJiayuan Chen sk = skops->sk;
29*cb730e4aSJiayuan Chen if (!sk)
30*cb730e4aSJiayuan Chen return 1;
31*cb730e4aSJiayuan Chen
32*cb730e4aSJiayuan Chen /* update sk handler */
33*cb730e4aSJiayuan Chen helper_ret = bpf_sock_map_update(skops, &sock_map, &sk_index, BPF_NOEXIST);
34*cb730e4aSJiayuan Chen
35*cb730e4aSJiayuan Chen return 1;
36*cb730e4aSJiayuan Chen }
37*cb730e4aSJiayuan Chen
38*cb730e4aSJiayuan Chen SEC("sk_skb/stream_verdict")
mptcp_sockmap_redirect(struct __sk_buff * skb)39*cb730e4aSJiayuan Chen int mptcp_sockmap_redirect(struct __sk_buff *skb)
40*cb730e4aSJiayuan Chen {
41*cb730e4aSJiayuan Chen /* redirect skb to the sk under sock_map[redirect_idx] */
42*cb730e4aSJiayuan Chen return bpf_sk_redirect_map(skb, &sock_map, redirect_idx, 0);
43*cb730e4aSJiayuan Chen }
44