userspace TAP driver
Bridge the NIC to the host network stack from userspace. Three implementations, one synchronous and two asyncio, selected per platform across Linux, Windows and macOS.
####### ##### # # # # # # # ##### ###### ##### # # ## ##### ###### # # # # # ## # # # # # # # # # # # # ###### # # # # # # # ##### # # # #### # # # ##### # # # # # # # # # # # ##### # # ###### # # # # # # # # ## # # # # # # # # # # # # # # #### # # ##### ###### # # ##### # # # ######
ThunderGate turns the Tigon3 gigabit Ethernet controller into an open platform for on-NIC firmware development, DMA experiments, and PCIe attack-surface research.
release 1.0 · GPLv3
The Tigon3 is the controller behind Broadcom's NetXtreme and NetLink gigabit Ethernet interfaces: the onboard Ethernet in a generation of Dell, HP and IBM business PCs and servers, and the silicon inside the Apple Thunderbolt Gigabit Ethernet adapter.
It is also a small computer that happens to forward packets. Behind the Ethernet MAC sit a PCI endpoint, DMA read and write engines, on-chip RAM, non-volatile storage, and an on-chip MIPS core, all reachable from the host. (Older Tigon3 variants carry a second core; the 57762 generation does not.)
ThunderGate opens them up. It drives the hardware from userspace Python, builds and flashes custom firmware for the on-chip cores, and ships worked examples of what that makes possible, from a userspace network tap to firmware that monitors and rewrites traffic and host memory.
Background: the project grew out of Thunderbolt: Exposure and Mitigation (CS838-1 final project, University of Wisconsin–Madison, 2013) and the v0 ThunderGate releases that followed in 2015.
Bridge the NIC to the host network stack from userspace. Three implementations, one synchronous and two asyncio, selected per platform across Linux, Windows and macOS.
Code that runs on the Tigon3's own MIPS core: a built-from-source image with an on-core ARP / IPv4 / ICMP / UDP stack, plus zForth and uBASIC interpreters because it can.
A PCI option ROM and EFI boot-services driver that rewrites the ACPI DMAR and IORT tables to inhibit Intel VT-d and ARM SMMU address translation.
A programmable bus-mastering PCIe endpoint built from a cheap, widely available adapter, with full source for the firmware that drives it.
A reproducible target for evaluating Intel VT-d and ARM SMMU configurations, with a boot-time EFI ROM that disables translation when you want a known-bad baseline.
A working second implementation to compare against Broadcom's stock firmware on NetXtreme and NetLink parts.
zForth and uBASIC interpreters on the NIC's MIPS core, because it can.
# clone the repo
git clone https://github.com/sstjohn/thundergate.git
cd thundergate
# build the mips-elf cross-toolchain (GCC 14, -mtigon)
misc/build-toolchain.sh
# set up the Python 3.13 toolkit
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
# build the firmware, EFI ROM and tooling
make The install guides cover per-platform setup: VFIO binding, the macOS driver extension, and Windows driver signing.
ThunderGate is experimental software, made available under the GPLv3. It writes firmware to your hardware and manipulates host memory and IOMMU state. You assume all risks in using it.
Always back up your device's factory firmware before you start.