ts_netmon (linux): initial netlink dumps run concurrently on one socket → EBUSY, node reports no endpoints
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 78/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- linux, rust
- Domain
- networking, operating-systems
Research direction
The bug is in init_state() in crates/net/underlay/ts_netmon/src/linux/mod.rs, where the link, address and route netlink dumps are merged and sent concurrently on one socket. Read how rtnetlink sends each request on execute(), then change the initial dumps so each starts only after the previous one finishes. Done means the address dump no longer fails with EBUSY and endpoints are published to control.
Written by the indexing model from the issue text.
Description
init_state() in crates/net/underlay/ts_netmon/src/linux/mod.rs merges the link, address and route dumps (.merge(...)). In rtnetlink, execute() sends its request as soon as it is called, so all three requests go out on the same netlink socket at once. The kernel allows only one dump in progress per socket, so the others fail:
netmon error error=Received a netlink error message Resource busy (os error 16)
When the address dump is the one that fails, DirectActor never learns the local addresses. The node then reports no endpoints to control, and peers cannot reach it directly (Addrs: None on peers; only DERP works).
Seen on OpenWrt 25.12 (Linux 6.12, mips32 / QCA9533, MikroTik mAP lite). It may depend on timing on other systems.
Fix (tested): start each dump only after the previous one has finished.
let h_addr = handle.clone();
let h_route = handle.clone();
link_state(handle)
.chain(futures_util::stream::once(async move { addr_state(h_addr) }).flatten())
.chain(futures_util::stream::once(async move { route_state(h_route) }).flatten())
.map_err(io::Error::other)
After this change the error is gone, endpoints are published and direct paths work (verified against a lab Headscale + derper).
AI disclosure: diagnosed and fixed with an AI assistant (Claude) under human direction; tested on real hardware.
- Dominant language
- Rust
- Stars
- 1.2k
- Forks
- 75
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 22
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from tailscale/tailscale-rs
-
documentation enhancement language support
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
tailscale/tailscale-rs#114 ·
Maintainers usually reply within 1 day
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
tailscale/tailscale-rs#39 ·
Maintainers usually reply within 1 day
-
Interest: kernel TUN overlay transport (acting as exit node / subnet router on small Linux routers)Open
Difficulty 5/5 Over a week Newbie friendliness 15/100
tailscale/tailscale-rs#486 ·
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 57/100
tailscale/tailscale-rs#484 ·
Maintainers usually reply within 1 day
-
ci: fix publish dry-run failure statesPossibly taken @smmckay claimed this 3 days ago. Openbug ci/cd
tailscale/tailscale-rs#483 · 1 comment · 1 assignee ·
Maintainers usually reply within 1 day
All issues in tailscale/tailscale-rs
Similar issues
-
bug UI
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
wardian-app/Wardian#1746 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
jlcodes99/cockpit-tools#3125 ·
Maintainers usually reply within 2 days
-
bug user-sprint
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Vondor/KassenSturz#967 ·
Maintainers usually reply within 1 day
-
area/ci
Difficulty 1/5 Under an hour Newbie friendliness 62/100
Maintainers usually reply within 1 day
-
[BUG] Incremental sync warns "no stored highest_uid" on every round for folders with no new mailOpenbug
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
rustmailer/bichon#411 ·