From: menglong8.dong@gmail.com
To: edumazet@google.com, kuba@kernel.org
Cc: davem@davemloft.net, pabeni@redhat.com, yoshfuji@linux-ipv6.org,
dsahern@kernel.org, imagedong@tencent.com, kafai@fb.com,
asml.silence@gmail.com, keescook@chromium.org,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org
Subject: [PATCH net-next 0/9] net: tcp: add skb drop reasons to tcp state process
Date: Sat, 29 Oct 2022 21:09:48 +0800 [thread overview]
Message-ID: <20221029130957.1292060-1-imagedong@tencent.com> (raw)
From: Menglong Dong <imagedong@tencent.com>
For now, the skb drop reasons have not fully be supported by TCP
protocol on the code path of TCP connection state change. The function
call chain is a little complex, which makes it hard to get the reason
that why skb is dropped.
However, I have a idea now: store the drop reason in the tcp_skb_cb,
which means that we need to add a 'drop_reason' field to the struct
tcp_skb_cb. Luckily, this struct still has 4 bytes spare space for this
purpose.
In this way, we need only to initialize to 'TCP_SKB_CB(skb)->drop_reason'
to SKB_DROP_REASON_NOT_SPECIFIED in tcp_v4_rcv()/tcp_v6_rcv(). When the
skb needs to be dropped, the value of this field should be the drop
reason or SKB_DROP_REASON_NOT_SPECIFIED. Meanwhile, the value also can be
SKB_NOT_DROPPED_YET. On such case, try_kfree_skb(), which we add in the
1th patch, should be called.
Hi, Eric, do you like it? In this way, we almost don't need to change the
exist code, and won't mess the code up.
In this series, the skb drop reasons are added following functions:
tcp_rcv_synsent_state_process
tcp_timewait_state_process
tcp_conn_request
tcp_rcv_state_process
And following new drop reasons are added:
SKB_DROP_REASON_TCP_PAWSACTIVEREJECTED
SKB_DROP_REASON_TIMEWAIT
SKB_DROP_REASON_LISTENOVERFLOWS
SKB_DROP_REASON_TCP_REQQFULLDROP
SKB_DROP_REASON_TCP_ABORTONDATA
SKB_DROP_REASON_TCP_ABORTONLINGER
SKB_DROP_REASON_LSM
Menglong Dong (9):
net: skb: introduce try_kfree_skb()
net: tcp: add 'drop_reason' field to struct tcp_skb_cb
net: tcp: use the drop reasons stored in tcp_skb_cb
net: tcp: store drop reasons in tcp_rcv_synsent_state_process()
net: tcp: store drop reasons in tcp_timewait_state_process()
net: tcp: store drop reasons in tcp_conn_request()
net: tcp: store drop reasons in tcp_rcv_state_process()
net: tcp: store drop reasons in route_req
net: tcp: use LINUX_MIB_TCPABORTONLINGER in tcp_rcv_state_process()
include/linux/skbuff.h | 9 +++++++++
include/net/dropreason.h | 43 ++++++++++++++++++++++++++++++++++++++++
include/net/tcp.h | 3 +++
net/ipv4/tcp_input.c | 29 ++++++++++++++++++++++-----
net/ipv4/tcp_ipv4.c | 26 ++++++++++++++++++++----
net/ipv4/tcp_minisocks.c | 15 ++++++++++++--
net/ipv6/tcp_ipv6.c | 31 +++++++++++++++++++++++------
7 files changed, 139 insertions(+), 17 deletions(-)
--
2.37.2
next reply other threads:[~2022-10-29 13:11 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-29 13:09 menglong8.dong [this message]
2022-10-29 13:09 ` [PATCH net-next 1/9] net: skb: introduce try_kfree_skb() menglong8.dong
2022-10-29 15:30 ` Eric Dumazet
2022-10-31 2:35 ` Menglong Dong
2022-10-29 13:09 ` [PATCH net-next 2/9] net: tcp: add 'drop_reason' field to struct tcp_skb_cb menglong8.dong
2022-10-29 15:23 ` Eric Dumazet
2022-10-31 3:08 ` Menglong Dong
2022-10-29 13:09 ` [PATCH net-next 3/9] net: tcp: use the drop reasons stored in tcp_skb_cb menglong8.dong
2022-10-29 13:09 ` [PATCH net-next 4/9] net: tcp: store drop reasons in tcp_rcv_synsent_state_process() menglong8.dong
2022-10-29 13:09 ` [PATCH net-next 5/9] net: tcp: store drop reasons in tcp_timewait_state_process() menglong8.dong
2022-10-29 13:09 ` [PATCH net-next 6/9] net: tcp: store drop reasons in tcp_conn_request() menglong8.dong
2022-10-29 13:09 ` [PATCH net-next 7/9] net: tcp: store drop reasons in tcp_rcv_state_process() menglong8.dong
2022-10-29 13:09 ` [PATCH net-next 8/9] net: tcp: store drop reasons in route_req menglong8.dong
2022-10-29 13:09 ` [PATCH net-next 9/9] net: tcp: use LINUX_MIB_TCPABORTONLINGER in tcp_rcv_state_process() menglong8.dong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221029130957.1292060-1-imagedong@tencent.com \
--to=menglong8.dong@gmail.com \
--cc=asml.silence@gmail.com \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=imagedong@tencent.com \
--cc=kafai@fb.com \
--cc=keescook@chromium.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=yoshfuji@linux-ipv6.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®