bpf: Add TCP connection BPF callbacks
Added callbacks to BPF SOCK_OPS type program before an active connection is intialized and after a passive or active connection is established. The following patch demostrates how they can be used to set send and receive buffer sizes. Signed-off-by: Lawrence Brakmo <brakmo@fb.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
8c4b4c7e9f
Коммит
9872a4bde3
|
@ -767,6 +767,17 @@ enum {
|
|||
* window (in packets) or -1 if default
|
||||
* value should be used
|
||||
*/
|
||||
BPF_SOCK_OPS_TCP_CONNECT_CB, /* Calls BPF program right before an
|
||||
* active connection is initialized
|
||||
*/
|
||||
BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB, /* Calls BPF program when an
|
||||
* active connection is
|
||||
* established
|
||||
*/
|
||||
BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB, /* Calls BPF program when a
|
||||
* passive connection is
|
||||
* established
|
||||
*/
|
||||
};
|
||||
|
||||
#endif /* _UAPI__LINUX_BPF_H__ */
|
||||
|
|
|
@ -221,6 +221,7 @@ static struct sock *tcp_fastopen_create_child(struct sock *sk,
|
|||
tcp_init_congestion_control(child);
|
||||
tcp_mtup_init(child);
|
||||
tcp_init_metrics(child);
|
||||
tcp_call_bpf(child, BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB);
|
||||
tcp_init_buffer_space(child);
|
||||
|
||||
tp->rcv_nxt = TCP_SKB_CB(skb)->seq + 1;
|
||||
|
|
|
@ -5571,7 +5571,7 @@ void tcp_finish_connect(struct sock *sk, struct sk_buff *skb)
|
|||
icsk->icsk_af_ops->rebuild_header(sk);
|
||||
|
||||
tcp_init_metrics(sk);
|
||||
|
||||
tcp_call_bpf(sk, BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB);
|
||||
tcp_init_congestion_control(sk);
|
||||
|
||||
/* Prevent spurious tcp_cwnd_restart() on first data
|
||||
|
@ -5977,6 +5977,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb)
|
|||
} else {
|
||||
/* Make sure socket is routed, for correct metrics. */
|
||||
icsk->icsk_af_ops->rebuild_header(sk);
|
||||
tcp_call_bpf(sk, BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB);
|
||||
tcp_init_congestion_control(sk);
|
||||
|
||||
tcp_mtup_init(sk);
|
||||
|
|
|
@ -3444,6 +3444,7 @@ int tcp_connect(struct sock *sk)
|
|||
struct sk_buff *buff;
|
||||
int err;
|
||||
|
||||
tcp_call_bpf(sk, BPF_SOCK_OPS_TCP_CONNECT_CB);
|
||||
tcp_connect_init(sk);
|
||||
|
||||
if (unlikely(tp->repair)) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче