MINOR: quic: implement dedicated type for out-of-order stream ACK
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 1 Oct 2024 15:34:55 +0000 (17:34 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Fri, 4 Oct 2024 15:56:45 +0000 (17:56 +0200)
commite7578084b0536e3e5988be7f09091c85beb8fa9d
tree3ae87ac61c675f29fb4db28c96cfba8375daf7c1
parent4ff87db5feb3071c7155f3268d9cdfa6f3882911
MINOR: quic: implement dedicated type for out-of-order stream ACK

QUIC streamdesc layer is responsible to handle reception of ACK for
streams. It removes stream data from the underlying buffers on ACK
reception.

Streamdesc layer treats ACK in order at the stream level. Out of order
ACKs are buffered in a tree until they can be handled on older data
acknowledgement reception. Previously, qf_stream instance which comes
from the quic_tx_packet was used as tree node to buffer such ranges.

Introduce a new type dedicated to represent out of order stream ack data
range. This type is named qc_stream_ack. It contains minimal infos only
relative to the acknowledged stream data range.

This allows to reduce size of frequently used quic_frame with the
removal of tree node from qf_stream. Another side effect of this change
is that now quic_frame are always released immediately on ACK reception,
both in-order and out-of-order. This allows to also release the
quic_tx_packet instance which should reduce memory consumption.

The drawback of this change is that qc_stream_ack instance must be
allocated on out-of-order ACK reception. As such, qc_stream_desc_ack()
may fail if an error happens on allocation. For the moment, such error
is silenly recovered up to qc_treat_rx_pkts() with the dropping of the
received packet containing the ACK frame. In the future, it may be
useful to close the connection as this error may only happens on low
memory usage.
include/haproxy/quic_frame-t.h
include/haproxy/quic_frame.h
include/haproxy/quic_stream-t.h
include/haproxy/quic_stream.h
src/mux_quic.c
src/quic_frame.c
src/quic_retransmit.c
src/quic_rx.c
src/quic_stream.c
src/quic_trace.c
src/quic_tx.c