diff options
| author | Lawrence Brakmo <[email protected]> | 2018-01-26 00:14:14 +0000 |
|---|---|---|
| committer | Alexei Starovoitov <[email protected]> | 2018-01-26 00:41:14 +0000 |
| commit | a31ad29e6a30cb0b9084a9425b819cdcd97273ce (patch) | |
| tree | 33ed37e633027ebf8b53a289eaddc687b1756368 /net/ipv4/tcp_output.c | |
| parent | bpf: Add sock_ops R/W access to tclass (diff) | |
| download | kernel-a31ad29e6a30cb0b9084a9425b819cdcd97273ce.tar.gz kernel-a31ad29e6a30cb0b9084a9425b819cdcd97273ce.zip | |
bpf: Add BPF_SOCK_OPS_RETRANS_CB
Adds support for calling sock_ops BPF program when there is a
retransmission. Three arguments are used; one for the sequence number,
another for the number of segments retransmitted, and the last one for
the return value of tcp_transmit_skb (0 => success).
Does not include syn-ack retransmissions.
New op: BPF_SOCK_OPS_RETRANS_CB.
Signed-off-by: Lawrence Brakmo <[email protected]>
Signed-off-by: Alexei Starovoitov <[email protected]>
Diffstat (limited to 'net/ipv4/tcp_output.c')
| -rw-r--r-- | net/ipv4/tcp_output.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index d12f7f71c1c4..e9f985e42405 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -2905,6 +2905,10 @@ int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb, int segs) err = tcp_transmit_skb(sk, skb, 1, GFP_ATOMIC); } + if (BPF_SOCK_OPS_TEST_FLAG(tp, BPF_SOCK_OPS_RETRANS_CB_FLAG)) + tcp_call_bpf_3arg(sk, BPF_SOCK_OPS_RETRANS_CB, + TCP_SKB_CB(skb)->seq, segs, err); + if (likely(!err)) { TCP_SKB_CB(skb)->sacked |= TCPCB_EVER_RETRANS; trace_tcp_retransmit_skb(sk, skb); |
