1.2 KiB
Raw output - read WireGuard state through pyroute2
The human authorized the first incremental WireGuard Layer B change as a stacked branch from tractor PR #505, with one atomic change and a commit plan at the end of the turn.
git diff HEAD~1..HEAD -- pyproject.toml uv.lock tractor/discovery/__init__.py tractor/discovery/_tunnel.py tests/discovery/test_wg_inspection.py
Added a Linux-only wg extra using pyroute2 0.9.6, plus asynchronous public helpers for reading one interface’s public key and peer keys. The complete synchronous open/read/parse/close sequence runs in a Trio worker thread because pyroute2 owns a private asyncio loop internally.
Named namespace reads pass flags=0 to override pyroute2’s O_CREAT default, ensuring inspection cannot create a missing namespace. Fake netlink messages cover multipart dumps, key validation, stable peer deduplication, worker-thread execution, netns selection and cleanup on success/error.
Ruff and lock checks passed. Focused tunnel/multiaddr coverage passed 47 tests; the complete discovery suite passed 88 tests with 2 xpasses.