summaryrefslogtreecommitdiffstats
path: root/doc/designs/quic-design/quic-statm.md
diff options
context:
space:
mode:
Diffstat (limited to 'doc/designs/quic-design/quic-statm.md')
-rw-r--r--doc/designs/quic-design/quic-statm.md73
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);
+```