Skip to content
CAI
Software that uses CAICheck a score

msantos/tunctl

57.0

Adequate · 2 October 2026

2.1k

lines of production code

Erlang

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is an Erlang library for managing TUN/TAP network interfaces across multiple operating systems, including Linux, macOS, FreeBSD, and NetBSD. It provides a unified API for creating and controlling virtual network devices, supporting both passive and active I/O modes for packet delivery. The library includes advanced features such as multi-queue support, packet filtering, and platform-specific capabilities like IPv6 configuration and network namespace management. It also provides example applications demonstrating Ethernet bridging and VPN implementations over the Erlang distribution protocol.

Features

New LXC bridging and VPN example applications

Added three new Erlang example applications to the examples directory: br.erl demonstrates a simple Ethernet bridge using tun/tap interfaces, while vpwn.erl and vpwn\_active.erl provide two implementations of a VPN over the Erlang distribution protocol, differing in their network I/O modes (passive vs active).

examples · high confidence

Removals

Removal of tunctl application definition

The application metadata file for tunctl has been deleted, removing the explicit definition of the application's version, modules, and dependencies from the build output.

ebin · high confidence

Behavioural changes

Add active mode support and migrate to rebar3

The library now supports an 'active' mode for TUN/TAP interfaces, allowing packets to be delivered directly as messages to the owning process rather than requiring explicit reads. This change also migrates the build system from the legacy rebar to rebar3, updates the procket dependency to version 0.9.10, and adds dialyzer and xref checks to improve code quality. Documentation has been updated to reflect privilege requirements on Linux, Mac OS X, and FreeBSD, along with examples for both passive and active modes.

(repo-wide) · high confidence

Extended TUN/TAP interface support with multi-queue and protocol headers

The TUN/TAP interface definitions have been expanded to support advanced networking features. Users can now utilize the IFF\_MULTI\_QUEUE flag for multi-queue support and the IFF\_POINTOPOINT flag for IPv4 point-to-point addressing. Additionally, the protocol header record (tun\_pi) now includes the missing 'buf' field, and a new tun\_filter record has been added to support packet filtering via the TUN\_FLT\_ALLMULTI flag. The header also introduces helper macros for unsigned integer definitions and standardizes ifconfig-related flags.

include · high confidence

TUN/TAP interface management refactored into platform-specific modules

The \tunctl\ module has been refactored to use a behavior-based architecture, moving OS-specific implementation details into separate modules (\tunctl\_linux\, \tunctl\_darwin\, \tunctl\_freebsd\, \tunctl\_netbsd\). This change introduces a new \tuncer\ module that manages TUN/TAP devices via \gen\_server\, adding support for active mode, persistent interfaces, and flow control. The API now exposes platform-specific capabilities such as IPv6 address configuration on Linux, namespace support, and MTU manipulation, while standardizing error handling and device lifecycle management across supported operating systems.

src · high confidence

Test coverage

Added Common Test suite for tuncer

Added a new Common Test suite (tuncer\_SUITE) that exercises the tuncer module's core operations, including creating and destroying network interfaces, bringing them up, and performing receive/send and read/write operations. The suite covers both standard and active mode configurations and includes OS-specific test groups for Linux (dstaddr, broadcast) and other platforms.

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 53 → 57 (+3.6)
  • 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 54 → 54 (+0.0)
  • Readiness 26 → 33 (+7.7)
  • Security 100 → 100 (+0.0)
  • Event Sourcing 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/tunctl 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 c273c00a124b97a7bc01399ccc7a60ef35b2783b — 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.