net: tcp: use tcp_drop_reason() for tcp_rcv_established()
Replace tcp_drop() used in tcp_rcv_established() with tcp_drop_reason(). Following drop reasons are added: SKB_DROP_REASON_TCP_FLAGS Reviewed-by: Mengen Sun <mengensun@tencent.com> Reviewed-by: Hao Peng <flyingpeng@tencent.com> Signed-off-by: Menglong Dong <imagedong@tencent.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Reviewed-by: David Ahern <dsahern@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
8eba65fa5f
commit
2a968ef60e
@@ -362,6 +362,7 @@ enum skb_drop_reason {
|
|||||||
* backlog (see
|
* backlog (see
|
||||||
* LINUX_MIB_TCPBACKLOGDROP)
|
* LINUX_MIB_TCPBACKLOGDROP)
|
||||||
*/
|
*/
|
||||||
|
SKB_DROP_REASON_TCP_FLAGS, /* TCP flags invalid */
|
||||||
SKB_DROP_REASON_MAX,
|
SKB_DROP_REASON_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
TCP_MD5UNEXPECTED) \
|
TCP_MD5UNEXPECTED) \
|
||||||
EM(SKB_DROP_REASON_TCP_MD5FAILURE, TCP_MD5FAILURE) \
|
EM(SKB_DROP_REASON_TCP_MD5FAILURE, TCP_MD5FAILURE) \
|
||||||
EM(SKB_DROP_REASON_SOCKET_BACKLOG, SOCKET_BACKLOG) \
|
EM(SKB_DROP_REASON_SOCKET_BACKLOG, SOCKET_BACKLOG) \
|
||||||
|
EM(SKB_DROP_REASON_TCP_FLAGS, TCP_FLAGS) \
|
||||||
EMe(SKB_DROP_REASON_MAX, MAX)
|
EMe(SKB_DROP_REASON_MAX, MAX)
|
||||||
|
|
||||||
#undef EM
|
#undef EM
|
||||||
|
|||||||
@@ -5787,6 +5787,7 @@ discard:
|
|||||||
*/
|
*/
|
||||||
void tcp_rcv_established(struct sock *sk, struct sk_buff *skb)
|
void tcp_rcv_established(struct sock *sk, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
|
enum skb_drop_reason reason = SKB_DROP_REASON_NOT_SPECIFIED;
|
||||||
const struct tcphdr *th = (const struct tcphdr *)skb->data;
|
const struct tcphdr *th = (const struct tcphdr *)skb->data;
|
||||||
struct tcp_sock *tp = tcp_sk(sk);
|
struct tcp_sock *tp = tcp_sk(sk);
|
||||||
unsigned int len = skb->len;
|
unsigned int len = skb->len;
|
||||||
@@ -5875,6 +5876,7 @@ void tcp_rcv_established(struct sock *sk, struct sk_buff *skb)
|
|||||||
tp->rcv_rtt_last_tsecr = tp->rx_opt.rcv_tsecr;
|
tp->rcv_rtt_last_tsecr = tp->rx_opt.rcv_tsecr;
|
||||||
return;
|
return;
|
||||||
} else { /* Header too small */
|
} else { /* Header too small */
|
||||||
|
reason = SKB_DROP_REASON_PKT_TOO_SMALL;
|
||||||
TCP_INC_STATS(sock_net(sk), TCP_MIB_INERRS);
|
TCP_INC_STATS(sock_net(sk), TCP_MIB_INERRS);
|
||||||
goto discard;
|
goto discard;
|
||||||
}
|
}
|
||||||
@@ -5930,8 +5932,10 @@ slow_path:
|
|||||||
if (len < (th->doff << 2) || tcp_checksum_complete(skb))
|
if (len < (th->doff << 2) || tcp_checksum_complete(skb))
|
||||||
goto csum_error;
|
goto csum_error;
|
||||||
|
|
||||||
if (!th->ack && !th->rst && !th->syn)
|
if (!th->ack && !th->rst && !th->syn) {
|
||||||
|
reason = SKB_DROP_REASON_TCP_FLAGS;
|
||||||
goto discard;
|
goto discard;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Standard slow path.
|
* Standard slow path.
|
||||||
@@ -5957,12 +5961,13 @@ step5:
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
csum_error:
|
csum_error:
|
||||||
|
reason = SKB_DROP_REASON_TCP_CSUM;
|
||||||
trace_tcp_bad_csum(skb);
|
trace_tcp_bad_csum(skb);
|
||||||
TCP_INC_STATS(sock_net(sk), TCP_MIB_CSUMERRORS);
|
TCP_INC_STATS(sock_net(sk), TCP_MIB_CSUMERRORS);
|
||||||
TCP_INC_STATS(sock_net(sk), TCP_MIB_INERRS);
|
TCP_INC_STATS(sock_net(sk), TCP_MIB_INERRS);
|
||||||
|
|
||||||
discard:
|
discard:
|
||||||
tcp_drop(sk, skb);
|
tcp_drop_reason(sk, skb, reason);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(tcp_rcv_established);
|
EXPORT_SYMBOL(tcp_rcv_established);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user