docs(server): describe single allowance as one instant
This commit is contained in:
6 files changed
+36
-21
No files matched your search
@@ -213,11 +213,12 @@ irtt-server \
|
|||||||
```
|
```
|
||||||
|
|
||||||
`--timestamp-allowance` takes `dual` (the default, honoring every requested
|
`--timestamp-allowance` takes `dual` (the default, honoring every requested
|
||||||
placement), `single`, which provides at most one timestamp and answers a request
|
placement), `single`, which provides at most one timestamp instant and answers a
|
||||||
for both receive and send timestamps with the midpoint, or `none`, which provides
|
request for both receive and send timestamps with the midpoint, or `none`, which
|
||||||
no timestamps. The requested clock source is never changed. `--no-dscp`
|
provides no timestamps. The requested clock source is never changed, so a single
|
||||||
negotiates any requested DSCP to zero, so clients are told their echo replies
|
instant is still reported once per requested clock. `--no-dscp` negotiates any
|
||||||
will be unmarked, and they are sent unmarked.
|
requested DSCP to zero, so clients are told their echo replies will be unmarked,
|
||||||
|
and they are sent unmarked.
|
||||||
|
|
||||||
To require authentication, pass the shared key both sides use:
|
To require authentication, pass the shared key both sides use:
|
||||||
|
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ pub struct ServerArgs {
|
|||||||
long,
|
long,
|
||||||
value_name = "MODE",
|
value_name = "MODE",
|
||||||
value_enum,
|
value_enum,
|
||||||
long_help = "How many timestamps this server will provide.\n\ndual: honor a request for send, receive, both or midpoint timestamps.\nsingle: provide at most one timestamp; a request for both is negotiated to midpoint.\nnone: provide no timestamps at all.\n\nThe requested clock source is never changed, only the timestamp placement. Omit this flag to honor every requested placement."
|
long_help = "How many timestamps this server will provide.\n\ndual: honor a request for send, receive, both or midpoint timestamps.\nsingle: provide at most one timestamp instant; a request for both is negotiated to midpoint.\nnone: provide no timestamps at all.\n\nThe requested clock source is never changed, only which instants are reported, so a single instant is still reported once per requested clock. Omit this flag to honor every requested placement."
|
||||||
)]
|
)]
|
||||||
pub timestamp_allowance: Option<TimestampAllowanceArg>,
|
pub timestamp_allowance: Option<TimestampAllowanceArg>,
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ pub struct ServerArgs {
|
|||||||
pub enum TimestampAllowanceArg {
|
pub enum TimestampAllowanceArg {
|
||||||
/// Honor every requested timestamp placement.
|
/// Honor every requested timestamp placement.
|
||||||
Dual,
|
Dual,
|
||||||
/// Provide at most one timestamp; both becomes midpoint.
|
/// Provide at most one timestamp instant; both becomes midpoint.
|
||||||
Single,
|
Single,
|
||||||
/// Provide no timestamps.
|
/// Provide no timestamps.
|
||||||
None,
|
None,
|
||||||
|
|||||||
@@ -272,7 +272,9 @@ of open negotiation, and neither reaches the runtime.
|
|||||||
interesting row; the rest is in the clean spec's Section 11.4.
|
interesting row; the rest is in the clean spec's Section 11.4.
|
||||||
- **`Clock` is never rewritten.** The evidence describes an allowance on timestamp
|
- **`Clock` is never rewritten.** The evidence describes an allowance on timestamp
|
||||||
*placement*, not on clock domains, and the echo layout already carries no
|
*placement*, not on clock domains, and the echo layout already carries no
|
||||||
timestamp field once the placement is none. Rewriting the clock would answer
|
timestamp field once the placement is none. So `Single` bounds reported
|
||||||
|
*instants*, not field count: on `Clock::Both` a negotiated midpoint still emits
|
||||||
|
a wall and a monotonic field. Do not document it as one field. Rewriting the clock would answer
|
||||||
with a session the client did not ask for.
|
with a session the client did not ask for.
|
||||||
- **Restriction runs before the effective-session executability check**, and that
|
- **Restriction runs before the effective-session executability check**, and that
|
||||||
ordering is load-bearing: it is what makes a request selecting timestamps with
|
ordering is load-bearing: it is what makes a request selecting timestamps with
|
||||||
|
|||||||
@@ -69,9 +69,14 @@ pub enum TimestampAllowance {
|
|||||||
/// No timestamps at all: every request is negotiated to
|
/// No timestamps at all: every request is negotiated to
|
||||||
/// [`StampAt::None`](irtt_proto::StampAt::None).
|
/// [`StampAt::None`](irtt_proto::StampAt::None).
|
||||||
None,
|
None,
|
||||||
/// At most one timestamp field. A request for both receive and send becomes
|
/// At most one timestamp *instant*. A request for both receive and send
|
||||||
/// [`StampAt::Midpoint`](irtt_proto::StampAt::Midpoint); every mode that is
|
/// becomes [`StampAt::Midpoint`](irtt_proto::StampAt::Midpoint); every
|
||||||
/// already single is left alone.
|
/// placement that already names a single instant is left alone.
|
||||||
|
///
|
||||||
|
/// This restricts placement, not field count: the reply still carries one
|
||||||
|
/// field per negotiated clock domain, so a session on
|
||||||
|
/// [`Clock::Both`](irtt_proto::Clock::Both) receives both a wall and a
|
||||||
|
/// monotonic midpoint field.
|
||||||
Single,
|
Single,
|
||||||
/// Every requested placement is honored. This is the default, and the
|
/// Every requested placement is honored. This is the default, and the
|
||||||
/// behavior of a server that configures nothing.
|
/// behavior of a server that configures nothing.
|
||||||
@@ -266,9 +271,12 @@ impl ServerConfig {
|
|||||||
/// not with whichever of the two the server felt like keeping.
|
/// not with whichever of the two the server felt like keeping.
|
||||||
///
|
///
|
||||||
/// The requested [`Clock`](irtt_proto::Clock) is left exactly as it was in
|
/// The requested [`Clock`](irtt_proto::Clock) is left exactly as it was in
|
||||||
/// every case. The allowance restricts placement, and the echo layout simply
|
/// every case. The allowance restricts which *instants* are reported, and
|
||||||
/// carries no timestamp field once the placement is
|
/// each reported instant still carries one field per negotiated clock domain
|
||||||
/// [`StampAt::None`](irtt_proto::StampAt::None).
|
/// — [`Single`] on [`Clock::Both`](irtt_proto::Clock::Both) reports a wall
|
||||||
|
/// and a monotonic midpoint. Only [`None`] removes timestamp fields
|
||||||
|
/// outright, and it does so because the echo layout carries none once the
|
||||||
|
/// placement is [`StampAt::None`](irtt_proto::StampAt::None).
|
||||||
///
|
///
|
||||||
/// Restriction runs *before* the effective-session check, which is what
|
/// Restriction runs *before* the effective-session check, which is what
|
||||||
/// makes a [`None`] allowance accept a request that selected timestamps
|
/// makes a [`None`] allowance accept a request that selected timestamps
|
||||||
|
|||||||
@@ -70,9 +70,10 @@
|
|||||||
//! negotiates exactly what it always did.
|
//! negotiates exactly what it always did.
|
||||||
//!
|
//!
|
||||||
//! [`TimestampAllowance`] reduces the requested timestamp placement: `Single`
|
//! [`TimestampAllowance`] reduces the requested timestamp placement: `Single`
|
||||||
//! provides at most one timestamp, answering a request for both instants with
|
//! provides at most one timestamp instant, answering a request for both instants
|
||||||
//! the midpoint, and `None` provides no timestamps at all. The requested clock
|
//! with the midpoint, and `None` provides no timestamps at all. The requested
|
||||||
//! is never rewritten. [`ServerConfig::with_dscp_allowed`] refuses to provide
|
//! clock is never rewritten, so a single placement still reports one field per
|
||||||
|
//! negotiated clock domain. [`ServerConfig::with_dscp_allowed`] refuses to provide
|
||||||
//! traffic-class marking, negotiating any requested DSCP value to zero, after
|
//! traffic-class marking, negotiating any requested DSCP value to zero, after
|
||||||
//! which the session's replies leave unmarked like any other zero-DSCP session.
|
//! which the session's replies leave unmarked like any other zero-DSCP session.
|
||||||
//!
|
//!
|
||||||
|
|||||||
@@ -129,10 +129,13 @@ pub(crate) fn negotiate_params(mut requested: Params, config: &ServerConfig) ->
|
|||||||
///
|
///
|
||||||
/// The mapping is the observed one, from the clean specification's Section 11.4.
|
/// The mapping is the observed one, from the clean specification's Section 11.4.
|
||||||
/// Only one row substitutes rather than removes: under [`Single`], a request for
|
/// Only one row substitutes rather than removes: under [`Single`], a request for
|
||||||
/// both instants is answered with [`StampAt::Midpoint`] — one timestamp that
|
/// both instants is answered with [`StampAt::Midpoint`] — one instant that still
|
||||||
/// still describes both — and not with whichever of Send or Receive an
|
/// describes both — and not with whichever of Send or Receive an implementation
|
||||||
/// implementation happened to prefer. Every already-single placement passes
|
/// happened to prefer. Every already-single placement passes through, and
|
||||||
/// through, and [`None`] removes all of them.
|
/// [`None`] removes all of them.
|
||||||
|
///
|
||||||
|
/// The allowance bounds reported *instants*, not fields: the clock is untouched,
|
||||||
|
/// so a negotiated midpoint on `Clock::Both` still reports one field per domain.
|
||||||
///
|
///
|
||||||
/// [`Single`]: TimestampAllowance::Single
|
/// [`Single`]: TimestampAllowance::Single
|
||||||
/// [`None`]: TimestampAllowance::None
|
/// [`None`]: TimestampAllowance::None
|
||||||
|
|||||||
Reference in new issue
Block a user