diff options
Diffstat (limited to 'doc/designs/quic-design/quic-statm.md')
-rw-r--r-- | doc/designs/quic-design/quic-statm.md | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/doc/designs/quic-design/quic-statm.md b/doc/designs/quic-design/quic-statm.md new file mode 100644 index 0000000000..1fa9c8aa5e --- /dev/null +++ b/doc/designs/quic-design/quic-statm.md @@ -0,0 +1,73 @@ +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); +``` |