[PR #5845] [client] Handle EEXIST when adding routes on macOS/BSD #26932

Open
opened 2026-08-05 07:07:59 -04:00 by saavagebueno · 0 comments
Owner

Original Pull Request: https://github.com/netbirdio/netbird/pull/5845

State: closed
Merged: No


Describe your changes

On macOS, routes from a previous session can survive across sleep/wake cycles even though cleanup reports success. When the new engine instance tries to add the same route, it fails with "file exists" (EEXIST), leaving the route untracked by the route manager while the OS still has it pointing at a stale interface.

client/internal/routemanager/manager.go:560: No active handler found for route mynet|10.0.0.0/22
	* add route 10.0.0.0/22: failed to add for key 10.0.0.0/22: add route for 10.0.0.0/22: write: file exists

Handle this by detecting EEXIST on RTM_ADD, removing the stale route, and retrying.

Stack

Checklist

  • Is it a bug fix
  • Is a typo/documentation fix
  • Is a feature enhancement
  • It is a refactor
  • Created tests that fail without the change (if possible)

By submitting this pull request, you confirm that you have read and agree to the terms of the Contributor License Agreement.

Documentation

Select exactly one:

  • I added/updated documentation for this change
  • Documentation is not needed for this change (explain why)

Docs PR URL (required if "docs added" is checked)

Paste the PR link from https://github.com/netbirdio/docs here:

https://github.com/netbirdio/docs/pull/__

Summary by CodeRabbit

  • Bug Fixes
    • Enhanced route management to handle duplicate routes gracefully—the system now automatically detects existing routes, removes stale entries, and retries operations.
    • Improved error reporting for route operations with more precise error type identification.
**Original Pull Request:** https://github.com/netbirdio/netbird/pull/5845 **State:** closed **Merged:** No --- ## Describe your changes On macOS, routes from a previous session can survive across sleep/wake cycles even though cleanup reports success. When the new engine instance tries to add the same route, it fails with "file exists" (EEXIST), leaving the route untracked by the route manager while the OS still has it pointing at a stale interface. ``` client/internal/routemanager/manager.go:560: No active handler found for route mynet|10.0.0.0/22 * add route 10.0.0.0/22: failed to add for key 10.0.0.0/22: add route for 10.0.0.0/22: write: file exists ``` Handle this by detecting EEXIST on RTM_ADD, removing the stale route, and retrying. ## Issue ticket number and link ## Stack <!-- branch-stack --> ### Checklist - [x] Is it a bug fix - [ ] Is a typo/documentation fix - [ ] Is a feature enhancement - [ ] It is a refactor - [ ] Created tests that fail without the change (if possible) > By submitting this pull request, you confirm that you have read and agree to the terms of the [Contributor License Agreement](https://github.com/netbirdio/netbird/blob/main/CONTRIBUTOR_LICENSE_AGREEMENT.md). ## Documentation Select exactly one: - [ ] I added/updated documentation for this change - [x] Documentation is **not needed** for this change (explain why) ### Docs PR URL (required if "docs added" is checked) Paste the PR link from https://github.com/netbirdio/docs here: https://github.com/netbirdio/docs/pull/__ <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Enhanced route management to handle duplicate routes gracefully—the system now automatically detects existing routes, removes stale entries, and retries operations. * Improved error reporting for route operations with more precise error type identification. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
saavagebueno added the pull-request label 2026-08-05 07:07:59 -04:00
Sign in to join this conversation.
No Label pull-request
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: DYNR/netbird#26932