Nils Andreas Svee
b02bc53cd8
feat(cli): introduce flexible event row output formats and column selection
...
Replace fixed output modes with customizable table, CSV, TSV, and JSON Lines formats. This allows users to select specific data columns and control header visibility for better integration with scripts and monitoring tools.
2026-06-22 13:16:33 +07:00
Nils Andreas Svee
193487ae64
refactor(cli): align machine output wall clock field and refine visibility
...
Update the machine-readable wall clock field to "event_wall_ns" for consistency and restrict visibility of internal rendering types. The extensive test suite was removed as part of this cleanup.
2026-06-21 00:19:38 +07:00
Nils Andreas Svee
cfbac69ac6
build: update lockfile to version 4 and deduplicate dependencies
...
Upgrade Cargo.lock to version 4 and remove redundant versions of crossterm, rustix, and windows-sys to reduce binary size and build complexity.
2026-06-21 00:12:23 +07:00
Nils Andreas Svee
f72f8fda5a
refactor(cli): harden client output formatter
2026-06-21 00:10:56 +07:00
Nils Andreas Svee
c7d03c0358
test(client): strengthen assertions for session cleanup after peer closure
...
Update tests to ensure no packets at all are sent following a peer-initiated closure, rather than just checking for the absence of the close flag.
2026-06-20 23:08:00 +07:00
Nils Andreas Svee
97dc1b3f8d
test(client): add tests for peer-initiated session closure
2026-06-20 22:59:48 +07:00
Nils Andreas Svee
e33ae1d0fc
fix(client): handle peer-initiated session closure gracefully
2026-06-20 22:59:48 +07:00
Nils Andreas Svee
d4976fb811
refactor(client): track session closure source
2026-06-20 22:59:48 +07:00
Nils Andreas Svee
74ceef6a70
test(cli): add unit and integration tests for applet dispatching
2026-06-20 22:59:48 +07:00
Nils Andreas Svee
fe776e6672
feat(cli): add multi-applet dispatcher with subcommand support
2026-06-20 22:59:48 +07:00
Nils Andreas Svee
efaa60cbd4
refactor(cli): simplify applet detection and remove feature-based defaults
2026-06-20 22:59:48 +07:00
Nils Andreas Svee
dc65daec75
build: bump minimum supported rust version to 1.85
...
Update the rust-version in Cargo.toml and the installation requirements in README.md to reflect the new MSRV.
2026-06-20 22:35:07 +07:00
Nils Andreas Svee
e3b74441a7
fix(deps): update rust crate ratatui to 0.30.2
2026-06-20 22:32:43 +07:00
Nils Andreas Svee
afe07f0b9a
refactor(cli): reorganize feature flags and update distribution config
2026-06-10 15:19:34 +07:00
Nils Andreas Svee
352cebb5c3
build: enable tui feature in distribution workspace
...
Include the TUI module in release builds to ensure command-line interface functionality is available in distributed binaries.
2026-06-10 00:59:40 +07:00
Nils Andreas Svee
58fd017d4f
build(ci): update cargo-dist to v0.32.0 and revert runner to ubuntu-22.04
...
Upgrade CI tooling to use cargo-dist v0.32.0 and switch to the ubuntu-22.04 runner to ensure environment compatibility. Pin GitHub Actions to major versions for better maintainability.
2026-06-10 00:47:34 +07:00
Nils Andreas Svee
5efb8a1870
build: bump workspace and crate versions to 0.3.0
2026-06-10 00:44:10 +07:00
Nils Andreas Svee
f41fd4a8e7
refactor: simplify lib.rs and update feature gating for cmd modules
2026-06-10 00:41:03 +07:00
Nils Andreas Svee
5de1bf7343
docs: update README with multi-applet usage and installation instructions
2026-06-09 23:23:51 +07:00
Nils Andreas Svee
7e89d11e6e
build: configure multi-binary targets and feature-gate dependencies
2026-06-09 23:23:51 +07:00
Nils Andreas Svee
196fc29f76
feat(tui): optimize terminal UI and simplify graph data series
2026-06-09 23:23:51 +07:00
Nils Andreas Svee
ded8a5f87d
refactor(client): encapsulate session lifecycle and stream output
2026-06-09 23:23:51 +07:00
Nils Andreas Svee
133ff71b72
feat(cli): implement multi-applet binary dispatch and signal handling
2026-06-09 23:23:50 +07:00
Nils Andreas Svee
d7cdcc5cee
refactor(cli): reorganize project structure into modular commands
2026-06-09 23:23:41 +07:00
Nils Andreas Svee
c31ad07d61
feat(irtt-cli): add optional tui output mode
2026-06-09 13:29:00 +07:00
Nils Andreas Svee
9b0cc2b395
test(ci): split netem interop summaries into local and GitHub-specific reports
...
Create separate markdown files for local browsing with relative links and GitHub Action summaries with artifact notices. This ensures the GitHub Step Summary remains readable and informative without broken links.
2026-06-05 17:13:51 +07:00
Nils Andreas Svee
64be840c1e
test(ci): enhance netem interop reporting and loss validation
2026-06-04 09:16:32 +07:00
Nils Andreas Svee
b8b0425c4e
test(ci): add deterministic Linux netem interop testing
2026-06-03 14:48:51 +07:00
Nils Andreas Svee
3e07732934
test(scripts): add interoperability harness to compare irtt clients
...
Add a Python-based black-box testing script to validate the Rust client's output and metrics against the upstream Go implementation.
2026-05-25 16:22:46 +07:00
Nils Andreas Svee
c739764476
ci: split actionlint into separate steps for handwritten and generated workflows
...
Disable ShellCheck globally for the cargo-dist generated release workflow to replace brittle regex ignore patterns with a cleaner configuration.
2026-05-18 13:50:18 +07:00
Nils Andreas Svee
5c96024c4f
ci: simplify actionlint ignore patterns for generated release workflow
...
Update the regex patterns to be more robust and improve the clarity of comments regarding cargo-dist generated workflows.
2026-05-18 13:46:26 +07:00
Nils Andreas Svee
5d653dac13
fix(client): remove duplicate constant exports and definitions
2026-05-18 11:12:21 +07:00
Nils Andreas Svee
6f77d38a7f
docs: document client errors and bounds
2026-05-18 10:56:58 +07:00
Nils Andreas Svee
01c10e2e0d
docs: document client public API
2026-05-18 01:34:04 +07:00
Nils Andreas Svee
8fd0b803e9
docs: add public crate landing docs
2026-05-18 01:22:08 +07:00
Nils Andreas Svee
614ad5b5cd
ci: ignore specific shellcheck warnings in generated release workflow
...
Suppress SC2086 and SC2129 linting errors for the generated release.yml to prevent build noise while maintaining checks for logic issues.
2026-05-18 01:05:40 +07:00
Nils Andreas Svee
2fcef0adc5
docs: clarify params validation boundaries
2026-05-18 00:36:18 +07:00
Nils Andreas Svee
c7a0e5d055
chore: tighten release readiness checks
2026-05-18 00:30:07 +07:00
Nils Andreas Svee
e117813578
test: consolidate and prune redundant unit tests
...
Simplify the test suite by merging similar test cases and removing redundant assertions that verify trivial initialization and basic container logic.
2026-05-18 00:16:51 +07:00
Nils Andreas Svee
3b5336a487
refactor(client): use SignedDuration for one-way delay to support negative values
...
Allow one-way delay samples to represent negative values caused by wall-clock skew between client and server. Update CLI output and statistics collection to correctly handle and report these signed durations.
2026-05-17 23:55:01 +07:00
Nils Andreas Svee
0b16ee802d
fix(stats): support sequence number wraparound in IPDV tracking
...
Use wrapping arithmetic instead of checked arithmetic to ensure inter-packet delay variation (IPDV) is correctly calculated when sequence numbers wrap from u32::MAX to 0.
2026-05-17 23:11:26 +07:00
Nils Andreas Svee
64da60d480
feat(proto): enforce maximum length for server fill parameter
...
Move MAX_SERVER_FILL_BYTES to irtt-proto and validate it during decoding to prevent processing oversized parameters.
2026-05-17 22:59:57 +07:00
Nils Andreas Svee
2d6581f31f
refactor(client): encapsulate SignedDuration and enhance its API
...
Hide internal fields to improve type safety and provide helper methods for unit conversions and negative value checks. Fix several feature-gated test compilation issues.
2026-05-17 22:47:16 +07:00
Nils Andreas Svee
bec56d4114
refactor(client): use SignedDuration for effective RTT to support negative values
...
Simplify RttSample by merging signed and unsigned fields into a single SignedDuration for adjusted and effective RTT. This ensures accurate reporting and statistics when server processing time exceeds raw RTT.
2026-05-17 21:30:51 +07:00
Nils Andreas Svee
37de7c96a1
test(client): remove redundant probe/reply tests
2026-05-17 15:22:08 +07:00
Nils Andreas Svee
6c5972aa58
test(client): refactor probes and replies tests into submodules
...
Split the monolithic `probes_replies.rs` file into logical submodules and expose internal packet processing methods to improve test maintainability and coverage of boundary conditions.
2026-05-17 14:54:59 +07:00
Nils Andreas Svee
bed877760e
test: prune client tests that assert private implementation details
2026-05-17 14:48:45 +07:00
Nils Andreas Svee
39d414d588
test: consolidate formatter and hub policy cases
2026-05-17 00:39:23 +07:00
Nils Andreas Svee
00fd0ebb15
test: consolidate duplicate CLI and client config cases
2026-05-17 00:34:18 +07:00
Nils Andreas Svee
ddd420cc21
test: consolidate and prune implementation-coupled tests
2026-05-17 00:28:05 +07:00
Nils Andreas Svee
a7288cc612
test(client): extract backend smoke tests into a dedicated module
2026-05-17 00:17:10 +07:00
Nils Andreas Svee
fdcdb3b9d7
test(client): remove implementation-coupled client tests
2026-05-16 23:41:11 +07:00
Nils Andreas Svee
bd9ed7eb88
test(client): trim implementation-coupled probe tests
2026-05-16 23:41:11 +07:00
Nils Andreas Svee
5d471b77fb
refactor(irtt-cli): split stream runtime path
2026-05-13 22:20:51 +07:00
Nils Andreas Svee
61c527eb26
refactor(irtt-cli): rename stream output helper
2026-05-13 22:12:03 +07:00
Nils Andreas Svee
f5c35e8142
feat(irtt-cli): note running-only continuous summaries
2026-05-13 22:05:18 +07:00
Nils Andreas Svee
9adab6882d
test(cli): add tests for interrupted continuous mode summary
2026-05-13 22:01:56 +07:00
Nils Andreas Svee
67ef912ba0
feat(cli): print summary when continuous mode is interrupted
2026-05-13 22:01:56 +07:00
Nils Andreas Svee
f2f5728c72
refactor(cli): rename print_finite_summary to print_final_summary
2026-05-13 22:01:56 +07:00
Nils Andreas Svee
c19dac5aef
docs(irtt-cli): expand duration flag documentation
...
Add detailed help text to clarify the difference in statistics handling between finite and continuous test modes.
2026-05-13 21:36:30 +07:00
Nils Andreas Svee
480cb4fa92
warn(irtt-cli): flag large finite stats runs
2026-05-13 20:18:45 +07:00
Nils Andreas Svee
ea85384ced
docs(irtt-stats): clarify event contribution for rolling_count
2026-05-13 16:58:12 +07:00
Nils Andreas Svee
aa6c3f4fa6
refactor(irtt-stats): remove unknown loss field
2026-05-13 16:25:11 +07:00
Nils Andreas Svee
dd1b08c51c
docs(irtt-stats): enforce public API documentation
2026-05-13 15:26:37 +07:00
Nils Andreas Svee
a180388dc6
docs(irtt-stats): Add documentation comments to public-facing types and fields
...
Add docstrings to clarify the purpose of statistics collection types and describe the units and behaviors of metric fields.
2026-05-13 15:15:41 +07:00
Nils Andreas Svee
19e0e7aab9
refactor(irtt-stats): extract core aggregation module
2026-05-13 14:57:19 +07:00
Nils Andreas Svee
c26008a0b6
refactor(irtt-stats): extract event normalization module
2026-05-13 14:53:13 +07:00
Nils Andreas Svee
1469a2d9e8
refactor(irtt-stats): extract rolling events module
2026-05-13 14:44:56 +07:00
Nils Andreas Svee
ebc0d46621
refactor(irtt-stats): extract loss stats module
2026-05-13 14:32:12 +07:00
Nils Andreas Svee
cc43b43f00
refactor(irtt-stats): extract IPDV tracking module
2026-05-13 14:25:54 +07:00
Nils Andreas Svee
04d5b634a2
refactor(irtt-stats): extract time stats module
2026-05-13 14:16:07 +07:00
Nils Andreas Svee
557c946796
refactor(irtt-stats): split snapshot builders
2026-05-13 14:07:43 +07:00
Nils Andreas Svee
bda1d83c27
refactor(irtt-stats): extract rolling event storage
2026-05-13 13:59:54 +07:00
Nils Andreas Svee
820304f6eb
refactor(irtt-stats): split unique reply accounting
2026-05-13 13:49:43 +07:00
Nils Andreas Svee
f211845645
refactor(irtt-stats): extract IPDV update recording
2026-05-13 13:45:28 +07:00
Nils Andreas Svee
851825822d
refactor(irtt-stats): split CoreStats event handlers
2026-05-13 13:40:55 +07:00
Nils Andreas Svee
969d26d0f1
refactor(irtt-stats): extract event normalization boundary
2026-05-13 13:31:27 +07:00
Nils Andreas Svee
c1b2486046
refactor(irtt-stats): split reply and IPDV samples
2026-05-13 13:28:08 +07:00
Nils Andreas Svee
90bb29cd75
refactor(irtt-stats): extract IPDV tracker
2026-05-13 13:20:58 +07:00
Nils Andreas Svee
0dd137a59e
refactor(irtt-stats): rename WindowEvent to StatsEvent
2026-05-13 13:12:06 +07:00
Nils Andreas Svee
05f9732760
refactor(irtt-stats): rename median mode to sample mode
2026-05-13 12:58:13 +07:00
Nils Andreas Svee
ce4b3c37ab
fix(irtt-stats): keep RTT IPDV independent from directional timing
2026-05-13 12:57:10 +07:00
Nils Andreas Svee
f05b7cceb2
refactor(irtt-stats): improve duration safety by handling negative time offsets
2026-05-13 12:44:35 +07:00
Nils Andreas Svee
0a66f6fb49
refactor(irtt-stats): remove unused push_duration helper
2026-05-13 12:36:51 +07:00
Nils Andreas Svee
5138dee29f
refactor(irtt-stats): unify duration statistics into a single TimeStats type
...
Simplify the statistics model by merging signed and unsigned duration types into a single structure that uses i128 to consistently handle both positive and negative time offsets.
2026-05-13 12:32:47 +07:00
Nils Andreas Svee
542e67bf74
refactor(irtt-stats): consolidate snapshot types and rename summary to snapshot
2026-05-13 12:21:51 +07:00
Nils Andreas Svee
197903fb8e
test(irtt-stats): rename internal date-time helper and update test case name
...
Rename system_time_ns to unix_time_ns_after_epoch for better clarity on output behavior and update a continuous mode test case name to more accurately reflect its purpose.
2026-05-13 12:07:51 +07:00
Nils Andreas Svee
adfe8e7a6b
test(irtt-stats): move integration tests to dedicated test module
2026-05-13 11:59:06 +07:00
Nils Andreas Svee
72470bd196
test(client): update and expand DSCP negotiation test coverage
2026-05-13 00:37:54 +07:00
Nils Andreas Svee
fec14b2c7c
feat(session): restrict DSCP negotiation to allow only disabling (reset to 0)
2026-05-13 00:37:53 +07:00
Nils Andreas Svee
3dfca1ab5e
refactor(session): implement Display and add documentation for NegotiationRestriction
2026-05-13 00:37:45 +07:00
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
a7e10358fd
test(client): use fallible packet length helpers in integration tests
2026-05-12 13:05:45 +07:00
Nils Andreas Svee
4549d95d0a
test(client): update test helpers to handle fallible packet length calculations
2026-05-12 13:05:45 +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
20a1d9dc8e
refactor(proto): make echo_packet_len return Result to handle negative lengths
2026-05-12 13:05:45 +07:00
Nils Andreas Svee
b508a94198
build: bump version to 0.2.0
2026-05-11 15:11:58 +07:00
Nils Andreas Svee
4ed09e2209
ci: add cargo-dist for automated release management
...
Introduce cargo-dist workflows and configuration to automate binary building and GitHub Release creation across multiple platforms.
2026-05-11 15:10:15 +07:00
Nils Andreas Svee
e2a9d68843
ci: add actions read permission to OSV-Scanner workflow
...
Grant necessary read access to actions to ensure the vulnerability scanner can evaluate the execution environment.
2026-05-11 15:01:05 +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