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 
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 
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 
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,