From: Simon Baatz <gmbnomis@gmail.com>
To: Eric Dumazet <edumazet@google.com>
Cc: Neal Cardwell <ncardwell@google.com>,
Kuniyuki Iwashima <kuniyu@google.com>,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
Shuah Khan <skhan@linuxfoundation.org>,
David Ahern <dsahern@kernel.org>, Jon Maloy <jmaloy@redhat.com>,
Jason Xing <kerneljasonxing@gmail.com>,
mfreemon@cloudflare.com, Shuah Khan <shuah@kernel.org>,
Stefano Brivio <sbrivio@redhat.com>,
Matthieu Baerts <matttbe@kernel.org>,
Mat Martineau <martineau@kernel.org>,
Geliang Tang <geliang@kernel.org>,
netdev@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
mptcp@lists.linux.dev
Subject: Re: [PATCH net-next v3 6/6] selftests/net: packetdrill: add tcp_rcv_neg_window.pkt
Date: Sat, 14 Mar 2026 18:07:05 +0100 [thread overview]
Message-ID: <abWVuS1XJaKrndJw@gandalf.schnuecks.de> (raw)
In-Reply-To: <CANn89iKYxs644ardFFSKo8d0EXL_2A5eUQjWZ3yp9-Q4tVLKzQ@mail.gmail.com>
Hi Eric,
On Sat, Mar 14, 2026 at 04:58:28AM +0100, Eric Dumazet wrote:
> On Wed, Mar 11, 2026 at 12:09???AM Simon Baatz <gmbnomis@gmail.com> wrote:
> >
> > Hi Eric,
> >
> > On Tue, Mar 10, 2026 at 09:54:58AM +0100, Eric Dumazet wrote:
> > > On Mon, Mar 9, 2026 at 9:03???AM Simon Baatz via B4 Relay
> > > <devnull+gmbnomis.gmail.com@kernel.org> wrote:
> > > >
> > > > From: Simon Baatz <gmbnomis@gmail.com>
> > > >
> > > > The test ensures we correctly apply the maximum advertised window limit
> > > > when rcv_nxt advances past rcv_mwnd_seq, so that the "usable window"
> > > > is properly clamped to zero rather than becoming negative.
> > > >
> > > > Signed-off-by: Simon Baatz <gmbnomis@gmail.com>
> > > > ---
> > > > .../net/packetdrill/tcp_rcv_neg_window.pkt | 26 ++++++++++++++++++++++
> > > > 1 file changed, 26 insertions(+)
> > > >
> > > > diff --git a/tools/testing/selftests/net/packetdrill/tcp_rcv_neg_window.pkt b/tools/testing/selftests/net/packetdrill/tcp_rcv_neg_window.pkt
> > > > new file mode 100644
> > > > index 0000000000000000000000000000000000000000..15a9b4938f16d175ac54f3fd192ed2b59b0a4399
> > > > --- /dev/null
> > > > +++ b/tools/testing/selftests/net/packetdrill/tcp_rcv_neg_window.pkt
> > > > @@ -0,0 +1,26 @@
> > > > +// SPDX-License-Identifier: GPL-2.0
> > > > +
> > > > +--mss=1000
> > > > +
> > > > +`./defaults.sh`
> > > > +
> > > > +// Establish a connection.
> > > > + +0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
> > > > + +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
> > > > + +0 setsockopt(3, SOL_SOCKET, SO_RCVBUF, [20000], 4) = 0
> > > > + +0 bind(3, ..., ...) = 0
> > > > + +0 listen(3, 1) = 0
> > > > +
> > > > + +0 < S 0:0(0) win 32792 <mss 1000,nop,wscale 7>
> > > > + +0 > S. 0:0(0) ack 1 win 18980 <mss 1460,nop,wscale 0>
> > > > + +.1 < . 1:1(0) ack 1 win 257
> > > > +
> > > > + +0 accept(3, ..., ...) = 4
> > > > +
> > > > +// A too big packet is accepted if the receive queue is empty
> > > > + +0 < P. 1:20001(20000) ack 1 win 257
> > >
> > > We do not see the answer, it seems this test is not complete ?
> >
> > Actually we do not want to see an answer. The packet won't trigger
> > an immediate ACK (it is larger than the advertised window, but does
> > not cause immediate memory pressure).
> >
> > When we then send a RST before the delayed ACK would be generated:
> >
> > > > +// Send a RST immediately so that there is no rcv_wup/rcv_mwnd_seq update yet
> > > > + +0 < R. 20001:20001(0) ack 1 win 257
> >
> > We are in a state where rcv_wup, rcv_wnd, and rcv_mwnd_seq have not
> > been updated yet, but we must still accept the RST
> > (rcv_nxt == 20001 > rcv_mwnd_seq, tcp_max_receive_window() == 0)
> >
> > > > +
> > > > + +.1 %{ assert tcpi_state == TCP_CLOSE, tcpi_state }%
> >
> > And we verify that we accepted the RST here.
> >
> > Given how subtle this sequence is, and considering the limited value
> > of this test, I am also fine with dropping it if it is too fragile or
> > confusing.
>
> Sorry I missed your answer.
>
> Ok then please use :
>
> // A too big packet is accepted if the receive queue is empty
> +0 < P. 1:20001(20000) ack 1 win 257
> +0 %{ assert tcpi_bytes_received == 20000, tcpi_bytes_received;
> assert tcpi_bytes_acked == 0, tcpi_bytes_acked }%
Unfortunately, tcpi_bytes_acked is the TX direction, it will always
be 0 here.
Instead, we can still test that the oversized packet is accepted and
indirectly verify that no immediate ACK is sent by eliciting and
checking a RST:
// A too big packet is accepted if the receive queue is empty, but does not trigger
// an immediate ACK.
+0 < P. 1:20001(20000) ack 1 win 257
+0 %{ assert tcpi_bytes_received == 20000, tcpi_bytes_received; }%
// Send a RST immediately so that there is no rcv_wup/rcv_mwnd_seq update yet
+0 < R. 20001:20001(0) ack 1 win 257
// Verify that the RST was accepted. Indirectly this also verifies that no immediate
// ACK was sent for the data packet above.
+0 < . 20001:20001(0) ack 1 win 257
* > R 1:1(0)
As the series is merged now (thank you!), I will send this
separately, as suggested.
- Simon
--
Simon Baatz <gmbnomis@gmail.com>
next prev parent reply other threads:[~2026-03-14 17:07 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-09 8:02 [PATCH net-next v3 0/6] tcp: RFC 7323-compliant window retraction handling Simon Baatz via B4 Relay
2026-03-09 8:02 ` [PATCH net-next v3 1/6] tcp: implement RFC 7323 window retraction receiver requirements Simon Baatz via B4 Relay
2026-03-09 9:22 ` Eric Dumazet
2026-03-09 18:35 ` Simon Baatz
2026-03-10 7:40 ` Eric Dumazet
2026-03-10 8:58 ` Stefano Brivio
2026-03-10 22:34 ` Simon Baatz
2026-03-09 8:02 ` [PATCH net-next v3 2/6] mptcp: keep rcv_mwnd_seq in sync with subflow rcv_wnd Simon Baatz via B4 Relay
2026-03-10 8:46 ` Eric Dumazet
2026-03-11 18:27 ` Matthieu Baerts
2026-03-11 22:08 ` Simon Baatz
2026-03-12 11:01 ` Matthieu Baerts
2026-03-09 8:02 ` [PATCH net-next v3 3/6] tcp: increase LINUX_MIB_BEYOND_WINDOW for SKB_DROP_REASON_TCP_OVERWINDOW Simon Baatz via B4 Relay
2026-03-09 9:27 ` Eric Dumazet
2026-03-09 8:02 ` [PATCH net-next v3 4/6] selftests/net: packetdrill: add tcp_rcv_wnd_shrink_nomem.pkt Simon Baatz via B4 Relay
2026-03-10 8:46 ` Eric Dumazet
2026-03-09 8:02 ` [PATCH net-next v3 5/6] selftests/net: packetdrill: add tcp_rcv_wnd_shrink_allowed.pkt Simon Baatz via B4 Relay
2026-03-10 8:52 ` Eric Dumazet
2026-03-09 8:02 ` [PATCH net-next v3 6/6] selftests/net: packetdrill: add tcp_rcv_neg_window.pkt Simon Baatz via B4 Relay
2026-03-10 8:54 ` Eric Dumazet
2026-03-10 23:09 ` Simon Baatz
2026-03-14 3:58 ` Eric Dumazet
2026-03-14 14:55 ` Eric Dumazet
2026-03-14 15:01 ` Jakub Kicinski
2026-03-14 17:07 ` Simon Baatz [this message]
2026-03-16 21:51 ` Simon Baatz
2026-03-14 15:40 ` [PATCH net-next v3 0/6] tcp: RFC 7323-compliant window retraction handling patchwork-bot+netdevbpf
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=abWVuS1XJaKrndJw@gandalf.schnuecks.de \
--to=gmbnomis@gmail.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=geliang@kernel.org \
--cc=horms@kernel.org \
--cc=jmaloy@redhat.com \
--cc=kerneljasonxing@gmail.com \
--cc=kuba@kernel.org \
--cc=kuniyu@google.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=martineau@kernel.org \
--cc=matttbe@kernel.org \
--cc=mfreemon@cloudflare.com \
--cc=mptcp@lists.linux.dev \
--cc=ncardwell@google.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sbrivio@redhat.com \
--cc=shuah@kernel.org \
--cc=skhan@linuxfoundation.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