Trippy 0.10.0
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.
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.
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.
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.
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:
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
andIPv6->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
anddublin
ECMP strategy are only used with supported protocols (#848) - Restrict flows to
paris
anddublin
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 forudp
andtcp
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