Message ID | 20240411115630.38420-6-kerneljasonxing@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | Implement reset reason mechanism to detect | expand |
On Thu, Apr 11, 2024 at 1:57 PM Jason Xing <kerneljasonxing@gmail.com> wrote: > > From: Jason Xing <kernelxing@tencent.com> > > It relys on what reset options in the skb are as rfc8684 says. Reusing > this logic can save us much energy. This patch replaces most of the prior > NOT_SPECIFIED reasons. > > Signed-off-by: Jason Xing <kernelxing@tencent.com> > --- > net/mptcp/subflow.c | 20 +++++++++++++++----- > 1 file changed, 15 insertions(+), 5 deletions(-) > > diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c > index ba0a252c113f..25eaad94cb79 100644 > --- a/net/mptcp/subflow.c > +++ b/net/mptcp/subflow.c > @@ -308,8 +308,12 @@ static struct dst_entry *subflow_v4_route_req(const struct sock *sk, > return dst; > > dst_release(dst); > - if (!req->syncookie) > - tcp_request_sock_ops.send_reset(sk, skb, SK_RST_REASON_NOT_SPECIFIED); > + if (!req->syncookie) { > + struct mptcp_ext *mpext = mptcp_get_ext(skb); > + enum sk_rst_reason reason = convert_mptcp_reason(mpext->reset_reason); > + > + tcp_request_sock_ops.send_reset(sk, skb, reason); > + } > return NULL; > } > > @@ -375,8 +379,12 @@ static struct dst_entry *subflow_v6_route_req(const struct sock *sk, > return dst; > > dst_release(dst); > - if (!req->syncookie) > - tcp6_request_sock_ops.send_reset(sk, skb, SK_RST_REASON_NOT_SPECIFIED); > + if (!req->syncookie) { > + struct mptcp_ext *mpext = mptcp_get_ext(skb); > + enum sk_rst_reason reason = convert_mptcp_reason(mpext->reset_reason); > + > + tcp6_request_sock_ops.send_reset(sk, skb, reason); > + } > return NULL; > } > #endif > @@ -783,6 +791,7 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk, > bool fallback, fallback_is_fatal; > struct mptcp_sock *owner; > struct sock *child; > + enum sk_rst_reason reason; reverse xmas tree ? > > pr_debug("listener=%p, req=%p, conn=%p", listener, req, listener->conn); > > @@ -911,7 +920,8 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk, > tcp_rsk(req)->drop_req = true; > inet_csk_prepare_for_destroy_sock(child); > tcp_done(child); > - req->rsk_ops->send_reset(sk, skb, SK_RST_REASON_NOT_SPECIFIED); > + reason = convert_mptcp_reason(mptcp_get_ext(skb)->reset_reason); > + req->rsk_ops->send_reset(sk, skb, reason); > > /* The last child reference will be released by the caller */ > return child; > -- > 2.37.3 >
On Tue, Apr 16, 2024 at 2:33 PM Eric Dumazet <edumazet@google.com> wrote: > > On Thu, Apr 11, 2024 at 1:57 PM Jason Xing <kerneljasonxing@gmail.com> wrote: > > > > From: Jason Xing <kernelxing@tencent.com> > > > > It relys on what reset options in the skb are as rfc8684 says. Reusing > > this logic can save us much energy. This patch replaces most of the prior > > NOT_SPECIFIED reasons. > > > > Signed-off-by: Jason Xing <kernelxing@tencent.com> > > --- > > net/mptcp/subflow.c | 20 +++++++++++++++----- > > 1 file changed, 15 insertions(+), 5 deletions(-) > > > > diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c > > index ba0a252c113f..25eaad94cb79 100644 > > --- a/net/mptcp/subflow.c > > +++ b/net/mptcp/subflow.c > > @@ -308,8 +308,12 @@ static struct dst_entry *subflow_v4_route_req(const struct sock *sk, > > return dst; > > > > dst_release(dst); > > - if (!req->syncookie) > > - tcp_request_sock_ops.send_reset(sk, skb, SK_RST_REASON_NOT_SPECIFIED); > > + if (!req->syncookie) { > > + struct mptcp_ext *mpext = mptcp_get_ext(skb); > > + enum sk_rst_reason reason = convert_mptcp_reason(mpext->reset_reason); > > + > > + tcp_request_sock_ops.send_reset(sk, skb, reason); > > + } > > return NULL; > > } > > > > @@ -375,8 +379,12 @@ static struct dst_entry *subflow_v6_route_req(const struct sock *sk, > > return dst; > > > > dst_release(dst); > > - if (!req->syncookie) > > - tcp6_request_sock_ops.send_reset(sk, skb, SK_RST_REASON_NOT_SPECIFIED); > > + if (!req->syncookie) { > > + struct mptcp_ext *mpext = mptcp_get_ext(skb); > > + enum sk_rst_reason reason = convert_mptcp_reason(mpext->reset_reason); > > + > > + tcp6_request_sock_ops.send_reset(sk, skb, reason); > > + } > > return NULL; > > } > > #endif > > @@ -783,6 +791,7 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk, > > bool fallback, fallback_is_fatal; > > struct mptcp_sock *owner; > > struct sock *child; > > + enum sk_rst_reason reason; > > reverse xmas tree ? Got it. Thanks! > > > > > pr_debug("listener=%p, req=%p, conn=%p", listener, req, listener->conn); > > > > @@ -911,7 +920,8 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk, > > tcp_rsk(req)->drop_req = true; > > inet_csk_prepare_for_destroy_sock(child); > > tcp_done(child); > > - req->rsk_ops->send_reset(sk, skb, SK_RST_REASON_NOT_SPECIFIED); > > + reason = convert_mptcp_reason(mptcp_get_ext(skb)->reset_reason); > > + req->rsk_ops->send_reset(sk, skb, reason); > > > > /* The last child reference will be released by the caller */ > > return child; > > -- > > 2.37.3 > >
On Thu, 2024-04-11 at 19:56 +0800, Jason Xing wrote: > diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c > index ba0a252c113f..25eaad94cb79 100644 > --- a/net/mptcp/subflow.c > +++ b/net/mptcp/subflow.c > @@ -308,8 +308,12 @@ static struct dst_entry *subflow_v4_route_req(const struct sock *sk, > return dst; > > dst_release(dst); > - if (!req->syncookie) > - tcp_request_sock_ops.send_reset(sk, skb, SK_RST_REASON_NOT_SPECIFIED); > + if (!req->syncookie) { > + struct mptcp_ext *mpext = mptcp_get_ext(skb); > + enum sk_rst_reason reason = convert_mptcp_reason(mpext->reset_reason); Since you already have to repost, very minor nit: even the above strictly speaking does not respect the reverse xmass tree. enum sk_rst_reason reason; reason = convert_mptcp_reason(mpext->reset_reason); > + tcp_request_sock_ops.send_reset(sk, skb, reason); Cheers, Paolo
On Tue, Apr 16, 2024 at 4:04 PM Paolo Abeni <pabeni@redhat.com> wrote: > > On Thu, 2024-04-11 at 19:56 +0800, Jason Xing wrote: > > diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c > > index ba0a252c113f..25eaad94cb79 100644 > > --- a/net/mptcp/subflow.c > > +++ b/net/mptcp/subflow.c > > @@ -308,8 +308,12 @@ static struct dst_entry *subflow_v4_route_req(const struct sock *sk, > > return dst; > > > > dst_release(dst); > > - if (!req->syncookie) > > - tcp_request_sock_ops.send_reset(sk, skb, SK_RST_REASON_NOT_SPECIFIED); > > + if (!req->syncookie) { > > + struct mptcp_ext *mpext = mptcp_get_ext(skb); > > + enum sk_rst_reason reason = convert_mptcp_reason(mpext->reset_reason); > > Since you already have to repost, very minor nit: even the above > strictly speaking does not respect the reverse xmass tree. > > enum sk_rst_reason reason; > > reason = convert_mptcp_reason(mpext->reset_reason); > > + tcp_request_sock_ops.send_reset(sk, skb, reason); Thanks, I will update this too. > > Cheers, > > Paolo >
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index ba0a252c113f..25eaad94cb79 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -308,8 +308,12 @@ static struct dst_entry *subflow_v4_route_req(const struct sock *sk, return dst; dst_release(dst); - if (!req->syncookie) - tcp_request_sock_ops.send_reset(sk, skb, SK_RST_REASON_NOT_SPECIFIED); + if (!req->syncookie) { + struct mptcp_ext *mpext = mptcp_get_ext(skb); + enum sk_rst_reason reason = convert_mptcp_reason(mpext->reset_reason); + + tcp_request_sock_ops.send_reset(sk, skb, reason); + } return NULL; } @@ -375,8 +379,12 @@ static struct dst_entry *subflow_v6_route_req(const struct sock *sk, return dst; dst_release(dst); - if (!req->syncookie) - tcp6_request_sock_ops.send_reset(sk, skb, SK_RST_REASON_NOT_SPECIFIED); + if (!req->syncookie) { + struct mptcp_ext *mpext = mptcp_get_ext(skb); + enum sk_rst_reason reason = convert_mptcp_reason(mpext->reset_reason); + + tcp6_request_sock_ops.send_reset(sk, skb, reason); + } return NULL; } #endif @@ -783,6 +791,7 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk, bool fallback, fallback_is_fatal; struct mptcp_sock *owner; struct sock *child; + enum sk_rst_reason reason; pr_debug("listener=%p, req=%p, conn=%p", listener, req, listener->conn); @@ -911,7 +920,8 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk, tcp_rsk(req)->drop_req = true; inet_csk_prepare_for_destroy_sock(child); tcp_done(child); - req->rsk_ops->send_reset(sk, skb, SK_RST_REASON_NOT_SPECIFIED); + reason = convert_mptcp_reason(mptcp_get_ext(skb)->reset_reason); + req->rsk_ops->send_reset(sk, skb, reason); /* The last child reference will be released by the caller */ return child;