pub struct LegStats {
pub directions: [DirectionStats; 2],
}Expand description
One connection’s shaping statistics, split by which way the traffic was
going — one entry of ProxyStats::per_leg.
Two rows and not one. A leg carries traffic both ways, and a leg that reported a single row would answer how much crossed this connection while refusing “in which direction” — which is the question an author diagnosing a one-sided stall is actually asking, and the one no configuration could separate afterwards.
§Which cell a figure lands in
A proxy reads on one leg and writes on the other, so the same unit is measured twice, once at each crossing:
per_leg[Client].uplink— read from the client.per_leg[Upstream].uplink— written to the relay.per_leg[Upstream].downlink— read from the relay.per_leg[Client].downlink— written to the client.
The difference between the two cells of one direction is what the shaper kept back: bytes it read and did not write, whether a policy dropped them, a hook elided them, or a stream was given up on before they went out.
§Three fields of a departure cell have no producer
Only the flow of units is measured at both crossings. Of the five
figures a DirectionStats carries, DirectionStats::objects_seen
and DirectionStats::bytes_shaped are charged at both;
DirectionStats::objects_expired,
DirectionStats::streams_reset_by_shaping and
DirectionStats::streams_with_mixed_classes are decisions taken over
traffic that arrived, so they are charged to the arrival cell only
and a departure cell reports zero for all three. Stated here because a
zero that means “no producer” and a zero that means “it did not happen”
are not the same answer.
objects_seen stays the classifier’s count on both cells: a stream
header is not an object on the way in, and it is still not one on the
way out.
Fields§
§directions: [DirectionStats; 2]This leg’s two directions: index 0 is uplink — the client’s traffic
on its way to the relay — and index 1 is downlink. Reach them by
name with LegStats::uplink and LegStats::downlink.
Implementations§
Source§impl LegStats
impl LegStats
Sourcepub fn uplink(&self) -> &DirectionStats
pub fn uplink(&self) -> &DirectionStats
The client’s traffic on its way to the relay, on this leg.
Sourcepub fn downlink(&self) -> &DirectionStats
pub fn downlink(&self) -> &DirectionStats
The relay’s traffic on its way to the client, on this leg.