From: "Ilpo Järvinen" <ij@kernel.org>
To: Paolo Abeni <pabeni@redhat.com>
Cc: chia-yu.chang@nokia-bell-labs.com, horms@kernel.org,
dsahern@kernel.org, kuniyu@amazon.com, bpf@vger.kernel.org,
netdev@vger.kernel.org, dave.taht@gmail.com, jhs@mojatatu.com,
kuba@kernel.org, stephen@networkplumber.org,
xiyou.wangcong@gmail.com, jiri@resnulli.us, davem@davemloft.net,
edumazet@google.com, andrew+netdev@lunn.ch,
donald.hunter@gmail.com, ast@fiberby.net, liuhangbin@gmail.com,
shuah@kernel.org, linux-kselftest@vger.kernel.org,
ncardwell@google.com, koen.de_schepper@nokia-bell-labs.com,
g.white@cablelabs.com, ingemar.s.johansson@ericsson.com,
mirja.kuehlewind@ericsson.com, cheshire@apple.com,
rs.ietf@gmx.at, Jason_Livingood@comcast.com,
vidhi_goel@apple.com
Subject: Re: [PATCH v5 net-next 07/15] tcp: allow embedding leftover into option padding
Date: Tue, 6 May 2025 02:09:49 +0300 (EEST) [thread overview]
Message-ID: <7e64bedf-2da2-2deb-2712-f338474720e7@kernel.org> (raw)
In-Reply-To: <2067a9f7-eba4-476d-a095-3d6301e14830@redhat.com>
On Tue, 29 Apr 2025, Paolo Abeni wrote:
> On 4/22/25 5:35 PM, chia-yu.chang@nokia-bell-labs.com wrote:
> > @@ -709,6 +709,8 @@ static __be32 *process_tcp_ao_options(struct tcp_sock *tp,
> > return ptr;
> > }
> >
> > +#define NOP_LEFTOVER ((TCPOPT_NOP << 8) | TCPOPT_NOP)
> > +
> > /* Write previously computed TCP options to the packet.
> > *
> > * Beware: Something in the Internet is very sensitive to the ordering of
> > @@ -727,8 +729,10 @@ static void tcp_options_write(struct tcphdr *th, struct tcp_sock *tp,
> > struct tcp_out_options *opts,
> > struct tcp_key *key)
> > {
> > + u16 leftover_bytes = NOP_LEFTOVER; /* replace next NOPs if avail */
> > __be32 *ptr = (__be32 *)(th + 1);
> > u16 options = opts->options; /* mungable copy */
> > + int leftover_size = 2;
> >
> > if (tcp_key_is_md5(key)) {
> > *ptr++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) |
> > @@ -763,17 +767,22 @@ static void tcp_options_write(struct tcphdr *th, struct tcp_sock *tp,
> > }
> >
> > if (unlikely(OPTION_SACK_ADVERTISE & options)) {
> > - *ptr++ = htonl((TCPOPT_NOP << 24) |
> > - (TCPOPT_NOP << 16) |
> > + *ptr++ = htonl((leftover_bytes << 16) |
> > (TCPOPT_SACK_PERM << 8) |
> > TCPOLEN_SACK_PERM);
> > + leftover_bytes = NOP_LEFTOVER;
>
> Why? isn't leftover_bytes already == NOP_LEFTOVER?
>
> > }
> >
> > if (unlikely(OPTION_WSCALE & options)) {
> > - *ptr++ = htonl((TCPOPT_NOP << 24) |
> > + u8 highbyte = TCPOPT_NOP;
> > +
> > + if (unlikely(leftover_size == 1))
>
> How can the above conditional be true?
>
> > + highbyte = leftover_bytes >> 8;
> > + *ptr++ = htonl((highbyte << 24) |
> > (TCPOPT_WINDOW << 16) |
> > (TCPOLEN_WINDOW << 8) |
> > opts->ws);
> > + leftover_bytes = NOP_LEFTOVER;
>
> Why? isn't leftover_bytes already == NOP_LEFTOVER?
>
> > }
> >
> > if (unlikely(opts->num_sack_blocks)) {
> > @@ -781,8 +790,7 @@ static void tcp_options_write(struct tcphdr *th, struct tcp_sock *tp,
> > tp->duplicate_sack : tp->selective_acks;
> > int this_sack;
> >
> > - *ptr++ = htonl((TCPOPT_NOP << 24) |
> > - (TCPOPT_NOP << 16) |
> > + *ptr++ = htonl((leftover_bytes << 16) |
> > (TCPOPT_SACK << 8) |
> > (TCPOLEN_SACK_BASE + (opts->num_sack_blocks *
> > TCPOLEN_SACK_PERBLOCK)));
> > @@ -794,6 +802,10 @@ static void tcp_options_write(struct tcphdr *th, struct tcp_sock *tp,
> > }
> >
> > tp->rx_opt.dsack = 0;
> > + } else if (unlikely(leftover_bytes != NOP_LEFTOVER)) {
>
> I really feel like I'm missing some code chunk, but I don't see any
> possible value for leftover_bytes other than NOP_LEFTOVER
Hi,
I split it this way to keep the generic part of the leftover mechanism in
own patch separate from AccECN option change itself (as you did later
discover). This is among the most convoluted parts in the entire AccECN
patch series so it seemed wise to split it as small as I could. Having
those non-sensical looking assigns here were to avoid code churn in the
latter patch. The changelog could have stated that clearly though (my
fault from years back).
--
i.
next prev parent reply other threads:[~2025-05-05 23:09 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-22 15:35 [PATCH v5 net-next 00/15] AccECN protocol patch series chia-yu.chang
2025-04-22 15:35 ` [PATCH v5 net-next 01/15] tcp: reorganize SYN ECN code chia-yu.chang
2025-04-22 15:35 ` [PATCH v5 net-next 02/15] tcp: fast path functions later chia-yu.chang
2025-04-22 15:35 ` [PATCH v5 net-next 03/15] tcp: AccECN core chia-yu.chang
2025-04-29 10:14 ` Paolo Abeni
2025-05-05 15:24 ` Chia-Yu Chang (Nokia)
2025-05-06 13:56 ` Chia-Yu Chang (Nokia)
2025-04-22 15:35 ` [PATCH v5 net-next 04/15] tcp: accecn: AccECN negotiation chia-yu.chang
2025-04-29 10:36 ` Paolo Abeni
2025-05-05 15:59 ` Chia-Yu Chang (Nokia)
2025-04-22 15:35 ` [PATCH v5 net-next 05/15] tcp: accecn: add AccECN rx byte counters chia-yu.chang
2025-04-29 10:45 ` Paolo Abeni
2025-04-22 15:35 ` [PATCH v5 net-next 06/15] tcp: accecn: AccECN needs to know delivered bytes chia-yu.chang
2025-04-22 15:35 ` [PATCH v5 net-next 07/15] tcp: allow embedding leftover into option padding chia-yu.chang
2025-04-29 10:57 ` Paolo Abeni
2025-05-05 23:09 ` Ilpo Järvinen [this message]
2025-05-06 8:50 ` Chia-Yu Chang (Nokia)
2025-04-22 15:35 ` [PATCH v5 net-next 08/15] tcp: sack option handling improvements chia-yu.chang
2025-04-22 15:35 ` [PATCH v5 net-next 09/15] tcp: accecn: AccECN option chia-yu.chang
2025-04-29 11:56 ` Paolo Abeni
2025-05-05 21:47 ` Chia-Yu Chang (Nokia)
2025-05-05 22:54 ` Ilpo Järvinen
2025-05-06 8:48 ` Chia-Yu Chang (Nokia)
2025-05-06 17:40 ` Ilpo Järvinen
2025-05-06 17:49 ` Ilpo Järvinen
2025-04-22 15:35 ` [PATCH v5 net-next 10/15] tcp: accecn: AccECN option send control chia-yu.chang
2025-04-29 12:10 ` Paolo Abeni
2025-05-05 21:53 ` Chia-Yu Chang (Nokia)
2025-05-05 23:26 ` Ilpo Järvinen
2025-05-06 8:53 ` Chia-Yu Chang (Nokia)
2025-04-22 15:35 ` [PATCH v5 net-next 11/15] tcp: accecn: AccECN option failure handling chia-yu.chang
2025-04-29 14:08 ` Paolo Abeni
2025-04-22 15:35 ` [PATCH v5 net-next 12/15] tcp: accecn: AccECN option ceb/cep heuristic chia-yu.chang
2025-04-22 15:36 ` [PATCH v5 net-next 13/15] tcp: accecn: AccECN ACE field multi-wrap heuristic chia-yu.chang
2025-04-22 15:36 ` [PATCH v5 net-next 14/15] tcp: accecn: try to fit AccECN option with SACK chia-yu.chang
2025-04-22 15:36 ` [PATCH v5 net-next 15/15] tcp: try to avoid safer when ACKs are thinned chia-yu.chang
2025-04-29 14:11 ` Paolo Abeni
2025-04-24 17:36 ` [PATCH v5 net-next 00/15] AccECN protocol patch series Simon Horman
2025-04-26 0:32 ` Jakub Kicinski
2025-04-29 2:33 ` Neal Cardwell
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=7e64bedf-2da2-2deb-2712-f338474720e7@kernel.org \
--to=ij@kernel.org \
--cc=Jason_Livingood@comcast.com \
--cc=andrew+netdev@lunn.ch \
--cc=ast@fiberby.net \
--cc=bpf@vger.kernel.org \
--cc=cheshire@apple.com \
--cc=chia-yu.chang@nokia-bell-labs.com \
--cc=dave.taht@gmail.com \
--cc=davem@davemloft.net \
--cc=donald.hunter@gmail.com \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=g.white@cablelabs.com \
--cc=horms@kernel.org \
--cc=ingemar.s.johansson@ericsson.com \
--cc=jhs@mojatatu.com \
--cc=jiri@resnulli.us \
--cc=koen.de_schepper@nokia-bell-labs.com \
--cc=kuba@kernel.org \
--cc=kuniyu@amazon.com \
--cc=linux-kselftest@vger.kernel.org \
--cc=liuhangbin@gmail.com \
--cc=mirja.kuehlewind@ericsson.com \
--cc=ncardwell@google.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rs.ietf@gmx.at \
--cc=shuah@kernel.org \
--cc=stephen@networkplumber.org \
--cc=vidhi_goel@apple.com \
--cc=xiyou.wangcong@gmail.com \
/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;
as well as URLs for NNTP newsgroup(s).