| 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); |
| ``` |