net-tools: tap2_mirror -- both console generations on the pod at once

With SendToRxAdapters serving the host .NET console, the SheepShaver Mac
console was deaf (pod frames go up instead of out to TAP members). The
mirror daemon turns TAP2's free application side into a userspace bridge
port: pod frames destined for the Mac are written into TAP2 (bridge
forwards them to TAP1/SheepShaver), and a reader thread drains the
unicasts the bridge's poisoned MAC table steers into TAP2 and re-injects
them where the pod's pcap hears them. Loop guards: no pod-sourced
re-injection + short frame-hash dedup. Verified live: Console 4.10
readied the pod through the mirror while the .NET console path stayed
intact -- operator can now alternate between the 1996 Mac console and
the modern one without touching the driver config.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-09 12:16:50 -05:00
co-authored by Claude Fable 5
parent eef8784030
commit 9e922ecd89
2 changed files with 152 additions and 5 deletions
+23 -5
View File
@@ -530,11 +530,29 @@ pod frames reach the host stack but no longer reach the TAP members, so
**the SheepShaver Mac console is DEAF while this is set** (and wire-
injection diagnostics can't reach the pod either; pod RX is unaffected).
Revert: `Remove-ItemProperty ... -Name SendToRxAdapters` + service
bounce + pod relaunch. PROPER BOTH-AT-ONCE FIX (future): upgrade Npcap
user-mode DLLs to >=1.83 and patch the fork's pcap backend to mirror
every send onto a second handle set to per-handle MODE_SENDTORX --
frames then go out to the TAPs AND up to the host. Host
connect/disconnect churns netnub (exit + ~60s relaunch) -- expected.
bounce + pod relaunch. Host connect/disconnect churns netnub (exit +
~60s relaunch) -- expected.
**BOTH CONSOLES AT ONCE — WORKING (2026-07-10, `net-tools/tap2_mirror.py`):**
keep SendToRxAdapters set (host console works) and run the mirror
daemon, which turns TAP2's free application side into a userspace
bridge port for the Mac: (a) pod-sourced frames destined for the Mac
MAC or broadcast are written into TAP2 -> Windows bridge forwards
member->member to TAP1 -> SheepShaver hears; (b) REQUIRED second
direction: writing pod-src frames into TAP2 teaches the bridge's MAC
table that the pod lives on TAP2, so the Mac's unicasts to the pod get
steered INTO TAP2 -- a reader thread drains them and re-injects on the
bridge (RX-indicated up under SendToRx = exactly where the pod's pcap
listens). Loop guards: pod-src frames never re-injected; 0.2s
frame-hash dedup on the mirror side. Verified live: Console 4.10
readied the pod through it (counters: mirrored=24 pod->Mac,
reinjected=105 Mac->pod) with the .NET console path intact. Run
detached: `pythonw net-tools/tap2_mirror.py` (log/pid in the vwe-pod
work dir; pod MAC + TAP2 GUID are constants at the top). Operate
ALTERNATING (one console readied at a time -- two masters vs one netnub
is untested). Cleaner future fix stands: Npcap >=1.83 user-mode DLLs +
dual-handle MODE_SENDTORX in the fork's pcap backend, which retires
both the registry setting and the mirror.
## MODERN CONSOLE MILESTONE (2026-07-09 late): TeslaSuite .NET console runs the pod, fully hands-free