tractor/ai/prompt-io/opencode/20260821T233204Z_5d92595f_p...

1.2 KiB
Raw Blame History

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 interfaces 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 pyroute2s 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.