Skip to content

Releases: lance0/ttl

v0.19.0

26 Feb 20:02

Choose a tag to compare

Interactive Replay Controls

v0.19.0 adds full interactive controls to animated session replay (--replay file --animate):

Added

  • Progress bar showing play state, timeline position, speed multiplier, and event count
  • Seek controls: Left/Right ±0.5s, [/] ±5s, Home/End jump to start/end
  • Speed controls: +/- adjust ±0.5x (0.5x–5.0x range)
  • Help overlay (?) now shows replay-specific keybindings when in replay mode

Fixed

  • Replay timing precision: f64 elapsed time calculations prevent drift on long replays
  • Replay seek safety: Saturating arithmetic prevents overflow; Instant::checked_sub prevents underflow on corrupted files

v0.18.2

23 Feb 14:25

Choose a tag to compare

Fixed

  • NetBSD UDP probes: Auto-detect source IP for UDP DGRAM sockets on NetBSD. Fixes "No route to host" (EHOSTUNREACH) when sending UDP probes without --source-ip (#47)
  • NetBSD IPv4 PMTUD retry spam: PMTUD now terminates immediately on first DF flag failure instead of retrying every probe round. Prints a single warning when IP_DONTFRAG is unavailable (#47)

Full Changelog: v0.18.1...v0.18.2

v0.18.1

22 Feb 18:14

Choose a tag to compare

Full Changelog: v0.18.0...v0.18.1

Full Changelog: v0.18.0...v0.18.1

v0.18.0

13 Feb 14:48

Choose a tag to compare

ECMP Classification & Flow Attribution Hardening

This release fixes how ttl handles ECMP (Equal-Cost Multi-Path) load balancing, particularly per-packet ECMP common on Arista, Juniper, and Cisco switches. Previously, users would see "Paths: 1" in the main table despite 8+ responders visible in the hop detail view.

Added

  • ECMP classification — Detects per-flow vs per-packet ECMP using primary concentration heuristics. Paths column now accurately reflects observed responder count for per-packet load balancing (#46)
  • E indicator — New ECMP indicator in main table replaces misleading ! (route flap) when ECMP is the actual cause
  • Effective flow capability — Runtime detection of protocol flow support. --flows > 1 with ICMP now warns and collapses to single-flow instead of silently doing nothing
  • Receiver flow attribution hardening — Out-of-range source ports (NAT/CGNAT) no longer force-attributed to flow 0. Unknown-flow responses only match pending probes when unambiguous
  • Hop detail view — Per-packet ECMP section shows responder count and path count; per-flow ECMP section unchanged
  • Last RTT semantics documentedLast column tracks primary responder's most recent RTT
  • Main table layout guard tests — Header/cell/width count parity verified across display mode x flow mode matrix
  • IPv6 RAW payload fallback tests — Echo Reply and Time Exceeded parsing tests for IPv6

Changed

  • Flap detection suppressed during ECMP! indicator no longer fires when per-packet ECMP is detected at a hop
  • Probe engines use per-session config — Each target's engine sees the effective flow count, not the raw CLI value

Full Changelog: v0.17.0...v0.18.0

v0.17.0

12 Feb 16:04

Choose a tag to compare

Full Changelog: v0.16.1...v0.17.0

v0.16.1

11 Feb 14:27

Choose a tag to compare

What's Changed

Fix: Hang on exit (#41)

Three targeted fixes for the shutdown hang reported in #41:

  • Bounded IPv6 echo drain loop — The poll_ipv6_echo_reply drain loop now caps at 256 packets per batch and checks the cancellation token, preventing starvation when the socket is continuously readable
  • Ctrl+C force-exit handlertokio::signal::ctrl_c() handler works outside crossterm raw mode; first press cancels gracefully, second press force-exits with code 130
  • Shutdown tracing — Set TTL_SHUTDOWN_TRACE=1 to see timestamped shutdown progress logs on stderr, useful for diagnosing any remaining hang scenarios

Full Changelog: v0.16.0...v0.16.1

v0.16.0

05 Feb 20:16

Choose a tag to compare

Full Changelog: v0.15.3...v0.16.0

v0.15.3

29 Jan 19:13

Choose a tag to compare

Full Changelog: v0.15.2...v0.15.3

v0.15.2

28 Jan 19:17

Choose a tag to compare

Full Changelog: v0.15.1...v0.15.2

v0.15.1

28 Jan 01:41

Choose a tag to compare

Full Changelog: v0.15.0...v0.15.1