Files
firezone/rust/connlib
Thomas Eizinger f44fdb7fa3 refactor(snownet): re-implement backoff to only tick on timeout (#7942)
For all STUN and TURN messages that are being sent from `connlib`, we
implement a retransmit strategy with an exponential backoff if we don't
hear from the relay within a given amount of time. For this, we are
currently using the `backoff` crate.

For our purposes, this crate is a bit unergonomic. In particular, it has
a mutable `next_backoff` function as well as internal dependency on a
"clock". As a consequence, we need to

a) always make sure the clock of an `ExponentialBackoff` is pointing to
the current time
b) only call `next_backoff` when we want to resend a message

Within the sans-IO design of `connlib`, time-related functions are
handled within `handle_timeout` which is being passed a `now: Instant`
parameter. Instead of ticking over to the next backoff, what we need
from our backoff module are answers to the questions:

- Is the backoff expired?
- When should the next retry happen?
- What is the current waiting interval?

In addition, we want the backoff module to "tick over" to the next
trigger when the time passes the current one, i.e. we want to issue the
command: "This is the current time, update your internal state."

By re-implementing this ourselves, we can avoid this additional state
tracking of `last_now`, thus simplifying the implementation.
2025-01-30 02:42:23 +00:00
..

Connlib

Firezone's connectivity library shared by all clients.

Building Connlib

You shouldn't need to build connlib directly; it's typically built as a dependency of one of the other Firezone components. See READMEs in those directories for relevant instructions.