[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CANn89i+ad_7nisbJ8Z6Xcpv1jUjUvhfZLmpmGZ-2tJJNyN4v3A@mail.gmail.com>
Date: Tue, 2 Jan 2024 11:11:55 +0100
From: Eric Dumazet <edumazet@...gle.com>
To: Leon Romanovsky <leon@...nel.org>
Cc: David Ahern <dsahern@...nel.org>, "David S. Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>, Shachar Kagan <skagan@...dia.com>,
netdev@...r.kernel.org, Bagas Sanjaya <bagasdotme@...il.com>,
"Linux regression tracking (Thorsten Leemhuis)" <regressions@...mhuis.info>
Subject: Re: [PATCH net-next] tcp: Revert no longer abort SYN_SENT when
receiving some ICMP
On Tue, Jan 2, 2024 at 11:03 AM Eric Dumazet <edumazet@...gle.com> wrote:
>
> On Tue, Jan 2, 2024 at 10:58 AM Leon Romanovsky <leon@...nel.org> wrote:
> >
> > On Tue, Jan 02, 2024 at 10:46:13AM +0100, Eric Dumazet wrote:
> > > On Tue, Jan 2, 2024 at 10:01 AM Leon Romanovsky <leon@...nel.org> wrote:
> > > >
> > > > From: Shachar Kagan <skagan@...dia.com>
> > > >
> > > > This reverts commit 0a8de364ff7a14558e9676f424283148110384d6.
> > > >
> > > > Shachar reported that Vagrant (https://www.vagrantup.com/), which is
> > > > very popular tool to manage fleet of VMs stopped to work after commit
> > > > citied in Fixes line.
> > > >
> > > > The issue appears while using Vagrant to manage nested VMs.
> > > > The steps are:
> > > > * create vagrant file
> > > > * vagrant up
> > > > * vagrant halt (VM is created but shut down)
> > > > * vagrant up - fail
> > > >
> > >
> > > I would rather have an explanation, instead of reverting a valid patch.
> > >
> > > I have been on vacation for some time. I may have missed a detailed
> > > explanation, please repost if needed.
> >
> > Our detailed explanation that revert worked. You provided the patch that
> > broke, so please let's not require from users to debug it.
> >
> > If you need a help to reproduce and/or test some hypothesis, Shachar
> > will be happy to help you, just ask.
>
> I have asked already, and received files that showed no ICMP relevant
> interactions.
>
> Can someone from your team help Shachar to get a packet capture of
> both TCP _and_ ICMP packets ?
>
> Otherwise there is little I can do. I can not blindly trust someone
> that a valid patch broke something, just because 'something broke'
Alternative to a packet capture would be a packetdrill test.
Following test passes with the new kernel, and breaks with the old ones.
// Set up config.
`../common/defaults.sh
../common/set_sysctls.py /proc/sys/net/ipv4/tcp_syn_retries=12 \
/proc/sys/net/ipv4/tcp_syn_linear_timeouts=4
`
// Establish a connection.
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
+0 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress)
+0 > S 0:0(0) win 65535 <mss 1460,sackOK,TS val 80 ecr 0,nop,wscale 8>
+1 > S 0:0(0) win 65535 <...>
+0 %{ assert tcpi_backoff == 0, tcpi_backoff}%
+0 %{ assert tcpi_total_rto == 1, tcpi_total_rto}%
+1 > S 0:0(0) win 65535 <...>
+0 %{ assert tcpi_backoff == 0, tcpi_backoff}%
+0 %{ assert tcpi_total_rto == 2, tcpi_total_rto}%
+1 > S 0:0(0) win 65535 <...>
+0 %{ assert tcpi_backoff == 0, tcpi_backoff}%
+0 %{ assert tcpi_total_rto == 3, tcpi_total_rto}%
// RFC 6069 : this ICMP message is ignored while in linear timeout mode
+.5 < icmp unreachable host_unreachable [0:0(0)]
+0.5 > S 0:0(0) win 65535 <...>
+0 %{ assert tcpi_backoff == 0, tcpi_backoff}%
+0 %{ assert tcpi_total_rto == 4, tcpi_total_rto}%
+1 > S 0:0(0) win 65535 <...>
+0 %{ assert tcpi_backoff == 1, tcpi_backoff}%
+0 %{ assert tcpi_total_rto == 5, tcpi_total_rto}%
+2 > S 0:0(0) win 65535 <...>
+0 %{ assert tcpi_backoff == 2, tcpi_backoff}%
+0 %{ assert tcpi_total_rto == 6, tcpi_total_rto}%
+4 > S 0:0(0) win 65535 <...>
+0 %{ assert tcpi_backoff == 3, tcpi_backoff}%
+0 %{ assert tcpi_total_rto == 7, tcpi_total_rto}%
// RFC 6069 : this ICMP message should undo one retransmission timer backoff
+.5 < icmp unreachable host_unreachable [0:0(0)]
+0 %{ assert tcpi_backoff == 2, tcpi_backoff }%
// RFC 6069 : this ICMP message should undo one retransmission timer backoff
+.4 < icmp unreachable host_unreachable [0:0(0)]
+0 %{ assert tcpi_backoff == 1, tcpi_backoff }%
// RFC 6069 : this ICMP message should undo one retransmission timer backoff
+0 < icmp unreachable host_unreachable [0:0(0)]
+0 %{ assert tcpi_backoff == 0, tcpi_backoff }%
+.1 > S 0:0(0) win 65535 <...>
+0 %{ assert tcpi_backoff == 1, tcpi_backoff }%
// RFC 6069 : this ICMP message should undo one retransmission timer backoff
+.6 < icmp unreachable net_unreachable [0:0(0)]
+0 %{ assert tcpi_backoff == 0, tcpi_backoff }%
+.4 > S 0:0(0) win 65535 <...>
+0 %{ assert tcpi_backoff == 1, tcpi_backoff }%
//RFC 6069 : other ICMP messages should not undo one timer backoff
+0 < icmp unreachable source_route_failed [1:1(0)]
+0 < icmp unreachable net_unreachable_for_tos [1:1(0)]
+0 < icmp unreachable host_unreachable_for_tos [1:1(0)]
+0 %{ assert tcpi_backoff == 1, tcpi_backoff }%
+2 > S 0:0(0) win 65535 <...>
+0 %{ assert tcpi_backoff == 2, tcpi_backoff }%
Powered by blists - more mailing lists