Skip to content

Trippy 0.10.0

Compare
Choose a tag to compare
@github-actions github-actions released this 31 Mar 13:08

Highlights

The first release of 2024 is packed with new features, such as customizable columns, jitter calculations, Dublin tracing strategy for IPv6/UDP, support for IPinfo GeoIp files, enhanced DNS resolution with IPv6/IPv4 fallback and CSS named colors for the TUI as well as a number of bug fixes. Since the last release there has also been a significant improvement in automated testing, notably the introduction of TUN based simulation testing for IPv4.

Customize Columns

Customize Columns in TUI

It is now possible to customize which columns are shown in the TUI and to adjust the order in which they are displayed. This customization can be made from within the TUI or via configuration.

To customize the columns from the TUI you must open the settings dialog (s key) and navigating to the new Columns tab (left and right arrow keys). From this tab you can select the desired column (up and down arrow keys) and toggle the column visibility on and off (c key) or move it left (, key) or right (. key) in the list of columns.

columns

You can supply the full list of columns, in the desired order, using the new --tui-custom-columns command line argument. The following example specifies the standard list of columns in the default order:

trip example.com --tui-custom-columns holsravbwdt

Alternatively, to make the changes permanent you may add the tui-custom-columns entry to the tui section of the Trippy configuration file:

[tui]
tui-custom-columns = "holsravbwdt"

Note that the value of tui-custom-columns can be seen in the corresponding field of the Tui tab of the settings dialog and will reflect any changes made to the column order and visibility via the Tui. This can be useful as you may copy this value and use it in the configuration file directly.

tui-custom-columns

New Columns

This release also introduced several new columns, all of which are hidden by default. These are:

  • Last source port: The source port for last probe for the hop
  • Last destination port: The destination port for last probe for the hop
  • Last sequence number: The sequence number for the last probe for the hop
  • Jitter columns: see the "Calculate and Display Jitter" section below

See the Column Reference for a full list of all available columns.

Column Layout Improvement

The column layout algorithm used in the hop table has been improved to allow the maximum possible space for the Host column. The width of the Host column is now calculated dynamically based on the terminal width and the set of columns currently configured.

Calculate and Display Jitter

Trippy can now calculate and display a variety of measurements related to jitter for each hop. Jitter is a measurement of the difference in round trip time between consecutive probes. Specifically, the following new calculated values are available in Trippy 0.10.0:

  • Jitter: The round-trip-time (RTT) difference between consecutive rounds for the hop
  • Average Jitter: The average jitter of all probes for the hop
  • Maximum Jitter: The maximum jitter of all probes for the hop
  • Inter-arrival Jitter: The smoothed jitter value of all probes for the hop

These values are always calculated and are included in the json report. These may also be displayed as columns in the TUI, however they are not shown by default. To enabled these columns in the TUI, please see the Column Reference.

jitter

Dublin Tracing Strategy for IPv6/UDP

The addition of support for the dublin tracing strategy for IPv6/UDP marks the completion of a multi-release journey to provide support for both Dublin and paris tracing strategies for both IPv4/UDP and IPv6/UDP.

As a reminder, 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 packet, but instead use other protocol and address family specific techniques. Specifically, the Dublin tracing strategy for IPv6/UDP varies the length of the UDP payload for this purpose.

By doing so, these strategies are able to keep the src and dest ports fixed which makes it much more likely (though not guaranteed) that each round of tracing will follow the same path through the network (note that this is not true for the return path).

The following command runs an IPv6/UDP trace using the Dublin tracing strategy with fixed src and dest ports:

trip example.com --udp -6 -R dublin -S 5000 -P 3500

Note that, for both Paris and Dublin tracing strategies, if you fix either the src or dest ports (but not both) then Trippy will vary the unfixed port per round rather than per hop. This has the effect that all probes within a round will likely follow the same network path but probes between round will follow different paths. This can be useful in conjunction with flows (f key) to visualize the various paths packet flow through the network. See this issue for more details.

ipv6_dublin

With UDP support for the Paris and Dublin tracing strategies now complete, what remains is adding support for these for the TCP protocol. Refer to the ECMP tracking issue for details.

IPinfo GeoIp Provider

Trippy currently supports the ability to lookup and display GeoIp information from MMDB files, but prior to 0.10.0 only the MaxMind "GeoLite2 City" (and lite) MMDB files were supported. This release introduces support for the "IP to Country + ASN Database" and "IP to Geolocation Extended Database" MMDB files from IPinfo.

The "IP to Country + ASN Database" MMDB file provided by IPinfo can be used as follows:

trip example.com --geoip-mmdb-file /path/to/country_asn.mmdb --tui-geoip-mode short

These settings can be made permanent by setting the following values in the tui section of the configuration file:

[tui]
geoip-mmdb-file = "/path/to/country_asn.mmdb"
tui-geoip-mode = "short"

Enhanced DNS Resolution with IPv4/IPv6 Fallback

When provided with a DNS name such as example.com Trippy tries to resolve it to an IPv4 or an IPv6 address and fails if no such IP exists for the configured addr-family mode, which must be either IPv4 or IPv6.

Starting from version 0.10.0, Trippy can be configured to support ipv4-then-ipv6 and ipv6-then-ipv4 modes for addr-family. In the new ipv4-then-ipv6 mode Trippy will first attempt to resolve the given hostname to an IPv4 address and, if no such address exists, it will attempt to resolve to an IPv6 address and only fail if neither are available (and the opposite for the new ipv6-then-ipv4 mode). The addr-family mode may also be set to be ipv4 or ipv6 for IPv4 only and IPv6 only respectively.

To set the addr-family to be IPv6 with fallback to IPv4 you can set the --addr-family command line parameter:

trip example.com --addr-family ipv6-then-ipv4

To make the change permanent you can set the addr-family value in the strategy section of the configuration file:

[strategy]
addr-family = "ipv6-then-ipv4"

Note that Trippy supports both the addr-family entry in the configuration file and also the --ipv4 (-4) and --ipv6 (-6) command line flags, all of which are optional. The command line flags (which are mutually exclusive) take precedence over the config file entry and if neither are provided there it defaults to ipv4-then-ipv6.

Extended Colors in TUI

Trippy allows the theme to be customized and supports the named ANSI colors:

Black, Red, Green, Yellow, Blue, Magenta, Cyan, Gray, DarkGray, LightRed, LightGreen, LightYellow, LightBlue, LightMagenta, LightCyan, White

The 0.10.0 release adds support for CSS named colors (e.g. SkyBlue). Note that these are only supported on some platforms and terminals and may not render correctly elsewhere.

See the Theme Reference

Simulation Testing

Manually testing all Trippy features in all modes and on all supported platforms is an increasingly time consuming and error prone activity. Since the last release a significant effort has been made to increase the testing coverage, including unit and integration testing.

In particular, the introduction of simulation testing allows for full end-to-end testing of all modes and features on Linux, macOS and Windows without the need to mock or stub any behaviour within Trippy.

This is achieved by creating a TUN device to simulate the behavior of network nodes, responding to various pre-configured scenarios like packet loss and out-of-order arrivals.

Whilst not a change that directly benefits end users, this new testing approach should reduce the effort needed to test each release of Trippy and help improve the overall reliability of the tool.

Note that the simulation testing is currently only supported for IPv4. See the Integration Testing tracking issue for more details.

Thanks

My thanks to all Trippy contributors, package maintainers and community members.

Feel free to drop by the Trippy Matrix room for a chat:

#trippy-dev:matrix.org

Happy Tracing!

Change Log

Added

  • Added support for calculating and displaying jitter (#39) [@trkelly23]
  • Added support for customizing columns (#757) [@trkelly23]
  • Added support for reordering and toggling column visibility in Tui (#1026)
  • Added support for dublin ECMP routing for IPv6/udp (#272)
  • Added support for IPinfo flavoured mmdb files (#862)
  • Added support for IPv4->IPv6 and IPv6->IPv4 DNS fallback modes (#864)
  • Added TUN based simulation tests (#908)
  • Added support for last src port (S) and last dest port (P) custom columns (#974)
  • Added support for last sequence (Q) custom columns (#976)
  • Added support for more named theme colors (#1011)

Changed

  • Ensure paris and dublin ECMP strategy are only used with supported protocols (#848)
  • Restrict flows to paris and dublin ECMP strategies (#1007)
  • Improved Tui table column layout logic (#925)
  • Use exclusive reference &mut for all Socket operations (#843)
  • Reduced maximum sequence per round from 1024 to 512 (#1067)

Fixed

  • Fixed off-by-one bug in max-rounds calculation (#906)
  • Fixed panic with expand-hosts-max Tui command (#892)
  • Fixed failure to parse generated config file on Windows (#958)
  • Fixed tracer panic for icmp TimeExceeded "Fragment reassembly time exceeded" packets (#979)
  • Fixed tracer not discarding unrelated icmp packets for udp and tcp protocols (#982)
  • Fixed incorrect minimum packet size for IPv6 (#985)
  • Fixed permission denied error reading configuration file from snap installation (#1058)

See CHANGELOG.md for details.

Full Changelog: 0.9.0...0.10.0