Repository navigation
fix(enrich): uplinks skip lo and expand bonds to NICs; warn on private netns mounts - #285
Merged
Merged
Conversation
…NICs DefaultUplinks took every ::/0 in /proc/net/ipv6_route, including the kernel's "unreachable ::/0 dev lo" (RTF_REJECT, not RTF_UP) that every host has, so prod records carried UPLINK2=lo. It also returned bond0 itself, a virtual device with no "device" entry, so the NIC columns were empty and the LLDP neighbours (keyed by the physical ports) never matched. Default routes now count only when up, not reject, and not on lo or "*" (v4 unreachable/blackhole). The v4 mask must be 0 too. A virtual device holding the route is replaced by the physical NICs under its lower_<if> sysfs links (bond, team, vlan, bridge; cycles and depth bounded); one with no NIC beneath it is kept as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On prod v2.0.0, ansible-host mounted /run/netns and /run/docker/netns with
Docker's default rprivate propagation, so namespaces created after xtcp2
started never appeared in the container: their sockets went uncollected
(setns EINVAL on the stale file) and their container name/image was empty,
with runtime falling back to cgroupfs. One host saw 10 of its 17 netns.
At startup xtcp2 reads /proc/self/mountinfo, finds the mount holding each
netns dir, and if it neither shares nor slaves (no shared:N / master:N) logs
a warning naming the rslave fix and sets
xtcp_gauges{function="checkNetnsPropagation",variable="private",type=<dir>}
to 1 (0 otherwise). The deploy fix is runpod/ansible-host#1120.
Docs: the docker example mounts ro,rslave; metrics table row; design doc.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- CHANGELOG Unreleased: the uplink fix and the netns propagation check - TODO-SOON §30: root causes of UPLINK2=lo, empty NIC/LLDP and container columns; open items for link-monitor panic isolation, AI098 veth churn, gRPC Health provisional flag, and Ubuntu guest rows Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # CHANGELOG.md # TODO-SOON.md
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes for the daemon-side gaps in the first v2.0.0 prod data (xtcp-status review, 2026-11-03).
lo:DefaultUplinkstook the kernel'sunreachable ::/0 dev lo(RTF_REJECT, not RTF_UP), which is in every host'sipv6_route. Default routes now count only when they're up, not reject, and not onlo/*, and the v4 mask must be 0.bond0, which has nodeviceentry, while LLDP neighbours are keyed by the member ports. A bond/vlan/bridge uplink is now replaced by the physical NICs under itslower_*sysfs links (cycle- and depth-bounded). A virtual device with no NIC beneath it is kept as before.cgroupfsruntime, missing pod sockets: the cause is deploy-side. ansible-host mounted the netns dirs with Docker's defaultrprivate, so pods started after xtcp2 were invisible (one host saw 10 of 17). The fix is runpod/ansible-host#1120 (ro,rslave). Here, xtcp2 now reads/proc/self/mountinfoat startup, warns, and setsxtcp_gauges{function="checkNetnsPropagation",variable="private"}per dir.ro,rslave; metrics table, design doc, CHANGELOG Unreleased.DefaultUplinksend to end on fixture proc/sysfs, mountinfo propagation and the gauge. Every guard was mutation-checked. The lint ratchet, metrics-audit, gofmt and vet are clean.CHANGELOGUnreleased heading and the TODO-SOON tail (§29 vs §30). Both are appends; whichever PR merges second resolves it.🤖 Generated with Claude Code