[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CADvbK_dh-O9NuNE4XL2ic2WUy9ysWc1NzbsJ99kv0ZciAw7ttQ@mail.gmail.com>
Date: Tue, 20 Jan 2026 09:58:18 -0500
From: Xin Long <lucien.xin@...il.com>
To: Paolo Abeni <pabeni@...hat.com>
Cc: network dev <netdev@...r.kernel.org>, quic@...ts.linux.dev, davem@...emloft.net,
kuba@...nel.org, Eric Dumazet <edumazet@...gle.com>, Simon Horman <horms@...nel.org>,
Stefan Metzmacher <metze@...ba.org>, Moritz Buhl <mbuhl@...nbsd.org>, Tyler Fanelli <tfanelli@...hat.com>,
Pengtao He <hepengtao@...omi.com>, Thomas Dreibholz <dreibh@...ula.no>, linux-cifs@...r.kernel.org,
Steve French <smfrench@...il.com>, Namjae Jeon <linkinjeon@...nel.org>,
Paulo Alcantara <pc@...guebit.com>, Tom Talpey <tom@...pey.com>, kernel-tls-handshake@...ts.linux.dev,
Chuck Lever <chuck.lever@...cle.com>, Jeff Layton <jlayton@...nel.org>,
Steve Dickson <steved@...hat.com>, Hannes Reinecke <hare@...e.de>, Alexander Aring <aahringo@...hat.com>,
David Howells <dhowells@...hat.com>, Matthieu Baerts <matttbe@...nel.org>,
John Ericson <mail@...nericson.me>, Cong Wang <xiyou.wangcong@...il.com>,
"D . Wythe" <alibuda@...ux.alibaba.com>, Jason Baron <jbaron@...mai.com>,
illiliti <illiliti@...tonmail.com>, Sabrina Dubroca <sd@...asysnail.net>,
Marcelo Ricardo Leitner <marcelo.leitner@...il.com>, Daniel Stenberg <daniel@...x.se>,
Andy Gospodarek <andrew.gospodarek@...adcom.com>
Subject: Re: [PATCH net-next v7 06/16] quic: add stream management
On Tue, Jan 20, 2026 at 7:32 AM Paolo Abeni <pabeni@...hat.com> wrote:
>
> On 1/15/26 4:11 PM, Xin Long wrote:
> > +struct quic_stream {
> > + struct hlist_node node;
> > + s64 id; /* Stream ID as defined in RFC 9000 Section 2.1 */
> > + struct {
> > + /* Sending-side stream level flow control */
> > + u64 last_max_bytes; /* Maximum send offset advertised by peer at last update */
> > + u64 max_bytes; /* Current maximum offset we are allowed to send to */
> > + u64 bytes; /* Bytes already sent to peer */
> > +
> > + u32 errcode; /* Application error code to send in RESET_STREAM */
> > + u32 frags; /* Number of sent STREAM frames not yet acknowledged */
> > + u8 state; /* Send stream state, per rfc9000#section-3.1 */
> > +
> > + u8 data_blocked:1; /* True if flow control blocks sending more data */
> > + u8 done:1; /* True if application indicated end of stream (FIN sent) */
>
> Minor nit: AFAICS with the current struct layout the bitfield above does
> not save any space, compared to plain u8 and will lead to worse code.
>
Makes sense, will change to plain u8.
Thanks.
> > + } send;
> > + struct {
> > + /* Receiving-side stream level flow control */
> > + u64 max_bytes; /* Maximum offset peer is allowed to send to */
> > + u64 window; /* Remaining receive window before advertise a new limit */
> > + u64 bytes; /* Bytes consumed by application from the stream */
> > +
> > + u64 highest; /* Highest received offset */
> > + u64 offset; /* Offset up to which data is in buffer or consumed */
> > + u64 finalsz; /* Final size of the stream if FIN received */
> > +
> > + u32 frags; /* Number of received STREAM frames pending reassembly */
> > + u8 state; /* Receive stream state, per rfc9000#section-3.2 */
> > +
> > + u8 stop_sent:1; /* True if STOP_SENDING has been sent */
> > + u8 done:1; /* True if FIN received and final size validated */
>
> ... same here...
>
> > + } recv;
> > +};
> > +
> > +struct quic_stream_limits {
> > + /* Stream limit parameters defined in rfc9000#section-18.2 */
> > + u64 max_stream_data_bidi_remote; /* initial_max_stream_data_bidi_remote */
> > + u64 max_stream_data_bidi_local; /* initial_max_stream_data_bidi_local */
> > + u64 max_stream_data_uni; /* initial_max_stream_data_uni */
> > + u64 max_streams_bidi; /* initial_max_streams_bidi */
> > + u64 max_streams_uni; /* initial_max_streams_uni */
> > +
> > + s64 next_bidi_stream_id; /* Next bidi stream ID to open or accept */
> > + s64 next_uni_stream_id; /* Next uni stream ID to open or accept */
> > + s64 max_bidi_stream_id; /* Highest allowed bidi stream ID */
> > + s64 max_uni_stream_id; /* Highest allowed uni stream ID */
> > + s64 active_stream_id; /* Most recently opened stream ID */
> > +
> > + u8 bidi_blocked:1; /* STREAMS_BLOCKED_BIDI sent, awaiting ACK */
> > + u8 uni_blocked:1; /* STREAMS_BLOCKED_UNI sent, awaiting ACK */
> > + u8 bidi_pending:1; /* MAX_STREAMS_BIDI needs to be sent */
> > + u8 uni_pending:1; /* MAX_STREAMS_UNI needs to be sent */
>
> ... and here.
>
> Other than that LGTM. With the bitfield replaced with plain u8 feel free
> to add my
>
> Acked-by: Paolo Abeni <pabeni@...hat.com>
>
Powered by blists - more mailing lists