Highlights
The 0.13.0 release of Trippy includes several enhancements related to Type of Service (ToS
) and adds new Dscp
and Ecn
columns.
It also includes improvements to the TUI such as allowing a custom timezone to be set and adding the ability to read the configuration file from the XDG app config directory. The json
report has been enriched with start and end timestamps.
This release includes a number of bug fixes. For Windows users in particular, this release includes several important stability improvements.
The release also introduces a new system
address family option, which will become the new default in the next major release.
Finally, Trippy now has a dedicated website and a logo!
Type of Service (DSCP/ECN) Improvements
Trippy allows setting the Type of Service (ToS
) for IPv4 via the --tos
(-Q
) command-line argument (or via the configuration file). The ToS
value is the second byte of the IPv4
header and encodes the Differentiated Services Code Point (DSCP
) and Explicit Congestion Notification (ECN
) fields.
Setting the ToS
on outgoing probe packets can influence the Quality of Service (QoS
) used by the network devices along the path.
Probe responses received from the hops along the path include the ToS
values in the Original Datagram (the IPv4
/IPv6
header of the probe packet nested inside the ICMP
error). Examining the ToS
value from the Original Datagram can provide useful insight into the QoS
treatment of the probe packets by network devices along the path.
This release of Trippy adds two new columns to display the DSCP
& ECN
values, which are derived from the ToS
value from the Original Datagram for each hop. The new columns are:
Dscp
(K
): The Differentiated Services Code Point (DSCP
) of the Original Datagram for a hopEcn
(M
): The Explicit Congestion Notification (ECN
) of the Original Datagram for a hop
The Dscp
and Ecn
columns are decoded from the ToS
field of the Original Datagram. If no ToS
value is present, then the columns will show na
. Note that these columns show the most recent ToS
value received from the hop and may therefore change between rounds.
Well-known DSCP
values are displayed as follows:
- Default Forwarding (
DF
) aka Best Effort aka Class Selector 0 (CS0
) - Assured Forwarding (
AFn
) - Class Selector (
CSn
) - High Priority Expedited Forwarding (
EF
) - Voice Admit (
VA
) - Lower Effort (
LE
)
Unknown DSCP
values are displayed as a hexadecimal value.
The ECN
value is displayed as follows:
- Not ECN-Capable Transport (
NotECT
) - ECN Capable Transport(1) (
ECT1
) - ECN Capable Transport(0) (
ECT0
) - Congestion Experienced (
CE
)
These columns are hidden by default but can be enabled as needed. For more details, see the Column Reference.
The following example sets the ToS
to be 224
, which is a DSCP
value of CS7
(0x38) and an ECN
value of NotECT
(0x0), and enables the new columns:
trip example.com --tos 224 --tui-custom-columns holsravbwdtKM
The following screenshot shows the example trace:
The ToS
field of the Original Datagram has also been added to the json
output format as a decimal value.
See #1539 for details.
This release also adds support for setting the IPv6
Traffic Class (which encodes the DSCP
& ECN
values in the same way as IPv4
) via the same --tos
(-Q
) command-line argument (or via the configuration file). Note that setting the IPv6
Traffic Class is not currently supported on Windows. See #202 for details.
Finally, a bug which caused the --tos
(-Q
) command-line argument to be ignored for IPv4/UDP
tracing has been fixed in this release. See #1540 for details.
Custom TUI Timezone
Trippy shows the wall-clock time in the header of the TUI. Currently, this is set to show the local timezone of the system running Trippy. This can be problematic for users who are running Trippy in a container or on a remote system that uses a different timezone.
This release adds the ability to set a custom timezone for the TUI using the --tui-timezone
command-line argument (or via the configuration file). The timezone can be set to any valid IANA timezone identifier, such as UTC
, America/New_York
, or Europe/London
.
The following example sets the timezone to UTC
:
trip example.com --tui-timezone UTC
This can be made permanent by setting the tui-timezone
value in the tui
section of the configuration file:
[tui]
tui-timezone = "UTC"
See #1513 for details.
XDG App Config Directory
Trippy will now attempt to locate a trippy.toml
or .trippy.toml
config file in the XDG app config directory (i.e. $XDG_CONFIG_HOME/trippy
or ~/.config/trippy
) in addition to existing locations.
This allows users to store their Trippy configuration files in a dedicated directory for Trippy, separate from other applications.
The full list of locations Trippy will check for a trippy.toml
or .trippy.toml
config file is as follows:
- the current directory
- the user home directory
- the XDG config directory (Unix only):
$XDG_CONFIG_HOME
or~/.config
- the XDG app config directory (Unix only):
$XDG_CONFIG_HOME/trippy
or~/.config/trippy
- the Windows data directory (Windows only):
%APPDATA%
See #1528 for details.
System Address Family
Trippy supports tracing for both IPv4
and IPv6
address families. If the tracing target is supplied as a hostname, Trippy will attempt to resolve the hostname to a single IPv4
or IPv6
address. If the hostname resolves to both, Trippy will use the address family (--addr-family
) configuration to determine which address family to use.
The possible values for --addr-family
are:
ipv4
- Lookup IPv4 onlyipv6
- Lookup IPv6 onlyipv6-then-ipv4
- Lookup IPv6 with a fallback to IPv4ipv4-then-ipv6
- Lookup IPv4 with a fallback to IPv6 [default]
The current default value for --addr-family
is ipv4-then-ipv6
, which means that if the hostname resolves to both IPv4
and IPv6
addresses, Trippy will prefer the IPv4
address family.
Some users find the default behavior undesirable, as it can lead to unexpected results when the hostname resolves to a different address family than the one used by other applications on the system.
This release adds a new value for --addr-family
called system
. This value defers the choice of address family to the first address returned by OS resolver. This means that if the hostname resolves to both IPv4
and IPv6
addresses, the OS resolver will determine which address family to use based on the OS configuration.
Note that if the --addr-family
value is set to system
and the --dns-resolve-method
is set to any value other than system
(i.e. resolv
, cloudflare
or google
), then the address family lookup will effectively default to ipv6-then-ipv4
.
Important: The default value for
--addr-family
will change to becomesystem
in the next major release of Trippy (0.14.0). This will be a breaking change for users who rely on the current default value ofipv4-then-ipv6
.
See #1469 for details.
Remove Address Family "downgrade" for Dublin Strategy
Currently, the address families ipv4-then-ipv6
and ipv6-then-ipv4
are silently downgraded to ipv4
when the dublin
ECMP strategy is used. This behaviour was previously necessary, as Trippy did not support the dublin
ECMP strategy for IPv6
. However, Trippy has supported the dublin
ECMP strategy for IPv6
since version 0.10.0. As a result, this release removes the address family downgrade for the dublin
ECMP strategy.
See #1476 for details.
Windows Stability Improvements
This release includes several stability improvements for Windows. It fixes several known or potential issues that could cause crashes or memory corruption. It is recommended that all Windows users upgrade to this release.
See the following issues for details:
- Memory corruption on Windows (#1527)
- Socket being closed twice on Windows (#1443)
- Potential crash on Windows for adapters without unicast addresses (#1547)
- Potential use-after-free when discovering source address on Windows (#1558)
Start and End Timestamps in JSON report
The Trippy json
report mode has been enhanced to show the start and end timestamps for the trace. These timestamps are shown in UTC using RFC 3339 format.
The following example runs a trace to example.com
for a single round and outputs the results in json
format:
trip example.com -m json -C 1
The info
section of the output now includes the start_timestamp
and end_timestamp
fields:
{
"info": {
"target": {
"ip": "23.192.228.80",
"hostname": "example.com"
},
"start_timestamp": "2025-05-04T09:50:10.383221Z",
"end_timestamp": "2025-05-04T09:50:11.392039Z"
}
}
See #1510 for details.
Reduce Tracing Verbosity
The trippy-core
crate logging is overly verbose. This release reduces all #[instrument]
annotations from the default info
level to the trace
level. It also removes some tracing annotations and, in some cases, adds new ones.
There are now no info
level logs and only a handful of debug
level logs:
- Log the channel config when a channel is created (typically just once)
- Log the strategy config when the tracer is started (typically just once)
- Log each probe sent and received during a round (typically a handful per round)
For application users there is no change; however the default logging level (--log-filter trippy=debug
) used when -v
is passed will now show substantially fewer logs. Users can set --log-filter trippy=trace
to see a logging level similar to the previous default.
See #1482 for details.
Bug Fixes
This release fixes a bug where ICMP packets larger than 256 bytes could cause a tracer panic. See #1561 for details.
It also adds a handful of missing configuration options to the settings dialog. See #1541 for details.
Trippy Website & Logo
Trippy now has a dedicated website: https://trippy.rs
The website is now the primary source of documentation. My thanks to @orhun for building the https://binsider.dev website which I took inspiration from shamelessly copied for Trippy.
Along with the new website, Trippy (finally!) has a logo:
With thanks to Harun Ocaksiz Design.
See #100 for details.
New Distribution Packages
Trippy has been added to the Void Linux package repository (with thanks to @icp1994!):
xbps-install -S trippy
Trippy was also added to ALT Sisyphus package repository (with thanks to Aleksandr Voyt!)
apt-get install trippy
Finally, Trippy has been added to the Chimera Linux package repository (with thanks to @ttyyls!):
apk add trippy
Thanks
My thanks to all Trippy contributors, package maintainers, translators and community members.
Feel free to drop by the Trippy Zulip room for a chat:
Happy Tracing!
Change Log
Added
- Added DSCP and ECN columns (#1539)
- Added support for setting IPv6 traffic class from
--tos
(#202) - Added ability to read config from
$XDG_CONFIG_HOME/trippy
directory (#1528) - Added
--tui-timezone
flag to set a custom timezone (#1513) - Added support for
--addr-family system
to defer address family selection to the OS resolver (#1469) - Added tracing start and end timestamps to the
json
report (#1510) - Added the Trippy logo! (#100)
Changed
- Remove address family downgrade for
dublin
strategy (#1476) - Reduce verbosity of tracing for library users (#1482)
- Increase MSRV to 1.78 (#1576)
Fixed
- Tracer panic for large icmp packets (#1561)
- Memory corruption on Windows (#1527)
- Socket being closed twice on Windows (#1443)
- Potential crash on Windows for adapters without unicast addresses (#1547)
- Potential use-after-free when discovering source address on Windows (#1558)
- The
--tos
(-Q
) flag is ignored forIPv4/udp
tracing (#1540) - Items missing from settings dialog (#1541)
See CHANGELOG.md for details.
Full Changelog: 0.12.2...0.13.0