Subject: CVS commit: pkgsrc/net/trippy
From: pin
Date: 2024-12-04 15:19:33
Message id: 20241204141933.25349FC1C@cvs.NetBSD.org

Log Message:
net/trippy: update to 0.12.0

Highlights

The latest release of Trippy brings both cosmetic and functional improvements to \ 
the TUI, new columns, new distribution packages, and a number of bug fixes.

The TUI has been updated to include a new information bar at the bottom of the \ 
screen which allows for the header to be shortened and simplified. The sample \ 
history chart has been enhanced to highlight missing probes and the presentation \ 
of source and target addresses has also been simplified.

As well as these cosmetic changes, the TUI has gained support for \ 
internationalization (i18n) and the ability to adjust the hop privacy setting \ 
dynamically.

This release introduces three new columns, which provide novel heuristics for \ 
measuring forward loss and backward loss, that are designed to assist users in \ 
interpreting the status of the trace.

Finally, this update includes new distribution packages for Debian and Ubuntu \ 
and addresses a number of bugs.
TUI Information Bar

The TUI now includes an information bar at the bottom of the screen, replacing \ 
the previous Config line in the header. This change shortens the header by one \ 
line, optimizing space usage while keeping the overall vertical space of the TUI \ 
unchanged.

The main TUI screen now appears as shown below (120x40 terminal size):

The left-hand side of the information bar displays a selection of static \ 
configuration items (in order):

    The address family and tracing protocol, e.g., IPv4/ICMP
    The privilege level, either privileged or unprivileged
    The locale, e.g., English (en), French (fr), etc.

The right-hand side of the information bar displays a selection of adjustable \ 
configuration items (in order):

    A toggle controlling whether ASN information is displayed (□ ASN for \ 
disabled, ■ ASN for enabled)
    A toggle controlling whether hop detail mode is enabled (□ detail for \ 
disabled, ■ detail for enabled)
    A toggle controlling whether hostnames, IP addresses, or both are displayed \ 
(host, ip, or both)
    The maximum ttl value for hop privacy, shown as - (privacy disabled) or a \ 
number (0, 1, 2, etc.)
    The maximum number of hosts displayed per hop, shown as - (automatic) or a \ 
number (1, 2, etc.)

In the above screenshot, the information bar indicates the trace is using \ 
IPv4/ICMP, is running in privileged mode, the locale is English (en), ASN \ 
information is displayed, hop detail mode is disabled, hostnames are displayed, \ 
the hop privacy maximum ttl is 2, and the maximum number of hosts per hop is set \ 
to automatic.

    Note: The information bar displays only a small number of important \ 
settings. All other settings can be viewed in
    the settings dialog, which can be opened by pressing s (default key binding).

The theme colors of the information bar can be customized using the \ 
info-bar-bg-color and info-bar-text-color theme items. Refer to the Theme \ 
Reference for more details.

Thanks to @c-git for their valuable feedback in refining the design of the \ 
information bar.

See #1349 for details.
Sample History Missing Probes

Trippy displays a history of samples for each hop as a chart at the bottom of \ 
the TUI display. Each vertical line in the chart corresponds to one sample, \ 
representing the value of the Last column.

Previously, if a probe was lost, the sample for that round would be shown as a \ 
blank vertical line. Starting with this release, Trippy now highlights lost \ 
probes using a full vertical line in red (default theme color), making them \ 
easier to identify.

The theme color for regular samples can be configured using the existing \ 
samples-chart-color configuration option. Additionally, the theme color for lost \ 
probes can now be customized using the new samples-chart-lost-color \ 
configuration option. For more details, see the Theme Reference.

See #1247 for further details.
Source and Target Address Display Improvements

This release simplifies the display of the source and target addresses in the \ 
Target line in the header of the TUI.

The Target line has been updated such that, for both the source and destination \ 
addresses, the hostname is only shown if it differs from the IP address.

For the destination address:

    If the user supplies a target hostname, it is resolved to an IP address, and \ 
both the IP address and the provided hostname are shown.
    If the user supplies an IP address, a reverse DNS hostname lookup is \ 
attempted. If successful, both the IP address and the first resolved hostname \ 
are shown; otherwise, only the IP address is displayed.

For the source address:

    A reverse DNS hostname lookup is attempted. If successful, both the IP \ 
address and the first resolved hostname are shown; otherwise, only the IP \ 
address is displayed.

For example, when the user supplies an IP address as the tracing target, the \ 
Target line in the header is now shown as follows:

Target: 192.168.1.21 -> 93.184.215.14 (example.com)

See #1363 for details.
Adjustable Hop Privacy Mode Settings

Trippy includes a privacy feature designed to hide sensitive information, such \ 
as IP addresses and GeoIP data, for all hops up to a configurable maximum ttl \ 
via the tui-privacy-max-ttl configuration option.

Previously, the privacy feature could only be toggled on or off within the TUI \ 
using the toggle-privacy command and only if tui-privacy-max-ttl was configured \ 
before Trippy was started.

In this release, the toggle-privacy command has been deprecated and replaced by \ 
two new TUI commands, expand-privacy (bound to the p key by default) and \ 
contract-privacy (bound to the o key by default).

The expand-privacy command increases the tui-privacy-max-ttl value up to the \ 
maximum number of hops in the current trace and the contract-privacy command \ 
decreases the tui-privacy-max-ttl value to the minimum value, which disables \ 
privacy mode.

See #1347 for more details.

This release also repurposes the meaning of tui-privacy-max-ttl when set to 0. \ 
Previously, a value of 0 indicated that no hops should be hidden. Starting from \ 
this release, a value of 0 will indicate that the source of the trace, as shown \ 
in the Target line of the header, should be hidden.

Values of 1 or greater retain their existing behavior but will now also hide the \ 
source of the trace in addition to the specified number of hops.

As a result of this change, the default value for tui-privacy-max-ttl has been \ 
updated:

    If not explicitly set (via a command-line argument or the configuration \ 
file), nothing will be hidden by default.
    If explicitly set to 0 (the previous default), the source of the trace will \ 
be hidden.

See #1365 for details.
Preserve Screen on Exit

Trippy previously supported the --tui-preserve-screen command-line flag, which \ 
could be used to prevent the terminal screen from being cleared when Trippy \ 
exits. This feature is useful for users who wish to review trace results after \ 
exiting the application. However, the flag had to be set before starting Trippy \ 
and could not be toggled during a trace.

This release introduces the quit-preserve-screen TUI command (bound to the \ 
shift+q key by default). This command allows users to quit Trippy without \ 
clearing the terminal screen, regardless of whether the --tui-preserve-screen \ 
flag is set.

See #1382 for details.
TUI Internationalization (i18n)

The Trippy TUI has been translated into multiple languages. This includes all \ 
text displayed in the TUI across all screens and dialogs, as well as GeoIP \ 
location data shown on the world map.

The TUI will automatically detect the system locale and use the corresponding \ 
translations if available. The locale can be overridden using the --tui-locale \ 
configuration option.

Locales can be specified for a language or a combination of language and region. \ 
For example a general locale can be created for English (en) and specific \ 
regional locales can be created, such as United Kingdom English (en-UK) and \ 
United States English (en-US).

If the user's chosen full locale (language-region) is not available, Trippy will \ 
fall back to using the locale for the language only, if it exists. For example \ 
if the user sets the locale to en-AU, which is not currently defined in Trippy, \ 
it will fall back to the en locale, which is defined.

If the user's chosen locale does not exist at all, Trippy will fall back to \ 
English (en).

Locales are generally added for the language only unless there is a specific \ 
need for region-based translations.

Some caveats to be aware of:

    The configuration file, command-line options, and most error messages are \ 
not translated.
    Many common abbreviated technical terms, such as IPv4 and ASN, are not \ 
translated.

The following example sets the TUI locale to be Chinese (zh):

trip example.com --tui-locale zh

This can be made permanent by setting the tui-locale value in the tui section of \ 
the configuration file:

[tui]
tui-locale = "zh"

The following screenshot shows the TUI with the locale set to Chinese (zh):

The list of available locales can be printed using the --print-locales flag:

trip --print-locales

As of this release, the following locales are available:

    Chinese (zh)
    English (en)
    French (fr)
    German (de)
    Italian (it)
    Portuguese (pt)
    Russian (ru)
    Spanish (es)
    Swedish (sv)
    Turkish (tr)

See #1319, #1357, #1336 and the Locale Reference for more details.

Corrections to existing translations or the addition of new translations are \ 
always welcome. See the tracking issue for the status of each translation and \ 
details on how to contribute.

Adding these translations has been a significant effort and I would like to \ 
express a huge thank you (谢谢! Merci! Danke! Grazie! Obrigado! \ 
Спасибо! Gracias! Tack! Teşekkürler!) to @0323pin, @arda-guler, \ 
@histrio, @josueBarretogit, @one, @orhun, @peshay, @ricott1, @sxyazi, @ulissesf, \ 
and @zarkdav for all of their time and effort adding and reviewing translations \ 
for this release.
Forward and Backward Packet Loss Heuristics

In line with most classic traceroute tools, Trippy displays the number of probes \ 
sent (Snd), received (Recv), and a loss percentage (Loss%) for each hop. \ 
However, many routers are configured to rate-limit or even drop ICMP traffic. \ 
This can lead to false positives for packet loss, particularly for intermediate \ 
hops, as the lack of a response from such hops does not typically indicate \ 
genuine packet loss. This is a common source of confusion for users interpreting \ 
trace results.

Trippy already provides a color-coded status column (Sts), that considers both \ 
packet loss percentage and whether the hop is the target of the trace, to try \ 
and assist users in interpreting the status of each hop. While this feature is \ 
helpful, it does not make it clear why a hop has a particular status nor help \ 
users interpret the overall status of the trace.

To further assist users, this release of Trippy introduces a pair of novel \ 
heuristics to measure forward loss and backward loss. Informally, forward loss \ 
indicates whether the loss of a probe is the cause of subsequent losses and \ 
backward loss indicates whether the loss of a probe is the result of a prior \ 
loss on the path.

More precisely:

    forward loss for probe P in round R occurs when probe P is lost in round R \ 
and all subsequent probes within round R are also lost.
    backward loss for probe P in round R occurs when probe P is lost in round R \ 
and any prior probe within round R has forward loss.

These heuristics are encoded in three new columns:

    Floss (F): The number of probes with forward loss
    Bloss (B): The number of probes with backward loss
    Floss% (D): The percentage of probes with forward loss

These columns are hidden by default but can be enabled as needed. For more \ 
details, see the Column Reference.

The following screenshot shows an example trace with the new columns enabled:

In the following (contrived) example, after initially discovering the target \ 
(10.0.0.105) during the first round, genuine packet loss occurs in all \ 
subsequent rounds at the third hop. This means that no probes on the common path \ 
are able to get beyond the third hop.

╭Hops──────────────────────── \ 
────────────────────────── \ 
────────────╮
│#    Host         Loss%    Snd     Recv    Floss   Bloss   Floss%  │
│1    10.0.0.101   0.0%     96      96      0       0       0.0%    │
│2    10.0.0.102   0.0%     96      96      0       0       0.0%    │
│3    No response  100.0%   96      0       95      0       98.9%   │
│4    No response  100.0%   96      0       0       95      0.0%    │
│5    10.0.0.105   99.0%    96      1       0       95      0.0%    │

From this we can determine that the loss at the third hop is classified as \ 
forward loss because all subsequent probes (4th and 5th) in the same round are \ 
also lost. We can also conclude that the 4th and 5th hops have backward loss \ 
starting from round two, as in those rounds a prior hop (the third hop) has \ 
forward loss.

Note the difference between the traditional Loss% column and the new Floss% \ 
column. The Loss% column indicates packet loss at several hops (3rd, 4th, and \ 
5th). In contrast, the Floss% column helps us determine that the true packet \ 
loss most likely occurs at the 3rd hop.

It is important to stress that this technique is a heuristic, and both false \ 
positives and false negatives are possible. Some specific caveats to be aware of \ 
include:

    Every probe sent in every round is an independent trial, meaning there is no \ 
guarantee that all probes within a given round will follow the same path (or \ 
"flow"). The concept of "forward loss" and "backward \ 
loss" assumes that all probes followed a single path. This assumption is \ 
typically met (but not guaranteed) when using tracing strategies such as ICMP, \ 
UDP/Dublin, or UDP/Paris.
    Any given host on the path may drop packets for only a subset of probes sent \ 
within a round, either due to rate limiting or genuine intermittent packet loss. \ 
This could result in a false positive for "forward loss" at a given \ 
hop if all subsequent hops in the round exhibit packet loss that is not genuine. \ 
For example, in the scenario above, the hop with ttl=3 could be incorrectly \ 
deemed to have "forward loss" if observed loss from hops ttl=4 and \ 
ttl=5 is not genuine (e.g., caused by rate-limiting).
    A false positive for "backward loss" could occur at a hop \ 
experiencing genuine packet loss if a previous hop on the path has "forward \ 
loss" that is not genuine. In the scenario above, if the hop with ttl=4 has \ 
genuine packet loss, it will still be marked with "backward loss" due \ 
to the "forward loss" at ttl=3.

Despite these caveats, the addition of forward loss and backward loss heuristics \ 
aims to help users more accurately interpret trace outputs. However, these \ 
heuristics should be considered experimental and may be subject to change in \ 
future releases.

See #860 for details.
Bug Fixes

The previous release of Trippy introduced a bug (#1290) that caused reverse DNS \ 
lookups to be enqueued multiple times when the dns-ttl expired, potentially \ 
leading to the hostname being displayed as Timeout: xxx for a brief period.

A long standing bug (#1398) which caused the TUI sample history and frequency \ 
charts to ignore sub-millisecond samples has been fixed.

This release fixes a bug (#1287) that caused the tracer to panic when parsing \ 
certain ICMP extensions with malformed lengths.

It also resolves an issue (#1289) where the ICMP extensions mode was not being \ 
displayed in the TUI settings dialog.

A bug (#1375) that caused the cursor to not move to the bottom of the screen \ 
when exiting while preserving the screen has also been fixed.

Finally, this release fixes a bug (#1327) that caused Trippy to incorrectly \ 
reject the value ip for the tui-address-mode configuration option (thanks to \ 
@c-git).
New Distribution Packages

Trippy is now available in Debian 13 (trixie) and later (with thanks to @nc7s!).

Debian 13 package

apt install trippy

See #1312 for details.

The official Trippy PPA for Ubuntu is now also available for the noble distribution.

Ubuntu PPA

sudo add-apt-repository ppa:fujiapple/trippy
sudo apt update && apt install trippy

See #1308 for details.

You can find the full list of distributions in the
documentation.
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:

project chat

Happy Tracing!
Change Log
Added

    Highlight lost probes in sample history (#1247)
    Added quit-preserve-screen (default: shift+q) key binding to quit Tui \ 
without clearing the screen (#1382)
    Added forward add backward loss heuristics (#860)
    Added --tui-locale flag to support i18n (#1319)
    Added translations for locales en, fr, tr, zh, pt, sv, it, ru, es & de (#506)
    Added --print-locales flag to print all available locales (#1357)
    Added Debian package (#1312)
    Added Ubuntu noble PPA package (#1308)

Changed

    Added information bar to Tui (#1349)
    [BREAKING CHANGE] Remove Timestamp from all DnsEntry variants (#1296)
    [BREAKING CHANGE] Replace toggle-privacy key binding with expand-privacy and \ 
contract-privacy (#1347)
    [BREAKING CHANGE] Hide source address when --tui-privacy-max-ttl is set (#1365)
    Only show hostnames if different from IPs (#1363)
    Lookup GeoIp with current locale (#1336)
    Enable Link-Time Optimization (LTO) for release builds (#1341)

Fixed

    Reverse dns enqueued multiple times when dns-ttl expires (#1290)
    Fixed panic for icmp extensions with malformed length (#1287)
    Cursor not moved to the bottom on exit when using --tui-preserve-screen (#1375)
    Config item tui-address-mode does not accept ip (#1327)
    Icmp extension mode not shown in Tui settings (#1289)
    Sample history and frequency charts ignore sub-millisecond samples (#1398)

Files:
RevisionActionfile
1.11modifypkgsrc/net/trippy/Makefile
1.11modifypkgsrc/net/trippy/cargo-depends.mk
1.11modifypkgsrc/net/trippy/distinfo