dockerfile/examples/openssl/openssl-3.2.1-src/doc/designs/quic-design/quic-statm.md

74 lines
1.9 KiB
Markdown

QUIC Statistics Manager
=======================
The statistics manager keeps track of RTT statistics for use by the QUIC
implementation.
It provides the following interface:
Instantiation
-------------
The QUIC statistics manager is instantiated as follows:
```c
typedef struct ossl_statm_st {
...
} OSSL_STATM;
int ossl_statm_init(OSSL_STATM *statm);
void ossl_statm_destroy(OSSL_STATM *statm);
```
The structure is defined in headers, so it may be initialised without needing
its own memory allocation. However, other code should not examine the fields of
`OSSL_STATM` directly.
Get RTT Info
------------
The current RTT info is retrieved using the function `ossl_statm_get_rtt_info`,
which fills an `OSSL_RTT_INFO` structure:
```c
typedef struct ossl_rtt_info_st {
/* As defined in RFC 9002. */
OSSL_TIME smoothed_rtt, latest_rtt, rtt_variance, min_rtt,
max_ack_delay;
} OSSL_RTT_INFO;
void ossl_statm_get_rtt_info(OSSL_STATM *statm, OSSL_RTT_INFO *rtt_info);
```
Update RTT
----------
New RTT samples are provided using the `ossl_statm_update_rtt` function:
- `ack_delay`. This is the ACK Delay value; see RFC 9000.
- `override_latest_rtt` provides a new latest RTT sample. If it is
`OSSL_TIME_ZERO`, the existing Latest RTT value is used when updating the
RTT.
The maximum ACK delay configured using `ossl_statm_set_max_ack_delay` is not
enforced automatically on the `ack_delay` argument as the circumstances where
this should be enforced are context sensitive. It is the caller's responsibility
to retrieve the value and enforce the maximum ACK delay if appropriate.
```c
void ossl_statm_update_rtt(OSSL_STATM *statm,
OSSL_TIME ack_delay,
OSSL_TIME override_latest_rtt);
```
Set Max. Ack Delay
------------------
Sets the maximum ACK delay field reported by `OSSL_RTT_INFO`.
```c
void ossl_statm_set_max_ack_delay(OSSL_STATM *statm, OSSL_TIME max_ack_delay);
```