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;
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
>
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
> >
© 2016 - 2026 Red Hat, Inc.