msantos/gen_icmp
50.3
Adequate · 2 October 2026
2.5k
lines of production code
Erlang
primary language
2
measurements over time
What this system is
gen\_icmp is an Erlang library that provides a simple interface for ICMP and ICMPv6 sockets, supporting both IPv4 and IPv6. It enables core network diagnostic operations such as ping and traceroute, with the traceroute capability supporting both ICMP and UDP protocols. The system also facilitates advanced use cases like tunneling TCP data over ICMP, as demonstrated by its included examples.
Features
Initial release of gen\_icmp 1.0.0
This entry marks the initial release of the gen\_icmp library (version 1.0.0), providing a simple interface for ICMP and ICMPv6 sockets in Erlang. The release includes core functionality for ping and traceroute operations, with support for both IPv4 and IPv6. It depends on procket (0.9.10) for raw socket access and pkt (0.6.0) for packet handling. The package comes with comprehensive documentation, examples (including a ping tunnel implementation), and is configured for Hex.pm publishing.
(repo-wide) · high confidence
New example: TCP-over-ICMP tunnel (ptun)
Added a new example module, ptun.erl, demonstrating how to tunnel TCP data over ICMP using the gen\_icmp library. The example provides server and client functions that forward TCP traffic via ICMP echo requests and replies, allowing users to test connectivity by running a server on one host and a client on another.
examples · high confidence
Removals
Removal of gen\_icmp Erlang ICMP interface
The gen\_icmp module, which provided an Erlang interface for sending and receiving ICMP packets (including ping functionality) via raw sockets, has been removed. This change eliminates the ability to open ICMP sockets, send ICMP echo requests, and receive responses using the gen\_icmp API, as well as the associated build configuration and dependencies (procket, epcap).
_gen\icmp · high confidence
Behavioural changes
Release version 1.0.0 with new traceroute capability and refactored ping interface
The gen\_icmp library has reached version 1.0.0, introducing a new \tracert\ module that performs ICMP and UDP traceroutes to map network paths. The core \gen\_icmp\ ping interface has been refactored to return flattened tuples containing the ID, sequence number, and TTL, and now supports IPv6 ICMP sockets with default filtering enabled. Additionally, the library has switched its underlying packet parsing dependency from \epcap\_net\ to \pkt\ and updated its application metadata to include BSD-3-Clause licensing.
src · high confidence
Test coverage
Added Common Test suites for gen\_icmp and tracert modules
Added new Common Test suites (\gen\_icmp\_SUITE.erl\ and \tracert\_SUITE.erl\) that verify the behavior of the \gen\_icmp\ and \tracert\ modules. The \gen\_icmp\ tests cover IPv4 and IPv6 ping operations, including single and multiple host pings, timeout handling, TTL configuration, socket reuse, and NXDOMAIN error cases. The \tracert\ tests validate traceroute functionality for both IPv4 and IPv6, including UDP and ICMP protocols, multiple hops, resolution of single and multiple addresses, timeout scenarios, and NXDOMAIN errors. Both suites include logic to detect IPv6 availability and skip IPv6-specific tests if the network stack does not support it.
test · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 51 → 50 (-1.2)
- Rubric changed (rubric-2026.09.12 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 97 → 97 (+0.0)
- Architecture 100 → 100 (+0.0)
- Maturity 50 → 33 (-17.9)
- Readiness 26 → 33 (+7.7)
- Security 100 → 100 (+0.0)
Resolved (3)
- Coverage not measured — no coverage collector is wired up
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
msantos/gen_icmp was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 2 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 3e314b34f1a2c91afded9756e1311d8db7e98207 — the exact code this score is about.
- Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.