Commit Graph
748 Commits
Author SHA1 Message Date
renovate[bot] 554d197f14 fix(deps): update rust crate nix to 0.31.3 2026-08-11 14:24:34 +00:00
Nils Andreas Svee d5c3e21a05 Merge pull request #68 from Lochnair/fix/dscp-wire-semantics
fix(client): align DSCP wire semantics
2026-08-11 21:09:26 +07:00
Nils Andreas Svee 3d5a8fae14 fix(client): align DSCP wire semantics 2026-08-11 20:29:57 +07:00
Nils Andreas Svee 347af39d74 Merge pull request #67 from Lochnair/docs/server-protocol-airlock
docs(protocol): add sanitized server compatibility research
2026-08-11 18:34:51 +07:00
Nils Andreas Svee e0e8d3870b docs(agents): add server protocol guidance 2026-08-11 18:34:22 +07:00
Nils Andreas Svee 454bbc2378 docs(protocol): add sanitized server compatibility research 2026-08-11 18:25:31 +07:00
Nils Andreas Svee 8a94bc7ca6 Merge pull request #66 from Lochnair/fix/upstream-midpoint-echo-compat
fix(client): accept upstream midpoint echo replies
2026-08-11 17:43:05 +07:00
Nils Andreas Svee 88dd4f2a62 fix(proto): accept upstream midpoint echo replies
Upstream irtt 0.9.1 always emits both midpoint timestamp fields (wall,
then monotonic) in an ECHO reply for single-clock StampAt::Midpoint
negotiations, even though only one clock was negotiated, so its header is
one timestamp longer than the negotiated header.

The resulting datagram length is not simply negotiated_len + 8. Both
forms are max(negotiated_length, header), so the extra field lengthens
the datagram only while the larger header still exceeds the negotiated
length, and displaces payload beyond that; the difference is 8, then
7..1, then 0.

decode_echo_reply now accepts the compatibility length wherever it is
strictly longer than the negotiated length, parsing both wire fields and
exposing only the negotiated clock's value. Where the two lengths
coincide the forms are indistinguishable from the packet alone, so the
reply is accepted with normal negotiated parsing rather than a heuristic
- a monotonic-only midpoint negotiation therefore cannot always be
corrected, which is documented and tested. Every other length stays
strictly rejected.

Echo request decoding and encode_echo_reply are unchanged: the encoder
must keep emitting the sane negotiated layout.
2026-08-11 16:26:29 +07:00
Nils Andreas Svee 3d197c2353 ci: expand test matrix to include musl and aarch64 targets
Consolidate check and test jobs into a matrix strategy to verify compatibility across x86_64 and aarch64 architectures for both glibc and musl toolchains.
2026-08-11 14:23:06 +07:00
Nils Andreas Svee 8472745b42 Merge pull request #65 from Lochnair/fix/ancillary-safe
refactor(client): replace unsafe libc calls with nix for Linux ancillary data
2026-08-11 13:58:22 +07:00
Nils Andreas Svee 373bf32d0f refactor(client): replace unsafe libc calls with nix for Linux ancillary data
Eliminate unsafe code blocks and manual pointer arithmetic in Linux-specific receive paths by utilizing nix for socket options and control message parsing. This improves safety and maintainability while preserving the existing kernel RX timestamp and traffic class functionality.
2026-08-11 13:38:56 +07:00
Nils Andreas Svee 3c6c0e396f Merge pull request #64 from Lochnair/fix/tui-bound-input-drain
fix(tui): bound input event draining
2026-08-11 00:25:03 +07:00
Nils Andreas Svee 8651e93351 fix(tui): bound input event draining
handle_input() previously drained terminal events in an unbounded
while-poll loop, so a continuously-ready input stream could keep the
frontend inside handle_input() indefinitely, starving managed-event
processing, completion checks, peer-close stop policy, and rendering
in the outer run_tui() loop.

Bound each call to at most INPUT_EVENT_WORK_BUDGET (128) polled
terminal events, mirroring the MANAGED_EVENT_WORK_BUDGET pattern
already used for managed event draining. All polled events count
against the budget, including ignored/unknown/release events, so a
stream of non-actionable input can't bypass the bound. Remaining
events are left queued for the next outer-loop iteration rather than
dropped. Quit/Ctrl-C now also breaks out of the drain immediately
after being handled, since there is no benefit to consuming further
buffered input before the outer loop can request managed shutdown.
2026-08-11 00:12:37 +07:00
Nils Andreas Svee 17bbf72c6c Merge pull request #63 from Lochnair/fix/tui-lazy-graph-history
fix(tui): allocate graph history lazily
2026-08-10 23:59:11 +07:00
Nils Andreas Svee 17aeaf0b9b fix(tui): allocate graph history lazily 2026-08-10 23:57:27 +07:00
Nils Andreas Svee 3df71e0b69 fix(cli): account for targets in stats memory warning 2026-08-10 23:35:16 +07:00
Nils Andreas Svee b555451448 test(cli): make integration synchronization deterministic (#61) 2026-08-10 23:21:00 +07:00
Nils Andreas Svee 8924cc531c test(client): use protocol encoders in fake peers 2026-08-10 22:53:36 +07:00
Nils Andreas Svee e5c08997ed test(cli): use protocol encoders in fake peers 2026-08-10 21:55:54 +07:00
Nils Andreas Svee f0f9277469 test: trim redundant coverage 2026-08-10 21:06:49 +07:00
Nils Andreas Svee 186c6eba97 docs: add clean-room docs/specs and agent guidance 2026-08-10 18:54:22 +07:00
renovate[bot] 49826a5b3d fix(deps): update rust crate thiserror to 2.0.20 2026-08-10 11:15:42 +07:00
renovate[bot] d4cef6c2e7 fix(deps): update rust crate clap to 4.6.6 2026-08-10 11:15:26 +07:00
Nils Andreas Svee 8c31f14419 Merge pull request #55 from Lochnair/fix/managed-timeout-budget
fix(managed): bound timeout work per poll
2026-08-10 11:14:52 +07:00
Nils Andreas Svee 301542186a test(cli): bound peer-close synchronization waits 2026-08-10 11:09:00 +07:00
Nils Andreas Svee 04ea4af079 test(cli): synchronize multi-target peer close 2026-08-10 11:00:12 +07:00
Nils Andreas Svee 1f69c04274 test(managed): verify sparse timeout backlog progress 2026-08-10 10:30:36 +07:00
Nils Andreas Svee edb634146c fix(managed): retain timeout backlog fairness 2026-08-10 10:25:10 +07:00
Nils Andreas Svee ab9912b3d5 test(managed): cover timeout backlog scheduling 2026-08-10 02:06:41 +07:00
Nils Andreas Svee ec7baebe3a fix(managed): bound timeout discovery 2026-08-10 01:59:13 +07:00
Nils Andreas Svee f65998ff70 refactor(client): make deadline indexing allocation-free 2026-08-10 01:56:49 +07:00
Nils Andreas Svee 4632e310d7 test(managed): verify timeout budget fairness 2026-08-10 01:18:38 +07:00
Nils Andreas Svee a67331a297 fix(managed): bound timeout work per poll 2026-08-10 01:05:41 +07:00
Nils Andreas Svee 9769a1b49e refactor(client): index pending probe deadlines 2026-08-10 01:00:50 +07:00
Nils Andreas Svee fe3a4dc8e5 Merge pull request #54 from Lochnair/renovate/github-actions
chore(deps): update github actions
2026-08-10 00:45:41 +07:00
renovate[bot] 0bb75b04ef chore(deps): update github actions 2026-08-09 17:39:20 +00:00
Nils Andreas Svee 24d36d41d8 Merge pull request #53 from Lochnair/fix/managed-liveness-control
fix(managed): harden liveness and control bounds
2026-08-10 00:38:45 +07:00
Nils Andreas Svee 8d47dc9c6e test(managed): cover stopping admission overlap 2026-08-10 00:27:18 +07:00
Nils Andreas Svee dd396a8b5a test(managed): verify bounded control progress 2026-08-10 00:06:31 +07:00
Nils Andreas Svee dd1182d24d fix(managed): harden control admission 2026-08-10 00:05:48 +07:00
Nils Andreas Svee 1c6b4be915 fix(client): bound asynchronous opening work 2026-08-09 23:45:19 +07:00
Nils Andreas Svee c8d7c7eda2 Merge pull request #52 from Lochnair/refactor/managed-frontend-cutover
refactor(managed): remove legacy runtime
2026-08-09 22:05:17 +07:00
Nils Andreas Svee 33fe01f252 refactor(irtt-client): gate functions that are only used with tokio enabled 2026-08-09 22:03:45 +07:00
Nils Andreas Svee 36eaa90e2a fix(cli): harden managed frontend cutover 2026-08-09 21:51:20 +07:00
Nils Andreas Svee c599c84715 refactor(managed): remove legacy runtime 2026-08-09 20:58:36 +07:00
Nils Andreas Svee 1a9e8f28aa refactor(cli): use unified managed frontend 2026-08-09 20:27:22 +07:00
Nils Andreas Svee 9de95b303c feat(managed): support subscribed blocking start 2026-08-09 20:21:12 +07:00
Nils Andreas Svee f3ea8e030a Merge pull request #51 from Lochnair/blocking-managed-owner
feat(managed): add blocking managed owner
2026-08-09 20:07:50 +07:00
Nils Andreas Svee 93fed6dce6 fix(managed): bound blocking runtime shutdown 2026-08-09 20:02:35 +07:00
Nils Andreas Svee 749306394c test(managed): verify blocking owner lifecycle 2026-08-09 19:18:38 +07:00