Commit Graph
53 Commits
Author SHA1 Message Date
Nils Andreas Svee cbe91f2fe0 feat(client): track and report specific negotiation restrictions
Replace basic validation with a detailed negotiation process that records specific parameter changes. This allows the client to provide better feedback when a server restricts requested session parameters like duration or DSCP.
2026-05-12 15:18:02 +07:00
Nils Andreas Svee 1b79c864d4 refactor(client): propagate ProtoError from recv_buffer_size calculation 2026-05-12 13:05:45 +07:00
Nils Andreas Svee 7ad83ca1f6 refactor: remove logical_seq from client events, session tracking and stats usage
It was an attempt at handling integer wraparound more cleanly keeping in mind that we have a continuous mode,
and so we can more easily reach seq > u32::MAX

However after running the numbers, if we run with a interval of 10ms, it's still gonna take ~497 days before we hit integer overflow, so for now it doesn't seem worth to have this extra logic to handle something that'll in 99.9% of cases be purely an edge case

Keeping in mind autorate usage, in sqm-autorate-rust each send loop is 500 ms by default, and the sleep is then 500 ms / 5 reflectors, so our interval is 100 ms. that means it'll take 4970 days or ~13.6 years to reach the limit. Not worth dealing with IMO
2026-05-11 14:56:07 +07:00
Nils Andreas Svee 5f6bff5dcb feat(client): add timestamp to ClientEvent::Warning
Include a timestamp when reporting warnings to allow consumers like the machine-readable formatter to provide temporal context for troubleshooting.
2026-05-11 09:50:16 +07:00
Nils Andreas Svee 1a04f44bb5 refactor(client): remove redundant timestamp parameter from poll_timeouts
Use internal monotonic time by default and introduce poll_timeouts_at for callers requiring a specific sampled Instant. This simplifies the API for standard usage while maintaining flexibility for external event loops.
2026-05-11 09:33:55 +07:00
Nils Andreas Svee d8b580a19c refactor(client): remove redundant timestamp parameter from close method 2026-05-10 23:47:46 +07:00
Nils Andreas Svee 023e85741a refactor(client): remove redundant timestamp parameter from open method 2026-05-10 23:37:35 +07:00
Nils Andreas Svee c3f2a524a3 fix(client): avoid lossy timing casts 2026-05-10 20:56:43 +07:00
Nils Andreas Svee a41a1e319d fix(client): handle close-flagged echo replies 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 48f6cb80ed fix(proto): require exact echo reply packet length 2026-05-10 20:56:43 +07:00
Nils Andreas Svee ef18bb549c fix(client): report counter overflows clearly 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 2c75e08e30 fix(client): reject invalid timing parameters earlier 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 9977d26a43 perf(client): reuse receive buffer 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 33e2b663b8 fix(client): report read-timeout restore failures 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 860594ebec fix(client): check probe scheduling arithmetic 2026-05-10 20:56:43 +07:00
Nils Andreas Svee b53e650c53 fix(client): handle sequence wrap in reply ordering 2026-05-10 20:56:43 +07:00
Nils Andreas Svee e3bb28c559 fix(client): validate packet length configuration 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 40dc41dc39 feat(client): add receive datagram abstraction 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 25d5c1db1c feat(client): add receive metadata scaffold 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 063214b83b feat(client): implement DSCP negotiation and socket traffic class application
Apply the negotiated DSCP value to the UDP socket after a successful session open and clear it before closing to support network-level quality of service. This change adds platform-specific socket option handling for IPv4 TOS and IPv6 Traffic Class.
2026-05-10 20:56:43 +07:00
Nils Andreas Svee ab95489f20 test(client): add integration tests for packet length and server fill
Verify that the client correctly handles custom packet lengths and server fill negotiation to ensure protocol compliance and support for larger MTUs. Add validation to reject empty server fill strings during configuration.
2026-05-10 20:56:43 +07:00
Nils Andreas Svee 48891f8b5a refactor(client): move internal client tests to a dedicated sub-module 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 880653a98d feat(client): implement protocol configuration validation 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 0a795379a7 test(client): validate parameter mapping from configuration 2026-05-10 20:56:43 +07:00
Nils Andreas Svee ba5dd8abb5 feat(cli): add support for continuous mode with zero duration 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 9fd9ee2c3a refactor(client): improve session initialization and state access 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 2524f5d1b2 feat(client): drain late replies before closing session 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 5d791d1fcd feat(client): emit EchoSent event with scheduling metadata 2026-05-10 20:56:43 +07:00
Nils Andreas Svee ab951a440a feat(client): track and handle late replies after timeout 2026-05-10 20:56:43 +07:00
Nils Andreas Svee f41f63b922 feat(client): implement SignedDuration for precise RTT tracking 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 5ef9a8a366 feat(client): record and report packet size in client events 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 3ba4f56221 feat(client): add run status and packet count helpers 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 2715dcb5bd test(client): add regression tests for packet processing and RTT 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 0099ac799f fix(client): handle negative RTT and simplify sample generation 2026-05-10 20:56:43 +07:00
Nils Andreas Svee d212258707 feat(client): add specific warning kinds for dropped packets 2026-05-10 20:56:43 +07:00
Nils Andreas Svee b9fc4b9cee refactor(client): capture send timestamp before socket call
Record the send timestamp immediately before the socket operation to include local enqueue overhead in RTT measurements, providing more conservative latency data for consumers.
2026-05-10 20:56:43 +07:00
Nils Andreas Svee 1cc0d60eac refactor(client): unify production and test timing logic
Extract internal methods that accept an optional timestamp to eliminate code duplication between primary client logic and test helpers.
2026-05-10 20:56:43 +07:00
Nils Andreas Svee 4a35f5ba0f test(client): add regression tests for edge cases and correctness 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 9661ebc4a6 fix(client): allow partial one-way delay samples 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 548363ad05 fix(client): improve probe tracking and reply handling 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 7cbc30a3a2 refactor(client): dynamic receive buffer sizing based on negotiated parameters 2026-05-10 20:56:43 +07:00
Nils Andreas Svee cdf41f2a82 feat(client): add configuration validation and new error types 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 265618b97e refactor(client): use internal clock for timestamps and simplify probe signatures 2026-05-10 20:56:43 +07:00
Nils Andreas Svee abf4b8134c test(client): add comprehensive tests for Milestone 3 probing functionality 2026-05-10 20:56:43 +07:00
Nils Andreas Svee c373b957d5 feat(client): implement core echo probe sending and receiving logic 2026-05-10 20:56:43 +07:00
Nils Andreas Svee e33b9b3f3f refactor(client): rename ClientState to ClientPhase and introduce ActiveSession 2026-05-10 20:56:43 +07:00
Nils Andreas Svee 30675ff85f fix(client): Improve socket error handling and remove redundant validation 2026-05-10 20:56:43 +07:00
Nils Andreas Svee befe431304 feat(client): Reject empty open_timeouts configuration with dedicated error 2026-05-10 20:56:43 +07:00
Nils Andreas Svee f1f5dfe541 test(client): Verify socket read timeout restoration after open() 2026-05-10 20:56:43 +07:00
Nils Andreas Svee f095eb5930 refactor(client): Introduce and apply test helper for timeout servers 2026-05-10 20:56:43 +07:00