Skip to content

Trippy 0.8.0

Compare
Choose a tag to compare
@github-actions github-actions released this 15 May 12:41

Highlights

The 0.8.0 release of Trippy brings several new features, UX enhancements, and quality of life improvements, as well as various small fixes and other minor improvements.

Hop Detail Navigation

Trippy offers various mechanisms to visualize ECMP (Equal-Cost Multi-Path Routing) when tracing with UDP and TCP protocols. Features include displaying all hosts for a given hop in a scrollable table, limiting the number of hosts shown per hop (showing the % of traffic for each host), and greying out hops that are not part of a specific tracing round.

Despite these helpful features, visualizing a complete trace can be challenging when there are numerous hosts for some hops, which is common in environments where ECMP is heavily utilized.

This release enhances ECMP visualization support by introducing a hop detail navigation mode, which can be toggled on and off by pressing d (default key binding). This mode displays multiline information for the selected hop only, including IP, hostname, AS, and GeoIP details about a single host for the hop. Users can navigate forward and backward between hosts in a given hop by pressing , and . (default key bindings), respectively.

In addition to visualizing ECMP, Trippy also supports alternative tracing strategies to assist with ECMP routing, which are described below.

Paris Tracing Strategy

Trippy already supports both classic and dublin tracing strategies, and this release adds support for the paris tracing strategy for the UDP protocol.

Unlike classic traceroute and MTR, these alternative tracing strategies do not encode the probe sequence number in either the src or dest port of the UDP or TCP packet, but instead use other protocol and address family specific techniques.

This means that every probe in a trace can share common values for the src & dest hosts and ports which, when combined with the protocol, is typically what is used to making traffic route decisions in ECMP routing. This means that these alternative tracing strategies significantly increase the likelihood that the same path is followed for each probe in a trace (but not the return path!) in the presence of ECMP routing.

The following command runs a UDP trace using the new paris tracing strategy with fixed src and dest ports (the src and dest hosts and the protocol are always fixed) and will therefore likely follow a common path for each probe in the trace:

trip www.example.com --udp -R paris -S 5000 -P 3500

Future Trippy versions will build upon these strategies and further improve the ability to control and visualize ECMP routing, refer to the tracking issue for further details.

GeoIp Information & Interactive Map

Trippy now supports the ability to look up and display GeoIP information from a user-provided MaxMind GeoLite2 City database. This information is displayed per host in the hop table (for both normal and new detail navigation modes) and can be shown in various formats. For example, short form like "San Jose, CA, US" or long form like "San Jose, California, United States, North America," or latitude, longitude, and accuracy radius like "37.3512, -121.8846 (~20km)".

The following command enables GeoIP lookup from the provided GeoLite2-City.mmdb file and will show long form locations in the hop table:

trip example.com --geoip-mmdb-file GeoLite2-City.mmdb --tui-geoip-mode long

Additionally, Trippy features a new interactive map screen that can be toggled on and off by pressing m (default key binding). This screen displays a world map and plots the location of all hosts for all hops in the current trace, as well as highlighting the location of the selected hop.

Autonomous System Display Enhancements

Trippy has long offered the ability to look up and display AS information. This release makes this feature more flexible by allowing different AS details to be shown in the hops table, including AS number, AS name, prefix CIDR, and registry details.

The following command enables AS lookup and will display the prefix CIDR for each host in the TUI:

trip example.com -z true -r resolv --tui-as-mode prefix

This release also fixes a limitation in earlier versions of Trippy that prevented the lookup of AS information for IP addresses without a corresponding PTR DNS record.

UI Cleanup & Configuration Dialog

The number of configurable parameters in Trippy has grown significantly, surpassing the number that can be comfortably displayed in the TUI header section. Previous Trippy versions displayed an arbitrarily chosen subset of these parameters, many of which have limited value for users and consume valuable screen space.

This release introduces a new interactive settings dialog that can be toggled on and off with s (default key binding) to display all configured parameters. The TUI header has also been cleaned up to show only the most relevant information, specifically the protocol and address family, the AS info toggle, the hop details toggle, and the max-hosts setting.

Configuration File

The previous Trippy release introduced the ability to customize the TUI color theme and key bindings, both of which could be specified by command-line arguments. While functional, this method is inconvenient when configuring a large number of colors or keys.

This release adds support for a Trippy configuration file, allowing for persistent storage of color themes, key bindings, and all other configuration items supported by Trippy.

For a sample configuration file showing all possible configurable items that are available, see the configuration reference for details.

Shell Completions

This release enables the generation of shell completions for various shells, including bash, zsh, PowerShell, and fish, using the new --generate command-line flag.

The following command will generate and store shell completions for the fish shell:

trip --generate fish > ~/.config/fish/completions/trip.fish

Improved Error Reporting & Debug Logging

This release adds a number of command-line flags to enable debug logging, enhancing the ability to diagnose failures. For example, the following command can be used to run tracing with no output, except for debug output in a format suitable to be displayed with chrome://tracing or similar tools:

trip www.example.com -m silent -v --log-format chrome

Socket errors have also been augmented with contextual information, such as the socket address for a bind failure, to help with the diagnosis of issues.

New Distribution Packages

Trippy is now also available as a Nix package (@figsoda), a FreeBSD port (@ehaupt) and a Windows Scoop package. This release also reenables support for a musl binary which was disabled in 0.7.0 due to a bug in a critical library used by Trippy.

See distributions for the full list of available packages.

My thanks, as ever, to all Trippy contributors!

New Contributors

Change Log

Added

  • Added --tui-as-mode flag to control how AS information is rendered (#483)
  • Added support for configuration files and added a -c (--config-file) flag (#412)
  • Added --generate flag for generating shell completions (#86)
  • Added support for showing and navigating host detail (#70)
  • Added --geoip-mmdb-file and --tui-geoip-mode flags for looking up and displaying GeoIp information from mmdb files (#503)
  • Added settings dialog and simplified Tui header display (#521)
  • Added interactive GeoIp map display (#505)
  • Added support for the paris ECMP traceroute strategy for IPv4/udp (#542)
  • Added silent reporting mode to run tracing without producing any output (#555)
  • Added -v (--verbose), --log-format, --log-filter & --log-span-events flags to support generating debug trace logging output (#552)

Changed

  • Show AS information for IP addresses without PTR record (#479)
  • Re-enabled musl release builds (#456)
  • [BREAKING CHANGE] Renamed short config flag for report-cycles from -c to -C (#491)
  • Ensure administrator privileges on Windows (#451)

Fixed

  • Do not require passing targets for certain command line flags (#500)
  • Key press registering two events on Windows (#513)
  • Command line parameter names in error messages should be in kebab-case (#516)

See CHANGELOG.md for details.

Full Changelog: 0.7.0...0.8.0