Lines Matching +full:per +full:- +full:stream

1 QUIC Frame-in-Flight Management
4 The QUIC frame-in-flight manager is responsible for tracking frames which were
7 packets, whereas the QUIC frame-in-flight manager (FIFM) works on the level of
12 - the Control Frame Queue (CFQ);
13 - the Transmitted Packet Information Manager (TXPIM); and
14 - the Frame-in-Flight Dispatcher (FIFD).
16 ![](images/quic-fifm-overview.png "QUIC FIFM Overview")
22 --------------------------------------------------
36 PATH_CHALLENGE -
37 PATH_RESPONSE -
38 ACK - (non-ACK-eliciting)
39 CONNECTION_CLOSE special (non-ACK-eliciting)
46 STREAM special
47 PING -
48 PADDING - (non-ACK-eliciting)
54 - **GCR** (Generic Control Frame Retransmission): The raw bytes of
61 - **REGEN** (Regenerate): These frames can be marked for dynamic regeneration
63 up-to-date data at the time of transmission, so is preferred over `GCR` when
66 - Special — `STREAM`, `CRYPTO`: `STREAM` frame handling is handled as a
67 special case by the QUIC Send Stream Manager. `CRYPTO` frame retransmission
68 can also be handled using a QUIC Send Stream manager. (`CRYPTO` frames could
70 stream management, just as for application data streams.)
72 - Some frame types do not need to be retransmitted even if lost (`PING`,
75 - Special — `CONNECTION_CLOSE`: This frame is a special case and is not
76 retransmitted per se.
82 - Need for a generic control queue which can store encoded control frames.
86 - The ability to determine, when the ACK Manager determines that a packet has
89 - What stream IDs were sent in a packet, and the logical ranges of application
92 This is needed so that the QUIC Send Stream Manager for a given stream
93 can be informed of lost or acked ranges in the stream.
95 - The logical ranges of the CRYPTO stream which were sent in the packet
98 - Which stream IDs had a FIN bit set in the packet.
100 This is needed so that the QUIC Send Stream Manager can be informed for a
101 given stream whether a FIN was lost or acked.
103 - What control frames using the **GCR** strategy were sent in the packet
106 - For each type of frame using the **REGEN** strategy, a flag as to whether
111 -----------------------------
113 ![](images/quic-fifm-cfq.png "QUIC CFQ Overview")
117 One logical CFQ instance will be needed per PN space per connection. As an
118 optimisation, these three CFQ instances per connection are all modelled by a
124 - An integral priority value, used to maintain priority ordering.
126 - The frame type, which is provided by the caller along with the buffer.
131 - A state, which is either `NEW` or `TX`. Frames added to the CFQ have
199 * ----------
254 * -----------
266 * ossl_quic_cfq_get_priority_head(), returns the next-lower priority item.
274 --------------------------------------------------
276 ![](images/quic-fifm-txpim.png "QUIC TXPIM Overview")
281 self-contained memory pool handing out `QUIC_TXPIM_PKT` structures. Each
282 `QUIC_TXPIM_PKT` is a self-contained data structure intended for consumption by
287 - Keeping track of all GCR control frames which were transmitted
290 - Keeping track of all REGEN-strategy control frame types, via a flag
294 - Keeping track of all stream IDs sent in a given packet, and
295 what ranges of the logical stream were sent, and whether
298 - Keeping track of what logical ranges of the CRYPTO stream were sent.
301 Manager's `QUIC_ACKM_TX_PKT` structure into its per-packet bookkeeping
303 allocation made per transmitted packet. The TX packetiser will obtain
321 /* ACKM-specific data. Caller should fill this. */
330 /* Regenerate-strategy frames. */
340 /* Represents a range of bytes in an application or CRYPTO stream. */
342 /* The stream ID, or UINT64_MAX for the CRYPTO stream. */
345 * The inclusive range of bytes in the stream. Exceptionally, if end <
346 * start, designates a frame of zero length (used for FIN-only frames).
350 * Whether a FIN was sent for this stream in the packet. Not valid for
351 * CRYPTO stream.
383 * Returns a pointer to an array of stream chunk information structures for the
404 The Frame-in-Flight Dispatcher (FIFD)
405 -------------------------------------
409 implementations for the on-loss, on-acked and on-discarded callbacks issued by
426 - It references a CFQ used to manage CFQ items;
427 - It references an ACK manager which it informs of transmitted packets;
428 - It references a TXPIM which manages each `QUIC_TXPIM_PKT`;
429 - It is provided with a callback to obtain a QUIC Send Stream based on a stream
431 to map stream IDs to QUIC Send Stream instances.
432 - It is provided with a callback which is called when it thinks a frame
434 to a given stream, in which case a stream ID is specified.
450 /* stream_id is UINT64_MAX for the crypto stream */
459 void ossl_quic_fifd_cleanup(QUIC_FIFD *fifd); /* (no-op) */
465 ------------------------------------
467 - TX Packetiser maintains flags for each REGEN-strategy frame type.
471 - TX Packetiser obtains a `QUIC_TXPIM_PKT` structure by calling
474 - TX Packetiser fills in the ACKM part of the `QUIC_TXPIM_PKT`
478 - TX Packetiser queries the ACK Manager to determine if an ACK frame
481 - TX Packetiser queries the CFQ to determine what control frames it places
482 in a packet. It does this before adding STREAM or CRYPTO frames (i.e.,
486 - calls `ossl_quic_txpim_pkt_add_cfq_item()` on the TXPIM to log the CFQ item
490 - For each STREAM or CRYPTO frame included in a packet, the TX Packetiser:
492 - informs the QUIC Send Stream instance for that stream that a range of bytes
495 - also informs the QUIC Send Stream instance if FIN was set on a STREAM frame.
497 - calls `ossl_quic_txpim_pkt_append_chunk()` to log a logical range of
498 the given application or crypto stream as having been sent, so that it can
502 - TX Packetiser calls `ossl_quic_fifd_pkt_commit()`. The FIFD takes care
508 In the event of packet loss, ACK or discard, the appropriate QUIC Send Stream,